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

下载本文档

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

文档简介

可编程逻辑器件实验讲义目录 目录实验一QuartusⅡ软件及EDA实验平台介绍 实验一QuartusⅡ软件及EDA实验平台介绍(1)实验目的:熟悉QuartusⅡ软件的使用,学习其操作过程及仿真过程。(2)实验内容:学习使用QuartusⅡ对程序进行编辑输入、编译及仿真。1、打开QuartusII软件。2、选择路径。选择File/NewProjectWizard,指定工作目录,指定工程和顶层设计实体称;注意:工作目录名不能有中文。3、添加设计文件。将设计文件加入工程中。单击“Next”,如果有已经建立好的VHDL或者原理图等文件可以在Filename中选择路径然后添加,或者选择AddAll添加所有可以添加的设计文件(.VHDL,.Verilog原理图等)。如果没有直接点击“Next”,等建立好工程后再添加也可,这里我们暂不添加。4、选择FPGA器件。Family选择Cyclone,Availabledevice选EP1C12Q240C8,点击“Next”。5、选择外部综合器、仿真器和时序分析器。QuartusII支持外部工具,可通过选中来指定工具的路径。这里我们不做选择,默认使用QuartusII自带的工具。6、结束设置。单击“Next”,弹出“工程设置统计”窗口,上面列出了工程的相关设置情况。最后单击“Finish”,结束工程设置。7、建立VHDL原文件。选择菜单“File”“New…”。8、添加文件到工程中。VHDL原文件编辑完后,选择File/Save,选择和工程相同的文件名。点击“保存”,文件就被添加进工程当中。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityadder4bisport(clr,cin:instd_logic;a,b:instd_logic_vector(3downto0);s:outstd_logic_vector(3downto0);cout:outstd_logic);endadder4b;architectureartofadder4bissignalsint:std_logic_vector(4downto0);signalaa,bb:std_logic_vector(4downto0);begin aa<='0'&a; bb<='0'&b; sint<=aa+bb+cin; s<=sint(3downto0); cout<=sint(4);endart;9、编译。选择Processing/Start/StartAnalysis&Synthesis,进行综合。10、功能仿真验证,从菜单File-New中选择创建VectorWaveformFile。在新的波形文件中选入需要验证的引脚,通过在左边窗栏理点击鼠标右键,选InsertNodeorBus..,在打开的对话框中点击List,选择所要观察的信号引脚,设置引脚的信号值,如下图所示。点击保存Save.在Settings对话框中,选中SimulatorSettings选择页,设置Function类型仿真,并将新创建的波形文件当作仿真输入,如下图所示:设置完毕之后,点击Processing->GenerateFunctionalSimulatorNetList,生产网表文件之后,点击StartSimulator,进行功能仿真,然后验证逻辑功能是否正确。(4)实验报告:简述实验步骤,写出实验的源程序,给出波形仿真结果。

实验二QuartusⅡ文本设计输入(1)实验目的:①熟悉QuartusⅡ软件的使用及仿真过程;②掌握操作符的逻辑运算关系及数据类型,熟悉VHDL文本输入法。(2)实验内容:使用VHDL文本输入法完成基本门的设计,学习使用QuartusⅡ对程序进行编辑输入、编译及仿真。libraryieee;useiee.std_logic_1164.all;entityjbmisport(a,b:inbit;f1,f2,f3,f4,f5,f:outbit);endjbm;architectureaofjbmisbeginf1<=aandb;f2<=aorb;f<=nota;f3<=anandb;f4<=anorb;f5<=not(axorb);end;(3)思考题根据上述实验结果与现象,独立完成2位二进制数的“与、或非、异或、同或”逻辑运算,要求数据类型为标准逻辑矢量类型。(4)实验报告写出实验的源程序,给出相应表达式完成的逻辑关系,并给出波形仿真结果。独立完成思考题,给出源程序。

