EDA技术与VHDL
实
验
报
告
姓 名:
班 级 :
学 号 :
日 期 :
实验四 计数、译码显示电路的VHDL设计
一、实验目的:
学习七段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。
二、实验原理:
通常的中规模专用IC,如74或4000系列的七段数码显示译码器只能作BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。
三、实验内容
2:用VHDL语言描述图4.1所示计数、译码显示电路。
要求:在Quartus II上进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。然后进行引脚锁定及硬件测试。建议选GW48系统的实验电路模式6,模式图如附录1附图6所示。用数码管8显示译码输出(PIO46-PIO40),用键3作为时钟输入(每按2次键为1个时钟脉冲),或直接接时钟信号clock0。
图4.1 计数器和译码器连接电路的顶层文件原理图
所编写的VHDL程序如下所示:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY WJ IS
PORT(clock0,ret0,ena0:IN STD_LOGIC;
led : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
cout0: OUT STD_LOGIC);
END ENTITY WJ;
ARCHITECTURE TWO OF WJ IS
COMPONENT CNT4B
PORT(CLK,RST,EN: IN STD_LOGIC;
OUTY: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT: OUT STD_LOGIC);
END COMPONENT;
COMPONENT DECL7S
PORT(A: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END COMPONENT;
SIGNAL tmp: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
u1: CNT4B
PORT MAP(CLK=>clock0,EN=>ena0,RST=>ret0,OUTY=>tmp,COUT=>cout0);
u2: DECL7S PORT MAP(A=>tmp,LED7S=>led);
END ARCHITECTURE TWO;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4B IS
PORT(CLK,RST,EN : IN STD_LOGIC;
OUTY: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT: OUT STD_LOGIC);
END ENTITY CNT4B;
ARCHITECTURE BHV OF CNT4B IS
BEGIN
PROCESS(CLK,EN,RST)
VARIABLE CQI: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='1' THEN CQI:=(OTHERS=>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN
IF CQI<\"1111\" THEN CQI:=CQI+1;
ELSE CQI:=(OTHERS=>'0'); END IF;
END IF;
END IF;
IF CQI=\"1111\" THEN COUT<='1';
ELSE COUT<='0'; END IF;
OUTY <= CQI;
END PROCESS;
END ARCHITECTURE BHV;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY DECL7S IS
PORT( A :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ENTITY DECL7S;
ARCHITECTURE ONE OF DECL7S IS
BEGIN
PROCESS(A)
BEGIN
CASE A IS
WHEN \"0000\"=> LED7S<=\"0111111\";
WHEN \"0001\"=> LED7S<=\"0000110\";
WHEN \"0010\"=> LED7S<=\"1011011\";
WHEN \"0011\"=> LED7S<=\"1001111\";
WHEN \"0100\"=> LED7S<=\"1100110\";
WHEN \"0101\"=> LED7S<=\"1101101\";
WHEN \"0110\"=> LED7S<=\"1111101\";
WHEN \"0111\"=> LED7S<=\"0000111\";
WHEN \"1000\"=> LED7S<=\"1111111\";
WHEN \"1001\"=> LED7S<=\"1101111\";
WHEN \"1010\"=> LED7S<=\"1110111\";
WHEN \"1011\"=> LED7S<=\"1111100\";
WHEN \"1100\"=> LED7S<=\"0111001\";
WHEN \"1101\"=> LED7S<=\"1011110\";
WHEN \"1110\"=> LED7S<=\"1111001\";
WHEN \"1111\"=> LED7S<=\"1110001\";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END ARCHITECTURE ONE;
编译仿真后的波形如下所示:
经过硬件测试后,输入与输出满足题目要求和仿真结果,说明该程序能够实现题目所要求的计数、译码显示电路的功能。
四、心得体会
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务