数字电路FPGA的基本理论与设计技巧
A、c和Verilog的相同点和不同点(关键在不同点,难点是Verilog仿真语义),其中仿真语义包括阻塞与非阻塞、毛刺、同步设计与异步设计(例如同步复位和异步复位)等问题;
对基本理论与设计技巧的理解:首先要说到C与Verilog语言的区别,我感觉最大的区别就是Verilog并行编程的特点,更多的是在描述,C语言在一个时刻只能执行一条命令,Verilog增加了很多的位运算符,以及位拼接运算符。
VHDL语言中没有阻塞与非阻塞之分,相比Verilog,VHDL更适合行为级建模。
阻塞赋值的时候,等号右边的值立马传递给左边的值(也就是说右边的值计算完后左边的值立即更新操作符为“=”),完成该赋值语句才能做下一语句的操作,硬件没有对应的电路,因而综合的结果未知;非阻塞赋值(<=)在赋值的过程中分两步执行,在单位仿真周期开始时计算右边的值,在同一单位仿真周期末更新左边的值,同块内各赋值语句同时完成。两者的设计原则:
原则1:时序电路建模时,用非阻塞赋值
原则2:锁存器电路建模时,用非阻塞赋值
原则3:用always块写组合逻辑时,性爱用阻塞赋值
原则4:在同一个always块中同时建立时序和组合逻辑电路时,用非阻塞赋值
原则5:在同一个always块中不要同时使用非阻塞赋值和阻塞赋值
原则6:不要在多个always块中为同一个变量赋值
原则7:用$strobe系统任务来显示用非阻塞赋值的变量值
原则8:在赋值时不要使用#0延迟
毛刺:毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素。由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。毛刺现象在FPGA的设计中是不可避免的,有时任何一点毛刺就可以导致系统出错,尤其是对尖峰脉冲或脉冲边沿敏感的电路更是如此。
FPGA芯片是由可构造的输入输出块(IOB)、可构造逻辑块(CLB)和可编程连线资源(PIA)3种可构造单元构成的。
毛刺产生的条件:信号在FPGA器件中通过逻辑单元连线时一定存在延时。延时的大小仅和连线的长短和逻辑单元的数目有关,而且也和器件的制造工艺、工作环境等有关。因此,信号在器件中传输的时候,所需要的时间是不能精确估计的,当多路信号同时发生跳变的瞬间,就产生了“竞争冒险”。这时,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”。
消除毛刺的方法:①利用冗余项法②采样法③吸收法④延迟法⑤硬件描述语言法(这种方法是从硬件描述语言入手,找出毛刺产生的基本原因,改变语言设计产生满足要求的功能模块,来代替原来的逻辑功能块)。
同步设计和异步设计:包括亚稳态,保持时间问题;异步电路使用组合逻辑电路实现,没有统一的十种信号,容易产生毛刺和竞争冒险;同步电路使用组合逻辑电路电路和触发器实现电路功能,主要信号和输出信号都是由时钟驱动触发器产生,能够避免毛刺,信号稳定。异步电路的延时靠门来实现,难以预测,异步电路的优势不大。同步系统的条件:整个系统使用一个时钟源,所有信号均通过寄存器锁存,不用组合逻辑产生CLK,RESET,SET等信号,触发器不用费同步的SET或RESET进行控制,不允许用门延时和缓冲器延时来延迟时钟和信号,逻辑门延时不应比布线延时长。
B、时序分析(延时分析)和约束条件;
时序约束主要包括周期约束和偏移约束以及静态路径约束3种,通过附加约束条件可以使综合布线工具调整映射和布局布线过程,使设计达到时序要求。附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。附加全局约束时,首先定义设计的所有时钟,对各时钟域内的同步原件进行分组,对分组附件周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TO PAD 路径附加约束。附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。附加约束的基本作用:提高设计的工作频率;获得正确的时序分析报告;指定FPGA/CPLD引脚位置与电气标准
|