第3章 逻辑电路功能描述方法课件_第1页
第3章 逻辑电路功能描述方法课件_第2页
第3章 逻辑电路功能描述方法课件_第3页
第3章 逻辑电路功能描述方法课件_第4页
第3章 逻辑电路功能描述方法课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、 主要内容主要内容n在Verilog程序中可通过如下方式描述电路的结构n 调用Verilog内置门元件(门级结构描述)n 调用开关级元件(晶体管级结构描述)n 用户自定义元件UDP(也在门级)Verilog的内置门元件 n调用门元件的格式为:n门元件名字 ()n:可以省略n其中普通门的端口列表按下面的顺序列出:n(输出,输入1,输入2,输入3);n比如:nand a1(out,in1,in2,in3);/三输入与门n对于三态门,则按如下顺序列出输入输出端口:n(输出,输入,使能控制端);n比如:nbufif1 mytri1(out,in,enable);/高电平使能的三态门n对于buf和not

2、两种元件的调用,需注意的是:它们允许有多个输出,但只能有一个输入一个输入。比如:n not N1(out1,out2,in); n/1个输入in,2个输出out1,out2n buf B1(out1,out2,out3,in); n /1个输入in,3个输出out1,out2,out3用基本门实现的用基本门实现的4选选1 MUX原理图原理图 401310210101inssinssinssinssoutnmodule mux4_1a(out,in1,in2,in3,in4,s0,s1);ninput in1,in2,in3,in4,s0,s1; output out;nwire s0_n,s1

3、_n,w,x,y,z;/中间变量定义可以省略中间变量定义可以省略nnot (s0_n,s0),(s1_n,s1);nand (w,in1,s0_n,s1_n),(x,in2,s0_n,s1),n (y,in3,s0,s1_n),(z,in4,s0,s1);nor (out,w,x,y,z);nendmodulen【例【例3.1】 调用门元件实现的调用门元件实现的4选选1 MUX这种结构描述方法缺点是必须了解逻辑电路的内部结构这种结构描述方法缺点是必须了解逻辑电路的内部结构关系,它犹如电路图设计,需将所用到的逻辑函数通过实例关系,它犹如电路图设计,需将所用到的逻辑函数通过实例化门元件调用实现逻辑

4、功能描述,是较为低级的电路功能描化门元件调用实现逻辑功能描述,是较为低级的电路功能描述方式。述方式。三态缓冲器模型:采用调用内部实例化调用实现自建三态缓冲器模型:采用数据流描述建立三态缓冲器nMOS开关共有以下6种类型ncmos pmos nmos rcmos rpmos rnmosn这6种类型的门可用来给单向开关建模,也就是说,通过设置控制输入的值(1/0)可以接通或者关闭从输入流向输出的数据流。单向控制开关n语法格式 :ngate_type instance_name(outputA,inputB,controlC)n如rnmos u2rnmos(outputA, inputB, cont

5、rolC) npmos 9pmos(iol_bus,read_data,gate_ctrl)inputBoutputAcontrolCread_dataiol_busgate_ctrlnmos switchpmos switch注意:(r)cmos具有一个数据输入、一个数据输出和两个控制输入。相当以上两种控制的组合。n双向控制开关ntran rtuan tranif0 rtranif0 tranif1 rtranif1这些开关是双向的,也就是说,数据可以双向流动,并且当数据通过开关传播时没有延时,后4个开关能够通过设置合适的控制信号而关闭,但前2个开关不能被关闭。前2种格式类型:(r)tran

6、instance_name(signalA,signalB)gate_typeinstance_name(signalA,signalB,controlC)后4种格式类型:字头带r的开关类型,信号流过时,信号强度会出现衰减。n数据流描述方式主要使用持续赋值数据流描述方式主要使用持续赋值语句对输入与输出数据关系进行描述,语句对输入与输出数据关系进行描述,多用于多用于描述组合逻辑电路描述组合逻辑电路。n其格式为:其格式为:nassign LHS_net=RHS_expression;n右边表达式中的操作数无论何时发右边表达式中的操作数无论何时发生变化,都会引起表达式值的重新计算生变化,都会引起表达

7、式值的重新计算, 并将重新计算后的值赋予左边表达式的并将重新计算后的值赋予左边表达式的net型变量。型变量。 n用数据流描述模式设计电路与用传统的用数据流描述模式设计电路与用传统的逻辑方程设计电路很相似逻辑方程设计电路很相似。设计中只要有了。设计中只要有了布尔代数表达式就很容易将它用数据流方式布尔代数表达式就很容易将它用数据流方式表达出来。表达方法是用表达出来。表达方法是用Verilog中的逻辑运中的逻辑运算符置换布尔逻辑运算符即可。算符置换布尔逻辑运算符即可。n比如,如果逻辑表达式为:比如,如果逻辑表达式为: n则用数据流方式描述为:则用数据流方式描述为:assign F=(a&b)

8、|(c&d)。cdabFnmodule mux4_1c(out,in1,in2,in3,in4,s0,s1);ninput in1,in2,in3,in4,s0,s1; noutput out;n/数据流描述时所用的变量类型一般都是线型(数据流描述时所用的变量类型一般都是线型(wire)nassign out=(in1 & s0 & s1)|(in2 & s0 & s1)|n(in3& s0 & s1)|(in4 & s0 & s1);nendmodulen【例例3.2】 数据流描述的数据流描述的4选选1 MUX40131

9、0210101inssinssinssinssout逻辑表达式:逻辑表达式:n 就是对设计实体的数学模型的描述,就是对设计实体的数学模型的描述,其抽象程度远高于结构描述方式。行为其抽象程度远高于结构描述方式。行为描述类似于高级编程语言,描述类似于高级编程语言,当描述一个当描述一个设计实体的行为时,无需知道具体电路设计实体的行为时,无需知道具体电路的结构,只需要描述清楚输入与输出信的结构,只需要描述清楚输入与输出信号的行为,而不需要花费更多的精力关号的行为,而不需要花费更多的精力关注设计功能的门级实现。注设计功能的门级实现。 module mux4_1b(out,in1,in2,in3,in4,

10、s0,s1);input in1,in2,in3,in4,s0,s1; output reg out;always(*) /使用通配符使用通配符case(s0,s1)2b00:out=in1;2b01:out=in2;2b10:out=in3;2b11:out=in4;default:out=2bx;endcaseendmodule【例例3.3】 用用case语句描述的语句描述的4选选1 MUXn用行为描述模式设计电路,可以降低设用行为描述模式设计电路,可以降低设计难度。计难度。行为描述只需描述输入与输出之间的行为描述只需描述输入与输出之间的关系,不需要包含关系,不需要包含任何结构方面的信息任

11、何结构方面的信息。n设计者只需写出源程序,而挑选电路方设计者只需写出源程序,而挑选电路方案的工作由案的工作由EDA软件自动完成。软件自动完成。n当电路的规模较大或者需要描述复杂的当电路的规模较大或者需要描述复杂的逻辑关系时,应首先考虑用行为描述方式设计逻辑关系时,应首先考虑用行为描述方式设计电路,如果设计的结果不能满足资源占有率的电路,如果设计的结果不能满足资源占有率的要求,则应改变要求,则应改变其他描述方式其他描述方式。n对设计者而言,采用的描述级别对设计者而言,采用的描述级别越高,设计越容易;对综合器而言,行越高,设计越容易;对综合器而言,行为级的描述为综合器的优化提供了更大为级的描述为综

12、合器的优化提供了更大的空间,较之门级结构描述更能发挥综的空间,较之门级结构描述更能发挥综合器的性能,所以在电路设计中,合器的性能,所以在电路设计中,除非除非一些关键路径的设计采用门级结构描述一些关键路径的设计采用门级结构描述外,一般更多地采用行为建模描述方式。外,一般更多地采用行为建模描述方式。 下面是三种硬件描述方法来实现一位全加器的下面是三种硬件描述方法来实现一位全加器的Verilog的源程序:的源程序:nmodule full_add1(a, b, cin, sum, cout);ninput a, b, cin;noutput sum, cout;nwire s1,m1, m2, m3

13、;nand (m1, a, b),n (m2, b, cin),n (m3, a, cin);nxor (s1, a, b),n (sum, s1, cin);nor (cout, m1, m2, m3);nendmoduleinbcin)(acabcoutbacinabcoutcinbasum或nmodule full_add2(a,b,cin,sum,cout);ninput a, b, cin;noutput sum, cout;nassign sum = a b cin;nassign cout = (a & b ) | (b & cin ) | (cin &

14、a );n/或仅使用下面一条语句替代上面两条或仅使用下面一条语句替代上面两条n/assign cout,sum=a+b+cinnendmodule module full_add3(a,b,cin,sum,cout);ninput a,b,cin;noutput reg sum,cout;/必须定义为寄存器型变量必须定义为寄存器型变量nalways * n/或写为或写为always (a ,b , cin)nbegin n cout,sum=a+b+cin; nendnendmodule像这种组合电路一般不建议采用行为描述方法,因为过程被像这种组合电路一般不建议采用行为描述方法,因为过程被赋值

15、的变量必须定义为寄存器型,而且敏感列表必须将所有赋值的变量必须定义为寄存器型,而且敏感列表必须将所有输入变量列出。最好采用数据流描述。输入变量列出。最好采用数据流描述。下面是混合设计方式的 1 位全加器实例。module F A _ M i x (A, B, Cin, Sum, Cout) ;input A,B, Cin ;output Sum, Cout;reg Cout;reg T1, T2, T3;wire S1;xor X1( S1, A, B ); /门实例语句。always ( A , B , Cin ) / always 语句。begin T1 = A & Cin;T2

16、= B & Cin;T3 = A & B;Cout = ( T1| T2) | T3;endassign Sum = S1 Cin; / 连续赋值语句。endmodule模块中采用三种描述方法综合进行电路设计,而这三种语句在模块中是并行执行的。1、原理图输入方式、原理图输入方式 是一种最直接的描述方式,在可编程芯片发展的早是一种最直接的描述方式,在可编程芯片发展的早期应用比较广泛,它将所需的器件从元件库中调出来,期应用比较广泛,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率画出原理图。这种方法虽然直观并易于仿真,但效率很低,且不易维护,不利于模块

17、构造和重用。更主要很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。都需要作一定的改动。2、HDL输入方式输入方式分为普通分为普通 HDL (结构和数据流)和行为描述方法:(结构和数据流)和行为描述方法: 普通普通 HDL (结构和数据流)(结构和数据流) :支持逻辑方程、真值:支持逻辑方程、真值表和状态机等表达方式,主要用于简单的小型设计。表和状态机等表达方式,主要用于简单的小型设计。 行为行为 HDL:在中大型工程中,主要使用行为:在中大型工程中,主要使用行为 HDL,其主流语言是其

18、主流语言是 Verilog HDL 和和 VHDL。 也可以用也可以用 HDL 为主,原理图为辅的混合设计方式,为主,原理图为辅的混合设计方式,以发挥两者的各自特色。以发挥两者的各自特色。u如果数字系统比较复杂,可采用如果数字系统比较复杂,可采用“Top-down”的方法进行设计的方法进行设计。首先把系统分为几个模块,每个模块再分为几个子模块,以。首先把系统分为几个模块,每个模块再分为几个子模块,以此类推,直到易于实现为止。这种此类推,直到易于实现为止。这种“Top-down”的方法能够把的方法能够把复杂的设计分解为许多简单的逻辑来实现,同时也适合于多人复杂的设计分解为许多简单的逻辑来实现,同

19、时也适合于多人进行分工合作,如同用进行分工合作,如同用C语言编写大型软件一样。语言编写大型软件一样。Verilog语言语言能够很好地支持这种能够很好地支持这种“Top-down”的设计方法的设计方法。u多层次结构电路的描述既可以采用文本方式,也可以用图多层次结构电路的描述既可以采用文本方式,也可以用图形和文本混合设计的方式。用一个形和文本混合设计的方式。用一个1位全加器的设计为例来位全加器的设计为例来说明这两种设计方式。说明这两种设计方式。u前面所说的都是在一个模块中进行设计的方法,而前面所说的都是在一个模块中进行设计的方法,而层次电层次电路设计是针对系统设计提出的方法。路设计是针对系统设计提

20、出的方法。上级模块对下级模块调用采用实例化的语法格式为:上级模块对下级模块调用采用实例化的语法格式为:采用名称对应方式,其顺序可以任意。采用名称对应方式,其顺序可以任意。模块名模块名 实例名实例名 (.端口名(连接线端口名(连接线1), .端口名端口名2(连(连接线接线2),),););采用位置对应方式,可省略端口名,但其顺序必须是采用位置对应方式,可省略端口名,但其顺序必须是与原来定义的端口顺序一致。与原来定义的端口顺序一致。模块名模块名 实例名实例名 (连接线(连接线1), (连接线(连接线2),),););例如一位全加器设计可以通过两个半加器实例调用完成:例如一位全加器设计可以通过两个半

