Verilog的可综合描述风格

上传人:206****923 文档编号:51686465 上传时间:2018-08-15 格式:PPT 页数:39 大小:142.50KB
返回 下载 相关 举报
Verilog的可综合描述风格_第1页
第1页 / 共39页
Verilog的可综合描述风格_第2页
第2页 / 共39页
Verilog的可综合描述风格_第3页
第3页 / 共39页
Verilog的可综合描述风格_第4页
第4页 / 共39页
Verilog的可综合描述风格_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《Verilog的可综合描述风格》由会员分享,可在线阅读,更多相关《Verilog的可综合描述风格(39页珍藏版)》请在金锄头文库上搜索。

1、Verilog的可综合描述风格学习目标:学习组合逻辑和时序逻辑的可综合的描述风格及技术,包括:不支持的Verilog结构过程块 寄存器 敏感列表 持续赋值 综合指导 条件结构阻塞及非阻塞赋值 锁存器/MUX推断 函数function 任务task复位 有限状态机FSM宏库及设计复用描述风格简介如果逻辑输出在任何时候都直接由当前输入组合决定,则为组合逻辑 。如果逻辑暗示存储则为时序逻辑。如果输出在任何给定时刻不能由输 入的状态决定,则暗示存储。通常综合输出不会只是一个纯组合或纯时序逻辑。一定要清楚所写的源代码会产生什么类型输出,并能够反过来确定为什么所用的综合工具产生这个输出,这是非常重要的。

2、不支持的Verilog结构综合工具通常不支持下列Verilog结构:initial循环:repeatforeverwhile非结构化的for语句数据类型:eventrealtimeUDPforkjoin块wait过程持续赋值:assign deassignforce release操作符:= = =! = =过程块任意边沿 在所有输入信号的任意边沿进入的过程块产生组合逻辑。这种过程 块称为组合块。 always ( a or b) / 与门y = a 单个边沿 在一个控制信号的单一边沿上进入的过程块产生同步逻辑。这种过 程块称为同步块。always ( posedge clk) / D fli

3、p-flopq = d; 同步块也可以对异步复位信号的变化产生敏感always ( posedge clk or negedge rst_)if (! rst_) q = 0;else q = d;过程块中的寄存器类型若同步块中使用一个reg,则:如果在一个时钟周期赋值并在另一个周期被采样,则只能以硬件寄 存器实现。如果reg还是一个基本输出,它会出现在综合网表中,但不一定是一个硬件寄存器。若两者都不是,该信号可能被优化掉。若组合块中使用一个reg,则:如果reg值随块的任何一个输入的变化而改变, 则在综合时不会产生硬件寄存器。如果reg值并不总是随块的输入变化而改变,则综合时会产生一个 锁存

4、器。 同步寄存器举例在这个例子中,rega只作暂存 ,因此会被优化掉。module ex1reg (d, clk, q);input d, clk;output q;reg q, rega; always ( posedge clk)beginrega = 0;if (d) rega = 1;q = rega; end endmodule在这个例子中,rega产生一个寄存 器,不会被优化掉。module ex2reg (d, clk, q);input d, clk;output q;reg q, rega; always ( posedge clk)beginrega = 0;if (d)