实验三QuartusⅡ混合设计输入(1)实验目的:①熟悉QuartusⅡ软件的使用及仿真过程;②熟悉VHDL混合输入法,并完成一位全加器的设计。(2)实验原理表3-1半加器真值表absoco0000011010101101建立一位半加器half_adder工程:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYHALF_ADDERISPORT(A,B:INSTD_LOGIC;S,Co:OUTSTD_LOGIC);ENDENTITYHALF_ADDER;ARCHITECTURERTLOFHALF_ADDERISBEGINS<=NOT(AXOR(NOTB));Co<=AANDB;ENDARCHITECTUREHD;(3)实验内容:①使用VHDL文本输入法完成一位半加器的设计,利用QuartusⅡ对程序进行编辑输入、编译及仿真;②将半加器生成元件符号,执行菜单【File】->【Create/Update】->【Createsymbolfileforcurrentfile】;③新建原理图文件,并添加刚生成新元件;④连接电路图根据文本输入的半加器,结合所给原理图,进行合理的电路图连接。注意:原理图保存名称不要与半加器实体名重合。⑤指定顶层文件(4)实验报告①给出半加器的原理,写出一位半加器的文本源程序;②画出一位全加器的原理图,对一位全加器进行功能仿真,给出波形仿真结果,并举例验证结果是否正确。

实验四D、T触发器(1)实验目的:熟悉QuartusII的VHDL文本设计过程,学习简单时序电路的设计、仿真。(2)实验原理时序逻辑电路是现代复杂数字电路的重要组成部分,往往占到整个设计的90%以上。触发器是时序电路的基本单元,本实验将涉及到D触发器与T触发器,采用的是边沿触发,边沿触发是实际电路实现的主要方式。D触发器:在时钟上升沿时,输出q=d,qb=;T触发器:在时钟上升沿的作用下,T=0输出不变,T=1输出翻转。(3)实验内容:设计上升沿触发的同步复位的D触发器及上升沿触发的T触发器,分别利用QuartusⅡ对程序进行编辑输入、编译及仿真。上升沿触发的同步复位的D触发器libraryieee;useieee.std_logic_1164.all;useieee.std_logic_signed.all;entitysyndffisport(d,clk,reset:instd_logic;q,qb:outstd_logic);endsyndff;architecturedff_artofsyndffisbeginprocess(clk)beginif(clk'eventandclk='1')thenif(reset='0')thenq<='0';qb<='1';elseq<=d;qb<=notd;endif;endif;endprocess;enddff_art;T触发器源程序代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_signed.all;entitytffisport(t,clk:instd_logic;q:outstd_logic);end;architecturetff_artoftffissignalq_temp:std_logic;beginp1:process(clk,q_temp)beginifrising_edge(clk)thenift='1'thenq_temp<=notq_temp;elseq_temp<=q_temp;endif;endif;q<=q_temp;endprocess;q<=q_temp;endtff_art;(4)实验报告写出D触发器及T触发器的程序代码及原理,找出D触发器的错误及T触发器的警告,说明其错误原因并改正,最后给出两个触发器的波形仿真结果。实验五十六进制数码管显示(1)实验目的学习7段数码显示译码器设计,学习VHDL的case设计方法。(2)实验仪器计算机一台,EL教学实验箱(EDA-VI),QUARTUSII(3)实验原理七段数码管由8个(a,b,c,d,e,f,g,dp)按照一定位置排列的发光二极管构成,通常采取共阴极或者共阳极的设计,将8个二极管的同一极接在一起,通过分别控制另外的8个电极的电平,使二极管导通(发光)或截止(不发光)。本实验采用共阴极设计,高电平点亮。七段数码显示译码器的功能就是根据需要显示的字符,输出能够控制七段数码管显示出该字符的编码。(4)实验内容①用VHDL设计7段数码管显示电路设计,利用case语句实现数码管上显示字符的电路。十六进制数码管显示源代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;useieee.std_logic_unsigned.all;ENTITYshumaISPORT(clk:INSTD_LOGIC;vga:outstd_logic_vector(3downto0);sel:outstd_logic_vector(7downto0);seg_led:outstd_logic_vector(7downto0));END;ARCHITECTUREoneOFshumaISsignalcq:std_logic_vector(3downto0);BEGINvga<="0010";sel<="11111110";PROCESS(clk,cq)BEGINIF(clk='1'ANDclk'EVENT)THENcq<=cq+1;endif;CASEcqISWHEN"0000"=>seg_led<="00111111";WHEN"0001"=>seg_led<="00000110";WHEN"0010"=>seg_led<="01011011";WHEN"0011"=>seg_led<="01001111";WHEN"0100"=>seg_led<="01100110";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"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"=>seg_led<="01110001";WHENOTHERS=>NULL;ENDCASE;endprocess;END;②用QuartusII对②中的设计进行编译、综合、仿真,验证其功能是否与预期一致。③管脚配置:seg_led[0]:PIN_105seg_led[1]:PIN_104seg_led[2]:PIN_101seg_led[3]:PIN_100seg_led[4]:PIN_85seg_led[5]:PIN_84seg_led[6]:PIN_83seg_led[7]:PIN_82sel[0]:PIN_86sel[1]:PIN_87sel[2]:PIN_88sel[3]:PIN_93sel[4]:PIN_94sel[5]:PIN_95sel[6]:PIN_98sel[7]:PIN_99vga[0]:PIN_162vga[1]:PIN_161vga[2]:PIN_164vga[3]:PIN_163clk:PIN_28注意:未分配管脚:Assignments->device...->device&pinoptions->unusedpins->Reserveallunusedpins:Asinputtri-stated。④通过QuartusII的usb-blaster,将设计下载到实验电路上进行硬件测试。(4)实验连线clk的频率由SW17-SW20控制,用导线将IO3与IOCLK相连;SW17-SW20控制时钟的频率,0111表示频率为5Hz,1111表示时钟频率为1Hz,本实验选用这两个频率进行测试,观察数码管显示字符的变化。(5)实验报告给出十六进制的数码管的程序代码、原理,自己改写程序选择不同的数码管显示字符,并提供实验过程中的拍摄图片。

