赞
踩
名称:基于FPGA的任意进制计数器设计VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
利用VHDL语言,实现0~9901任意进制8421BCD计数译码显示电路,并将计数器输出的8421BCD进行共阳数码管显示,要求
1、计数器具有同步置数功能、异步清零功能,用VHDL实现计数逻辑,并阐述设计原理,给出关键 block diagran设计框图。
2、8421BCD码7段译码部分可以参见74LS48功能,用VHDL实现译码逻辑,并阐述设计原理,给出关键 blockdiagram设计框图。
3、译码输岀后驱动的数码管为共阳极数码管,阐述电路原理,给出相应编码方式。
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真图
整体仿真图
计数模块仿真图
译码逻辑模块仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --N进制计数器模块 ENTITY jishu IS GENERIC ( N : STD_LOGIC_VECTOR(15 downto 0) :=X"9538");--N为进制控制参数,目前进制为9538 PORT ( CLK : IN STD_LOGIC;--时钟 CLR_N : IN STD_LOGIC;--异步复位,低电平清零 LOAD_N : IN STD_LOGIC;--同步置数,低电平有效 LOAD_NUM : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--置数值16bit,每4bit为一个BCD码 CNT_NUM_Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--千位计数值4bit,一个BCD码 CNT_NUM_B : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--百位计数值4bit,一个BCD码 CNT_NUM_S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--十位计数值4bit,一个BCD码 CNT_NUM_G : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) --个位计数值4bit,一个BCD码 ); END jishu; ARCHITECTURE RTL OF jishu IS signal NUMBER : STD_LOGIC_VECTOR(15 DOWNTO 0) := X"0000";--定义内部变量 BEGIN --进程 PROCESS (CLK, CLR_N) --variable NUMBER : STD_LOGIC_VECTOR(15 DOWNTO 0) <= X"0000";--定义内部变量 BEGIN IF (CLR_N = '0') THEN NUMBER <= X"0000";--异步复位,低电平清零 ELSIF (CLK'EVENT AND CLK = '1') THEN IF (LOAD_N = '0') THEN--同步置数,低电平有效 NUMBER <= LOAD_NUM;--置数值 ELSIF (NUMBER >= N) THEN--是否计数到对应进制值 NUMBER <= X"0000"; --回到0000 ELSIF (NUMBER(11 DOWNTO 0) = X"999") THEN--计数到999 NUMBER(15 DOWNTO 12) <= NUMBER(15 DOWNTO 12) + X"1";--千位加1 NUMBER(11 DOWNTO 0) <= X"000";--回到000 ELSIF (NUMBER(7 DOWNTO 4) = X"9" AND NUMBER(3 DOWNTO 0) = X"9") THEN--计数到99 NUMBER(11 DOWNTO 8) <= NUMBER(11 DOWNTO 8) + X"1";--百位加1 NUMBER(7 DOWNTO 0) <= X"00";--回到00 ELSIF (NUMBER(3 DOWNTO 0) = X"9") THEN--计数到9 NUMBER(7 DOWNTO 4) <= NUMBER(7 DOWNTO 4) + X"1";--十位加1 NUMBER(3 DOWNTO 0) <= X"0";--个位回到0 ELSE NUMBER(3 DOWNTO 0) <= NUMBER(3 DOWNTO 0) + X"1";--个位加1 END IF;
扫描文章末尾的公众号二维码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。