第7章 RTL设计原则及技巧
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.2.2 流水线操作
图 7–2 串行多任务示意图 流水线操作,在每个组合逻辑块之间加入寄存器簇,所有的寄存 器采用一个公共的时钟信号来驱动,一旦时钟的有效沿到来,寄 存器就会把前一阶段所得出来的结果输出下一级组合逻辑块,否 则就一直等待。 当流水线刚开始加载的时候,数据会有一个等待时间,因此第一 个数据从输入到输出所经历的时间和非流水线操作的时间几乎相 等,第一个时间时产生的任务a1从开始到结束用时与有没有采用 流水线操作没有关系。
7.1.4同步原则
同步化设计,就是核心逻辑采用触发器来实现,电路的主要信号 都使用触发器来触动,尽量采用同一个时钟域的时钟进行驱动。 同步原则的好处在于它不仅可以很好的避免毛刺的产生,而且有 利于器件的移植,而最重要的是它可以产生较好的静态时延分析 报告。 进行同步设计的关键就是认真了解和掌握并且设计好整个系统的 时钟域的划分。
图 7–5 未采用资源共享的RTL线路图
图 7–6 未采用资源共享的资源利用报告
图 7–7 采用资源共享的R用报告
7.2.4逻辑复用操作
逻辑复用操作跟资源共享操作是一个相反过程。 逻辑复用是通过增加面积来改善时序条件的优化手段。 逻辑复用最常用的场合就是调整信号的扇出。 资源共享操作中的实现方法一就是一个逻辑复用的逆操作。 香农扩展定律则可以清楚地表明怎样把一个逻辑组合来实现逻辑 复用、提高频率。而卡诺图化简则相当于香农扩展的逆操作,相 当于资源共享操作。
7.1.3系统原则
CPLD/FPGA本身就一个系统的集合,需要以系统的眼光来看待和 设计CPLD/FPGA,以最优的设计方案来实现。 FPGA速度快、内部寄存器资源和布局布线丰富,因此适合于那些 实时性要求很高、频率又要快、寄存器消耗多的功能模块设计; 另外现在很多FPGA都内嵌DSP模块,因此适合于嵌入式DSP设计 。对于那些速度要求不是很高的功能模块,或者组合逻辑要求相 对丰富、输入输出管脚要求比较多的功能单元,则可以采用CPLD 来完成。 系统原则其实就是自顶向下的方式的具体化。CPLD/FPGA设计工 程师只有清楚了这些系统级的定义和规范才能开始芯片选型、具 体的逻辑模块的划分以及子模块的RTL设计。
7.3.2 组合逻辑反馈环路
组合逻辑反馈环路是数字同步逻辑设计中的一个大忌,它不仅有 可能造成信号振荡,产生毛刺,还会经常引起时序违例,不能很 好地进行时序分析,进而引起系统的不稳定。
图 7–13 组合逻辑负反馈示意图
要避免组合逻辑反馈回路的出现,可以在图7-13中的组合逻辑部 门增加一级触发器,或者直接更改设计。
7.2. RTL设计的主要技巧
硬件原则、面积与速度原则、系统原则以及同步原则是代码设计 的灵魂。
7.2.1乒乓操作
乒乓操作是有效处理高速数据流的方式之一,其基本思想就是一 种以面积换取速度。
图 7–1 乒乓操作示意图
乒乓操作必须保证数据采样通路之间对数据采样是互斥的,也就 是说在同一时刻有且只有一个数据缓冲模块对输入的数据流进行 采用,因此在输入选择模块和数据缓冲模块之间需要有一个握手 信号,同样数据处理模块和数据流输出选择单元之间也是互斥的 。当一个模块在对输入数据进行采样的时候,另外一个模块就对 数据处理单元进行数据输出,然后不停地有序地切换,就好像打 乒乓球一样,一来一往,这就是所谓的乒乓操作。 乒乓操作要求两个缓冲模块和数据处理模块的大小必须一致,驱 动时钟的频率必须相等,且相位差固定,否则将出现有些路径数 据拥堵、有些路径空闲的状况
7.4.2 异步计数器
异步计数器,也叫做行波计数器。它利用时钟驱动一组寄存器的 第一个时钟管脚,然后利用第一个时钟的输出驱动第二个寄存器 的时钟管脚,级联而下。它可以节省芯片的资源,但是不能很好 地进行静态时延控制,从而带来许多的时序问题,因此不建议采 用。
7.4.3 次级时钟的产生
最简单的方式就是通过组合逻辑来进行分频,但是容易产生毛刺 ,而毛刺的产生必然会引起系统的错误反映或者亚稳态的产生, 为了防止毛刺的产生或者过滤毛刺,解决方案之一就是插入寄存 器。 建议使用PLL/DLL来产生次级时钟,这样可以实现时钟约束,确 保时钟的质量,目前所有的FPGA以及最新的高端CPLD里面都内 置有PLL/DLL硬件模块,可以自由调用,但是传统的CPLD以及最 新的低端CPLD里面没有PLL/DLL模块,因此时序约束要求严格的 系统,不建议采用传统的或者最新的低端CPLD进行设计。
第7章 RTL设计原则及技巧 章 设计原则及技巧
本章主要内容
RTL设计的主要原则 RTL设计的主要技巧 组合逻辑设计的注意事项 时序逻辑设计的注意事项 代码风格
7.1RTL设计的主要原则
硬件原则 面积与速度 系统原则 同步设计
7.1.1硬件原则
硬件原则是硬件描述语言和软件语言的根本区别。 评判一个代码的设计水平的优劣不在于它的代码的简洁与否,而 在于生成的硬件电路的性能在面积与速度方面是否满足设计者的 要求。一段代码设计的是否健壮在于设计者硬件实现方案与现实 中的硬件电路实现的效率高低及是否合理。 在硬件描述语言中, 语句一般只用于Testbench中,而不会用在 逻辑设计中 硬件原则还需要涉及的是 “并行”与 “串行”的概念。 硬件原则需要考虑时序的问题,这是软件语言无法做到的。
图 7–3 流水线操作示意图
图 7–4 通用流水线操作示意图
7.2.3资源共享操作
资源共享操作,又称之为时分复用,就是使一个功能模块来实现 几个操作。资源共享操作是在保证速度的前提下来实现面积最小 的一种操作方式。 观察例 7–1 采用资源共享的RTL代码设计,具体设计请参考代码 资源共享操作适合于有选择器的结构。目前的综合工具都具有资 源共享选项,只要选择它就可以自动进行资源共享优化操作。然 而代码毕竟是最基础的,它最能体现设计者思想,同时综合工具 的优化能力毕竟有限,因此如果需要采用资源共享设计,最好在 代码设计中完成。
7.2.5 串并转换操作
串并转换是数据流处理常用的一个手段,也是面积与速度互相转 换思想的直接体现。 串行信号转化成并行信号相当于逻辑复制,并行信号转化成串行 信号则相当于在节省逻辑资源,节省了芯片的面积。 串并转换有许多种方式:高速的SERDES, DRAM FIFO SERDES DRAM、FIFO、代码 等 从某种层面来说,乒乓操作就是一种特殊的串并转换操作过程 在创建RTL代码时了解综合工具是怎样运行是比较重要的。
与同步复位不同,异步复位信号不仅出现在always语句中的条件 判断表达式中,同时也出现在敏感事件表达式中——只要复位信 号有效,而不用管时钟信号就可以实现复位。 因为异步复位、置位的D触发器是目前绝大多数CPLD/FPGA中所 固有的结构,所以只要满足基本的复位到输出的时序要求,就可 以实现复位 异步复位一是有可能会产生亚稳态的状态,二是就是时序约束不 好实现,三是综合和布局布线软件不好生成静态时延分析报告。 比较好的方式之一就是对复位信号进行同步化后采用异步复位, 其基本程序代码如下所示。
图 7–14 组合逻辑脉冲产生电路示意图
在CPLD/FPGA中,图7-15是典型的脉冲产生电路方案之一——利 用时序逻辑电路来实现。
图 7–15 正确的脉冲产生电路
7.4 时序逻辑设计
7.4.1 门控时钟
门控时钟,是为了减少功耗而对时钟采取的一种组合逻辑设计。 通过屏蔽时钟信号而使相关的时钟所驱动的整个逻辑不再发生翻 转,从而节省功耗。但是由于门控时钟电路不同于同步电路,当 时钟通过 “门” 时有可能会产生毛刺,并污染时钟的斜率,增 大时钟的抖动。因此在同步设计中尽量避免使用门控时钟。
7.3.3脉冲产生电路
数字脉冲产生电路的基本原理是利用信号经过不同的路径产生不 同的延时而产生脉冲序列,这样充分利用了逻辑缓冲的器件延时 和布线延时,但是组合逻辑器件本身由于温度、电压等关系会造 成延时的不确定,同时PCB布线方式不一样,同样会造成延时的 不一致,因此这样的脉冲产生电路的延时性和稳定性都很差,并 且这样的脉冲产生电路也容易造成竞争冒险。
它可以节省芯片的资源但是不能很好地进行静态时延控制从而带来许多的时序问题因此不建议采最简单的方式就是通过组合逻辑来进行分频但是容易产生毛刺而毛刺的产生必然会引起系统的错误反映或者亚稳态的产生为了防止毛刺的产生或者过滤毛刺解决方案之一就是插入寄存建议使用plldll来产生次级时钟这样可以实现时钟约束确保时钟的质量目前所有的fpga以及最新的高端cpld里面都内置有plldll硬件模块可以自由调用但是传统的cpld以及最新的低端cpld里面没有plldll模块因此时序约束要求严格的系统不建议采用传统的或者最新的低端cpld进行设计
图 7–10 同步复位逻辑电路图
图 7–11 异步逻辑复位图
图 7–12 同步复位异步释放RTL线路图
7.3 组合逻辑设计
7.3.1 锁存器
除非有必要,不建议在组合逻辑设计中使用锁存器。一是锁存器 的使用有可能会出现潜在的竞争冒险;二是综合工具对组合逻辑 的优化和综合仅仅会对每一个输入可能的值赋给输出一个值,这 就意味着事件控制表达式必须对每一个输入都敏感,每一条活动 的路径都必须给每个输入赋予一个值。 观察例5~例9锁存器产生的条件及解决方法,具体请参考源代码 设计
典型的同频异相的解决方案,它采用后级时钟对前级数据采用两 次,这样可以减少亚稳态的传播,并有效地减少毛刺。
图 7–9 异步时钟域数据同步化操作
7.2.7 复位操作
在硬件系统中,有两种复位模式:同步复位和异步复位。 同步复位是指所有的复位操作都是在时钟的作用下进行,即使复位信号 有效,如果没有时钟的有效沿触发就不能进行复位;而异步复位的复位 信号与时钟信号没有关系。 观察例7-2、例7-3同步复位、同步复位的设计,具体请参考相关代码。 7-2 7-3 同步复位的always语句中的敏感变量表达式并不包含复位变量,复位变 量出现在条件表达式中,这样只有在时钟的作用下才能检测到复位信号 。 同步复位好处在于不论是复位信号还是数据信号,都由时钟信号控制。 纯同步复位也有缺点:一是复位信号因为被当成数据信号来看待,在设 计中需指出复位信号的脉宽等参数;二是从系统层面来说,如果复位信 号用来复位整个触发器链,第二级甚至更后的触发器,它就成了一个普 通的数据信号
module async_rst(clk, rst_, d, q); input clk,rst_,d; output reg q; reg rst_reg_; always @(posedge clk) //同步化 //同步化 rst_reg_ <= rst_; always @(posedge clk negedge rst_reg_)//异步复位 begin if(!rst_reg_) q <= 1'b0; else q <= d; end endmodule
reg [n-1:0] par_temp; par_temp = {par_temp[n-2:0],ser_in}; or par_temp={ser_in,par_temp[n-1,1]};
7.2.6 异步时钟域数据同步化操 作
CPLD/FPGA设计的重点就是怎样划分不同的时钟域以及怎样在不 同的时钟域之间进行数据传度,也就是怎样在异步时钟域中实现 数据的同步化操作。 同步设计之于异步设计,在逻辑综合和时序分析,特别是静态延 时分析方面有着较大的优势。 在多时钟域设计时,数据的跨时钟操作经常会引起建立时间和保 持时间违例,这也就成了设计中的一大难点。 异步时钟有几大表现形式:同频异相、异频同相和异频异相。 不管是采用哪种方式进行异步时钟域数据同步,都不推荐采用增 加缓冲和采用时钟双沿采样来进行 最好的方式来处理异步时钟域数据同步化的问题就是采用DRAM 或者FIFO来进行时钟域隔离,用上级随路时钟信号写入数据,用 下级时钟读出数据。采用这种方式需要设置告警信号来提醒不能 出现DRAM或者FIFO数据溢出
7.1.2 面积与速度原则
面积就是设计所要消耗的逻辑资源——对于FPGA来说,采用触发 器和LUT来衡量;对于CPLD来说,则采用宏单元来衡量 速度则是指在现有的芯片上能够实现的最大频率 面积和速度是个矛盾体 ,需要在面积和速度之间做个权衡。 必须保证速度的前提下来实现最小的面积,或者在规定的面积之 内实现最大的时序裕量。 面积与速度的地位是不相等的,速度的优先级别要比面积高。当 两者冲突的时候,速度优先。 从工业设计来看,面积和速度直接反映的就是成本和性能。 从性能方面来考虑,设计的速度越快,时间裕量就愈大,这也就 意味着CPLD/FPGA设计的健壮性就越强。