5、rega = 1;end always ( posedge clk)q = rega; endmodule组合逻辑中的寄存器类型举例在这个例子中, y和rega总是赋新值, 因此产生一个纯组合逻辑。 module ex3reg (y, a, b, c); input a, b, c; output y; reg y, rega; always ( a or b or c)beginif (a elserega = 0;y = rega; end endmodule在这个例子中,rega不总是产生新 值,因此会产生一个锁存器,y是 锁存器的输出 module ex4reg (y, a, b, c

6、); input a, b, c; output y; reg y, rega; always ( a or b or c)beginif (a y = rega; end endmodule在下面的例子, rega是暂存变量,并被优化掉敏感列表敏感表不完全: module sens (a, q, b, sl); input a, b, sl; output q; reg q; always ( sl) beginif (! sl)q = a;elseq = b; end endmodule完全的敏感列表 module sensc (q, a, b, sl); input a, b, sl;

7、output q; reg q; always ( sl or a or b) beginif (! sl)q = a;elseq = b; end endmodule在下面的例子,a, b, sl是块的输入 sl用作条件 a、b用在过程赋值语句的右边将块的所有输入都列入敏感表是很好的描述习惯。不同的综合工具对不完全敏感 表的处理有所不同。有的将不完全敏感表当作非法。其他的则产生一个警告并假 设敏感表是完全的。在这种情况下,综合输出和RTL描述的仿真结果可能不一致 。 敏感列表将块的所有输入都列入敏感表是很好的描述习惯。不同的综合工具对不完全敏感 表的处理有所不同。有的将不完全敏感表当作非法。

8、其他的则产生一个警告并假 设敏感表是完全的。在这种情况下,综合输出和RTL描述的仿真结果可能不一致 。上述两例综合结果(SYNOPSYS)相同,但RTL描述的仿真结果不同。也就是 左边的敏感表不完全的例子的RTL描述和综合出的网表的仿真结果不同。module sens_t;reg a, b, sl; sens u1(a, q, b, sl); sensc u2(qc, a, b, sl); initial begin$monitor($time,“ %b %b %b %b %b“, a, b, sl, q, qc);a =0;b=0;sl = 0;#10 a =1;#10 sl = 1;#10

9、 sl = 0;#10 $finish; end endmodule0 0 0 0 0 010 1 0 0 0 120 1 0 1 0 030 1 0 0 1 1持续赋值module orand (out, a, b, c, d, e);input a, b, c, d, e;output out;assign out = e endmodule持续赋值驱动值到net上。因为驱动是持续的,所以输出将随任意输入的改变而随时更新,因此将产生组合逻辑。 过程持续赋值module latch_quasi (q, en, d);input en, d;output q;reg q;always ( en

10、)if (en)assign q = d;elsedeassign q; endmodule过程持续赋值是在过程块(always或initial)内给一个寄存器数据类型进行的持续赋值。这在大多数综合工具中是非法的。 综合指示大多数综合工具都能处理综合指示。综合指示可以嵌在Verilog注释中,因此他们在Verilog仿真时忽略,只在综合工具解析时有意义。不同工具使用的综合指示在语法上不同。但其目的相同,都是在RTL代码内部进行最优化。通常综合指示中包含工具或公司的名称。例如,下面介绍的Envisia Ambit synthesis工具的编译指示都以ambit synthesis开头。综合指示这

11、里列出部分Cadence综合工具中综合指示。这些与其他工具,如Synopsys Design Compiler,中的指示很相似。/ ambit synthesis on/ ambit synthesis off/ ambit synthesis case = full, parallel, mux结构指示/ ambit synthesis architecture = cla or rplFSM指示/ ambit synthesis enum xyz/ ambit synthesis state_vector sig state_vector_ flag综合指示 case指示case语句通常综

12、合为一个优先级编码器,列表中每个case项都比后面 的case项的优先级高。Case指示按下面所示指示优化器:/ambit synthesis case = parallel建立并行的编码逻辑,彼此无优先级。 /ambit synthesis case = mux若库中有多路器,使用多路器建立编码逻辑。 /ambit synthesis case = full 假定所有缺少的case项都是“无关”项,使逻辑更为 优化并避免产生锁存器。 条件语句自然完全的条件语句module comcase (a, b, c, d, e);input a, b, c, d;output e;reg e;alwa

13、ys ( a or b or c or d)case ( a, b)2b11: e = d;2b10: e = c;2b01: e = 1b0;2b00: e = 1b1;endcase endmodulemodule compif (a, b, c, d, e);input a, b, c, d;output e;reg e;always ( a or b or c or d)if (a else if (a else if ( a else if ( a endmodule例中定义了所有可能的选项,综合结果是纯组合逻辑,没有不期望 的锁存器产生。不完全条件语句module inccase

14、(a, b, c, d, e);input a, b, c, d;output e;reg e;always ( a or b or c or d)case ( a, b)2b11: e = d;2b10: e = c;endcase endmodulemodule incpif (a, b, c, d, e);input a, b, c, d;output e;reg e;always ( a or b or c or d)if (a else if (a endmodule在上面的例子中,当a变为零时,不对e赋新值。因此e保存其值直到a变为1。这是锁存器的特性。 若 a 变为 0 , e

15、为何值default完全条件语句module comcase (a, b, c, d, e);input a, b, c, d;output e;reg e;always ( a or b or c or d)case ( a, b)2b11: e = d;2b10: e = c;default: e = bx;endcase endmodulemodule compif (a, b, c, d, e);input a, b, c, d;output e;reg e;always ( a or b or c or d)if (a else if (a elsee = bx; endmodule

16、综合工具将 bx作为无关值,因此if语句类似于“ full case”,可以进行更好的优化。 例中没有定义所有选项,但对没有定义的项给出了缺省行为。同样 ,其综合结果为纯组合逻辑没有不期望的锁存器产生。 指示完全条件语句module dircase (a, b, c, d);input b, c;input 1: 0 a;output d;reg d;always ( a or b or c)case (a) / ambit synthesis case = full2b00: d = b;2b01: d = c;endcase endmodule和前例一样,没有定义所有case项,但综合指示通知优化器缺少的 case项不会发生。结果也为纯组合逻辑,没有不期望锁存器产生。注意 如果缺少的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号