实验六3-8译码器设计(1)实验目的通过3-8译码器的设计,掌握组合逻辑电路的设计方法,熟悉软件的使用,并利用实验箱对程序进行硬件测试。(2)实验仪器计算机一台,EL教学实验箱(EDA-VI),QUARTUSII(3)实验原理输入输出g1g2ag2bCBAY0Y1Y2Y3Y4Y5Y6Y70XXXXX111111111000000111111110000110111111100010110111111000111110111110010011110111100101111110111001101111110110011111111110利用case语句设计3-8译码器,译码器的输出接LED灯,为低电平点亮。(4)实验内容3-8译码器源程序代码:LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYdecoder3_8ISPORT(a,b,c,g1,g2a,g2b:INSTD_LOGIC;VGA:outstd_logic_vector(3downto0);Y:OUT STD_LOGIC_VECTOR(7DOWNTO0));ENDdecoder3_8;ARCHITECTUREfunOFdecoder3_8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);BEGIN VGA<=“0001”;indata<=C&B&A;PROCESS(indata,G1,G2A,G2B)BEGINIF(G1='1'ANDG2A='0'ANDG2B='0')THENCASEindataIS WHEN"000"=>Y<="11111110";WHEN"001"=>Y<="11111101";WHEN"010"=>Y<="11111011";WHEN"011"=>Y<="11110111";WHEN"100"=>Y<="11101111";WHEN"101"=>Y<="11011111";WHEN"110"=>Y<="10111111";WHEN"111"=>Y<="01111111";WHENOTHERS=>Y<="XXXXXXXX";ENDCASE;ELSE Y<="11111111";ENDIF;ENDPROCESS;ENDfun;管脚配置:A:PIN_105B:PIN_104C:PIN_101G1:PIN_100G2A:PIN_85G2B:PIN_84Y[0]:PIN_132Y[1]:PIN_133Y[2]:PIN_134Y[3]:PIN_135Y[4]:PIN_136Y[5]:PIN_137Y[6]:PIN_138Y[7]:PIN_139vga[0]:PIN_162vga[1]:PIN_161vga[2]:PIN_164vga[3]:PIN_163利用quartusII软件对程序编译、仿真,验证其功能,最后将程序下载到实验箱,利用硬件测试实验的正确性。注意:未分配管脚:Assignments->device...->device&pinoptions->unusedpins->Reserveallunusedpins:Asinputtri-stated。(5)实验连线C、B、A、G1、G2A、G2B分别对应EDA-VI实验箱底板SW1-SW6;Y0-Y7分别对应EDA-VI实验箱底板IO9-IO16;用导线将IO9-IO16与8位LEDL1-L8相连,LED为低电平点亮;功能选择位VGA[3..0]状态为0001,即16位拨码开关SW1-SW6被选中输出到总线D[15..0];控制拨码开关SW1-SW6,观察L1-L8显示状态是否与预期输出结果一致。(6)实验报告简述3-8译码器原理,并根据提供的程序代码改用if语句描述,并给出其波形仿真结果;根据拨码开关的控制位置,简述实验箱变化情况。

