名称:基于FPGA的任意进制8421BCD计数器VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
利用VHDL语言,实现0~9901任意进制8421BCD计数译码显示电路,并将计数器输出的8421BCD进行共阳数码管显示,要求:
1、计数器具有同步置数功能、异步清零功能,用VHDL实现计数逻辑,并阐述设计原理,给出关键block diagram设计框图。
2、8421BCD码7段译码部分可以参见74LS48功能,用VHDL实现译码逻辑,并阐述设计原理,给出关键block diagram设计框图。
3、译码输出后驱动的数码管为共阳极数码管,阐述电路原理,给出相应编码方式。
4、报告要求:
(1)按要求的格式书写,所有内容一律打印、封面要求统一;
(2)报告内容包括设计过程、软件仿真的结果及分析;
(3)报告中要有整体电路原理图、各模块原理图;
(4)软件仿真包括各个模块的仿真和整体电路的仿真。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真图
整体仿真图
计数模块仿真图
译码显示模块仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?count_N?IS ???PORT?( ??????clk????????:?IN?STD_LOGIC;--时钟 ??????reset??????:?IN?STD_LOGIC;--异步复位 ??????set_data???:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);--进制设置 ??????load???????:?IN?STD_LOGIC;--同步置数 ??????load_data??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);--置数值 ??????count_BCD??:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--计数输出 ???); END?count_N; ARCHITECTURE?behave?OF?count_N?IS ??? ???SIGNAL?data_cnt?:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000"; BEGIN ???PROCESS?(clk,?reset) ???BEGIN ??????IF?(reset?=?'1')?THEN ?????????data_cnt?<=?"0000000000000000";--异步复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(load?=?'1')?THEN--同步置数 ????????????data_cnt?<=?load_data;--置数值 ?????????ELSIF?(data_cnt?>=?set_data)?THEN--判断是否进制最大值 ????????????data_cnt?<=?"0000000000000000"; ?????????ELSIF?(data_cnt(15?DOWNTO?12)?=?"1001"?AND?data_cnt(11?DOWNTO?8)?=?"1001"?AND?data_cnt(7?DOWNTO?4)?=?"1001"?AND?data_cnt(3?DOWNTO?0)?=?"1001")?THEN--计数到9999 ????????????data_cnt?<=?"0000000000000000"; ?????????ELSIF?(data_cnt(11?DOWNTO?8)?=?"1001"?AND?data_cnt(7?DOWNTO?4)?=?"1001"?AND?data_cnt(3?DOWNTO?0)?=?"1001")?THEN--计数到x999 ????????????data_cnt(15?DOWNTO?12)?<=?data_cnt(15?DOWNTO?12)?+?"0001";--千位加1 ????????????data_cnt(11?DOWNTO?0)?<=?"000000000000"; ?????????ELSIF?(data_cnt(7?DOWNTO?4)?=?"1001"?AND?data_cnt(3?DOWNTO?0)?=?"1001")?THEN--计数到xx99 ????????????data_cnt(15?DOWNTO?12)?<=?data_cnt(15?DOWNTO?12); ????????????data_cnt(11?DOWNTO?8)?<=?data_cnt(11?DOWNTO?8)?+?"0001";--百位加1 ????????????data_cnt(7?DOWNTO?0)?<=?"00000000"; ?????????ELSIF?(data_cnt(3?DOWNTO?0)?=?"1001")?THEN--计数到xxx9 ????????????data_cnt(15?DOWNTO?12)?<=?data_cnt(15?DOWNTO?12); ????????????data_cnt(11?DOWNTO?8)?<=?data_cnt(11?DOWNTO?8); ????????????data_cnt(7?DOWNTO?4)?<=?data_cnt(7?DOWNTO?4)?+?"0001";--十位加1 ????????????data_cnt(3?DOWNTO?0)?<=?"0000"; ?????????ELSE ????????????data_cnt(15?DOWNTO?12)?<=?data_cnt(15?DOWNTO?12); ????????????data_cnt(11?DOWNTO?8)?<=?data_cnt(11?DOWNTO?8); ????????????data_cnt(7?DOWNTO?4)?<=?data_cnt(7?DOWNTO?4); ????????????data_cnt(3?DOWNTO?0)?<=?data_cnt(3?DOWNTO?0)?+?"0001";--个位加1 ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???count_BCD?<=?data_cnt;--输出bcd码 ??? END?behave;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=746