第5章
CHAPTER 5
数字系统的**
设计与综合
从基于原理图的设计转到硬件描述语言设计是电子设计的一次变革,它允许一个设计者从理论上以工艺无关的行为方式来描述所设计的数字系统模型。随着设计要求不断提高,复杂性不断增加,用硬件描述语言的数字电路设计在很多方面已经变成单调和费时的事情,设计者迫切需要更高层次抽象的设计与综合技术,为了适应技术的发展,大量高层次的设计技术与综合工具可提供给设计工程师使用。
对于结构比较清晰的数字系统,可以利用硬件描述语言(HDL)直接在寄存器传输级(即RTL级)对设计的系统进行描述,这种描述是对系统行为的描述,然后由综合��具进行综合,利用硬件来实现数字系统。
在第3章介绍Verilog HDL的基础上,第4章结合Vivado设计软件介绍了如何将描述系统行为的设计程序进行硬件实现,并加载到目标器件进行调试和验证。由于设计者的程序的编码风格和采用的设计技术直接影响系统模型的建立和综合的结果,本章将讨论如何使编写的程序能够建立正确的系统模型,并被软件综合成设计者设想的结构,包括编码风格的影响、综合工具优化的使用,以及同步设计技术的概念和措施。*后,按照数字系统的层次结构简要介绍综合可能采用的一些方法,以便读者理解从语言描述到硬件实现的过程。
5.1Verilog编程风格
对于使用HDL编程的抽象级描述,综合优化技术仅能协助设计者满足设计要求。综合工具遵循编码构造和按照RTL中展开的结构在*基础的层次上映射逻辑。如果没有类似FSM和RAM等十分规则的结构,综合工具可以从代码中提取功能,识别可替代的结构,并相应地实现。
除了优化之外,为综合编码时的基本指导原则是不减少功能而使所写的结构和伪指令*小化,但是这样可能在仿真和综合之间产生不一致的结果。一个好的编码风格一般要保证RTL仿真与可综合的网表具有相同的性能。一类偏差是厂商支持的伪指令,它可以按照专门注释的形式(不考虑仿真工具)加入RTL代码,并引起综合工具按RTL代码本身不明显的方式推演一个逻辑结构。
由于综合工具只能对可综合的语句产生*终的硬件实现,如果设计者对语言规则和电路行为的理解不同,则可能使设计描述的编码风格直接影响EDA软件工具的综合结果。例如,描述同一功能的两段RTL程序可能产生出时序和面积上完全不同的电路。好的描述方式就是综合器容易识别并可以综合出所期望的电路,而电路的质量取决于工程师使用的描述风格和综合工具的能力。
5.1.1逻辑推理
1. ifelse和case结构——特权与并行性
在FPGA设计的范围内,把一系列用来决定逻辑应该采取什么动作的条件称作一个判决树。通常,可以分类成ifelse和case结构。考虑一个十分简单的寄存器写入的示例(例51)。
例51
module regwrite(
outputreg rout,
input clk,
input[3:0]in,
input[3:0]sel);
always @(posedge clk)
if(sel[0])rout <=in[0];
else if (sel[1])rout <=in[1];
else if (sel[2])rout <=in[2];
else if (sel[3])rout <=in[3];
endmodule
这类ifelse的结构可以推理成如图51所示的多路选择器的结构。
这类判决结构可以按许多不同的方式来实现,取决于速度/面积的权衡和要求的特权。下面介绍如何针对不同的综合结构对各种判决树进行编码和约束。
ifelse结构固有的性质是特权的概念。出现在ifelse语句的条件所给予的特权超过判决树中的其他条件。所以,上述结构中更高的特权将对应靠近链的末尾和更接近寄存器的多路选择器。
在图51中,如果选择字的位0被设置,则不管选择字的其他位的状态,in0将被寄存; 如果选择字的位0没有被设置,则利用其他位的状态来决定通过寄存器的信号。通常,只有当某一位(在此情况是*低位LSB)前面的所有位均没有被设置时,则利用该位来选择输出。这个特权多路选择器的真正实现如图52所示。
图51串行多路选择器结构的简单特权
图52特权多路选择器
无论ifelse结构*后如何实现,将赋予出现在任何给定的条件之前的条件语句更高的特权。所以,当判决树有特权编码时应该利用ifelse结构。
另外,case结构通常(不总是)用于所有条件互不相容的情况。换言之,可以在任何时刻只有一个条件成立的情况下优化判决树。例如,根据其他多位网线或寄存器(例如加法器的译码器)进行判决时,在一个时刻只有一个条件成立。这与上述用ifelse结构实现的译码操作是一样的。为了在Verilog HDL中实现完全相同的功能,可以采用case语句,见例52。
例52
case(l)
sel[0]:rout <=in[0];
sel[1]:rout <=in[1];
sel[2]:rout <=in[2];
sel[3]:rout <=in[3];
endcase
由于case语句是ifelse结构的一种有效替代,许多初学者以为这是自动地无特权判决树的实现。对于更严格的VHDL,该想法恰巧是正确的; 但是对于Verilog语言,却不是这种情况,可以从图53中case语句的实现看出。
图53特权译码逻辑
如图53所示,缺省的部分是通过特权译码来设置多路选择器上相应的使能引脚,这导致许多设计者落入陷阱。如果综合工具报告case结构不是并行的,则RTL必须把它改变为并行的。如果特权条件是成立的,在相应的位置应该采用ifelse结构。
……