西工大_数电实验_第二次实验_实验报告材料.doc
-
资源ID:15228
资源大小:2.18MB
全文页数:20页
- 资源格式: DOC
下载积分:10金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
西工大_数电实验_第二次实验_实验报告材料.doc
数电实验2一实验目的1.学习并掌握硬件描述语言(VHDL 或 Verilog HDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。2.熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。3.熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。4.熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。二.实验设备1.Quartus开发环境2.ED0开发板三.实验容要求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 灯观察输出信号)。2) 电路框图如下:扩展容:利用已经实现的 VHDL 模块文件,采用原理图方法,实现 0-F 计数自动循环显示,频率 10Hz。(提示:如何将 VHDL 模块文件在逻辑原理图中应用,参考参考容 5)四.实验原理1.实验1实现异或门逻辑电路,VHDL源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY EXORGATE ISPORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);END EXORGATE;ARCHITECTURE fwm OF EXORGATE ISBEGINC<=A XOR B;END;2.实验2实现一个将二进制码转换成0-F的七段译码器,VHDL源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sevendecoder ISPORT (data_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0);dis_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END sevendecoder;ARCHITECTURE fwm OF sevendecoder ISBEGINPROCESS(data_in)BEGINCASE data_in ISWHEN"0000"=>dis_out<="1000000"-显示 0WHEN"0001"=>dis_out<="1111001"-显示 1WHEN"0010"=>dis_out<="0100100"-显示 2WHEN"0011"=>dis_out<="0110000"-显示 3WHEN"0100"=>dis_out<="0011001"-显示 4WHEN"0101"=>dis_out<="0010010"-显示 5WHEN"0110"=>dis_out<="0000010"-显示 6WHEN"0111"=>dis_out<="1111000"-显示 7WHEN"1000"=>dis_out<="0000000"-显示 8WHEN"1001"=>dis_out<="0010000"-显示 9WHEN"1010"=>dis_out<="0001000"-显示 AWHEN"1011"=>dis_out<="0000011"-显示 bWHEN"1100"=>dis_out<="1000110"-显示 CWHEN"1101"=>dis_out<="0100001"-显示 dWHEN"1110"=>dis_out<="0000110"-显示 EWHEN"1111"=>dis_out<="0001110"-显示 FWHEN OTHERS=> dis_out<="1111111"-灭灯,不显示END CASE;END PROCESS;END fwm;3.实验3完成一个计数器,VHDL源代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter ISPORT ( clk,RST : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); -四位计数COUT : OUT STD_LOGIC); -进位位END counter;ARCHITECTURE fwm OF counter ISSIGNAL Q1 : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINPROCESS(clk,RST)BEGINIF RST = '0' THEN Q1<=(OTHERS => '0'); COUT<= '0'ELSIF clk'EVENT AND clk='1' THENQ1<=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 IEEE.STD_LOGIC_1164.ALL;ENTITY fpq ISPORT(clk:IN STD_LOGIC;clk_out,clk_out1:OUT STD_LOGIC);END fpq;ARCHITECTURE fwm OF fpq ISCONSTANT m : INTEGER:= 25000000; -50M 分频到 1Hz 时=25000000。CONSTANT m1 : INTEGER:= 2500000; -5M 分频到 10Hz 时=2500000。SIGNAL tmp :STD_LOGIC;SIGNAL tmp1 :STD_LOGIC;BEGINPROCESS(clk, tmp)VARIABLE cout : INTEGER:=0;BEGINIF clk'EVENT AND clk='1' THENcout:=cout+1; -计数器+1IF cout<=m THEN tmp<='0' -计数小于等于 25000000,输出 0ELSIF cout<m*2 THEN tmp<='1' -计数小于 50000000,输出 1ELSE cout:=0; -计数器清零END IF;END IF;END PROCESS;clk_out<=tmp; -50M分频器输出PROCESS(clk, tmp1)VARIABLE cout1 : INTEGER:=0;BEGINIF clk'EVENT AND clk='1' THENcout1:=cout1+1; -计数器+1IF cout1<=m1 THEN tmp1<='0' -计数小于等于 2500000,输出 0ELSIF cout1<m1*2 THEN tmp1<='1' -计数小于 5000000,输出 1ELSE cout1:=0; -计数器清零END IF;END IF;END PROCESS;clk_out1<=tmp1; -5M分频器输出END fwm;五:拓展容首先需要一个分频器分频得到10Hz的时钟信号LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tuozhan ISPORT(clk:IN STD_LOGIC;clk_out1:OUT STD_LOGIC);END tuozhan;ARCHITECTURE fwm OF tuozhan IS-CONSTANT m : INTEGER:= 25000000; -50M 分频到 1Hz 时=25000000。CONSTANT m1 : INTEGER:= 2500000; -5M 分频到 10Hz 时=2500000。SIGNAL tmp :STD_LOGIC;SIGNAL tmp1 :STD_LOGIC;BEGINPROCESS(clk, tmp1)VARIABLE cout1 : INTEGER:=0;BEGINIF clk'EVENT AND clk='1' THENcout1:=cout1+1; -计数器+1IF cout1<=m1 THEN tmp1<='0' -计数小于等于 2500000,输出 0ELSIF cout1<m1*2 THEN tmp1<='1' -计数小于 5000000,输出 1ELSE cout1:=0; -计数器清零END IF;END IF;END PROCESS;clk_out1<=tmp1; -5M分频器输出END fwm;然后需要一个计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder ISPORT (clk:IN STD_LOGIC;-接收10HZ的时钟信号dis_out:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END decoder;ARCHITECTURE fwm OF decoder ISBEGINPROCESS(clk)VARIABLE count : INTEGER:=0;BEGINCASE count ISWHEN 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"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' THENcount:=count+1;ENDIF;END PROCESS;END fwm;最后使用七段译码器译码为七段码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sevendecoder ISPORT (data_in:IN STD_LOGIC_VECTOR(3 DOWNTO 0);dis_out:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END sevendecoder;ARCHITECTURE fwm OF sevendecoder ISBEGINPROCESS(data_in)BEGINCASE data_in ISWHEN"0000"=>dis_out<="1000000"-显示 0WHEN"0001"=>dis_out<="1111001"-显示 1WHEN"0010"=>dis_out<="0100100"-显示 2WHEN"0011"=>dis_out<="0110000"-显示 3WHEN"0100"=>dis_out<="0011001"-显示 4WHEN"0101"=>dis_out<="0010010"-显示 5WHEN"0110"=>dis_out<="0000010"-显示 6WHEN"0111"=>dis_out<="1111000"-显示 7WHEN"1000"=>dis_out<="0000000"-显示 8WHEN"1001"=>dis_out<="0010000"-显示 9WHEN"1010"=>dis_out<="0001000"-显示 AWHEN"1011"=>dis_out<="0000011"-显示 bWHEN"1100"=>dis_out<="1000110"-显示 CWHEN"1101"=>dis_out<="0100001"-显示 dWHEN"1110"=>dis_out<="0000110"-显示 EWHEN"1111"=>dis_out<="0001110"-显示 FWHEN OTHERS=> dis_out<="1111111"-灭灯,不显示END CASE;END PROCESS;END fwm;五.实验结果实验1:VHDL源代码输入波形仿真配置针脚在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对异或门逻辑电路进行验证。验证结果无误。实验2:VHDL源代码输入波形仿真配置针脚在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对二进制码转换成 0-F 的七段码译码器进行验证。验证结果无误。实验3:VHDL源代码输入波形仿真配置针脚在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对计数器进行验证。验证结果无误。实验4VHDL源代码输入波形仿真: 因为要使分频器达到能使人类肉眼能够分别的级别,仿真所需要的时间非常久,所以无法进行完整的仿真,只能下载到ED0板上进行验证。在这里附上输入波形的波形图。配置针脚在计算机上完成模拟实验之后,重新进行编译,然后将程序下载到DE0开发板上并对分频器进行验证。验证结果无误。拓展:将之前分析使用VHDL写出来的每个模块生成对应的原件,然后将原件连接起来,分配针脚重编译后下载到开发板进行验证;结果无误六.故障排除&实验心得本次实验中,我们学习并且理解了异或门逻辑电路、二进制码转换成 0-F 的七段码译码器、计数器和分频器的工作原理,以及如何使用VHDL语言进行这几个电路原件的设计。感觉困难的阶段在于VHDL语言编写的时候。因为我们并不熟悉VHDL语言,而且Quartus开发环境我们也是没怎么接触过。所以在对老师给出的各个逻辑电路的参考程序的改进改编中遇到了许多困难,不过同时也对我们的自学能力进行了考验,让我们充分意识到自己的问题。从而促进我们努力自学,提升自己的能力.