两个4位BCD数字求和Verilog代码vivado ego1开发板

名称:两个4位BCD数字求和Verilog代码vivado  ego1开发板(文末获取)

软件:vivado

语言:Verilog

代码功能:

两个4位BCD数字求和

两个4位BCD数字相加,并在Artix-7演示板上的7段LED显示屏上显示结果。

设计应使用sw(3:0)作为一个输入BCD值,其中sw(3)是最高有效位,而将sw(7:4)作为另一个BCD值,其中sw(7)是最高有效位。

设计BCD加法器,使sw(8)为进位输入。

在演示板上的两个四位数7段LED显示屏的最右位数上显示BCD总和。其他七个数字应关闭。使用十进制点数(DP)显示BCD加法的进位,当两个4位BCD输入和进位之和导致从BCD加法进位时,打开小数点。

演示板手册记录了如何使用可用的段来实现数字1-9。所有未使用的4位代码应导致空白显示(所有LED段均熄灭)。

本代码已在ego1开发板验证,ego1开发板如下,其他开发板可以修改管脚适配:

ego1开发板.png

1. 工程文件

2. 程序文件

3. 程序编译

4. Testbench

5. 仿真图

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
ENTITY BCD_adder IS
   PORT (
      sw       : IN STD_LOGIC_VECTOR(8 DOWNTO 0);--输入SW
      segment  : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--高到低位分别表示数码管的gfedcba
      dp       : OUT STD_LOGIC;--数码管小数点
      an       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管位选,低电平亮
   );
END BCD_adder;
ARCHITECTURE behave OF BCD_adder IS
   
   SIGNAL A   : STD_LOGIC_VECTOR(4 DOWNTO 0);
   SIGNAL B   : STD_LOGIC_VECTOR(4 DOWNTO 0);
   SIGNAL cin : STD_LOGIC_VECTOR(4 DOWNTO 0);
   
   SIGNAL sum : STD_LOGIC_VECTOR(4 DOWNTO 0);
   SIGNAL bcd_sum : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
   an <= "11111110";--数码管位选,低电平亮
   A <='0' & sw(3 DOWNTO 0);--加数A
   B <='0' & sw(7 DOWNTO 4);--加数B
   cin <="0000" & sw(8);--输入进位
   
   sum <= A + B + cin;--计算和
    PROCESS (sum)
       BEGIN 
          if(sum>="01010")then--判断是否大于10
               dp <= '1';--输出进位
               bcd_sum <= sum-"01010";--输出BCD和
          else
               dp <= '0';--不输出进位
               bcd_sum <= sum;--输出BCD和      
          end if;      
      END PROCESS;
      
   --segment是数码管段选--高到低位分别表示数码管的gfedcba
   PROCESS (bcd_sum)
   BEGIN
      CASE bcd_sum(3 DOWNTO 0) IS--和
         WHEN "0000" =>
            segment <= "0111111";--0对应的数码管gfedcba码值
         WHEN "0001" =>
            segment <= "0000110";--1对应的数码管gfedcba码值
         WHEN "0010" =>
            segment <= "1011011";--2对应的数码管gfedcba码值
         WHEN "0011" =>
            segment <= "1001111";--3对应的数码管gfedcba码值
         WHEN "0100" =>
            segment <= "1100110";--4对应的数码管gfedcba码值
         WHEN "0101" =>
            segment <= "1101101";--5对应的数码管gfedcba码值
         WHEN "0110" =>
            segment <= "1111101";--6对应的数码管gfedcba码值
         WHEN "0111" =>
            segment <= "0000111";--7对应的数码管gfedcba码值
         WHEN "1000" =>
            segment <= "1111111";--8对应的数码管gfedcba码值
         WHEN "1001" =>
            segment <= "1101111";--9对应的数码管gfedcba码值
         WHEN OTHERS =>
      END CASE;
   END PROCESS;
   
   
END behave;
源代码

 扫描文章末尾的公众号二维码

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值