第八讲verilog的可综合性
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
e);
input a, b, c, d;
output e;
AND2
AND2
OR2
reg e;
d
always @( a or b or c
a
e
or d)
b
m2
m3_b_0
m3
AND2
if (a & b) e = d;
else if (a & ~b) e = ~c;
c
m3_b.O
else if (~ a & b) e = 1'b0;
条件操作符
<< >>
> < >= <=
==
!=
&
^ ~^
|ห้องสมุดไป่ตู้
&&
||
?:
三、部分verilog结构的综合 ①赋值语句assign
赋值语句综合为组合逻辑电路 assign out= (a & b) | c; 综合为以下门级电路
c
a
out
b
un1_out
out
assign {c_out,sum}=a + b + c_in;
XOR2
[5]
AND2
[5]
OR2
XOR2
[6]
AND2
[6]
OR2
XOR2
[7]
AND2
[7]
un103_sum_1.m2 un103_sum_1.m3_b_0 un103_sum_1.m3
un124_sum_1.m2
un124_sum_1.m3_b_0 un124_sum_1.m3
un145_sum_1.m2 un145_sum_1.m3_b_0
a[7:0]
[7:0]
b[7:0]
[7:0]
c_in
[0]
[0]
+
[1:0]
sum_1[1:0]
[1]
[1]
+
[1:0]
[1]
un19_sum[1:0]
[2]
[2]
+
[1:0]
[1]
un40_sum[1:0]
[3]
[3]
+
[1:0]
[1]
un61_sum[1:0]
[4]
[4]
+
[1:0]
[1]
un82_sum[1:0]
OR2
AND2
[2]
z_1_2_0_i_m2_b_0
[2]
z_1_2_0_i_m2_b.O z_1_1_0_i_m2
OR2 z_1_4_0_i_m2
OR2 z_1_2_0_i_m2
AND2
[0]
z_1_5_0_b_0
[0]
z_1_5_0_b.O
AND2
[2] [1]
un1_s_6_i_a2
OR2
z_1_5_0
z_2_0_b.O
AND2
d4
[2]
z_1_0_b_0
d0
[2]
z_1_0_b.O
OR2 z_5_0 OR2 z_4_0
AND2
[1]
z_6_0_b_0
[1]
z_6_0_b.O
OR2 z_2_0
AND2
[1]
z_3_0_b_0
OR2
[1]
z_3_0_b.O
z_1_0
OR2 z_6_0
AND2
[0]
z_7_0_b_0
casez和casex与case 类似,只是条件的判断 不同。
module increment (s, d0,d1,d2,d3,d4,d5,d6,d7,z); input [2:0] s; input d0,d1,d2,d3,d4,d5,d6,d7; output z; reg z; always @ (*) case (s) 3'b000: z = d0; 3'b001: z = d1; 3'b010: z = d2; 3'b011: z = d3; 3'b100: z = d4; 3'b101: z = d5; endcase endmodule
一、verilog结构类型
逻辑综合工具并不能处理随意编写的verilog结构描述:通常,周期到周期的任 何RTL verilog结构描述都能为逻辑综合工具所接受。
支持综合的Verilog结构类型
结构类型
关键字或描述
注释
端口
input, inout, output
参数
parameter
模块定义
module
AND2 z_ld1 AND2
0
S
0 DQ
z
R
z.Q
z_ld0
④for语句
for循环语句综合产生 级联的链式组合逻辑电 路
module increment (sum, c_out,a,b,c_in); input [7:0] a,b; output [7:0] sum; input c_in; output c_out; reg [7:0] sum; reg c_out; reg c; integer i; always @ (a or b or c_in) begin c = c_in; for (i=0;i<=7;i=i+1) {c,sum[i]}=a[i]+b[i]+c; c_out =c; end endmodule
else z = ones;
③case语句
case语句综合为数据选择器,一般用于设计庞大的数据选择器。
d7 s[2:0]
[2:0]
[2]
AND2
z_5_0_b_0
d3
[2]
z_5_0_b.O
AND2
d5
[2]
z_4_0_b_0
d1
[2]
z_4_0_b.O
AND2
d6
[2]
z_2_0_b_0
d2
[2]
z_1.SUM0_0_x2
XOR2
[1]
z_1.SUM1_0_x2
[1]
z_1.N_6_i_i.O
module increment (phy, ones,z); input phy; input [1:0] ones; output [1:0] z; reg [1:0] z; always @ (phy or ones) if (phy) z = ones +1; endmodule
s);
input d0, d1, s;
output out;
reg out;
always @( s or d0 or
d1)
if (s)
out
out = d1;
else
out = d0;
endmodule
定义了所有可能的选项的if—then嵌套语句,综合结果是受条件 控制的纯组合逻辑电路。
module compif (a, b, c, d,
d3 s[2:0]
[2:0]
[1]
AND2
z_1_3_0_i_m2_b_0
d5
d1
[1]
z_1_3_0_i_m2_b.O
d4
AND2
d2
[1]
z_1_1_0_i_m2_b_0
d0
[1]
z_1_1_0_i_m2_b.O
OR2
AND2
[2]
z_1_4_0_i_m2_b_0
[2]
z_1_4_0_i_m2_b.O z_1_3_0_i_m2
a
XOR2
c_in b
AND2
XOR2
sum
OR2
c_out
assign out= (s) ? d1 : d0;
AND2
d1 s
OR2
out
d0
②if---then语句
单条的if---then语 句综合为一个二选1 数据选择器
AND2
d1 s
d0
OR2
module compif (out, d0, d1,
[5]
[5]
+
[1:0]
[1]
un103_sum[1:0]
[6]
[6]
+
[1:0]
[1]
un124_sum[1:0]
[7]
[7]
+
[1:0]
[1]
un145_sum[1:0]
[0]
sum[7:0]
[0]
[0]
[0]
[0]
[0]
[0]
[0]
[1] c_out
a[7:0]
[7:0]
c_in b[7:0]
m1
else if (~ a & ~b)
e = 1'b1;
endmodule
不给出所有if分支值,则综合出的结果会带有锁存器,变为时序逻辑电路。
AND2
[0] [0]
ones[1:0]
[1:0] [1] [0]
XOR2
z_ld1[0]
[1]
AND2
0
S
0 D Q [1] [1:0] z[1:0]
R
第八讲 verilog的可综合性
•逻辑综合 •Verilog的逻辑综合 •Verilog的可综合风格
8.1 逻辑综合
逻辑综合:在标准单元库和特定的设计约束的基础上,把设计的高层次描 述转换成优化的门级网表的过程。 标准单元库可以包含简单的单元,例如与门、或门和或非门等基本逻辑门, 也可以包含宏单元,例如加法器、多路选择器和特殊的触发器。
数据流
assign
不考虑延迟信息
循环
for , while, forever
while和forever循环必 须
包括@(posedge clock)或(negedge clock)
注意事项:
只有周期到周期的任何RTL verilog结构描述都能为逻辑综合工具所接受。 例while和forever语句必须由@(posedge clock)或@(negedge clock) 终止循环,使其具有强制性的周期到周期的描述。 #<delay>结构指定的延迟将被忽略 不支持initial语句,必须用复位机制来代替。 要明确指定信号和变量的宽度。否则,综合后的可能会产生大量的门级 网表
[1]
z_1_.Q
[1]
z_1_1.SUM1_0_x2
z_ld1[1]
phy
[0]
AND2
[0]
0
S
0 D Q [0]
R
[0]
[0]
z_0_.Q
z_ld0[0]
AND2
[1]
phy ones[1:0]
[1:0]
[0]
OR2
z_1.CO1_0_o2
z_ld0[1]
XOR2
[0]
[0] [1:0] z[1:0]
计算机辅助逻辑综合工具的出现已经把高层次描述向逻辑门的转化过程自 动化了。设计者现在可以把精力集中在体系结构的方案、设计的硬件语言描 述上,由综合工具在内部进行几次反复,生成优化的门级描述。
自动化的逻辑综合已经非常有效地减少了高层次设计到门级网表的转化时 间。它使设计者可以把更多的时间用于更高层次的描述上,因为把设计转换 到门级网表所需的时间大大减少了。
OR2
[0]
z_7_0_b.O
z_3_0
module increment (s,
d0,d1,d2,d3,d4,d5,d6,d7,z);
input [2:0] s;
input d0,d1,d2,d3,d4,d5,d6,d7;
OR2
output z;
z reg z;
z_7_0
always @ (*)
case (s)
3'b000: z = d0;
3'b001: z = d1;
3'b010: z = d2;
3'b011: z = d3;
3'b100: z = d4;
3'b101: z = d5;
3'b110: z = d6;
3'b111: z = d7;
endcase
endmodule
与if语句类似,如果 没有给出所有分支的值, 则综合后会出现锁存器。
8.2 Verilog HDL综合
寄存器传输级(RTL)层次用硬件描述语言verilog编写设计。 术语RTL用于表示HDL的一种风格,该风格的描述采用了数据 流和行为结构相结合的方式。 逻辑综合工具接受RTL级描述并把它转化为优化的门级网表。 Verilog和VHDL是两种最流行的RTL描述语言
信号和变量
wire , reg , tri
允许使用向量表示
调用(实例引用) 模块调用和门级原语调用
函数和任务
function, task
不考虑时序结构
过程
always, if, then, else, case,
casex, casez
不支持initial
过程块
begin, end, named blocks, disable
OR2 un145_sum_1.m3
sum_1_1.m3_b.O
[1]
un19_sum_1.m3_b.O
[2]
un40_sum_1.m3_b.O
[3]
un61_sum_1.m3_b.O
[4]
un82_sum_1.m3_b.O
[5]
un103_sum_1.m3_b.O
[6]
un124_sum_1.m3_b.O
un40_sum_1.m3_b_0 un40_sum_1.m3
XOR2
[3]
AND2
[3]
OR2
un61_sum_1.m2
un61_sum_1.m3_b_0 un61_sum_1.m3
XOR2
[4]
AND2
[4]
OR2
un82_sum_1.m2
un82_sum_1.m3_b_0 un82_sum_1.m3
[7]
un145_sum_1.m3_b.O
XOR2
[7] [7]
XOR2
un145_sum_1.SUM0_0
XOR2
[6] [6]
un145_sum_1.SUM0 XOR2
un124_sum_1.SUM0_0
二、操作符
几乎所有的操作符都可以综合。 ===和!==与x和z有关的操作符不可综合 写表达式时,要用圆括号使逻辑关系明确,最好不要依赖运算的优先级
操作符类型
连接及复制操作符 一元操作符 算术操作符
符号
{ } {{}} !~&|^ + -* %
逻辑移位操作符 关系操作符 相等操作符 按位操作符
逻辑操作符
[7:0] [0]
XOR2
sum_1_1.SUM0_0
AND2
[0]
sum_1_1.m3_b_0
OR2 sum_1_1.m3
XOR2
AND2
[1]
OR2
[1]
un19_sum_1.m3_b_0
un19_sum_1.SUM0_0
un19_sum_1.m3
XOR2
[2]
AND2
[2]
OR2
un40_sum_1.m2