实验3 基于硬件描述语言的电路设计一、实验目的1 、了解可编程数字系统设计的流程;2 、掌握Quartus II 软件的使用方法;3 、掌握采用硬件描述语言设计数字系统的方法和流程。
二、实验设备1、计算机:Quartus II 软件2、Altera DE0三、实验内容要求1:学习并掌握硬件描述语言(VHDL或Verilog HDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。
参考“参考内容1”中给出的与门源程序,编写一个异或门逻辑电路。
1)用QuartusII波形仿真验证;2)下载到DE0开发板验证。
要求2:熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。
参考“参考内容2”中给出的将8421BCD码转换成0-9的七段码译码器源程序,编写一个将二进制码转换成0-F 的七段码译码器。
1)用QuartusII波形仿真验证;2)下载到DE0开发板,利用开发板上的数码管验证。
要求3:熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。
参考“参考内容3”中给出的四位二进制加减计数器的源程序,编写一个计数器。
1)用QuartusII波形仿真验证;2)下载到DE0开发板验证。
要求4:熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。
参考“参考内容4”中给出的50M分频器的源程序,编写一个能实现占空比50%的5M和50M分频器即两个输出,输出信号频率分别为10Hz和1Hz。
1)下载到DE0开发板验证。
(提示:利用DE0板上已有的50M晶振作为输入信号,通过开发板上两个的LED灯观察输出信号)。
电路框图如下:四、实验结果1、用硬件描述语言(VHDL 或Verilog HDL)实现一个异或门电路。
VHDL源程序:Library ieee;use ieee.std_logic_1164.all;entity vhdl isport(A,B:IN std_logic;C:OUTstd_logic);END vhdl;Architecture fwm of vhdl isbeginC<=A XOR B;END;波形图:引脚对应表2、用硬件描述语言实现将四位二进制码转换成0-F 的七段码译码器。
VHDL源文件:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY digital ISPORT (data_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0);dis_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END digital;ARCHITECTURE fwm OF digital ISBEGINPROCESS(data_in)BEGINCASE data_in ISWHEN"0000"=>dis_out<="1000000";--显示0WHEN"0001"=>dis_out<="1111001";--显示1WHEN"0010"=>dis_out<="0010010";--显示2WHEN"0011"=>dis_out<="0000110";--显示3WHEN"0100"=>dis_out<="0001101";--显示4WHEN"0101"=>dis_out<="0100100";--显示5WHEN"0110"=>dis_out<="0100000";--显示6WHEN"0111"=>dis_out<="1001110";--显示7WHEN"1000"=>dis_out<="0000000";--显示8WHEN"1001"=>dis_out<="0000100";--显示9WHEN"1010"=>dis_out<="0001000";--显示AWHEN"1011"=>dis_out<="0100001";--显示bWHEN"1100"=>dis_out<="1110000";--显示CWHEN"1101"=>dis_out<="0000011";--显示dWHEN"1110"=>dis_out<="0110000";--显示EWHEN"1111"=>dis_out<="0111000";--显示FWHEN OTHERS=>dis_out<="1111111";--灭灯,不显示END CASE;END PROCESS;END fwm;波形图:引脚对应表:3、用硬件描述语言实现四位二进制加法或减法计数器,并用一位7段码显示减法计数器VHDL源文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EX3 ISPORT ( clk,RST,MLZ : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); COUT : OUT STD_LOGIC);END EX3;ARCHITECTURE fwm OF EX3 ISSIGNAL Q1 : STD_LOGIC_VECTOR (3 DOWNTO 0); BEGINPROCESS(clk,RST,Q1,MLZ)BEGINIF RST ='0' THEN Q1<=(OTHERS =>'0');COUT<='0'; ELSIF clk'EVENT AND clk='1' THENIF MLZ='0' THENQ1<=Q1+1;COUT<='0';IF Q1 >="1111"THEN Q1<=(OTHERS =>'0');COUT<='1'; END IF;ELSIF MLZ='1' THENQ1<=Q1-1;COUT<='0';IF Q1 <="0000"THEN Q1<=(OTHERS =>'1');COUT<='1'; END IF;END IF;END IF;END PROCESS;DOUT<=Q1 ;END fwm;减法计数器波形图:引脚对应表CLK对应开发板上的G21引脚4、用硬件描述语言实现5M 和50M 分频器(占空比为50% ),即两个输出信号频率分别为10Hz 和1Hz。
VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY EX4 ISPORT(clk,AS: IN STD_LOGIC;clk_out1: OUT STD_LOGIC);END EX4;ARCHITECTURE fwm OF EX4 ISSIGNAL A: STD_LOGIC;CONSTANT m: INTEGER:=25000000;SIGNAL tmp1: STD_LOGIC;SIGNAL tmp2: STD_LOGIC;BEGINPROCESS(clk,AS,A)VARIABLE cout1 : INTEGER range 0 to 50000000;VARIABLE cout2 : INTEGER range 0 to 5000000;BEGINIF clk'EVENT AND clk='1' THENcout1:=cout1+1;IF cout1<=m THEN tmp1<='0';ELSIF cout1<m*2 THEN tmp1<='1';ELSE cout1:=0;END IF;cout2:=cout2+1;IF cout2<=m/10 THEN tmp2<='0';ELSIF cout2<m/5 THEN tmp2<='1';ELSE cout2:=0;END IF;IF AS='1' THEN A<=tmp1;ELSE A<=tmp2;END IF;END IF;END PROCESS;clk_out1<=A;END fwm;五、心得体会实验结束后要进行验证,利用数码管在电路板上显示出的信息进行验证,确保实验结果的准确性,而且在编译程序时唇线的问题不少,总工会出现编译运行错误,但最终还是完成了。