实验七计数器的设计(1)实验目的进一步学习并掌握QuartusII开发系统的基本操作,熟悉设计计数器电路与仿真的方法,掌握CPLD/FPGA的开发流程。(2)实验原理:计数器是逻辑电路中使用最广泛的电路,并且在复杂电路的设计中几乎离不开计数器。计数器的计数功能是在时钟信号的控制下进行的,当时钟出现上升沿,则计数一次,以此类推,直至计数到最大值,在时钟上升沿时,返回到起点。(3)实验内容①设计一个简单的4位二进制计数器,相当于16进制计数器。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycnt4IS port(clk:instd_logic; q:outstd_logic_vector(3downto0)); endcnt4;architecturebehaveofcnt4issignalq1:std_logic_vector(3downto0);beginprocess(clk)beginif(clk'eventandclk='1')then q1<=q1+1;endif;endprocess;q<=q1;endbehave;②利用QuartusII软件进行编译、仿真,验证该计数器的功能。③根据之前所学内容,设计一个可以在实验箱上显示的计数器。(4)实验报告给出计数器的程序代码,提供波形仿真结果。

实验八数控分频器的设计(1)实验目的学习数控分频器的设计、分析和测试方法。(2)实验原理分频器电路的实质其实就是计数器的设计。对于二进制计数器,每一个输出端都是对前一个输出端的二分频。数控分频器是利用计数器可并行预置的加法计数器完成的。方法是将计数器溢出位与预置数加载输入信号加减即可。这种方法类似于单片机的定时器工作模式。(3)实验内容①设计数控分频器libraryieee;usestd_logic_1164.all;usestd_logic_unsigned.all;entityfreq1isport(clk:instd_logic;d:instd_logic_vector(7downto0);fout:outstd_logic);end;architectureoneofdvfissignalfull:std_logic;beginp_reg:process(clk)variablecnt8:std_logic_vector(7downto0);beginifclk'eventandclk='1'thenifcnt8=“11111111”then--CNT8计数计满时cnt8:=d;--输入数据D被同步预置给CNT8full<='1';--溢出标志信号FULL输出高电平elsecnt8:=cnt8+1;--否则继续作加1计数full<='0';--输出溢出标志信号FULL为低电平endif;endif;endprocessp_reg;p_div:process(full)variablecnt2:std_logic;beginiffull'eventandfull='1'thencnt2:=notcnt2;--如果溢出标志信号FULL为高电平,T触发器输出取反ifcnt2='1'thenfout<='1';elsefout<='0';endif;endif;endprocessp_div;end;②利用QuartusII软件进行编译、仿真,验证该数控分频器的功能。(4)思考题根据上述数控分频器源程序,对程序进行修改,可以完成任意分频功能。具体实现的分频数根据课堂随机设置,每小组均不同。(5)实验报告给出数控分频器的程序代码,实验步骤并提供波形仿真结果。写出课堂随机分频器的源程序代码。

实验九锁存器的设计(1)实验目的掌握生成语句的设计方法,熟悉QuartusII软件的操作及仿真过程。(2)实验原理锁存器是一种用来暂时保存数据的逻辑器件,当使能输入端ena为高电平时,锁存器处于工作状态,输出q[3..0]=d[3..0];当输入端ena为低电平,锁存器的状态保持不变。本实验利用生成语句来完成一个4位锁存器的设计。(3)实验内容①设计1位锁存器libraryieee;useieee.std_logic_1164.all;entitylatch1bisport(d:instd_logic; ena:instd_logic;--使能端 q:outstd_logic);endlatch1b;architectureartoflatch1bisbeginprocess(d,ena)begin ifena='1'then q<=d; endif; endprocess;endart;②利用QuartusII软件进行编译、仿真,验证一位锁存器的功能。③将元件声明装入my_package程序包中,便于生成语句的元件例化。libraryieee;useieee.std_logic_1164.all;packagemy_packageiscomponentlatch1b port(d:instd_logic; ena:instd_logic; q:outstd_logic);endcomponent;end;④利用生成语句重复调用4个latch1b来完成顶层文件的设计。libraryieee;useieee.std_logic_1164.all;usework.my_package.all;--用户自定义程序包entitylatch4disport(d:instd_logic_vector(3downto0); oen:inbit; q:outstd_logic_vector(3downto0));endlatch4d;architectureoneoflatch4dissignalsig_save:std_logic_vector(3downto0);begingetlatch:fornin0to3generate--循环例化4个1位锁存器lat:latch1bportmap(d(n),g,sig_save(n));--关联endgenerate;q<=sig_savewhenoen='0'else"ZZZZ";endone;⑤利用QuartusII软件进行编译、仿真,并验证4位锁存器的功能。(3)思考题根据上述生成语句描述的锁存器,用元件例化语句完成上述锁存器的设计。(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;

令S1S0=“11’

时,输出Y=d;(3)实验内容4选1多路选择器参考代码:LIBRARYieee;USEieee.std_logic_1164.all;entitymux4is port(input:instd_logic_vector(3downto0); a,b:instd_logic; y:outstd_logic); endmux4; architecturebe_mux4OFmux4is signalsel:std_logic_vector(1downto0); begin sel<=b&a; process(input,sel) begin if(sel="00")theny<=input(0);elsif(sel="01")theny<=input(1);elsif(sel="10")theny<=input(2);elsey<=input(3);endif;endprocess;endbe_mux4;(4)思考题根据上述if语句4选1多路选择器的程序,完成case语句、when...else语句及with...select语句的描述。(5)实验报告要求写出四种语句的4选1多路选择器的程序、原理及波形仿真结果。

实验十一循环彩灯控制器的设计(1)实验目的掌握状态机的设计方法,巩固case语句及QuartusII软件的操作与仿真。(2)实验原理设计一个循环彩灯控制器,该控制器控制LED8个发光管循环发亮。要求:LED等按照一定的变化规律进行变换,利用状态机来完成本次实验。(3)实验内容①自定义状态机的状态typestatesis(s0,s1,s2,s3,s4,s5,s6,s7);②采用case语句设计状态机的状态转换;libraryieee;useieee.std_logic_1164.all;entitystate8isport(clk,clr:instd_logic;led:outstd_logic_vector(7downto0);vga:outstd_logic_vector(3downto0));end;architectureaofstate8istypestatesis(s0,s1,s2,s3,s4,s5,s6,s7); --对状态机的状态声明signalq:std_logic_vector(0to2);signalstate:states;beginvga<="0001";p1:process(clk,c

温馨提示

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

评论

0/150

提交评论