第五章 组合逻辑电路的Verilog HDL实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章组合逻辑电路的Verilog HDL实现5.10.1 逻辑电路的Verilog HDL描述方式
Verilog HDL描述逻辑电路时常用3种描述方式,分别为:行为型描述、数据流型描述和结构型描述。
行为型描述只描述行为特征,不涉及逻辑电路的实现,是一种高级语言描述方式,使用例如always语句或initial 语句块中的过程赋值语句;
数据流型描述指通过assign连续赋值实现组合逻辑功能的描述方式;
结构型描述指描述实体连接的结构方式,所谓实体一般指Verilog语言已定义的基元,包括门原语、用户自定义原语(UDP)和其他模块(module)。
行为型描述语句更简练,不能被综合;结构型描述语句通常容易被综合,但语句显得复杂。在实际开发中往往多种描述方法混合使用。
5.10.2 2选1数据选择器的Verilog HDL实现
2选1数据选择器可以有多种描述方式,通过4个实例和3种描述方式对例子中出现的语法现象进行解释。
5.10.12选1数据选择器的数据流型描述方式;
5.10.22选1数据选择器的数据流型描述方式;
5.10.32选1数据选择器的行为型描述方式;
5.10.42选1数据选择器的结构型描述方式;
5.10.2.1 2选1数据选择器实例1
//例5.10.1
module Mux21(a,b,s,y);//----------------1
input a,b;
input s;
output y;
assign y=(s==0)?a:b;//----------------2
endmodule//----------------3
10.2.1 2选1数据选择器实例1
1. Verilog语言描述
//例5.10.1
module Mux21(a,b,s,y);//----------------1
input a,b;
input s;
output y;
assign y=(s==0)?a:b;//----------------2
endmodule//----------------3
2. 程序说明
(1)注释行
(2)模块定义语句module和endmodule
所有的程序都置于模块(module)框架结构内。模块是Verilog最基本的构成单元。一个模块可以是一个元件或者一个设计单元。
a b
s
y mux 21
module <模块名>(端口列表)
<申明><功能描述>
endmodule
模块名是该模块的唯一标识符。端口列表列举了该模块与外部电路连接的所有端口,包括输入、输出及双向端口。
该模块共包括四个端口:输入端口a ,b ,s 和输出端口y 。它定义的是二选一数据选择器。
图5.10.1二选一数据选择器模块
(3)连续赋值语句assign
“assign y=(s==0)?a:b;”为一条连续赋值语句。连续赋值语句assign能够给网表变量赋值。只要等号右边的表达式值发生变化,这种赋值行为就会立刻发生。连续赋值语句能模拟组合逻辑电路。
(4)条件操作符“?”
s==0?a:b为一条件表达式。式中条件操作符“?”为三目操作符,由两个操作符隔离三个操作数构成,语法格式如下:
表达式1?表达式2:表达式3
执行操作时,首先会计算表达式1的值,如果表达式1的值为1,那么将计算表达式2的值,做为条件表达式的最后结果;如果表达式1的值为0,则计算表达式3的值,并做为条件表达式最后的结果。
(5)连续赋值语句assign
等式运算符程序行2中表达式s==0为等式运算符,当“==”两边相等时,结果为1,否则为0。“!=”为不等于运算符。
因此例5.10.1中程序行2的功能为使用assign给wire型变量y赋值,当s为0时,y状态和a相同,否则和b相同,实现了2选1数据选择器功能。
仿真结果
01
y~0
a
b s y
5.10.2.2 2选1数据选择器实例2
1. Verilog语言描述
//例5.10.2
module Mux21 (a,b,s,y);
input a,b;
input s;
output y; //--------------1
wire d,e;//--------------2
assign d = a & (~s); //--------------3
assign e = b & s;
assign y = d | e;
endmodule
2. 程序说明
(1)连线类型wire
程序中出现的中间变量d和e定义为wire类型,表示内部结点或连线。程序行1输出端口y的数据类型默认为wire类型。网表类型可通过连续赋值语句(assign语句)或逻辑门驱动,并需要驱动源持续驱动。如果一个网表没有和任何驱动源连接,其值为高阻状态。
(2)位运算符
按位取反(~)、按位与(&)和按位或(|),按位异或(^)、按位同或(^~,异或非)。参与运算两个数位数不同时,采用右对齐。
&01x z 00000 101x x x0x x x z0x x x |01x z 001x x 11111 x x1x x z x1x x
^01x z 001x x 110x x x x x x x z x x x x ^~01x z
010x x
101x x
x x x x x
z x x x x
~
01
10
x x
z x