第3章 逻辑电路功能描述方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sum a b cin cout ab cin(a b) 或cout ab bcin acin
例3.5、数据流描述的1位全加器
module full_add2(a,b,cin,sum,cout); input a, b, cin; output sum, cout; assign sum = a ^ b ^ cin; assign cout = (a & b ) | (b & cin ) | (cin & a );
这种结构描述方法缺点是必须了解逻辑电路的内部结构 关系,它犹如电路图设计,需将所用到的逻辑函数通过实例 化门元件调用实现逻辑功能描述,是较为低级的电路功能描 述方式。
三态缓冲器模型描述
三态缓冲器模型:采用调用内部实例化调用实现
自建三态缓冲器模型:采用数据流描述建立三态缓冲器
⑵开关级元件( 晶体管级结构描述 )
行为描述方式特点
⑴用行为描述模式设计电路,可以降低设 计难度。行为描述只需描述输入与输出之间的 关系,不需要包含任何结构方面的信息。 ⑵设计者只需写出源程序,而挑选电路方 案的工作由EDA软件自动完成。 ⑶当电路的规模较大或者需要描述复杂的 逻辑关系时,应首先考虑用行为描述方式设计 电路,如果设计的结果不能满足资源占有率的 要求,则应改变其他描述方式。
行为描述方式特点
⑷对设计者而言,采用的描述级别 越高,设计越容易;对综合器而言,行 为级的描述为综合器的优化提供了更大 的空间,较之门级结构描述更能发挥综 合器的性能,所以在电路设计中,除非 一些关键路径的设计采用门级结构描述 外,一般更多地采用行为建模描述方式。
下面是三种硬件描述方法来实现一位全加器的Verilog 的源程序:
3.3层次电路功能描述方法
前面所说的都是在一个模块中进行设计的方法,而层次电 路设计是针对系统设计提出的方法。 如果数字系统比较复杂,可采用“Top-down”的方法进行设计 。首先把系统分为几个模块,每个模块再分为几个子模块,以 此类推,直到易于实现为止。这种“Top-down”的方法能够把复 杂的设计分解为许多简单的逻辑来实现,同时也适合于多人进 行分工合作,如同用 C 语言编写大型软件一样。 Verilog 语言能够 很好地支持这种“Top-down”的设计方法。 多层次结构电路的描述既可以采用文本方式,也可以用图 形和文本混合设计的方式。用一个1位全加器的设计为例来说 明这两种设计方式。
//或仅使用下面一条语句替代上面两条 //assign {cout,sum}=a+b+cin
endmodule
【例3.6】行为描述的1位全加器
module full_add3(a,b,cin,sum,cout); input a,b,cin; output reg sum,cout;//必须定义为寄存器型变量 always @* //或写为always @(a ,b , cin) begin {cout,sum}=a+b+cin; end endmodule
门元件的调用
对于buf和not两种元件的调用,需注意 的是:它们允许有多个输出,但只能有 一个输入。比如:
not N1(out1,out2,in); //1个输入in,2个输出out1,out2 buf B1(out1,out2,out3,in); //1个输入in,3个输出out1,out2,out3
2、 数据流描述
其格式为: assign LHS_net=RHS_expression;
右边表达式中的操作数无论何时发 生变化,都会引起表达式值的重新计算 , 并将重新计算后的值赋予左边表达式 的net型变量。
数据流建模描述
assign #time LHS_net=RHS_expression; #time表示信号由右端输入变化反映在左端输出的延时时间。
用数据流描述模式设计电路与用传统的逻辑 方程设计电路很相似。设计中只要有了布尔代数 表达式就很容易将它用数据流方式表达出来。表 达方法是用Verilog中的逻辑运算符置换布尔逻辑 运算符即可。 比如,如果逻辑表达式为: F ab cd 则用数据流方式描述为: assign F=(a&b)|(~(c&d))。
module mux4_1b(out,in1,in2,in3,in4,s0,s1); input in1,in2,in3,in4,s0,s1; output reg out; always@(*) //使用通配符 case({s0,s1}) 2'b00:out=in1; 2'b01:out=in2; 2'b10:out=in3; 2'b11:out=in4; default:out=2'bx; endcase endmodule
组合逻辑电路建模
ห้องสมุดไป่ตู้
【例3.2】 数据流描述的4选1 MUX
逻辑表达式: out s1s0in1 s0s1in2 s0s1 in3 s1s0in4
module mux4_1c(out,in1,in2,in3,in4,s0,s1); input in1,in2,in3,in4,s0,s1; output out; //数据流描述时所用的变量类型一般都是线型(wire) assign out=(in1 & ~s0 & ~s1)|(in2 & ~s0 & s1)| (in3& s0 & ~s1)|(in4 & s0 & s1); endmodule
①单向控制开关
MOS开关共有以下6种类型 cmos pmos nmos rcmos rpmos rnmos 这6种类型的门可用来给单向开关建模, 也就是说,通过设置控制输入的值(1/0) 可以接通或者关闭从输入流向输出的数 据流。
⑵开关级元件
语法格式 :
gate_type [instance_name](outputA,inputB,controlC)
像这种组合电路一般不建议采用行为描述方法,因为过程被 赋值的变量必须定义为寄存器型,而且敏感列表必须将所有 输入变量列出。最好采用数据流描述。
一位二进制全加器仿真结果
3.2、混合设计描述方式
下面是混合设计方式的 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 ) begin T1 = A & Cin; T2 = B & Cin; T3 = A & B; Cout = ( T1| T2) | T3; end // always 语句。
用基本门实现的4选1 MUX原理图
out s1s0in1 s0s1in2 s0s1 in3 s1s0in4
【例3.1】 调用门元件实现的4选1 MUX
module mux4_1a(out,in1,in2,in3,in4,s0,s1); input in1,in2,in3,in4,s0,s1; output out; wire s0_n,s1_n,w,x,y,z;//中间变量定义可以省略 not (s0_n,s0),(s1_n,s1); and (w,in1,s0_n,s1_n),(x,in2,s0_n,s1), (y,in3,s0,s1_n),(z,in4,s0,s1); or (out,w,x,y,z); endmodule
第3章 逻辑电路功能描述方法
主要内容
3.1 基本电路逻辑功能描述方法
3.2 混合电路描述 3.3 层次电路功能描述方法 3.4 任务与函数
3.1 基本电路逻辑功能描述方法
◆ 1、结构(Structural)描述
◆ 2、数据流(Data Flow)描述
◆ 3、行为(Behavioural)描述
1、 结构(Structural)描述
如rnmos u2rnmos(outputA, inputB, controlC)
pmos 9pmos(iol_bus,read_data,gate_ctrl)
inputB outputA read_data iol_bus
controlC
gate_ctrl
nmos switch pmos switch 注意:(r)cmos具有一个数据输入、一个数据输出和两个控制输 入。相当以上两种控制的组合。
⑵开关级元件
②双向控制开关
tran rtuan tranif0 rtranif0 tranif1 rtranif1
这些开关是双向的,也就是说,数据可以双向流动,并 且当数据通过开关传播时没有延时,后4个开关能够通 过设置合适的控制信号而关闭,但前2个开关不能被关 闭。 前2种格式类型: (r)tran[instance_name](signalA,signalB) 后4种格式类型: gate_type[instance_name](signalA,signalB,controlC) 字头带r的开关类型,信号流过时,信号强度会出现衰减。
在Verilog程序中可通过如下方式描述电路的 结构 ◆ 调用Verilog内置门元件(门级结构描述) ◆ 调用开关级元件(晶体管级结构描述) ◆ 用户自定义元件UDP(也在门级)
⑴Verilog的 内置门元件
门元件的调用
调用门元件的格式为: 门元件名字 <例化的门名字>(<端口列表>) <例化的门名字>:可以省略 其中普通门的端口列表按下面的顺序列出: (输出,输入1,输入2,输入3……); 比如: and a1(out,in1,in2,in3); //三输入与门 对于三态门,则按如下顺序列出输入输出端口: (输出,输入,使能控制端); 比如: bufif1 mytri1(out,in,enable); //高电平使能的 三态门
assign Sum = S1 ^ Cin; // 连续赋值语句。 endmodule
Verilog各种设计输入方式特点
1、原理图输入方式 是一种最直接的描述方式,在可编程芯片发展的早 期应用比较广泛,它将所需的器件从元件库中调出来, 画出原理图。这种方法虽然直观并易于仿真,但效率 很低,且不易维护,不利于模块构造和重用。更主要 的缺点是可移植性差,当芯片升级后,所有的原理图 都需要作一定的改动。 2、HDL输入方式 分为普通 HDL (结构和数据流)和行为描述方法: 普通 HDL (结构和数据流) :支持逻辑方程、真值 表和状态机等表达方式,主要用于简单的小型设计。 行为 HDL:在中大型工程中,主要使用行为 HDL, 其主流语言是 Verilog HDL 和 VHDL。 也可以用 HDL 为主,原理图为辅的混合设计方式, 以发挥两者的各自特色。
四选一逻辑控制电路仿真结果
3、 行为描述
就是对设计实体的数学模型的描述, 其抽象程度远高于结构描述方式。行为 描述类似于高级编程语言,当描述一个 设计实体的行为时,无需知道具体电路 的结构,只需要描述清楚输入与输出信 号的行为,而不需要花费更多的精力关 注设计功能的门级实现。
【例3.3】 用case语句描述的4选1 MUX
【例3.4】 调用门元件实现的1位全加器
module full_add1(a, b, cin, sum, cout); input a, b, cin; output sum, cout; wire s1,m1, m2, m3; and (m1, a, b), (m2, b, cin), (m3, a, cin); xor (s1, a, b), (sum, s1, cin); or (cout, m1, m2, m3); endmodule