1.1门级描述和数据流描述
这两种描述的时候,使⽤默认的wire即可。 这两种描述⽅式,本质上都是直接使⽤逻辑门门级描述是显式地使⽤了门级原语数据流描述其实是隐式地使⽤门级原语,因为他是直接描述数据在寄存器直接的流动关系,本质上,还是在阐述逻辑门的使⽤。
门级描述与数据流描述,就好⽐结绳记事和使⽤符号记事的区别,⽤⼀连串的符号标志,代替了绳⼦,减少了许多⿇烦。
门级描述是以门级原语为基⽯的描述⽅式,必须使⽤线⽹类型
数据流描述是以连续赋值语句为基⽯的描述⽅式,其左值必须是线⽹类型,右值⽆要求。
以下是四选⼀数据选择器的端⼝声明,关注output out语句
module choose_4to1(
input d0,d1,d2,d3,
input add1,add0,output out // 注意输出端⼝的设定
);
endmodule
你需要记住Verilog描述形式
需要记住,门级描述的输出和数据流描述的连续赋值语句的左值,必须是线⽹类型,所以必须使⽤默认的输出端⼝。
1.2 行为描述
⾏为级描述,输出端⼝类型应该使⽤output reg OUT,使⽤reg类型。
因为过程赋值语句的左值必须是寄存器类型
ANSI C风格的描述如下
@资料库峯2000
input d0,d1,d2,d3,
input add1,add0,
output reg out // 注意输出端⼝的设定
);
endmodule
你也可以将输出端⼝初始化output reg out = 0
另外⼀种端⼝风格,但是不推荐
module choose_4to1(d0,d1,d2,d3,add1,add0,out);
input d0,d1,d2,d3;
input add1,add0;
// 以下两条语句才能将out声明为reg类型的输出端⼝
output out;
reg out;
endmodule
2.逻辑功能的仿真与测试
下面以ModelSim软件为例进行说明。
在对一个设计块进行仿真时,需要准备一个测试模块。由于测试模块的主要任务是给设计块提供激励信号,所以也称激励块。
激励块代码如下:
最终的仿真输出波形如下: