可编程逻辑器件实验11个_第1页
可编程逻辑器件实验11个_第2页
可编程逻辑器件实验11个_第3页
可编程逻辑器件实验11个_第4页
可编程逻辑器件实验11个_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、可 编 程 逻 辑 器 件实验讲义目 录目 录实验一 Quartus软件及EDA实验平台介绍1实验二 Quartus文本设计输入4实验三 Quartus混合设计输入5实验四 D、T触发器7实验五 十六进制数码管显示8实验六 3-8译码器设计10实验七 计数器的设计12实验八 数控分频器的设计13实验九 锁存器的设计14实验十 4选1多路选择器19实验十一 循环彩灯控制器的设计21可编程逻辑器件实验讲义实验一 Quartus软件及EDA实验平台介绍(1)实验目的:熟悉Quartus软件的使用,学习其操作过程及仿真过程。(2)实验内容:学习使用Quartus对程序进行编辑输入、编译及仿真。1、打开

2、QuartusII软件。2、选择路径。选择File/New Project Wizard,指定工作目录,指定工程和顶层设计实体称;注意:工作目录名不能有中文。3、添加设计文件。将设计文件加入工程中。单击“Next”,如果有已经建立好的VHDL或者原理图等文件可以在File name中选择路径然后添加,或者选择Add All添加所有可以添加的设计文件(.VHDL ,.Verilog原理图等)。如果没有直接点击“Next”,等建立好工程后再添加也可,这里我们暂不添加。4、选择FPGA器件。Family选择Cyclone,Available device选EP1C12Q240C8,点击“Next”。

3、5、选择外部综合器、仿真器和时序分析器。Quartus II支持外部工具,可通过选中来指定工具的路径。这里我们不做选择,默认使用Quartus II自带的工具。6、结束设置。单击“Next”,弹出“工程设置统计”窗口,上面列出了工程的相关设置情况。最后单击“Finish”,结束工程设置。7、建立VHDL原文件。选择菜单“File”à“New”。8、添加文件到工程中。VHDL原文件编辑完后,选择File/Save,选择和工程相同的文件名。点击“保存”,文件就被添加进工程当中。21library ieee;use ieee.std_logic_1164.all;use ieee.std_

4、logic_unsigned.all;entity adder4b isport(clr,cin: in std_logic;a,b: in std_logic_vector(3 downto 0);s: out std_logic_vector(3 downto 0);cout:out std_logic);end adder4b;architecture art of adder4b issignal sint:std_logic_vector(4 downto 0);signal aa,bb:std_logic_vector(4 downto 0);begin aa<='0

5、'&a; bb<='0'&b; sint<=aa+bb+cin; s<=sint(3 downto 0); cout<=sint(4);end art;9、编译。选择Processing/Start/Start Analysis&Synthesis,进行综合。10、功能仿真验证,从菜单File-New中选择创建Vector Waveform File。在新的波形文件中选入需要验证的引脚,通过在左边窗栏理点击鼠标右键,选Insert Node or Bus . , 在打开的对话框中点击List, 选择所要观察的信号引脚,设置

6、引脚的信号值, 如下图所示。点击保存Save.在Settings对话框中,选中Simulator Settings选择页,设置Function类型仿真,并将新创建的波形文件当作仿真输入,如下图所示: 设置完毕之后,点击Processing ->Generate Functional Simulator NetList, 生产网表文件之后,点击Start Simulator,进行功能仿真,然后验证逻辑功能是否正确。(4)实验报告:简述实验步骤,写出实验的源程序,给出波形仿真结果。实验二 Quartus文本设计输入(1)实验目的:熟悉Quartus软件的使用及仿真过程;掌握操作符的逻辑运算关

7、系及数据类型,熟悉VHDL文本输入法。(2)实验内容:使用VHDL文本输入法完成基本门的设计,学习使用Quartus对程序进行编辑输入、编译及仿真。library ieee;use iee.std_logic_1164.all;entity jbm is port(a,b: in bit; f1,f2,f3,f4,f5,f: out bit);end jbm;architecture a of jbm isbegin f1<=a and b; f2<=a or b; f<=not a; f3<=a nand b; f4<=a nor b; f5<=not(a

8、 xor b); end; (3)思考题根据上述实验结果与现象,独立完成2位二进制数的“与、或非、异或、同或”逻辑运算,要求数据类型为标准逻辑矢量类型。(4)实验报告写出实验的源程序,给出相应表达式完成的逻辑关系,并给出波形仿真结果。独立完成思考题,给出源程序。实验三 Quartus混合设计输入(1)实验目的:熟悉Quartus软件的使用及仿真过程;熟悉VHDL混合输入法,并完成一位全加器的设计。(2)实验原理表3-1 半加器真值表absoco0000011010101101建立一位半加器half_adder工程:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL

9、;ENTITY HALF_ADDER ISPORT(A,B: IN STD_LOGIC;S,Co: OUT STD_LOGIC);END ENTITY HALF_ADDER;ARCHITECTURE RTL OF HALF_ADDER ISBEGINS <= NOT(A XOR(NOT B);Co <= A AND B;END ARCHITECTURE HD;(3)实验内容:使用VHDL文本输入法完成一位半加器的设计,利用Quartus对程序进行编辑输入、编译及仿真;将半加器生成元件符号,执行菜单【File】->【Create/Update】->【Create symb

10、ol file for current file】;新建原理图文件,并添加刚生成新元件;连接电路图根据文本输入的半加器,结合所给原理图,进行合理的电路图连接。注意:原理图保存名称不要与半加器实体名重合。指定顶层文件(4)实验报告给出半加器的原理,写出一位半加器的文本源程序;画出一位全加器的原理图,对一位全加器进行功能仿真,给出波形仿真结果,并举例验证结果是否正确。 实验四 D、T触发器(1)实验目的:熟悉QuartusII的VHDL文本设计过程,学习简单时序电路的设计、仿真。(2)实验原理时序逻辑电路是现代复杂数字电路的重要组成部分,往往占到整个设计的90以上。触发器是时序电路的基本单元,本实

11、验将涉及到D触发器与T触发器,采用的是边沿触发,边沿触发是实际电路实现的主要方式。D触发器:在时钟上升沿时,输出q=d,qb=;T触发器:在时钟上升沿的作用下,T=0输出不变,T=1输出翻转。(3)实验内容:设计上升沿触发的同步复位的D触发器及上升沿触发的T触发器,分别利用Quartus对程序进行编辑输入、编译及仿真。上升沿触发的同步复位的D触发器library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; entity syndff is port(d,clk,reset:in std_logic; q,q

12、b:out std_logic); end syndff; architecture dff_art of syndff is begin process(clk) begin if (clk'event and clk='1') then if (reset='0') then q<='0' qb<='1' else q<=d; qb<=not d; end if; end if; end process; end dff_art; T触发器源程序代码:library ieee; use ieee

13、.std_logic_1164.all; use ieee.std_logic_signed.all; entity tff is port(t,clk: in std_logic; q: out std_logic); end; architecture tff_art of tff is signal q_temp: std_logic; begin p1:process(clk,q_temp) begin if rising_edge(clk) then if t='1' then q_temp<=not q_temp; else q_temp<=q_temp

14、; end if; end if; q<=q_temp; end process; q<=q_temp; end tff_art;(4)实验报告写出D触发器及T触发器的程序代码及原理,找出D触发器的错误及T触发器的警告,说明其错误原因并改正,最后给出两个触发器的波形仿真结果。实验五 十六进制数码管显示(1)实验目的学习7段数码显示译码器设计,学习VHDL的case设计方法。(2)实验仪器计算机一台,EL教学实验箱(EDA-VI),QUARTUS II(3)实验原理七段数码管由8个(a,b,c,d,e,f,g,dp)按照一定位置排列的发光二极管构成,通常采取共阴极或者共阳极的设计,将

15、8个二极管的同一极接在一起,通过分别控制另外的8个电极的电平,使二极管导通(发光)或截止(不发光)。本实验采用共阴极设计,高电平点亮。七段数码显示译码器的功能就是根据需要显示的字符,输出能够控制七段数码管显示出该字符的编码。(4)实验内容用VHDL设计7段数码管显示电路设计,利用case语句实现数码管上显示字符的电路。十六进制数码管显示源代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY shuma ISPORT (clk:IN STD_LOGIC;vga:out std_logi

16、c_vector (3 downto 0);sel:out std_logic_vector(7 downto 0);seg_led: out std_logic_vector (7 downto 0) ) ;END;ARCHITECTURE one OF shuma ISsignal cq:std_logic_vector(3 downto 0);BEGINvga<="0010"sel<="11111110"PROCESS(clk,cq)BEGINIF (clk='1' AND clk'EVENT) THENcq&l

17、t;=cq+1;end if;CASE cq ISWHEN"0000"=>seg_led<="00111111"WHEN"0001"=>seg_led<="00000110"WHEN"0010"=>seg_led<="01011011"WHEN"0011"=>seg_led<="01001111"WHEN"0100"=>seg_led<="0110

18、0110"WHEN"0101"=>seg_led<="01101101"WHEN"0110"=>seg_led<="01111101"WHEN"0111"=>seg_led<="00000111"WHEN"1000"=>seg_led<="01111111"WHEN"1001"=>seg_led<="01101111"WHEN&

19、quot;1010"=>seg_led<="01110111"WHEN"1011"=>seg_led<="01111100"WHEN"1100"=>seg_led<="00111001"WHEN"1101"=>seg_led<="01011110"WHEN"1110"=>seg_led<="01111001"WHEN"1111"

20、=>seg_led<="01110001"WHEN OTHERS => NULL;END CASE;end process;END;用QuartusII对中的设计进行编译、综合、仿真,验证其功能是否与预期一致。管脚配置: seg_led0:PIN_105seg_led1:PIN_104seg_led2:PIN_101seg_led3:PIN_100seg_led4:PIN_85seg_led5:PIN_84seg_led6:PIN_83seg_led7:PIN_82sel0:PIN_86sel1:PIN_87sel2:PIN_88sel3:PIN_93se

21、l4:PIN_94sel5:PIN_95sel6:PIN_98sel7:PIN_99vga0:PIN_162vga1:PIN_161vga2:PIN_164vga3:PIN_163clk:PIN_28注意:未分配管脚:Assignments->device.->device&pin options ->unused pins->Reserve all unused pins:As input tri-stated。通过QuartusII的usb-blaster,将设计下载到实验电路上进行硬件测试。(4)实验连线clk的频率由SW17-SW20控制,用导线将IO3

22、与IOCLK相连;SW17-SW20控制时钟的频率,0111表示频率为5Hz,1111表示时钟频率为1Hz,本实验选用这两个频率进行测试,观察数码管显示字符的变化。(5)实验报告给出十六进制的数码管的程序代码、原理,自己改写程序选择不同的数码管显示字符,并提供实验过程中的拍摄图片。 实验六 3-8译码器设计(1)实验目的通过3-8译码器的设计,掌握组合逻辑电路的设计方法,熟悉软件的使用,并利用实验箱对程序进行硬件测试。(2)实验仪器计算机一台,EL教学实验箱(EDA-VI),QUARTUS II(3)实验原理输入输出g1 g2ag2bC B A Y0 Y1Y2Y3Y4Y5Y6Y70 X X X

23、 X X 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 利用case语句设计3-8译码器,译码器的输出接LED灯,为低电平点亮。(4)实验内容3-8译码器源程序代码:

24、LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY decoder3_8 ISPORT(a,b,c,g1,g2a,g2b:IN STD_LOGIC;VGA:out std_logic_vector(3 downto 0);Y: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END decoder3_8;ARCHITECTURE fun OF decoder3_8 ISSIGNAL indata: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINVGA<=“0001”; indata <= C&

25、B&A;PROCESS (indata, G1, G2A,G2B)BEGINIF (G1='1' AND G2A='0' AND G2B='0') THENCASE indata ISWHEN "000"=>Y<="11111110"WHEN "001"=>Y<="11111101"WHEN "010"=>Y<="11111011"WHEN "011"=>Y&

26、lt;="11110111"WHEN "100"=>Y<="11101111"WHEN "101"=>Y<="11011111"WHEN "110"=>Y<="10111111"WHEN "111"=>Y<="01111111"WHEN OTHERS =>Y<="XXXXXXXX"END CASE;ELSEY<="1111

27、1111"END IF;END PROCESS;END fun;管脚配置:A:PIN_105B:PIN_104C:PIN_101G1:PIN_100G2A:PIN_85G2B:PIN_84Y0:PIN_132Y1:PIN_133Y2:PIN_134Y3:PIN_135Y4:PIN_136Y5:PIN_137Y6:PIN_138Y7:PIN_139vga0:PIN_162vga1:PIN_161vga2:PIN_164vga3:PIN_163利用quartus II软件对程序编译、仿真,验证其功能,最后将程序下载到实验箱,利用硬件测试实验的正确性。注意:未分配管脚:Assignment

28、s->device.->device&pin options ->unused pins->Reserve all unused pins:As input tri-stated。(5)实验连线C、B、A、G1、G2A、G2B分别对应EDA-VI实验箱底板SW1-SW6;Y0-Y7分别对应EDA-VI实验箱底板IO9-IO16;用导线将IO9-IO16与8位LED L1-L8相连,LED为低电平点亮;功能选择位VGA3.0状态为0001,即16位拨码开关SW1-SW6被选中输出到总线D15.0;控制拨码开关SW1-SW6,观察L1-L8显示状态是否与预期输出结果

29、一致。(6)实验报告简述3-8译码器原理,并根据提供的程序代码改用if语句描述,并给出其波形仿真结果;根据拨码开关的控制位置,简述实验箱变化情况。实验七 计数器的设计(1)实验目的进一步学习并掌握Quartus II 开发系统的基本操作,熟悉设计计数器电路与仿真的方法,掌握CPLD/FPGA的开发流程。(2)实验原理:计数器是逻辑电路中使用最广泛的电路,并且在复杂电路的设计中几乎离不开计数器。计数器的计数功能是在时钟信号的控制下进行的,当时钟出现上升沿,则计数一次,以此类推,直至计数到最大值,在时钟上升沿时,返回到起点。(3)实验内容设计一个简单的4位二进制计数器,相当于16进制计数器。lib

30、rary ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt4 ISport( clk: in std_logic; q: out std_logic_vector(3 downto 0);end cnt4;architecture behave of cnt4 issignal q1: std_logic_vector(3 downto 0);begin process(clk) begin if (clk'event and clk = '1') then q1&l

31、t;=q1+1; end if;end process; q<=q1;end behave;利用Quartus II软件进行编译、仿真,验证该计数器的功能。根据之前所学内容,设计一个可以在实验箱上显示的计数器。(4)实验报告给出计数器的程序代码,提供波形仿真结果。实验八 数控分频器的设计(1)实验目的学习数控分频器的设计、分析和测试方法。(2)实验原理分频器电路的实质其实就是计数器的设计。对于二进制计数器,每一个输出端都是对前一个输出端的二分频。数控分频器是利用计数器可并行预置的加法计数器完成的。方法是将计数器溢出位与预置数加载输入信号加减即可。这种方法类似于单片机的定时器工作模式。(3

32、)实验内容设计数控分频器library ieee;use std_logic_1164.all;use std_logic_unsigned.all;entity freq1 is port(clk: in std_logic; d: in std_logic_vector(7 downto 0);fout: out std_logic);end;architecture one of dvf issignal full: std_logic;beginp_reg:process(clk)variable cnt8: std_logic_vector(7 downto 0); begin if

33、 clk'event and clk='1' then if cnt8=“11111111” then- CNT8计数计满时 cnt8:=d; -输入数据D被同步预置给CNT8 full<='1' -溢出标志信号FULL输出高电平elsecnt8:=cnt8+1; -否则继续作加1计数full<='0' -输出溢出标志信号FULL为低电平 end if; end if;end process p_reg;p_div:process(full)variable cnt2: std_logic;beginif full'e

34、vent and full='1' thencnt2:=not cnt2; -如果溢出标志信号FULL为高电平,T触发器输出取反if cnt2='1'thenfout<='1'elsefout<='0'end if;end if;end process p_div;end;利用Quartus II软件进行编译、仿真,验证该数控分频器的功能。(4)思考题根据上述数控分频器源程序,对程序进行修改,可以完成任意分频功能。具体实现的分频数根据课堂随机设置,每小组均不同。(5)实验报告给出数控分频器的程序代码,实验步骤并提供波形

35、仿真结果。写出课堂随机分频器的源程序代码。实验九 锁存器的设计(1)实验目的掌握生成语句的设计方法,熟悉Quartus II软件的操作及仿真过程。(2)实验原理锁存器是一种用来暂时保存数据的逻辑器件,当使能输入端ena为高电平时,锁存器处于工作状态,输出q3.0=d3.0;当输入端ena为低电平,锁存器的状态保持不变。本实验利用生成语句来完成一个4位锁存器的设计。(3)实验内容设计1位锁存器library ieee;use ieee.std_logic_1164.all;entity latch1b isport(d: in std_logic; ena: in std_logic; -使能端

36、 q: out std_logic);end latch1b;architecture art of latch1b is begin process(d,ena) begin if ena='1' thenq<=d; end if;end process;end art;利用Quartus II软件进行编译、仿真,验证一位锁存器的功能。将元件声明装入my_package程序包中,便于生成语句的元件例化。library ieee;use ieee.std_logic_1164.all;package my_package iscomponent latch1b port(

37、d:in std_logic; ena:in std_logic; q: out std_logic);end component;end;利用生成语句重复调用4个latch1b来完成顶层文件的设计。library ieee;use ieee.std_logic_1164.all;use work.my_package.all; -用户自定义程序包entity latch4d isport(d: in std_logic_vector(3 downto 0); oen: in bit; q:out std_logic_vector(3 downto 0);end latch4d;archite

38、cture one of latch4d is signal sig_save:std_logic_vector(3 downto 0);begin getlatch:for n in 0 to 3 generate-循环例化4个1位锁存器lat : latch1b port map(d(n),g,sig_save(n); -关联 end generate; q<=sig_save when oen='0'else "ZZZZ"end one;利用Quartus II软件进行编译、仿真,并验证4位锁存器的功能。(3)思考题根据上述生成语句描述的锁存器,

39、用元件例化语句完成上述锁存器的设计。(4)实验报告写出锁存器的两种描述语句的源程序,给出波形仿真结果,分析比较其结果。实验十 4选1多路选择器(1)实验目的通过4选1多路选择器的设计,掌握if语句、case语句、when.else语句及with.select语句的使用及相互转换,熟悉软件的使用。(2)实验原理4选1多路选择器关系表输入输出XS1S0Ya00ab01bc10cd11d其中输入数据端口为a、b、c、d,s1、s0为控制信号,Y为输出。令S1S0=“00”时,输出Y=a;   令S1S0=“01”时,输出Y=b;令S1S0=“10”时,输出Y=c;

40、60; 令S1S0=“11 时,输出Y=d;(3)实验内容4选1多路选择器参考代码:LIBRARY ieee;USE ieee.std_logic_1164.all;entity mux4 is port( input: in std_logic_vector(3 downto 0); a,b: in std_logic; y: out std_logic); end mux4; architecture be_mux4 OF mux4 is signal sel: std_logic_vector(1 downto 0); begin sel<=b&a; proces

41、s(input,sel) begin if(sel="00") then y<=input(0);elsif (sel="01") then y<=input(1);elsif (sel="10") then y<=input(2);else y<=input(3);end if;end process;end be_mux4;(4)思考题根据上述if语句4选1多路选择器的程序,完成case语句、when.else语句及with.select语句的描述。(5)实验报告要求写出四种语句的4选1多路选择器的程序、原

42、理及波形仿真结果。实验十一 循环彩灯控制器的设计(1)实验目的掌握状态机的设计方法,巩固case语句及Quartus II软件的操作与仿真。(2)实验原理设计一个循环彩灯控制器,该控制器控制LED 8个发光管循环发亮。要求:LED等按照一定的变化规律进行变换,利用状态机来完成本次实验。(3)实验内容自定义状态机的状态type states is (s0,s1,s2,s3,s4,s5,s6,s7);采用case语句设计状态机的状态转换;library ieee;use ieee.std_logic_1164.all; entity state8 is port(clk,clr : in std_logic; led:out std_logic_vector(7 downto 0); vga:out std_logic_vector(3 downto 0);end; architecture a of state8 is type states is (s0,s1,s2,s3,s4,s5,s6,s7); -对状

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论