目录
可综合值得是设计的代码能转化为具体的电路网表结构。综合就是将 Verilog 语言描述的行为级或功能级电路模型转化为 RTL 级功能块或门级电路网表的过程。
综合的过程:
其中前两条为 RTL 级综合,后两条为门级综合,是目标工艺面积和定时约束。
在进行可综合的设计中,为避免设计出不可综合的语句,应注意以下事项:
常见不可被综合的语句:
fork-join、initial、forever、while、repeat 以及 assign 语句持续赋值中,等式左边含有变量的位选择的时候,也是不可被综合的。
在系统工作时为了尽可能的提高系统运行速度,保证数据的快速传输,流水线的设计是一种常见的设计方法。但是,如果在某些复杂逻辑功能的完成需要较长的延时,就会使系统难以运行在高的频率上。这种情况下,可使用流水线技术,即在长延时的逻辑功能块中插入触发器,使复杂的逻辑操作分步完成,减小每一部分的延时,从而使系统的运行频率得以提高。但是流水线的弊端在于增加了寄存器逻辑,进而消耗了更多的芯片内部资源。相当于用资源换速率,在资源允许的前提下,适当加入流水线的操作,可以显著提高系统的运行频率。
以下为流水线操作的概念示意图,可以看出虽然消耗了更多的寄存器,但是速率却有了显著的提升。
以一个简单的例子说明,实现一个 8 位全加器,分别进行非流水线实现方式、两级流水线方式实现、四级流水线方式实现,以四级流水线方式实现的系统比不使用流水线方式实现的系统的运行频率可以提高 30%!
尽量减少系统好用的器件资源也是在设计电路时追求的目标,资源共享就是一个比较好的解决方案,尤其是将一些好用资源较多的模块进行共享,能有效降低整个系统耗用的资源。
方案一:
用 2 个加法器和 1 个 MUX 实现
- module add(
- input sel,
- input [3:0] a,b,c,d,
- output reg [4:0] sum
- );
- always @(*)
- begin
- if (sel) begin
- sum = a + b;
- end
- else begin
- sum = c + d;
- end
- end
- endmodule
方案二:
用 1 个加法器和 2 个 MUX 实现
- module add(
- input sel,
- input [3:0] a,b,c,d,
- output reg [4:0] sum
- );
- reg [3:0] atmp,btmp;
- always @(*)
- begin
- if (sel) begin
- atmp = a;
- btmp = b;
- end
- else begin
- atmp = c;
- btmp = c;
- end
- sum = atmp + btmp;
- end
- endmodule
可以看出上面两个方案都可以实现相同的功能,但是他们所使用的资源是不一样的,方案一用 2 个加法器和 1 个 MUX 实现,方案二用 1 个加法器和 2 个 MUX 实现,两个加法共享了一个加法器,而加法器耗用的资源比 MUX 多,因此方案二更节省资源,这只是一个小的模块,如果在比较大的工程项目中,资源会比较紧张,资源共享就显得有必要。
在节省资源的设计中应注意:
在设计电路时,使用阻塞赋值和非阻塞赋值要点: