一.实验目的
1.学习并掌握硬件描述语言(VHDL 或 Verilog HDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。
2.熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。 3.熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。 4.熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。
二.实验设备
开发环境 开发板
三.实验内容
要求1:编写一个异或门逻辑电路,编译程序如下。 1)用 QuartusII 波形仿真验证; 2)下载到DE0 开发板验证。
要求2:编写一个将二进制码转换成 0-F 的七段码译码器。 1)用 QuartusII 波形仿真验证;
2)下载到 DE0 开发板,利用开发板上的数码管验证。
要求3: 编写一个计数器。 1)用QuartusII 波形仿真验证; 2)下载到 DE0 开发板验证。
要求4:编写一个能实现占空比 50%的 5M 和50M 分频器即两个输出,输出信号频率分别为 10Hz 和 1Hz。
1) 下载到 DE0 开发板验证。(提示:利用 DE0 板上已有的 50M 晶振作为输入
信号,通过开发板上两个的 LED 灯观察输出信号)。 1
v1.0 可编辑可修改 2) 电路框图如下:
扩展内容:利用已经实现的 VHDL 模块文件,采用原理图方法,实现 0-F 计数自动循环显示,频率 10Hz。(提示:如何将 VHDL 模块文件在逻辑原理图中应用,参考参考内容 5)
四.实验原理
1.实验1实现异或门逻辑电路,VHDL源代码如下: LIBRARY IEEE; USE EXORGATE IS PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC); END EXORGATE;
ARCHITECTURE fwm OF EXORGATE IS BEGIN C<=A XOR B; END;
2.实验2实现一个将二进制码转换成0-F的七段译码器,VHDL源代码如下: LIBRARY IEEE; USE sevendecoder IS
PORT (data_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0); dis_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END sevendecoder;
ARCHITECTURE fwm OF sevendecoder IS BEGIN
2
PROCESS(data_in) BEGIN
CASE data_in IS
WHEN\"0000\"=>dis_out<=\"1000000\";--显示 0 WHEN\"0001\"=>dis_out<=\"1111001\";--显示 1 WHEN\"0010\"=>dis_out<=\"0100100\";--显示 2 WHEN\"0011\"=>dis_out<=\"0110000\";--显示 3 WHEN\"0100\"=>dis_out<=\"0011001\";--显示 4 WHEN\"0101\"=>dis_out<=\"0010010\";--显示 5 WHEN\"0110\"=>dis_out<=\"0000010\";--显示 6 WHEN\"0111\"=>dis_out<=\"1111000\";--显示 7 WHEN\"1000\"=>dis_out<=\"0000000\";--显示 8 WHEN\"1001\"=>dis_out<=\"0010000\";--显示 9 WHEN\"1010\"=>dis_out<=\"0001000\";--显示 A WHEN\"1011\"=>dis_out<=\"0000011\";--显示 b WHEN\"1100\"=>dis_out<=\"1000110\";--显示 C WHEN\"1101\"=>dis_out<=\"0100001\";--显示 d WHEN\"1110\"=>dis_out<=\"0000110\";--显示 E WHEN\"1111\"=>dis_out<=\"0001110\";--显示 F WHEN OTHERS=> dis_out<=\"1111111\";--灭灯,不显示 END CASE; END PROCESS; END fwm;
3.实验3完成一个计数器,VHDL源代码如下: LIBRARY IEEE; USE counter IS 3
PORT ( clk,RST : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); --四位计数 COUT : OUT STD_LOGIC); --进位位 END counter;
ARCHITECTURE fwm OF counter IS
SIGNAL Q1 : STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
PROCESS(clk,RST) BEGIN
IF RST = '0' THEN Q1<=(OTHERS => '0'); COUT<= '0'; ELSIF clk'EVENT AND clk='1' THEN Q1<=Q1+1; COUT<= '0';
IF Q1 >= \"1001\" THEN Q1<=(OTHERS => '0'); COUT<= '1'; END IF; END IF; END PROCESS; DOUT<=Q1 ; END fwm;
4.实验4编写一个能实现占空比 50%的 5M 和50M 分频器即两个输出,输出信号频率分别为 10Hz 和 1Hz,VHDL源代码如下: LIBRARY IEEE; USE fpq IS
PORT(clk:IN STD_LOGIC;
clk_out,clk_out1:OUT STD_LOGIC); END fpq; 4
ARCHITECTURE fwm OF fpq IS
CONSTANT m : INTEGER:= ; --50M 分频到 1Hz 时=。
CONSTANT m1 : INTEGER:= 2500000; --5M 分频到 10Hz 时=2500000。 SIGNAL tmp :STD_LOGIC; SIGNAL tmp1 :STD_LOGIC; BEGIN
PROCESS(clk, tmp)
VARIABLE cout : INTEGER:=0; BEGIN
IF clk'EVENT AND clk='1' THEN cout:=cout+1; --计数器+1
IF cout<=m THEN tmp<='0'; --计数小于等于 ,输出 0 ELSIF cout PROCESS(clk, tmp1) VARIABLE cout1 : INTEGER:=0; BEGIN IF clk'EVENT AND clk='1' THEN cout1:=cout1+1; --计数器+1 IF cout1<=m1 THEN tmp1<='0'; --计数小于等于 2500000,输出 0 ELSIF cout1 clk_out1<=tmp1; --5M分频器输出 END fwm; 五:拓展内容 首先需要一个分频器分频得到10Hz的时钟信号 LIBRARY IEEE; USE tuozhan IS PORT(clk:IN STD_LOGIC; clk_out1:OUT STD_LOGIC); END tuozhan; ARCHITECTURE fwm OF tuozhan IS --CONSTANT m : INTEGER:= ; --50M 分频到 1Hz 时=。 CONSTANT m1 : INTEGER:= 2500000; --5M 分频到 10Hz 时=2500000。 SIGNAL tmp :STD_LOGIC; SIGNAL tmp1 :STD_LOGIC; BEGIN PROCESS(clk, tmp1) VARIABLE cout1 : INTEGER:=0; BEGIN IF clk'EVENT AND clk='1' THEN cout1:=cout1+1; --计数器+1 IF cout1<=m1 THEN tmp1<='0'; --计数小于等于 2500000,输出 0 ELSIF cout1 clk_out1<=tmp1; --5M分频器输出 END fwm; 然后需要一个计数器 LIBRARY IEEE; USE decoder IS PORT (clk:IN STD_LOGIC;--接收10HZ的时钟信号 dis_out:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END decoder; ARCHITECTURE fwm OF decoder IS BEGIN PROCESS(clk) VARIABLE count : INTEGER:=0; BEGIN CASE count IS WHEN 0 =>dis_out<=\"0000\"; WHEN 1 =>dis_out<=\"0001\"; WHEN 2 =>dis_out<=\"0010\"; WHEN 3 =>dis_out<=\"0011\"; WHEN 4 =>dis_out<=\"0100\"; WHEN 5 =>dis_out<=\"0101\"; WHEN 6 =>dis_out<=\"0110\"; 7 WHEN 7 =>dis_out<=\"0111\"; WHEN 8 =>dis_out<=\"1000\"; WHEN 9 =>dis_out<=\"1001\"; WHEN 10 =>dis_out<=\"1010\"; WHEN 11 =>dis_out<=\"1011\"; WHEN 12 =>dis_out<=\"1100\"; WHEN 13 =>dis_out<=\"1101\"; WHEN 14 =>dis_out<=\"1110\"; WHEN 15 =>dis_out<=\"1111\"; WHEN OTHERS=>count:=0; END CASE; IF clk'EVENT AND clk='1' THEN count:=count+1; END IF; END PROCESS; END fwm; 最后使用七段译码器译码为七段码 LIBRARY IEEE; USE sevendecoder IS PORT (data_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0); dis_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END sevendecoder; ARCHITECTURE fwm OF sevendecoder IS BEGIN PROCESS(data_in) 8 BEGIN CASE data_in IS WHEN\"0000\"=>dis_out<=\"1000000\";--显示 0 WHEN\"0001\"=>dis_out<=\"1111001\";--显示 1 WHEN\"0010\"=>dis_out<=\"0100100\";--显示 2 WHEN\"0011\"=>dis_out<=\"0110000\";--显示 3 WHEN\"0100\"=>dis_out<=\"0011001\";--显示 4 WHEN\"0101\"=>dis_out<=\"0010010\";--显示 5 WHEN\"0110\"=>dis_out<=\"0000010\";--显示 6 WHEN\"0111\"=>dis_out<=\"1111000\";--显示 7 WHEN\"1000\"=>dis_out<=\"0000000\";--显示 8 WHEN\"1001\"=>dis_out<=\"0010000\";--显示 9 WHEN\"1010\"=>dis_out<=\"0001000\";--显示 A WHEN\"1011\"=>dis_out<=\"0000011\";--显示 b WHEN\"1100\"=>dis_out<=\"1000110\";--显示 C WHEN\"1101\"=>dis_out<=\"0100001\";--显示 d WHEN\"1110\"=>dis_out<=\"0000110\";--显示 E WHEN\"1111\"=>dis_out<=\"0001110\";--显示 F WHEN OTHERS=> dis_out<=\"1111111\";--灭灯,不显示 END CASE; END PROCESS; END fwm; 五.实验结果 实验1: VHDL源代码输入 9 v1.0 可编辑可修改 波形仿真 10 v1.0 可编辑可修改 配置针脚 在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对异或门逻辑电路进行验证。验证结果无误。 实验2: VHDL源代码输入 11 v1.0 可编辑可修改 波形仿真 12 v1.0 可编辑可修改 配置针脚 13 v1.0 可编辑可修改 在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对二进制码转换成 0-F 的七段码译码器进行验证。验证结果无误。 实验3: VHDL源代码输入 14 v1.0 可编辑可修改 波形仿真 配置针脚 在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对计数器进行验证。验证结果无误。 实验4 VHDL源代码输入 15 v1.0 可编辑可修改 波形仿真: 因为要使分频器达到能使人类肉眼能够分别的级别,仿真所需要的时间非常久,所以无法进行完整的仿真,只能下载到ED0板上进行验证。 在这里附上输入波形的波形图。 配置针脚 16 v1.0 可编辑可修改 在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对分频器进行验证。验证结果无误。 拓展: 将之前分析使用VHDL写出来的每个模块生成对应的原件,然后将原件连接起来,分配针脚重编译后下载到开发板进行验证;结果无误 17 v1.0 可编辑可修改 六.故障排除&实验心得 本次实验中,我们学习并且理解了异或门逻辑电路、二进制码转换成 0-F 的 七段码译码器、计数器和分频器的工作原理,以及如何使用VHDL语言进行这几个电路原件的设计。 感觉困难的阶段在于VHDL语言编写的时候。因为我们并不熟悉VHDL语言,而且Quartus开发环境我们也是没怎么接触过。所以在对老师给出的各个逻辑电路的参考程序的改进改编中遇到了许多困难,不过同时也对我们的自学能力进行了考验,让我们充分意识到自己的问题。从而促进我们努力自学,提升自己的能力. 18
因篇幅问题不能全部显示,请点此查看更多更全内容