FPGA设计原则
速度&面积原则
面积:指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用消耗的FF和LUT来衡量,更一般的衡量方式可以用设计所占的等价逻辑门数。
速度:指设计在芯片上稳定运行,所能达到的最高频率。这个频率由设计的时序状况来决定,和设计满足的时钟要求。
面积和速度是一对对立统一的矛盾体,面积和速度的地位是不一样的。相比之下,满足时序、工作频率的要求更重要一些,当两者发生冲突时,采用速度优先的准则。
从理论上讲,如果一个设计时序余量较大,所能跑的速度远远高于设计要求,那么就通过功能模块的复用减少整个设计消耗的芯片面积,这就是用速度的优势换取面积的节约。反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么一般可以通过数据流串并转换,并行复制多个操作,对整个设计采取乒乓操作和串并转换的思想运行。
并串转换数据输出:采用计数器方法,将并行的数据的总数先表示出来,然后发送一位数据减一,后面接收的数据表示为:data_out<=data[cnt];
串并转换数据输出:采用位拼接技术,将串行的数据总数先表达出来,然后发送一位数据减一,后面接收的表示为:data<={data[6:0],data_out};
同步电路&异步电路
同步电路: 存储电路所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。
异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,只有这些触 发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。
乒乓操作
乒乓操作是一个常常应用于数据流控制的处理技巧。
数据缓冲模块可以为任何的存储模块,比较常用的存储模块为双口 RAM(DPRAM),单口 RAM(SPRAM),FIFO 等。在第一个缓冲周期,将输入的数据流缓存到数据缓存模块 1,在第二个缓冲周期,通过输入数据流选择单元,将输入的数据流缓存到数据缓冲模块 2. 乒乓操作的最大特点是,通过输入数据选择单元和输出数据选择单元,进行运算和处理。把乒乓操作模块当成一个整体,站在两端看数据,输入数据和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲和处理。
乒乓操作的第二个优点是可以节约缓冲区空间。比如在 wcdma 基带应用中,1 帧是由 15 个时隙组成的,有时需要将 1 整帧的数据延时一个时隙后处理,比较直接的方法就是将这帧数据缓存起来,然后延时一个时隙,进行处理。这时缓冲区的长度为 1 帧的数据长,假设数据速率是 3.84Mb/s,1 帧 10ms,此时需要缓冲区的长度是 38400bit,如果采用乒乓操作,只需定义两个缓冲 1 时隙的数据 RAM,当向一个 RAM 写数据时,从另一块 RAM 读数据,然后送到处理单元处理,此时每块 RAM 的容量仅需 2560bit,2 块加起来 5120bit 的容量。
有限状态机(FSM)
分为两类
Mealy状态机:时序逻辑的输出不仅取决于当前状态,还与输入有关;
Moore状态机:时序逻辑的输出只与当前状态有关。
编码风格
一段式:
只有一个always block,把所有的逻辑(输入、输出、状态)都在一个always block的时序逻辑中实现。这种写法看起来很简洁,但是不利于维护,如果状态复杂一些就很容易出错,不推荐这种方法。在简单的状态机可以使用。
二段式:
有两个always block,把时序逻辑和组合逻辑分隔开来。时序逻辑里进行当前状态和下一状态的切换,组合逻辑实现各个输入、输出以及状态判断。这种写法不仅便于阅读、理解、维护,而且利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。在两段式描述中,当前状态的输出用组合逻辑实现,可能存在竞争和冒险,产生毛刺。要求对状态机的输出用寄存器打一拍,但很多情况不允许插入寄存器节拍,此时使用三段式描述。其优势在于能够根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而不需要额外插入时钟节拍。
三段式:
有三个always block,一个时序逻辑采用同步时序的方式描述状态转移,一个采用组合逻辑的方式判断状态转移条件、描述状态转移规律,第三个模块使用同步时序的方式描述每个状态的输出。代码容易维护,时序逻辑的输出解决了两段式组合逻辑的毛刺问题,但是从资源消耗的角度上看,三段式的资源消耗多一些。
组合逻辑的设计原则
1、避免组合逻辑反馈环路(容易毛刺、振荡、时序违规等)。
解决方法:
1)、牢记任何反馈回路必须包含寄存器;
2)、检查综合、实现报告的warning信息,发现反馈回路(combinational loops)后进行相应修改。
2、替换延迟链。
解决方法:用倍频、分频或者同步计数器完成。
3、替换异步脉冲产生单元(毛刺生成器)。
解决方法:用同步时序设计脉冲电路。
4、慎用锁存器。
解决方法:
1)、使用完备的if…else语句;
2)、检查设计中是否含有组合逻辑反馈环路;
3)、对每个输入条件,设计输出操作,对case语句设置default操作。特别是在状态机设计中,最好有一个default的状态转移,而且每个状态最好也有一个default的操作。
4)、如果使用case语句时,特别是在设计状态机时,尽量附加综合约束属性,综合为完全条件case语句。
多时域设计中,如何处理信号跨时域?
不同的时钟域之间信号通信时需要进行同步处理,这样可以防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响。 信号跨时钟域同步:当单个信号跨时钟域时,可以采用两级触发器来同步;数据或地址总线 跨时钟域时可以采用异步 FIFO 来实现时钟同步;第三种方法就是采用握手信号。
————————————————
原文链接:https://blog.csdn.net/jackiezhang1993/article/details/85045621
原文链接 https://blog.csdn.net/yundanfengqing_nuc/article/details/120345259
本文 zblog模板 原创,转载保留链接!网址:http://xn--zqqs03dbu6a.cn/?id=32
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。