名称:基于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)软件仿真包括各个模块的仿真和整体电路的仿真;
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;
源代码
扫描文章末尾的公众号二维码