VHDL实现BCD码加法器

简介: VHDL实现BCD码加法器

VHDL实现BCD码加法器

BCD码加法器计算两个四位二进制数的相加值,
由9个输入端和5个输出端组成,分为相加,修正判别和修正三个阶段。
在相加值为0-9时,BCD码与四位二进制码相同,
当值为10-15时,BCD码等于四位二进制码加上“0110”。

如图所示:

相加模块与四位全加器实现功能相同,将对其进行例化使用:

LIBRARY IEEE;                                                             --结构描述方式实现BCD码加法器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY  homework8 IS
  PORT(
  AA,BB:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  FF:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);      --FF为最终输出
  CIN:IN STD_LOGIC;
  COUT:OUT STD_LOGIC
  );
END homework8;
ARCHITECTURE yejiayu OF homework8 IS
COMPONENT homework6           
  PORT(
  A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  F:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);       --四位全加器的输出   
  CI:IN STD_LOGIC;                          --低位
  CO:OUT STD_LOGIC              --高位
  );
END COMPONENT homework6;
                        --修正判别过渡
  SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);   --Q1接手四位全加器的输出
  SIGNAL Q2:STD_LOGIC_VECTOR(3 DOWNTO 0);   --Q2为修正被加数
  SIGNAL COU1:STD_LOGIC;            
  SIGNAL COU2:STD_LOGIC;           
BEGIN
  U1:homework6 PORT MAP(A=>AA,B=>BB,CI=>CIN,F=>Q1,CO=>COU1);--修正判别
  COU2<=NOT((NOT COU1)AND(NOT(Q1(3) AND Q1(2)))AND(NOT(Q1(3) AND Q1(1))));
    Q2<=(2=>COU2,3=>COU2,OTHERS =>'0');       --被加数的2,3位与COU2相连,其余接地
    U2:homework6 PORT MAP(A=>Q2,B=>Q1,CI=>'0',F=>FF,CO=>COU1);--修正
END yejiayu;

保存后仿真:

也可以换种方式实现:

LIBRARY IEEE;                               --行为描述方式实现
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY  homework9 IS
  PORT(
  AA,BB:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  FF:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);      --FF为最终输出
  CIN:IN STD_LOGIC;
  COUT:OUT STD_LOGIC
  );
END homework9;
ARCHITECTURE yejiayu OF homework9 IS
COMPONENT homework6           
  PORT(
  A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
  F:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);       --四位全加器的输出   
  CI:IN STD_LOGIC;                          --低位
  CO:OUT STD_LOGIC              --高位
  );
END COMPONENT homework6;
                        --修正判别过渡
  SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);   --Q1接手四位全加器的输出
  SIGNAL Q2:STD_LOGIC_VECTOR(3 DOWNTO 0);   --Q2为修正被加数
  SIGNAL COU1:STD_LOGIC;            
  SIGNAL COU2:STD_LOGIC;           
BEGIN
  U1:homework6 PORT MAP(A=>AA,B=>BB,CI=>CIN,F=>Q1,CO=>COU1);--修正判别
  PROCESS(AA,BB,CIN)
    BEGIN
    IF(COU1='1')THEN            --和>15时
      Q2<=Q1+6;
    ELSIF(Q1>9)THEN             --和>9时
      COU2<='1';
      Q2<=Q1-10;
    ELSIF(Q1<10)THEN
      COU2<='0';
      Q2<=Q1;
    END IF;
    FF<=Q2;                 --值传给FF
    COUT<=COU2;               --值传给COUT
  END PROCESS;
END yejiayu;

保存后仿真:

相关文章
|
关系型数据库 项目管理 异构计算
FPGA设计超前进位与8421-BCD码全加器
本文介绍了FPGA设计超前进位与8421-BCD码全加器
477 0
FPGA设计超前进位与8421-BCD码全加器
|
算法 C语言 芯片
【C语言】BCD码、十进制互相转换
【C语言】BCD码、十进制互相转换
421 0
C语言:十进制、BCD码互换
C语言:十进制、BCD码互换
C语言:十进制、BCD码互换
FPGA-(任务01)设计一个三位二进制减法计数器
FPGA-(任务01)设计一个三位二进制减法计数器
112 0
FPGA-(任务01)设计一个三位二进制减法计数器
|
算法
BCD码与16进制互转算法
关于这类算法,以前的文章已经讲过类似的:BCD码转二进制 #include // HEX转BCD //bcd_data(0) unsigned char BCD2HEX(unsigned int bcd_data) { unsigned char temp; temp=((b...
1507 0
|
5月前
【408计算机组成原理】—BCD码(三)
【408计算机组成原理】—BCD码(三)
|
人工智能 BI
第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
319 0
第三次笔记:算术逻辑单元 电路基本原理 加法器的设计 一位全加器 串行进位加法器 并行进位加法器 补码加减运算器 无符号整数加减法 标志位的生成
|
异构计算
FPGA设计16位二进制全加器模块
本文主要采用FPGA设计16位二进制全加器模块
827 0
FPGA设计16位二进制全加器模块
|
异构计算
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
564 0
FPGA(5)--VHDL--10十进制计数器及7段显示译码器