版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元一EDA技术概述1.什么是EDA技术?EDA技术的基本特征是什么?答:EDA(ElectronicDesignAutomation,电子设计自动化)技术是电子设计工程师在计算机上完成电路的功能设计、逻辑设计、性能分析、时序测试直至PCB(印制电路板)的自动设计等。EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。2.可编程逻辑器件有什么特点?有哪些可编程资源?答:可编程逻辑器件的主要特点1.缩短研制周期2.降低设计成本3.提高设计灵活性3.写出Altera器件中的下列英文缩写的中文含义。LELABPIAEAB答:LE:逻辑单元LAB:逻辑阵列块PIA:可编程连线阵列EAB:嵌入式阵列块4.简述可编程逻辑器件的发展趋势。答:可编程逻辑器件未来的发展将呈现以下几个方面的趋势:1)向高密度、大规模的方向发展2)向系统内可重构的方向发展3)向低电压、低功耗的方向发展4)向高速可预测延时器件的方向发展5)向混合可编程技术方向发展单元二可编程逻辑器件的设计与开发1.简述可编程逻辑器件的一般设计过程。答:CPLD/FPGA器件的设计流程一般分为设计输入、设计实现、设计校验和编程下载4个步骤。2.试比较可编程逻辑器件设计的常用输入方式。答:1)原理图输入原理图是图形化的表达方式,它是利用软件中所提供的元件符号和连线来描述设计。其特点是比较直观,便于进行接口设计和引脚锁定,容易实现仿真,便于信号的观察和电路的调整,系统运行速率较高,但当描述复杂电路时则比较烦琐。2)硬件描述语言输入硬件描述语言输入是采用文本方式描述设计,这种方式的描述范围较宽,从简单的门电路到复杂的数字系统均可描述。特别是在描述复杂设计时,非常简洁。但这种描述方式不适合描述接口和连接关系,并且该输入方式必须依赖综合器,只有好的综合器才能把语言综合成优化的电路。3.列举常用的EDA工具软件,并比较各有什么特点。答:1)Synplify该软件是由Synplicity公司专为FPGA和CPLD开发设计的逻辑综合工具。它在综合优化方面的优点非常突出,得到了广大用户的好评。它支持用Verilog和VHDL硬件描述语言描述的系统级设计,具有强大的行为及综合能力。综合后,能生成Verilog或VHDL网表,以进行功能级仿真。Synplify的综合过程分为三步:首先是语言综合,将硬件描述语言的设计编译成结构单元。接下来采用优化算法对设计进行优化,除去冗余项,提高可靠性与速度。第三步是工艺映射,将设计映射为相应PLD的网表文件。2)Synopsys该软件是另一种系统综合软件,它因综合功能强大而被广泛使用。Synopsys综合器的综合效果比较理想,系统速度快,消耗资源少。对系统的优化过程大致分为两步:第一步是设计规则,提出必须满足的设计要求,如最大延时、最大功耗、最大扇出数目、驱动强度等;第二步是提出各种设计约束,一般有反应时间约束、芯片面积约束等。综合器根据设计要求,采用相应算法,力争使综合效果达到最佳。Synopsys支持完整的VHDL和Verilog语言子集,另外它的元件库中包含许多现成的实现方案,调用非常方便。正是因为这些突出的优点,Synopsys逐渐成为设计人员普遍接受的标准工具。3)ispDesignEXPERT该软件是Lattice公司专为本公司的PLD芯片开发设计的软件,它的前身是该公司的Synario、ispEXPERT。ispDesignEXPERT是完备的EDA软件,支持系统开发的全过程,包括设计输入、设计实现、仿真与时序分析、编程下载等。ispDesignEXPERT包括三个版本。Starter版适合初学者学习,可以免费下载。Base版为试用版。它们的设计规模都低于600个宏单元。Advanced版是专业设计版,支持该公司的各种系列器件,功能全面。4)MAX+plusⅡ该软件是Altera公司专为本公司的PLD芯片开发设计的软件。其功能齐全,使用方便,易懂好学,是最广为接受的EDA工具之一。5)QuartusⅡ该软件也是Altera公司为本公司的PLD芯片开发设计的软件。它比MAX+plusⅡ支持的器件更全面,特别包括Altera公司的超高密度的芯片系列——APEX系列器件。QuartusⅡ可开发的单器件门数达到了260万门,特别适合高集成的大型系统的开发设计。本书介绍的设计就是采用的该软件。4.EDA开发工具在“设计实现”过程中主要完成哪些工作?答:EDA开发工具进行设计实现时主要完成以下4个相关任务。1)优化和合并优化是指进行逻辑化简,把逻辑描述转变为最适合在器件中实现的形式;合并是将模块化设计产生的多个文件合并成一个网表文件,并使层次设计平面化。2)映射映射是根据所选择的PLD型号,把设计分割为多个适合器件内部逻辑资源实现的逻辑小块形式。3)布局和布线布局是将已分割的逻辑小块放到器件内部逻辑资源的具体位置,并使它们易于连线,且连线最少;布线是利用器件内的布线资源完成各功能块之间和反馈信号的连接。4)产生编程文件设计实现的最后一步是产生可供器件编程使用的数据文件。对CPLD而言,产生的是熔丝图文件(*.JEDEC);对FPGA器件,则产生位数据流文件Bitstream。5.简述QuartusⅡ进行EDA设计的一般步骤。答:1.为本项工程设计建立文件夹2.建立工程3.添加设计文件并保存4.检查设计5.锁定引脚并编译6.功能仿真7.下载单元三硬件描述语言1.VHDL与VerillogHDL各有何特点?试比较各自的应用场合。答:一般的硬件描述语言可在三个层次上进行电路描述,其层次由高到低依次可分为行为级、RTL级和门电路级。VHDL通常更适合行为级和RTL级的描述;VerilogHDL通常只适合RTL级和门电路级的描述。因此,与VerilogHDL相比,VHDL是一种高级描述语言,适用于电路的高级建模,最适合描述电路的行为,即描述电路的功能,但它几乎不能直接控制门电路,即控制电路的资源;VerilogHDL则是一种低级的描述语言,最适合于描述门级电路,易于控制电路资源。VHDL和VerilogHDL主要区别在于逻辑表达的描述级别。VHDL虽然也可以直接描述门电路,但这方面的能力却不如VerilogHDL;相反,VerilogHDL在高级建模描述方面不如VHDL。VerilogHDL的描述风格接近于电路原理图,从某种意义上说,它是电路原理图的高级文本表示方式。2.VHDL程序有哪些基本的部分?各部分起什么作用?答:VHDL程序可以分为两部分。第一部分主要用于描述电路的“外部端口”,包括器件名称、端口的名称、数据类型等,称为“实体说明”;第二部分主要用于描述电路的内部结构、功能及其实现的算法,称为“结构体”。3.BIT数据类型和STD_LOGIC数据类型有何区别?答:BIT是二进制位类型,其取值是一个1位的二进制数,只能是0或1。STD_LOGIC是工业标准逻辑类型,取值有0、1、Z(高阻)、X(未知)等9种,该数据类型由IEEE库中的STD_LOGIC_1164程序包定义。4.端口模式BUFFER与INOUT有何区别?答:INOUT是双向端口,既可以输入信号,也可以输出信号;而BUFFER也可以输出实体信号到外部,但作为输入时,信号不是由外部输入,而是在实体内由输出信号反馈得到,即BUFFER模式的端口在信号输出实体的同时,也可以被实体本身读入。5.什么是库和程序包?常用的库和程序包有哪些?答:在利用VHDL进行工程设计时,为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,有必要将一些有用的信息汇集在一个或几个库(LIBRARY)中,以供VHDL调用。常用的库有IEEE库、STD库和WORK库。6.什么是并行语句?什么是顺序语句?二者有何区别?答:在VHDL中,并行语句有多种语句格式,各种并行语句在结构体中的执行都是同步进行的,或者说是并行运行的,其执行的方式与书写的顺序无关。这种并行性是由硬件本身的并行性决定的,即一旦电路接通电源,它的各部分就会按照事先设计好的方案同时工作。并行语句在执行时,各并行语句之间可以有信息来往,也可以互为独立、互不相关。另外,每一并行语句内部的语句可以有两种不同的运行方式,即并行执行方式(如块语句)和顺序执行方式(如进程语句)。顺序语句主要指的是语句的执行(指仿真执行)顺序与其书写顺序基本一致。但应注意的是,这里的顺序是对仿真软件的运行或顺应VHDL语法的编程思路而言的,其相应的硬件逻辑工作方式未必如此。顺序语句只能出现在进程(PROCESS)中,而进程本身属于并行语句,这就是说在同一设计实体中,所有的进程都是并行执行的,而每一个进程内部的语句是顺序执行的。常用的顺序语句有赋值语句、IF语句、CASE语句、LOOP语句和NULL语句。7.信号和变量有何区别?答:(1)信号是全局量,是一个实体内部各部分之间进行通信的手段;而变量是局部量,只允许定义并作用于进程和子程序中。当欲把变量值带出进程时,变量须首先赋给信号,然后由信号将其值带出。(2)信号的赋值采用符号“<=”,而变量的赋值符号为“:=”。(3)通常,变量的值可以传递给信号,而信号的值却不能传递给变量。(4)在进程中,变量的赋值语句一旦被执行,变量值立刻就被赋予新值,在执行下一条语句时,该变量就用新赋的值参与运算;而在进程中的信号赋值语句,该语句虽然已被执行,但新的信号值并没有被立即代入,因而在执行下一条语句时,仍使用原来的信号值,直到进程结束时,信号才根据最后一次的赋值被赋予新值。(5)在结构体的并行语句部分,若同一信号被赋值一次以上,则编译器将给出错误报告,指出该信号出现了两个驱动源。在进程中,若同一信号被赋值一次以上,则编译器将给出警告,指出只有最后一次赋值有效,而变量的赋值是立即发生的。8.IF语句和CASE语句的使用效果有何不同?答:与IF语句相比,CASE语句组的程序可读性比较好,这是因为它把条件中“表达式”的所有取值都列了出来,可执行条件一目了然。但对相同的逻辑功能描述,综合后,用CASE语句描述比IF描述耗用更多的硬件资源。因此,对本身就具有优先逻辑关系的描述(如优先编码器),采用IF语句比CASE语句更合适。9.画出与下例实体描述相对应的原理图符号。(1)实体一ENTITYbuf3sISPORT(input:INSTD_LOGIC;enable:INSTD_LOGIC;output:OUTSTD_LOGIC);ENDbuf3s;(2)实体二ENTITYmux21ISPORT(in0,in1,sel:INSTD_LOGIC;output:OUTSTD_LOGIC);ENDmux21;10.修改下列程序中的错误。ENTITYcountISPORT(clk:INBIT;q:OUTBIT_VECTOR(7DOWNTO0););ENDcount;ARCHITECTUREaOFcountBEGINPROCESS(clk)IFclk’eventANDclk=‘1’THENq<=q+1;ENDPROCESS;ENDa;正确的:ENTITYcountISPORT(clk:INBIT;q:OUTBIT_VECTOR(7DOWNTO0));ENDcount;ARCHITECTUREaOFcountBEGINPROCESS(clk)IFclk’eventANDclk=‘1’THENq<=q+1;ENDPROCESS;ENDa;11.修改下列语句中的错误。……SIGNALinvalue:ININTEGERRANGE0TO15;SIGNALoutvalue:OUTSTD_LOGIC;……CASEinvalueISWHEN0=>outvalue<=‘1’;WHEN1=>outvalue<=‘0’;ENDCASE;……正确的:……SIGNALinvalue:ININTEGERRANGE0TO15;SIGNALoutvalue:OUTSTD_LOGIC;……CASEinvalueISWHEN0=>outvalue<=‘1’;WHENothers=>outvalue<=‘0’;ENDCASE;……12.图3-25是一个含有上升沿触发D触发器的时序电路,试写出此电路的VHDL程序。答:1、与非门libraryieee;useieee.std_logic_1164.all;entitynandsisport(a,b:instd_logic;q:outstd_logic);endnands;architectureaofnandsisbeginq<=not(aandb);enda;2、触发器libraryieee;useieee.std_logic_1164.all;entityd1isport(d,clk:instd_logic;q:outstd_logic);endd1;architectureaofd1isbeginProcess(clk)beginifclk'eventandclk='1'thenq<=d;endif;endprocess;enda;3、非门libraryieee;useieee.std_logic_1164.all;entitynotsisport(a:instd_logic;q:outstd_logic);endnots;architectureaofnotsisbeginq<=nota;enda;4、时序电路libraryieee;useieee.std_logic_1164.all;entityd2isport(cl,clk:instd_logic;out1:outstd_logic);endd2;architectureaofd2iscomponentnandsport(a,b:instd_logic;q:outstd_logic);endcomponent;componentd1port(d,clk:instd_logic;q:outstd_logic);endcomponent;componentnotsport(a:instd_logic;q:outstd_logic);endcomponent;signaltemp1,temp2:std_logic;beginu1:nandsportmap(temp2,cl,temp1);u2:d1portmap(temp1,clk,temp2);u3:notsportmap(temp2,out1);enda;单元四常用数字电路的设计1.试设计一个将芯片内的两个节点a和b相接的VHDL程序。libraryieee;useieee.std_logic_1164.all;entityt1isport(a:instd_logic;b:outstd_logic);endt1;architectureaoft1isbeginb<=a;enda;2.试设计一个4位并行奇校验电路,设输出为p。当各输入信号同时输入的逻辑‘1’libraryieee;useieee.std_logic_1164.all;entityt2isport(a:instd_logic_vector(3downto0);p:outstd_logic);endt2;architectureaoft2isbeginprocess(a)beginifa="0001"ora="0010"ora="0100"ora="1000"ora="0111"ora="1011"ora="1101"ora="1110"thenp<='1';elsep<='1';endif;endprocess;enda;3.设计一个8位数补码生成电路,设输入为d[7..0],输出为p[7..0]。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityt3isport(d:instd_logic_vector(7downto0);p:outstd_logic_vector(7downto0));endt3;architectureaoft3isbeginp<=(notD)+1;enda;4.试设计一个5人表决器。(提示:设置5个输入,1个输出。输入变量为‘1’时表示表决者赞同,反之表示反对。输出变量为‘1libraryieee;useieee.std_logic_1164.all;entityt4isport(a,b,c,d,e:instd_logic;y:outstd_logic);endt4;architectureaoft4isbeginy<=(aandbandc)or(aandcandd)or(aanddande)or(bandcandd)or(banddande)or(canddande)or(dandaandb)or(eandbandc);enda;5.试用VHDL描述芯片74LS138(3-8线译码器)的功能。74LS138的功能见表4-12,s1、s2、s3为使能端,a2、a1、a0为地址选择端,y[0..7]为输出端。表4-1274LS138功能表输入输出s1s1+s2a2a1ay[0..7]0××××11111111×1×××1111111110000011111111000110111111100101101111110011111011111010011110111101011111101110110111111011011111111110LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoder3_8ISPORT(s1,s2,s3:inbit;a:INBIT_VECTOR(2DOWNTO0);y:OUTBIT_VECTOR(7DOWNTO0));ENDdecoder3_8;ARCHITECTUREbehOFdecoder3_8ISBEGINprocess(s1,s2,s3)beginifs1='0'theny<="11111111";elsifs1='1'ors2='1'theny<="11111111";elsecaseaisWHEN"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";endcase;endif;endprocess;ENDbeh;6.试设计一个4位组合移位器,功能见表4-13,d[3..0]为输入,控制位为kz[1..0],输出为f[3..0]。表4-134位组合移位器功能表控制位kz[1..0]输出f[3..0]功能00d3d2d1d0不移位01d2d1d0d3循环左移1位10d1d0d3d2循环左移2位11d0d3d2d1循环左移3位libraryieee;useieee.std_logic_1164.all;entityt6isport(d:instd_logic_vector(3downto0);KZ:instd_logic_vector(1downto0);f:outstd_logic_vector(3downto0));endt6;architectureaoft6issignalq:std_logic_vector(3downto0);beginprocess(KZ)beginifKZ="01"thenq(3downto1)<=d(2downto0);q(0)<=d(3);elsifKZ="10"thenq(3downto2)<=d(1downto0);q(1)<=d(3);q(0)<=d(2);elsifKZ="11"thenq(3)<=d(0);q(0)<=d(1);q(1)<=d(2);q(2)<=d(3);elseq<=d;endif;endprocess;f<=q;enda;7.试设计一个6位加法器,用于实现对两个6位数的加法运算,其功能见表4-14。表4-146位加法器功能表输入输出a[5..0]b[5..0]s[5..0]caba+b进位libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityt7isport(a,b:instd_logic_vector(5downto0);s:outstd_logic_vector(5downto0);c:outstd_logic);endt7;architectureaoft7issignalm:std_logic_vector(6downto0);beginm<=a+('0'&b);s<=m(5downto0);c<=m(6);enda;8.设计一个具有异步置位/复位功能的JK触发器。功能见表4-15。表4-14JK触发器功能表输入输出enaprnclrclkJKqqb111111101011111001111×××↑↑↑↑×××0011×××010110×不变01翻转01×不变10翻转libraryieee;useieee.std_logic_1164.all;entityt8isport(ena,prn,clr,clk,j,k:instd_logic;q,qb:outstd_logic);endt8;architectureaoft8issignalm,mb:std_logic;beginprocess(ena,prn,clr,clk)beginifprn='0'thenm<='1';mb<='0';elsifclr='0'thenm<='0';mb<='1';elsifclk'eventandclk='1'thenm<=(jand(notm))or((notk)andm);mb<=notm;endif;endprocess;q<=m;qb<=mb;enda;9.设计一个RS触发器,功能见表4-15。表4-15RS触发器功能表输入输出RSQ00不变01110011不定libraryieee;useieee.std_logic_1164.all;entityt9isport(clk,R,s:instd_logic;q:outstd_logic);endt9;architectureaoft9issignalm:std_logic;beginprocess(clk)beginifclk'eventandclk='1'thenifr='0'ands='0'thenm<=m;elsifr='0'ands='1'thenm<='1';elsifr='1'ands='0'thenm<='0';elseNULL;endif;endif;endprocess;q<=m;enda;10.试设计一个4位二进制数的可逆计数器,时钟端为clk,计数输出端为q[3..0],计数方向控制端为dire。当dire=1时做加法计数,当dire=0时做减法计数。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityt10isport(clk,dire:instd_logic;q:outstd_logic_vector(3downto0));endt10;architectureaoft10issignalm:std_logic_vector(3downto0);beginprocess(clk,dire)beginifclk'eventandclk='1'thenifdire='1'thenm<=m+1;elsem<=m-1;endif;endif;endprocess;q<=m;enda;11.用VHDL描述同步十进制加法计数器芯片74LS160的功能,时钟端为clk,清零端为clr,预置数输入端为d[3..0],预置数控制端为ld,功能控制端为ep和et,计数输出端为q[3..0],进位输出端为c。74LS160功能见表4-16。表4-1674LS160功能表clkclrldepet工作状态×0×××置零↑10××预置数×1101保持×11×0保持(c=0)×1111计数libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityt11isport(clk,clr,ld,ep,et:instd_logic;d:instd_logic_vector(3downto0);q:outstd_logic_vector(3downto0);c:outstd_logic);endt11;architectureaoft11issignalm:std_logic_vector(3downto0);beginprocess(clr,clk)beginifclr='0'thenm<="0000";elsifclk'eventandclk='1'thenifld='0'thenm<=d;elsifep='1'andet='1'thenm<=m+1;elsifep='0'andet='1'thenm<=m;elsifet='0'thenm<=m;c<='0';endif;endif;endprocess;q<=m;enda;12.试设计一个60进制的同步加法计数器,时钟端为clk,计数输出端为q。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityt12isport(clk:instd_logic;q:outstd_logic_vector(5downto0));endt12;architectureaoft12issignalm:std_logic_vector(5downto0);beginprocess(clk)beginifclk'eventandclk='1'thenifm="111011"thenm<="000000";elsem<=m+1;endif;endif;endprocess;q<=m;enda;13.试设计一个128进制的同步加法计数器,时钟端为clk,计数输出端为q。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityt13isport(clk:instd_logic;q2,q1,q0:outstd_logic_vector(3downto0));endt13;architectureaoft13issignalb,s,g:std_logic_vector(3downto0);beginprocess(clk)beginifclk'eventandclk='1'thenifb>"0000"thenifs>"0001"thenifg>"0111"theng<="0000";b<="0000";s<="0000";elseg<=g+1;endif;elseifg="1001"thens<=s+1;g<="0000";elses<=S;g<=g+1;endif;endif;elseifs="1001"thenb<=b+1;s<="0000";elseifg="1001"thens<=s+1;g<="0000";elses<=S;g<=g+1;endif;endif;endif;endif;endprocess;q2<=b;q1<=s;q0<=g;enda;单元五数字系统设计实例1.设计一个8×8发光点矩阵逐点扫描显示控制电路,要求如下。(1)光点从屏左上角像素点向右开始逐点逐行扫描,终止于右下角像素点,然后重复上述过程;(2)扫描一帧所需时间为13s。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydzisport(clk:instd_logic;row,lie:outstd_logic_vector(7downto0));enddz;architectureaofdzissignalcountr,countl:std_logic_vector(2downto0);signalc:std_logic;beginp1:process(clk)beginifclk'eventandclk='1'thenifcountl="111"thenc<='1';countl<="000";elsec<='0';countl<=countl+1;endif;endif;endprocessp1;p2:process(c)beginifc'eventandc='1'thencountr<=countr+1;endif;endprocessp2;p3:process(countl,countr)begincasecountriswhen"000"=>row<="01111111";--第一行显示ifcountl="000"thenlie<="10000000";--第一列elsifcountl="001"thenlie<="01000000";--第二列elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;when"001"=>row<="10111111";--第二行显示ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;when"010"=>row<="11011111";ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;when"011"=>row<="11101111";ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;when"100"=>row<="11110111";ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;when"101"=>row<="11111011";ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;when"110"=>row<="11111101";ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;whenothers=>row<="11111110";ifcountl="000"thenlie<="10000000";elsifcountl="001"thenlie<="01000000";elsifcountl="010"thenlie<="00100000";elsifcountl="011"thenlie<="00010000";elsifcountl="100"thenlie<="00001000";elsifcountl="101"thenlie<="00000100";elsifcountl="110"thenlie<="00000010";elsifcountl="111"thenlie<="00000001";endif;endcase;endprocessp3;enda;2.设计一个循环彩灯控制器,该控制器控制红、绿、黄三个发光管循环发亮。要求红发光管亮2s,绿发光管亮3s,黄发光管亮1s。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycaiisport(clk,res:instd_logic;lr,lg,ly:outstd_logic);endcai;architectureaofcaiistypestatesis(red,green,yellow);signalstate:states;signalc:integerrange0to3;beginp2:process(clk,res)beginifres='0'thenstate<=red;c<=0;elsifclk'eventandclk='1'thenc<=c+1;casestateiswhenred=>ifc=1thenc<=0;state<=green;lr<='0';lg<='1';elsestate<=red;endif;whengreen=>ifc=2thenc<=0;state<=yellow;lg<='0';ly<='1';elsestate<=green;endif;whenyellow=>state<=red;C<=0;lr<='1';ly<='0';endcase;endif;endprocessp2;enda;3.设计一个2人抢答器,要求如下。(1)2人抢答时,先抢者(按下按键)有效,并点亮对应的发光二极管进行显示;后抢者无效,对应的发光二极管不亮;(2)每人有2位数码管进行记分显示,答错不加分,答对可加10分、20分或30分;(3)每题抢答结束后,裁判按一下复位键,可重新进行下一轮的抢答;(4)累计加分可由裁判随时清除。抢答模块libraryieee;useieee.std_logic_1164.all;entitymqisport(res,a,b:instd_logic;la,lb:outstd_logic);endmq;architectureaofmqisbeginprocess(res,a,b)beginifres='0'thenla<='0';lb<='0';elseifa='0'thenla<='1';lb<='0';elsifb='0'thenla<='0';lb<='1';endif;endif;endprocess;enda;计分模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymj1isport(clk,clr,aj,bj,m1,m2,m3:instd_logic;af,bf:outstd_logic_vector(3downto0));endmj1;architectureaofmj1istypestate_typeis(s0,s1,s2,s3);signalstate:state_type;signalma,mb:std_logic_vector(3downto0);beginp1:process(clr,clk)beginifclr='0'thenstate<=s0;elseifclk'eventandclk='1'thenifm1='0'thenstate<=s1;elsifm2='0'thenstate<=s2;elsifm3='0'thenstate<=s3;elsestate<=s0;endif;endif;endif;endprocessp1;p2:process(aj,state)beginifaj='1'thencasestateiswhens0=>ma<="0000";whens1=>ma<=ma+1;whens2=>ma<=ma+2;whens3=>ma<=ma+3;whenothers=>ma<=ma;endcase;endif;endprocessp2;p3:process(bj,state)beginifbj='1'thencasestateiswhens0=>mb<="0000";whens1=>mb<=mb+1;whens2=>mb<=mb+2;whens3=>mb<=mb+3;whenothers=>mb<=mb;endcase;endif;endprocessp3;af<=ma;bf<=mb;enda;扫描模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymsisport(clk:instd_logic;res:instd_logic;in1,in2:instd_logic_vector(3downto0);sel:outstd_logic_vector(1downto0);dout:outstd_logic_vector(3downto0));endms;architectureaofmsisbeginprocess(clk)variablecnt:std_logic_vector(1downto0);beginifclk'eventandclk='1'thenifres='0'thencnt:="00";elsecnt:=cnt+1;endif;ifcnt="00"thendout<=in1;elsifcnt="10"thendout<=in2;elsedout<="0000";endif;endif;sel<=cnt;endprocess;enda;显示模块libraryieee;useieee.std_logic_1164.all;entitymdisport(d:instd_logic_vector(3downto0);q:outstd_logic_vector(6downto0));endmd;architectureaofmdisbeginprocess(d)begincasediswhen"0000"=>q<="0111111";when"0001"=>q<="0000110";when"0010"=>q<="1011011";when"0011"=>q<="1001111";when"0100"=>q<="1100110";when"0101"=>q<="1101101";when"0110"=>q<="1111101";when"0111"=>q<="0000111";when"1000"=>q<="1111111";when"1001"=>q<="1101111";whenothers=>q<="0000000";endcase;endprocess;enda;总图5.设计一个简易秒表控制电路,要求如下。(1)能够准确地计时并用数码管显示;(2)开机显示00.00.00;(3)用户可随时通过按键进行清零、暂停、计时;(4)最大计时59min,最小精确到0.01s。毫秒计时模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmmcountIS PORT(en,res,clk:INSTD_LOGIC; ca:OUTSTD_LOGIC; a,b:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDmmcount;ARCHITECTURErtlOFmmcountISSIGNALaout,bout:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALcout:STD_LOGIC;BEGIN PROCESS(en,clk,res) BEGIN IF(res='0')THEN aout<="0000"; bout<="0000"; cout<='0'; ELSIF(clk'eventandclk='1')THEN IF(en='1')THEN IF(bout>9)THEN IF(aout>9)THEN aout<="0000"; bout<="0000"; cout<='1'; ELSE aout<=aout+1; ENDIF; ELSE IF(aout=9)THEN aout<="0000"; bout<=bout+1; ELSE aout<=aout+1; cout<='0'; ENDIF; ENDIF; ENDIF; ENDIF; ENDPROCESS;a<=aout;b<=bout;ca<=cout;ENDrtl;秒计时模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYseccountIS PORT(en,res,clk:INSTD_LOGIC; ca:OUTSTD_LOGIC; a,b:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDseccount;ARCHITECTURErtlOFseccountISSIGNALaout,bout:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALcout:STD_LOGIC;BEGIN PROCESS(en,clk,res) BEGIN IF(res='0')THEN aout<="0000"; bout<="0000"; cout<='0'; ELSIF(clk'eventandclk='1')THEN IF(en='1')THEN IF(bout>4)THEN IF(aout>8)THEN aout<="0000"; bout<="0000"; cout<='1'; ELSE aout<=aout+1; ENDIF; ELSE IF(aout=9)THEN aout<="0000"; bout<=bout+1; ELSE aout<=aout+1; cout<='0'; ENDIF; ENDIF; ENDIF; ENDIF; ENDPROCESS;a<=aout;b<=bout;ca<=cout;ENDrtl;分计时模块LIBRARYIEEE;USE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外租车辆月度使用记录单
- 泰山版(新教材)五年级下册信息科技第三单元教学设计
- 消防设施及器材台账
- 石材护理抛光未来发展趋势
- 2026年四川省甘孜藏族自治州高三压轴卷语文试卷含解析
- 26年老年方案知情同意步骤课件
- 26年银发用电安全问题解决方案课件
- 【2026年】(自然科学专技类C类)事业单位考试综合应用能力山西省复习要点精析
- 【浙江省温州市事业单位考试职业能力倾向测验(自然科学专技类C类)梳理难点解析】
- 外汇经纪人职业规划
- 基础学护理冷热敷
- 道路交通事故现场勘查规范
- 大气污染防治专项资金项目申请报告撰写要点与2025年申报指南
- 2025年专利审查协作中心招聘考试面试常见问题解答
- 后勤管理内控知识培训课件
- 洛阳二外小升初数学试卷
- 2025-2030中国儿童营养早餐行业销售动态与竞争策略分析报告
- 结构稳定理论(第2版)课件 第7、8章 钢架的稳定、拱的平面内屈曲
- 2025年德勤秋招测试题及答案大全
- 转诊考核管理办法
- 体育类特长班宣传课件
评论
0/150
提交评论