4 组合逻辑电路的Verilog HDL描述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.6 用VerilogHDL描述组合逻辑电路
4.6.1 组合逻辑电路的门级建模 4.6.2 组合逻辑电路的数据流建模
4.6.3 组合逻辑电路的行为级建模
4.6 用VerilogHDL描述组合逻辑电路
用VerilogHDL描述组合逻辑电路有三种不同抽象级别: 组合逻辑电路的门级描述、组合逻辑电路的数据流描述、 组合逻辑电路的行为级描述。 VerilogHDL描述的电路就 是该电路的VerilogHDL模型。
E
1
& &
Y0
Y1 Y2
Y3
A0 A1
1 & 1 &
//Dataflow description of a 2-to-4-line decoder, module decoder_df (A1,A0,E,Y); input A1,A0,E; output [3:0] Y; assign Y[0] = ~(~A1 & ~A0 & ~E); assign Y[1] = ~(~A1 & A0 & ~E); assign Y[2] = ~(A1 & ~A0 & ~E); assign Y[3] = ~(A1 & A0 & ~E); endmodule
n-output buffer
not
bufif0
n-output inverte
tri-state buffer Io enable
bufif1 tri-state buffer hi enable
notif0
notif1
tri-state inverte Io enable
xnor
tri-state inverte hi enable
多输入端的异或门 多输出端的缓冲器 控制信号高电平有效的三态缓冲 器 控制信号低电平有效的三态缓冲 器
bufif1
bufif0
notif1
notif0
end
Verilog 基本门级元件
and nand or nor xor n-input AND gate n-input NAND gate n-input OR gate n-input NOR gate n-input exclusive OR gate n-input exclusive NOR gate buf
x
x
1
1
x
x
x
x
x
x
2 z
X- 不确定状态
Z- 高阻态
or真值表
or
0 输 入 2 1 输入1
xor真值表
Z
X 1 输 入
0
0 1
1
1 1
X
X 1
xor 0 1
X Z
输入1
0
0 1 X X
1
1 0 X X
X X X X X
Z X X X X
X
Z
X
X
1
1
X
X
X
X
2
2、多输出门 允许有多个输出,但只有一个输入。
给reg类型的变量赋值。
4.6.1 组合逻辑电路的门级建模
门级建模:将逻辑电路图用HDL规定的文本语言表示出来。
三态门
元件符号 and or xor buf 功能说明 多输入端的与门 多输入端的或门
基本门级元件模型 多输出门
元件符号 nand nor xnor not 功能说明
多输入门
多输入端的与非门 多输入端的或非门 多输入端的异或非门 多输出端的反相器 控制信号高电平有效的 三态反相器 控制信号低电平有效的 三态反相器
FA1 (S[1],C1,A[1],B[1],C0), FA2 (S[2],C2,A[2],B[2],C1), FA3 (S[3],C3,A[3],B[3],C2);
endmodule
4.6.2 组合逻辑电路的数据流建模
数据流建模能在较高的抽象级别描述电路的
逻辑功能。通过逻辑综合软件,能够自动地 将数据流描述转换成为门级电路。
例2 用Verilog的门级元件进行 描述由三态门构成的2选1数据 选择器 。
B
L
A
SEL
//Gate-level description of a 2-to-1-line multiplexer module _2to1muxtri (A,B,SEL,L); input A,B,SEL; output L; tri L; bufif1 (L,B,SEL); bufif0 (L,A,SEL); endmodule
A|B= 1111
A^B= 0101
A~^B= 1010
缩位运算
|A=1 ~|B=0
^A=0 ^B=0
~^A=1 ~^B=1
位拼接运算符
作用是将两个或多个信号的某些位拼接起来成为一个新的操作数, 进行运算操作。 设A=1’b1,B=2’b10,C=2’b00 则{B,C}=4’b1000 {A,B[1],C[0]}=3’b110 {A,B,C,3’b101}=8’b11000101。 对同一个操作数的重复拼接还可以双重大括号构成的运算符{{}} 例如{4{A}}=4’b1111,{2{A},2{B},C}=8’b11101000。
=1 &
S A B C=AB
//Gate-level hierarchical description of 4-bit adder // Description of half adder module halfadder (S,C,A,B); input A,B; output S,C; //Instantiate primitive gates xor (S,A,B); and (C,A,B); endmodule
A B Ci
//Description of 1-bit full adder module fulladder (S,CO,A,B,CI); input A,B,CI; output S,CO; wire S1,D1,D2; //内部节点信号 //Instantiate the halfadder halfadder HA1 (S1,D1,A,B); halfadder HA2 (S,D2,S1,CI); or g1(CO,D2,D1); endmodule AS1B A B Ci
Verilog HDL的运算符
类型 符号 + * / % ~ & | ^ ^~ 或 ~^ ! && || 功能说明 二进制加 二进制减 二进制乘 二进制除 求模 按位取反 按位与 按位或 按位异或 按位同或 逻辑非 逻辑与 逻辑或 类型 符号 > < >= <= == != & ~& | ~| ^ ^~ 或 ~^ >> << 功能说明 大于 小于 大于或等于 小于或等于 等于 不等于 缩位与 缩位与非 缩位或 缩位或非 缩位异或 缩位同或 右移 左移
notif1 控制输入 0 1 x z 0 z 1 1/z 1/z 数 1 z 0 0/z 0/z 据 x x 输 x z x x x 入 z z x
//Gate-level description of a 2to-4-line decoder 4、设计举例 module _2to4decoder 试用Verilog语言的门级 (A1,A0,E,Y); 元件描述2线-4线译码器. input A,B,E; 说明 output [3:0]Y; 部分 wire A1not,A0not,Enot; 1 E & Y0 not G1 (A1not,A1), G2 (A0not,A0), & Y1 G3 (Enot,E); 1 A0 功能 nand & Y2 描述 G4 (Y[0],A1not,A0not,Enot), 1 G5 (Y[1],A1not,A0,Enot), A1 & Y3 G6 (Y[2],A1,A0not,Enot), G7 (Y[3],A1,A0,Enot); endmodule
CO AB D1
( A B )C i
S
CO
D2
≥1
Co
//Description of 4-bit full adder module _4bit_adder (S,C3,A,B,C_1); input [3:0] A,B; input C_1; output [3:0] S; output C3; wire C0,C1,C2; //内部进位信号 //Instantiate the fulladder fulladder FA0 (S[0],C0,A[0],B[0],C_1),
in ctrl (a) out in ctrl out
(b) 图 4.6.3 三态门元件模型 (a)bufif1 (b)notif1
bufif1真值表
notif1真值表
bufif1 数 据 输 入 0 1 x z
控制输入 0 1 x 0 0/z z z z z 1 x x 1/z x x
z 0/z
1/z x x
在连续赋值语句中,如果SEL=1,则输出L=A;否则L=B。
数据流建模根据电路的逻辑功能进行描述,不必考虑电路的组成以及元件 之间的连接,是描述逻辑电路常用的一种方法。
4.6.3 组合逻辑电路的行为级建模 行为级建模就是描述数字逻辑电路的功能和算法。
一般使用always结构,后面跟着一系列过程赋值语句,
算术运算符 (双目运算 符)
关系运算符 (双目运算符)
位运算符 (双目运算 符)
缩位运算符 (单目运算 符)
逻辑运算符
移位运算符 (双目运算 符)
位运算符与缩位运算的比较 A:4’b1010 、 B:4’b1111,
位运算
~A = 0101 A&B= ~B = 0000 1010 &A=1& 0&1&0=0 ~&A=1 &B=1
1、多输入门 只允许有一个输出,但可以有多个输入。
调用名
and A1(out,in1,in2,in3); and真值表
and 0 0 0 0 0 0
nand真值表
X 0 x x x
输入1 1 0
1
z
0 x x x
nand
0
输 1 入 x
输入1 0 1 1 1 1 0
x 1 x
z 1 x
输 入
1
2
x z
5、分层次的电路设计方ห้องสมุดไป่ตู้简介 分层次的电路设计:在电路设计中,将两个或多个模块组 合起来描述电路逻辑功能的设计方法。
设计方法:自顶向下和自底向上两种常用的设计方法 4位全加器的层次结构框图
4 位全加器
1 位全加器
1 位全加器
1 位全加器
1 位全加器
半加器
或门
. . . . . .
半加器
或门
A B
2、数据流建模举例
数据流建模使用的基本语句是连续赋值语句assign ,该 语句用于对wire型变量进行赋值, 它由关键词assign开始,后面跟着由操作数和运算符组成的 逻辑表达式。 连续赋值语句的执行过程是:只要逻辑表达式右边变量 的逻辑值发生变化,则等式右边表达式的值会立即被计算 出来并赋给左边的变量。 2选1数据选择器的连续赋值描述是: wire A,B,SEL,L; //声明4个连线型变量 assign L=(A & ~SEL)|(B & SEL); //连续赋值 注意,在assign语句中,左边变量的数据类型必须是wire型。
下面用条件运算符描述了一个2选1的数据选择器。 //Dataflow description of 2-to-1-line multiplexer module mux2x1_df (A,B,SEL,L); input A,B,SEL; output L; assign L = SEL ? A : B; endmodule
•门级描述: 一般使用Primitive(内部元件)、自定义的下层模块对电 路描述。主要用于层次化设计中。
•数据流描述方式:
一般使用assign语句描述,主要用于对组合逻辑电路建模。 •行为描述方式: 一般使用下述语句描述,可以对组合、时序逻辑电路建模。 1)initial 语句 2)always 语句
条件运算符 是三目运算符,运算时根据条件表达式的值选择表达式。 一般用法: condition_expr?expr1:expr2; 首先计算第一个操作数condition_expr的值,如果结果为逻辑1, 则选择第二个操作数expr1的值作为结果返回,结果为逻辑0, 选择第三个操作数expr2的值作为结果返回。
not N1(out1,out2,…,in);buf B1(out1,out2,…,in);
out1 in out2 outN
…
out1 out2 in
outN
not真值表
输入 not 0 1 输 出1 0 x x z x
buf真值表
输入 buf 0 1 输 出 0 1
x x
z x
3、三态门 有一个输出、一个数据输入和一个输入控制。 如果输入控制信号无效,则三态门的输出为高阻态z。
4.6.1 组合逻辑电路的门级建模 4.6.2 组合逻辑电路的数据流建模
4.6.3 组合逻辑电路的行为级建模
4.6 用VerilogHDL描述组合逻辑电路
用VerilogHDL描述组合逻辑电路有三种不同抽象级别: 组合逻辑电路的门级描述、组合逻辑电路的数据流描述、 组合逻辑电路的行为级描述。 VerilogHDL描述的电路就 是该电路的VerilogHDL模型。
E
1
& &
Y0
Y1 Y2
Y3
A0 A1
1 & 1 &
//Dataflow description of a 2-to-4-line decoder, module decoder_df (A1,A0,E,Y); input A1,A0,E; output [3:0] Y; assign Y[0] = ~(~A1 & ~A0 & ~E); assign Y[1] = ~(~A1 & A0 & ~E); assign Y[2] = ~(A1 & ~A0 & ~E); assign Y[3] = ~(A1 & A0 & ~E); endmodule
n-output buffer
not
bufif0
n-output inverte
tri-state buffer Io enable
bufif1 tri-state buffer hi enable
notif0
notif1
tri-state inverte Io enable
xnor
tri-state inverte hi enable
多输入端的异或门 多输出端的缓冲器 控制信号高电平有效的三态缓冲 器 控制信号低电平有效的三态缓冲 器
bufif1
bufif0
notif1
notif0
end
Verilog 基本门级元件
and nand or nor xor n-input AND gate n-input NAND gate n-input OR gate n-input NOR gate n-input exclusive OR gate n-input exclusive NOR gate buf
x
x
1
1
x
x
x
x
x
x
2 z
X- 不确定状态
Z- 高阻态
or真值表
or
0 输 入 2 1 输入1
xor真值表
Z
X 1 输 入
0
0 1
1
1 1
X
X 1
xor 0 1
X Z
输入1
0
0 1 X X
1
1 0 X X
X X X X X
Z X X X X
X
Z
X
X
1
1
X
X
X
X
2
2、多输出门 允许有多个输出,但只有一个输入。
给reg类型的变量赋值。
4.6.1 组合逻辑电路的门级建模
门级建模:将逻辑电路图用HDL规定的文本语言表示出来。
三态门
元件符号 and or xor buf 功能说明 多输入端的与门 多输入端的或门
基本门级元件模型 多输出门
元件符号 nand nor xnor not 功能说明
多输入门
多输入端的与非门 多输入端的或非门 多输入端的异或非门 多输出端的反相器 控制信号高电平有效的 三态反相器 控制信号低电平有效的 三态反相器
FA1 (S[1],C1,A[1],B[1],C0), FA2 (S[2],C2,A[2],B[2],C1), FA3 (S[3],C3,A[3],B[3],C2);
endmodule
4.6.2 组合逻辑电路的数据流建模
数据流建模能在较高的抽象级别描述电路的
逻辑功能。通过逻辑综合软件,能够自动地 将数据流描述转换成为门级电路。
例2 用Verilog的门级元件进行 描述由三态门构成的2选1数据 选择器 。
B
L
A
SEL
//Gate-level description of a 2-to-1-line multiplexer module _2to1muxtri (A,B,SEL,L); input A,B,SEL; output L; tri L; bufif1 (L,B,SEL); bufif0 (L,A,SEL); endmodule
A|B= 1111
A^B= 0101
A~^B= 1010
缩位运算
|A=1 ~|B=0
^A=0 ^B=0
~^A=1 ~^B=1
位拼接运算符
作用是将两个或多个信号的某些位拼接起来成为一个新的操作数, 进行运算操作。 设A=1’b1,B=2’b10,C=2’b00 则{B,C}=4’b1000 {A,B[1],C[0]}=3’b110 {A,B,C,3’b101}=8’b11000101。 对同一个操作数的重复拼接还可以双重大括号构成的运算符{{}} 例如{4{A}}=4’b1111,{2{A},2{B},C}=8’b11101000。
=1 &
S A B C=AB
//Gate-level hierarchical description of 4-bit adder // Description of half adder module halfadder (S,C,A,B); input A,B; output S,C; //Instantiate primitive gates xor (S,A,B); and (C,A,B); endmodule
A B Ci
//Description of 1-bit full adder module fulladder (S,CO,A,B,CI); input A,B,CI; output S,CO; wire S1,D1,D2; //内部节点信号 //Instantiate the halfadder halfadder HA1 (S1,D1,A,B); halfadder HA2 (S,D2,S1,CI); or g1(CO,D2,D1); endmodule AS1B A B Ci
Verilog HDL的运算符
类型 符号 + * / % ~ & | ^ ^~ 或 ~^ ! && || 功能说明 二进制加 二进制减 二进制乘 二进制除 求模 按位取反 按位与 按位或 按位异或 按位同或 逻辑非 逻辑与 逻辑或 类型 符号 > < >= <= == != & ~& | ~| ^ ^~ 或 ~^ >> << 功能说明 大于 小于 大于或等于 小于或等于 等于 不等于 缩位与 缩位与非 缩位或 缩位或非 缩位异或 缩位同或 右移 左移
notif1 控制输入 0 1 x z 0 z 1 1/z 1/z 数 1 z 0 0/z 0/z 据 x x 输 x z x x x 入 z z x
//Gate-level description of a 2to-4-line decoder 4、设计举例 module _2to4decoder 试用Verilog语言的门级 (A1,A0,E,Y); 元件描述2线-4线译码器. input A,B,E; 说明 output [3:0]Y; 部分 wire A1not,A0not,Enot; 1 E & Y0 not G1 (A1not,A1), G2 (A0not,A0), & Y1 G3 (Enot,E); 1 A0 功能 nand & Y2 描述 G4 (Y[0],A1not,A0not,Enot), 1 G5 (Y[1],A1not,A0,Enot), A1 & Y3 G6 (Y[2],A1,A0not,Enot), G7 (Y[3],A1,A0,Enot); endmodule
CO AB D1
( A B )C i
S
CO
D2
≥1
Co
//Description of 4-bit full adder module _4bit_adder (S,C3,A,B,C_1); input [3:0] A,B; input C_1; output [3:0] S; output C3; wire C0,C1,C2; //内部进位信号 //Instantiate the fulladder fulladder FA0 (S[0],C0,A[0],B[0],C_1),
in ctrl (a) out in ctrl out
(b) 图 4.6.3 三态门元件模型 (a)bufif1 (b)notif1
bufif1真值表
notif1真值表
bufif1 数 据 输 入 0 1 x z
控制输入 0 1 x 0 0/z z z z z 1 x x 1/z x x
z 0/z
1/z x x
在连续赋值语句中,如果SEL=1,则输出L=A;否则L=B。
数据流建模根据电路的逻辑功能进行描述,不必考虑电路的组成以及元件 之间的连接,是描述逻辑电路常用的一种方法。
4.6.3 组合逻辑电路的行为级建模 行为级建模就是描述数字逻辑电路的功能和算法。
一般使用always结构,后面跟着一系列过程赋值语句,
算术运算符 (双目运算 符)
关系运算符 (双目运算符)
位运算符 (双目运算 符)
缩位运算符 (单目运算 符)
逻辑运算符
移位运算符 (双目运算 符)
位运算符与缩位运算的比较 A:4’b1010 、 B:4’b1111,
位运算
~A = 0101 A&B= ~B = 0000 1010 &A=1& 0&1&0=0 ~&A=1 &B=1
1、多输入门 只允许有一个输出,但可以有多个输入。
调用名
and A1(out,in1,in2,in3); and真值表
and 0 0 0 0 0 0
nand真值表
X 0 x x x
输入1 1 0
1
z
0 x x x
nand
0
输 1 入 x
输入1 0 1 1 1 1 0
x 1 x
z 1 x
输 入
1
2
x z
5、分层次的电路设计方ห้องสมุดไป่ตู้简介 分层次的电路设计:在电路设计中,将两个或多个模块组 合起来描述电路逻辑功能的设计方法。
设计方法:自顶向下和自底向上两种常用的设计方法 4位全加器的层次结构框图
4 位全加器
1 位全加器
1 位全加器
1 位全加器
1 位全加器
半加器
或门
. . . . . .
半加器
或门
A B
2、数据流建模举例
数据流建模使用的基本语句是连续赋值语句assign ,该 语句用于对wire型变量进行赋值, 它由关键词assign开始,后面跟着由操作数和运算符组成的 逻辑表达式。 连续赋值语句的执行过程是:只要逻辑表达式右边变量 的逻辑值发生变化,则等式右边表达式的值会立即被计算 出来并赋给左边的变量。 2选1数据选择器的连续赋值描述是: wire A,B,SEL,L; //声明4个连线型变量 assign L=(A & ~SEL)|(B & SEL); //连续赋值 注意,在assign语句中,左边变量的数据类型必须是wire型。
下面用条件运算符描述了一个2选1的数据选择器。 //Dataflow description of 2-to-1-line multiplexer module mux2x1_df (A,B,SEL,L); input A,B,SEL; output L; assign L = SEL ? A : B; endmodule
•门级描述: 一般使用Primitive(内部元件)、自定义的下层模块对电 路描述。主要用于层次化设计中。
•数据流描述方式:
一般使用assign语句描述,主要用于对组合逻辑电路建模。 •行为描述方式: 一般使用下述语句描述,可以对组合、时序逻辑电路建模。 1)initial 语句 2)always 语句
条件运算符 是三目运算符,运算时根据条件表达式的值选择表达式。 一般用法: condition_expr?expr1:expr2; 首先计算第一个操作数condition_expr的值,如果结果为逻辑1, 则选择第二个操作数expr1的值作为结果返回,结果为逻辑0, 选择第三个操作数expr2的值作为结果返回。
not N1(out1,out2,…,in);buf B1(out1,out2,…,in);
out1 in out2 outN
…
out1 out2 in
outN
not真值表
输入 not 0 1 输 出1 0 x x z x
buf真值表
输入 buf 0 1 输 出 0 1
x x
z x
3、三态门 有一个输出、一个数据输入和一个输入控制。 如果输入控制信号无效,则三态门的输出为高阻态z。