21、加器实例调用完成:一位全加器一位半加器U1一位半全加器U2实例化调用语句总是执行的,多个调用语句是并行执行。module half_add(a,b,so,co);ninput a,b; output so,co;nassign co=a&b; assign so=ab;nendmodule采用数据流描述设计建模,并通过编译、仿真得到正确的半加器电路,保存文件,用于顶层文件调用。采用采用混合建模混合建模:建立顶层全加器电路工程,采:建立顶层全加器电路工程,采用电路图输入法,建立电路图文件用电路图输入法,建立电路图文件full_add,其中其中的半加器符号采用将底层文件加入到顶层工程中的半

22、加器符号采用将底层文件加入到顶层工程中,并将该底层文件生成电路符号,并将该底层文件生成电路符号half_add。 根据根据全加器原理将电路组合如下:全加器原理将电路组合如下:full_addnmodule full_add(ain,bin,cin,sum,cout);ninput ain,bin,cin; output sum,cout;nwire d,e,f; /用于内部连接的节点信号nhalf_add u1(ain,bin,e,d); n/半加器模块调用,采用位置关联方式,n/或名称对应方式 n/hall_add u1(.a(ain),. b(bin), .so(e),.co(d)nhal

23、f_add u2(e,cin,sum,f); nor u3(cout,d,f); /或门调用nendmodule例例3.7 一位全加器顶层模块程序一位全加器顶层模块程序将顶层模块用硬件描述语言进行设计,在这里需要调用底层半加器模块来实现。n、按功能将整个系统分为各层功能子模块。、按功能将整个系统分为各层功能子模块。n、完成每个模块的输入、编译与仿真调试。、完成每个模块的输入、编译与仿真调试。n、建立总工程(顶层模块),将各个模块加入到总、建立总工程(顶层模块),将各个模块加入到总工程中,并对每个模块文件生成电路符号。总工程模工程中,并对每个模块文件生成电路符号。总工程模块可采用两种方法建立:块

24、可采用两种方法建立:n混合建模:混合建模:因为总工程已变成若干模块的组合,可因为总工程已变成若干模块的组合,可采用直观的电路图建模,将各个子模块用电路图连接采用直观的电路图建模,将各个子模块用电路图连接起来,再进行总工程编译、仿真与调试。起来,再进行总工程编译、仿真与调试。n编程建模:编程建模:可以对总工程进行可以对总工程进行Verilog编程,通过实编程,通过实例化调用连接各个模块。例化调用连接各个模块。混合建模得到的全加器工程建模图示混合建模得到的全加器工程建模图示2 2、四位加法器层次化设计、四位加法器层次化设计四位全加器一位全加器U1一位全加器U3一位全加器U2一位全加器U4nmodu

25、le add4_1(sum,cout,a,b,cin);noutput 3:0 sum;noutput cout;ninput 3:0 a,b;ninput cin;nfull_add U1(a0,b0,cin,sum0,cin1);nfull_add U2(a1,b1,cin1,sum1,cin2);nfull_add U3(a2,b2,cin2,sum2,cin3);nfull_add U4(a3,b3,cin3,sum3,cout);nendmodule当然可采用图形与文本编程混合设计当然可采用图形与文本编程混合设计。例例3.8 4位全加器顶层模块程序位全加器顶层模块程序4位二进制加法器

26、的位二进制加法器的Verilog描述描述 module add4_bin(cout,sum,ina,inb,cin);input cin; input3:0 ina,inb;output3:0 sum; output cout;assign cout,sum=ina+inb+cin;/*逻辑功能定义逻辑功能定义*/endmodule简便编程直接建模设计:数据流描述的简便编程直接建模设计:数据流描述的4位加法器设计位加法器设计累加器累加器设计设计8位全加器位全加器module add8(sum,cout,b,a,cin);output7:0 sum;output cout;input7:0 a,

27、b;input cin;assign cout,sum=a+b+cin;endmodule8位寄存器位寄存器module reg8(qout,in,clk,clear);output7:0 qout;input7:0 in;input clk,clear;reg7:0 qout;always (posedge clk or posedge clear)beginif(clear) qout=0; /异步清异步清0else qout=in;endendmodule图形与文本编程混合设计图形与文本编程混合设计module acc(accout,cout,accin,cin,clk,clear);output7:0 ac

温馨提示

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

最新文档

评论

0/150

提交评论