Verilog HDL项目式教程 课件 项目3--5 结构化建模;行为建模;状态机建模.pptx
项目3结构化建模
任务3.1门级原语
任务3.2层次建模
项目3结构化建模
任务3.1门级原语
任务3.1门级原语
项目3结构化建模
项目3结构化建模
简单的逻辑电路可以使用逻辑门来设计实现。
基本的逻辑门分为两类:与/或门类、缓冲/非门类。
(1)与/或门类。
与/或门类包括与门(and)、或门(or)、与非门(nand)、或非门(nor)、异或门(xor)、同或门
(xnor)。与/或门类都具有一个标量输出端和多个标量输入端,门的端口列表中的第一个端口必定
是输出端口,其他均为输入端口。当任意一个输入端口的值发生变化时,输出端口的值立即重新计算。
例如:
wireOUT,IN1,IN2,IN3;
andand2(OUT,IN1,IN2);//基本门的实例引用
nandnand3(OUT,IN1,IN2,IN3);/输入端超过两个,三输入与非门
and(OUT,IN1,IN2,IN3);//合法的门实例引用,不给实例命名
项目3结构化建模
(2)缓冲/非门类。
缓冲/非门类包括缓冲器(buf)、非门(not)、带控制端的缓冲器/非门(bufif1、bufif0、notif1、notifO)。缓
冲/非门类具有一个标量输入端和多个标量输出端,门的端口列表中的最后一个端口必定是输入端口,其他均为输出端口。
例如:
wireOUT1,OUT2,OUT3,IN,ctrl;
bufb1(OUT1,IN);
notn1(OUT1,IN);
bufb2(OUT1,OUT2,OUT3,IN);
not(OUT1,OUT2,IN);
bufifl(OUT1,IN,ctrl);
notif0(OUT1,IN,ctrl);
//基本门的实例引用
//基本门的实例引用
//输出端超过两个,三输出缓冲门
//合法的门实例引用,不给实例命名//ctrl为1时,OUT1=IN
//ctrl为01时,OUT1=~IN
项目3结构化建模
【例3-1】利用双输入端的nand门,编写自己的双输
入端的与门(my_and)、或门(my_or)、非门(my_not)、异或门(my_xor)。
上述电路设计涉及的知识点有门级原语例化和多输出
处理。
下面对这些知识点进行说明。
modulemy_gate(a,b,y);
inputa,b;
output[3:0]y;
//与门用两个nand门实现wirenandab;
nand(nandab,a,b),
(y[0].nandabnandab);//或门用三个nand门实现wirenandaa,nandbb;
nand(nandaa,a,a),
(nandbb,b,b),
(y[1].nandaa,nandbb);/非门用一个nand门实现nand(y[2],a,a);
1异或门用四个nand门实现wireandab,c,d;
nand(andab,a,b),
(c,andab,a),
(d,andab,b),
(y[3],c,d);
endmodule
项目3结构化建模
(1)门级原语例化。
在门级原语实例引用的时候,可以不指定具体的实例名,这一点给需要实例引用几百个甚至更多
门的模块提供了方便。但对于初学者,建议在调用门级原语时给出实例名。在以上示例中,调用门级原语时均没有给出实例名。
在实际应用中,与非门和或非门更为普遍,这是因为由这两种门生成其他逻辑门容易实现。本例
给出了使用与非门来设计其他基本逻辑门的方法。
(2)多输出处理。
例3-1中有4个输出y[0]~y[3],分别对应着与门、或门、非门、异或门。这4个输出均是独立的,
在代码中分别进行了单独处理。在实践中,建议针对每个输出单独进行分析设计,这样做对于正确地实现电路逻辑是非常有效的。
例3-1的测试代码如例3-2所示。
图3-1门电路仿真波形
根据图3-1可以看出,y对应的四路输出均实现了相应门电路的功能,设计正确。
逻辑门是最基本的电路单元,任何复杂的数字逻辑电路均可由逻辑门实现。但复杂电路的设计如果从逻辑门开始搭建,显然是不现实的,这时必须采用其他建模方式,层次建模就是一种有效的方法。
项目3结构化建模
【例3-2】门电路测试代码。
modulemy_gate_tb;
regaa
wire[3:0]yx
my_gateU