




已阅读5页,还剩111页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子科技大学,可编程ASIC,核心语法与基础电路设计学时分配:4,电子科技大学,进度,1.绪论。2.设计流程。3.模块化硬件与进程模型。4.信号传输模型。5.核心语法与基础电路设计。6.状态机设计。7.可靠设计与高速设计。8.可编程逻辑器件。9.数字信号处理的fpga实现。10.数字系统的RTL设计。,电子科技大学,VHDL中的对象,信号:全局量(进程之外定义),代表硬件连线,赋值有Delta延时变量:局部量(只在进程内可见),不代表硬件连线,只代表一个“值”或者“运算结果”,赋值为立即有效。常数:全局量。直接与高电平或者地电平相连接。具体可参考教材(第一版)中p.78的总结。,电子科技大学,设计中要注意,变量是VHDL为仿真而专门引入的概念,实际上因为它不具备硬件特性,因此在RTL设计中要尽量避免使用。而在使用VHDL高层建模或者仿真时,可以适当使用变量。,电子科技大学,数据类型,VHDL的对象所能使用的数据类型有:位,位矢量;整数,自然数,实数;布尔量;时间;字符,字符串;错误等级。,直接地描述硬件的结构,可以直接被硬件综合。,电子科技大学,数据类型,VHDL的对象所能使用的数据类型有:位,位矢量;整数,自然数,实数;布尔量;时间;字符,字符串;错误等级。,其可综合性根据综合器的综合能力不同而不同。,电子科技大学,数据类型,VHDL的对象所能使用的数据类型有:位,位矢量;整数,自然数,实数;布尔量;时间;字符,字符串;错误等级。,纯粹用于仿真,不可综合。,电子科技大学,整型的注意事项,使用整型时,应该指定数据的取值范围。因为这样可以指导综合器使用多少数据线来实现它如果不指定,则综合器会考虑最坏的情况,使用32bit来实现。,电子科技大学,信号的特性,本门课涉及的内容:驱动能力;取值状态;传输延时;功耗。,电子科技大学,驱动能力,电子科技大学,高阻态Z与总线复用,错误电路:在VHDL中,这种情况叫做多驱动。思考:会造成什么后果?,电子科技大学,高阻态Z与总线复用,一般情况下,几路输出同时驱动一路负载时,只允许一路有逻辑电平1或0输出,其他路必须输出高阻z.思考:哪种电路可以实现线与?,电子科技大学,因此对于STD_LOGIC型,其取值有:“U”初始值“X”不定“0”0“1”1“Z”高阻“W”弱信号不定“L”弱信号0“H”弱信号1“-”不可能情况,电子科技大学,实际信号传输延时的硬件机制,由晶体管的开关时间、晶体管特性电阻和特性电容、线路分布电阻和分布电容引起。具体内容可以参考数字逻辑设计的教材。,电子科技大学,实际信号传输延时的VHDL描述,分两种:传输延时与惯性延时。传输延时:b=transportaafter20ns;惯性延时:b=aafter20ns;,电子科技大学,传输延时,b=TRANSPORTaAFTER20ns;,电子科技大学,惯性延时,b=aAFTER20ns;,电子科技大学,功耗,与分布电容、逻辑电平门限、工作速率等决定。以后将具体讲述这部分的内容。,电子科技大学,进程与硬件的对应,u1,u3,u2,a,b,c,e,f,g,VHDL解决方案:一个硬件模块对应一个软件进程。,U1:process(a,b)U2:process(c)U3:process(e,f),电子科技大学,进程的调度算法及信号赋值,进程:并发执行。具体算法详见板书。也可以参考课件“sry_模块化硬件与进程模型.ppt”与“sry_信号传输模型.ppt”。以下课件只讲述一些比较特殊的情况。,电子科技大学,信号与变量的区别,电子科技大学,进程内的信号赋值:顺序执行,并行赋值,例1:ProcessBegina=1;a=0;Endprocess;,这两个赋值实际上是“并行”(也可以说“并发”)的。但是由于process内语句运行的顺序性,后者将比前者“晚”到达一个很微小的时间。,结果:a=0。,电子科技大学,进程内的信号赋值:顺序执行,并行赋值,例1:ProcessBegina=1;a=0;Endprocess;,在实际设计中,应该尽量避免出现这种对信号多次赋值覆盖;这意味着,尽量不要使用书上的在process内部进行信号初始化的方法(后面将详细讲述)。,结果:a=0。,电子科技大学,进程内的信号赋值:顺序执行,并行赋值,例2:Process(a,b,c,d)Begind=a;x=cXORd;d=b;y=cXORd;Endprocess;,结果:x=bXORc;y=bXORc;,电子科技大学,VHDL中的变量,与c语言的变量一样,赋值是立即有效的。Process(a,b,c)注意d为变量(用variable声明)Begind:=a;x=cXORd;d:=b;y=cXORd;Endprcoess;,结果:x=aXORc;y=bXORc;,电子科技大学,程序结构,Library;-库,包等的说明Entity;-实体说明Architecture;-结构体描述,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu1isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu1;Architecturebehvofu1isBeginc=aandb;Endbehv;,u1,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu1isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu1;Architecturebehvofu1isBeginc=aandb;Endbehv;,u1,表示使用ieee库。这是最常用的库说明,绝大多数的VHDL代码都使用这个库。,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu1isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu1;Architecturebehvofu1isBeginc“0000”)成立;对于后者,有(“1001”“0000”)成立;,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu_and2isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu_and2;Architecturebehvofu_and2isBeginc=aandb;Endbehv;,u1,声明元件的实体。语法:Entityis.End;,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu_and2isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu_and2;Architecturebehvofu_and2isBeginc=aandb;Endbehv;,u1,元件的外部端口。语法:端口名:信号方向数据类型;,注意最后一个端口说明语句不要加分号!,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu_and2isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu_and2;Architecturebehvofu_and2isBeginc=aandb;Endbehv;,u1,元件的结构体说明。语法:ArchitectureofisBeginEnd;,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu_and2isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu_and2;Architecturebehvofu_and2isBeginc=aandb;Endbehv;,u1,结构体描述。绝大多数情况下由process构成;一条“光秃”的信号赋值实际上就是一个process,其敏感信号为右边所有信号。,电子科技大学,程序例子,a,b,c,Libraryieee;Useieee.std_logic_1164.all;Entityu_and2isPort(a:instd_logic;b:instd_logic;c:outstd_logic);Endu_and2;Architecturebehvofu_and2isBeginc=aandb;Endbehv;,u1,电子科技大学,关于信号方向,IN,IN,IN,OUT,BUFFER,INOUT,OUT,电子科技大学,VHDL常用数据类型,Std_logic,std_logic_vector;Integer。,电子科技大学,常用的语法1:if条件判断,IF条件THEN顺序处理语句;ELSE顺序处理语句;ENDIF;,注意,if语句只能用在process,函数,子过程之中!,电子科技大学,If的例子,Process(a)Beginif(a=1)thenbb2b3,即当b0、b1同为0时,输出编码为00。换言之,当b00时,其余3个输入任意值该编码器的输出均为”00“。因为CASE语句没有对输入为任意的表示法,故不能使用下面的语句:即:WHEN“XX01“=y=“01”是错误的。所以要正确描述输入之间的这种优先级关系就应选用IF语句。程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;,电子科技大学,ENTITYencoderISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);y:OUTSTD_LOGIC_VECTOR(1DOWNTO0);)ENDencoder;ARCHITECTURErtlOFencoderISBEGINPROCESS(input)BEGINIF(input(0)=0)theny=“00”:;ELSIF(input(1)=0)theny=“01”;ELSIF(input(2)=0)theny=“10”;ELSEydin2,c=dout);,din1,din2,dout,a,b,c,电子科技大学,其他内容,Vhdl的数据类型Vhdl的运算(逻辑运算,算术运算,关系运算,并置运算)Vhdl的信号类属性等等。,电子科技大学,基础电路设计,描述风格;基础组合电路设计;二选一电路,三八译码器,缓冲器,加法器。基础时序电路设计:寄存器计数器,电子科技大学,基础组合电路设计,电子科技大学,例1:二选一电路设计,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUX2to1ISPORT(S:INSTD_LOGIC;Zero:INSTD_LOGIC;One:INSTD_LOGIC;Y:OUTSTD_LOGIC);,电子科技大学,ARCHITECTUREbehaviorOFMUX2to1ISBeginProcess(S,Zero,One)Begin-下一页讲述EndprocessENDbehavior;,电子科技大学,方法1:直接逻辑运算,Process(S,Zero,One)BeginY=(notSandZero)or(SandOne);Endprocess;,电子科技大学,方法2:if语句,Process(S,Zero,One)Beginif(S=0)thenY=Zero;elseYYYYYYYYYYY=“01111111”;ENDCASE;ELSEY=“11111111”;ENDIF;ENDPROCESS;ENDbehavior;,注意不要漏掉此句,电子科技大学,例3三态门,三态门电路,电子科技大学,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYrei_gateISPORT(din,en:INSTD_LOGIC;dout:OUTSTD_LOGIC);ENDtri_gate;ARCHITECTUREtri_gateOFtri_gateISBEGINtri_gate1:PROCESS(din,en)BEGINIF(en=1)THENdout=din;ELSEdout=Z;ENDIF;ENDPROCESS;ENDtri_gate;,电子科技大学,例4:四位全加器设计,dina,dinb,dout,cin,cout,Dina和dinb为两路4bit的输入,cin为进位输入;Dout为4bit的输出,cout为进位输出。,4,4,4,电子科技大学,则描述为:Architecturebehavofu_FullAdderisSignalatemp,btemp,tempout:std_logic_vector(4downto0);BeginProcess(cin,dina,dinb,atemp,btemp,tempout).Endbehav;,电子科技大学,Process(cin,dina,dinb,atemp,btemp,tempout)Beginatemp=0,电子科技大学,代码评析,该代码用5bit半加运算来完成4bit全加,在代码上非常简洁。由综合器自己选择元件库中现成的加法部件来实现加法运算,设计者不必关心其内部电路细节。但是其弱点是,综合器会用5bit加法器来实现,容易造成资源消耗过大。,电子科技大学,改进方法,使用1bit全加器构建,FullAdder1b,电子科技大学,1bit全加器,Process(a,b,cin)Begind=axorbxorcin;cout=(aandcin)or(bandcin)or(aandb);Endprocess;,电子科技大学,4bit全加器,电子科技大学,代码实现,总框架:EntityFullAdder4bis.EndFullAdder4b;ArchitecturestructofFullAdder4bisSignaltemp1,temp2,temp3:std_logic;Begin-此处代码下一页说明.Endstruct;,Port(a:instd_logic_vector(3downto0);b:instd_logic_vector(3downto0);cin:instd_logic;d:outstd_logic_vector(3downto0);cout:outstd_logic;);,电子科技大学,代码实现,总框架:EntityFullAdder4bis.EndFullAdder4b;ArchitecturestructofFullAdder4bisSignaltemp1,temp2,temp3:std_logic_vector(3downto0);Begin-此处代码下一页说明.Endstruct;,电子科技大学,U0:FullAdder1bportmap(a(0),b(0),cin,d(0),temp1);U1:FullAdder1bportmap(a(1),b(1),temp1,d(0),temp2);U2:FullAdder1bportmap(a(2),b(2),temp2,d(0),temp3);U3:FullAdder1bportmap(a(3),b(3),temp3,d(0),cout);,电子科技大学,由上可见,硬件描述语言配合了完善的综合工具后,可以使得设计者从烦琐的电路细节中解放出来,专心于系统的功能架构;但是由于综合工具智能化程度的局限性,有时综合工具综合出来的电路并不一定是最优的,这就需要设计者在适当的时候在较低的层次上进行描述,指导综合工具综合出性能或面积优化的代码。,电子科技大学,对比两种加法器描述方法,前一种方法便于使用并行进位逻辑,而后一种方法是串行进位,所以前者速度一般要比后者快;但是在位宽比较大的时候,并行进位的资源消耗会快速上升。实验发现,4bit的并行加法器和串行加法器的资源消耗差不多,因此工程应用中,宽bit的加法器经常采用4bit的并行加法器级联而成。,电子科技大学,易犯错误,电子科技大学,实例分析,假设,要描述一个与门电路:有很多种描述方法。,电子科技大学,方法1:直接信号赋值,在结构体内,很直观地直接进行赋值:ArchitecturebehavofAnd2isBeginy=aandb;Endbehav;,电子科技大学,方法2:进程直接信号赋值,这种方法直接等效于方法1。注意要将a和b都加入敏感信号表。ArchitecturebehavofAnd2isBeginprocess(a,b)beginy=aandb;endprocess;Endbehav;,电子科技大学,方法3:进程if条件赋值,经过分析发现,实际上y大部分情况下为0,只有a和b都为1的时候,y才会输出1。所以描述如下:ArchitecturebehavofAnd2isBeginprocess(a,b)beginif(a=1andb=1)theny=1;endif;endprocess;Endbehav;,这个描述是错误的,为什么?,电子科技大学,方法4:进程if条件赋值,经过分析发现,a=1时,y会跟踪b的变化,即y=b。ArchitecturebehavofAnd2isBeginprocess(a,b)beginif(a=1)theny=b;endif;endprocess;Endbehav;,这个描述还是错误的,为什么?,电子科技大学,基础时序电路设计,电子科技大学,例1:基本的触发器,1、D触发器(DFF)电路设计例6-17:正边沿触发器的DFF设计(寄存器)其VHDL描述如下:,电子科技大学,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff_logicISPORT(d,clk:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff_logic;,电子科技大学,ARCHITECTUREexampleOFdff_logicISBEGINPROCESS(clk)BEGINIF(clkEVENTANDclk=1)THENq=d;ENDIF;ENDPROCESS;ENDexample;,电子科技大学,例2:把上例中的clkEVENT条件去掉并把d加到进程敏感表中。,就可得到一个电平敏感D触发器(即锁存器)PROCESS(clk,d)BEGINIF(clk=1)THENq=d;ENDIF;ENFPROCESS;,你突然回忆到了什么.,电子科技大学,在组合电路描述中注意补全所有条件,上述与门方法3的正确描述:process(a,b)beginif(a=1andb=1)theny=1;elsey=0;-!endif;endprocess;,电子科技大学,上述与门方法4的正确描述:process(a,b)beginif(a=1)theny=b;elsey=0;-!endif;endprocess;,电子科技大学,锁存和寄存的差别:,区别:锁存是电平起作用寄存是时钟有效沿起作用!在设计中,应该尽量避免使用锁存!因为锁存要占去大量的触发器资源,而且会对电路带来某种不稳定的隐患。在组合逻辑的组合进程中,条件语句描述时应该指定所有条件下所有输出的状态,以避免锁存。比如if/case语句的所有分支必须定义全部的输出才可能避免出现锁存。,电子科技大学,条件完整但仍然生成锁存器的描述,ArchitecturebehavofAnd2isBeginprocess(a,b)beginif(a=1)theny=b;elsey=y;-保持原值,导致综合器生成锁存器!endif;endprocess;Endbehav;,电子科技大学,时序电路设计中的复位/置位,异步复位:Process(clk,areset)Beginif(areset=1)thenq=0;elsif(clkeventandclk=1)thenq=d;endif;Endprocess;,异步条件判断在时钟沿判断语句之前。不管时钟沿是否到达,只要异步信号有效,则后面的q=0将被执行。,-注意异步复/置位信号要放在敏感信号表中,电子科技大学,时序电路设计中的复位/置位,同步复位:Process(clk)Beginif(clkeventandclk=1)thenif(reset=1)thenq=0;elseq=d;endif;endif;Endprocess;,同步条件判断在时钟沿判断语句之后,当reset有效时,不会立即进行复位,而是在时钟沿处复位。,电子科技大学,异步复位(左)和同步复位(右)波形,有利于整个系统各模块的同时复位/置位(初始化),电子科技大学,例3:带异步复位和异步置位的寄存器设计,PROCESS(clk,reset,preset)BEGINIF(reset=1)THENq=0;ELSIF(preset=1)THENq=1;-本例中,reset的优先级高于presetELSIF(rising_edge(clk)THENq=d;ENDIF;ENDPROCESS;,电子科技大学,例4:带时钟使能的寄存器设计,Process(clk)Beginif(clkeventandclk=1)thenif(en=1)thenq=d;endif;endif;Endprocess;,这里是一个条件不完整,但是不会生存锁存器的例子,电子科技大学,例5:八位带异步清除和时钟使能的寄存器,LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITYreg8bitISPORT(clk:INSTD_LOGIC;reset:INSTD_LOGIC;en:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(7DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDreg8bit;,电子科技大学,ARCHITECTUREbehaviorOFreg8bitISBeginprocess(clk,reset)beginif(reset=0)then-这里低电平有效dout0);elsif(clkeventandclk=1)thenif(en=1)then-时钟使能dout=din;endif;endif;endprocess;ENDbehavior;,电子科技大学,沿判断后的信号赋值都是寄存器赋值,Process(clk)Beginif(clkeventandclk=1)thensig1=din;sig2=sig1andsig;endif;Endprocess;,电子科技大学,对比沿判断之后的变量赋值,Process(clk)Variablevar:std_logic;Beginif(clkeventandclk=1)thenvar:=din;dout=varandsig;endif;Endprocess;,电子科技大学,但是,并不是时钟沿判断后的变量赋值都不会产生寄存器,Process(clk)Varialbevar:std_logic;Beginif(clkeventandclk=1)thenvar:=din;endif;dout=var;Endprocess;,电子科技大学,例子:二进制同步计数器,同步计数器就是指在时钟脉冲的作用下,组成计数器的各个触发器的状态同时发生变化的一类计数器。先来看一个比较简单的计数器:四位二进制计数器,它带有异步复位控制端、同步预置控制端、同步使能端和进位输出瑞。这种四位二进制计数器的电路框图如图所示。其中:输入端口R是异步复位控制端输入端口S是同步预置控制端输入端口EN是同步使能端输出瑞口CO是进位输出端,电子科技大学,四位二进制计数器的电路框图,电子科技大学,四位二进制计数器的功能表,电子科技大学,在功能表中,没有给出进位输出端口CO的功能描述,它的功能是:当四位二进制计数器计数为”1111”时,如果遇到时钟上升沿,它的输出为1。,电子科技大学,四位二进制计数器的VHDL描述,如图所示的四位二进制计数器的VHDL描述如下。源代码中的同步预置值是根据实际设计要求来定的,这里我们假定为”1010“,电子科技大学,libraryieee;useieee.stdic_1164all;useieeestd_logic_arithall;useieee.std_logic_unsigned.all;entitycounterisport(clk,areset,sset,enable:inStd_logic;cout:outstd_logi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通银行2025九江市秋招半结构化面试题库及参考答案
- 2025年3D打印技术的汽车零部件制造
- 2025年3D打印技术的材料科学
- 2025年3D打印的个性化器官移植
- 交通银行2025邯郸市秋招笔试创新题型专练及答案
- 2025行业技术发展趋势预测
- 邮储银行2025金融科技岗笔试题及答案河北地区
- 工商银行2025铜仁市数据分析师笔试题及答案
- 建设银行2025商洛市金融科技岗笔试题及答案
- 邮储银行2025三明市笔试行测高频题及答案
- TSG07-2019锅炉安装工艺+焊接专用工艺卡+施工记录表
- 物业收费员的培训
- 总医院医共体信息化建设项目公开文件招投标书范本
- 2024年世界职业院校技能大赛高职组“声乐、器乐表演组”赛项参考试题库(含答案)
- 设计版权授权合同范例
- 《吉林省生态环境保护行政处罚自由裁量权细化标准》
- 中国心力衰竭诊断和治疗指南2024解读(完整版)
- 硬件测试岗位招聘笔试题及解答(某大型集团公司)
- GB/T 44535-2024塑料试样线性尺寸的测定
- 儿童社区获得性肺炎管理指南(2024修订)
- 血液透析病情观察及护理
评论
0/150
提交评论