设计专题讲座.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《设计专题讲座.pptx》由会员分享,可在线阅读,更多相关《设计专题讲座.pptx(110页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、讲座内容RTL编码风格第三方EDA工具的运用高速状态机的设计跨时钟域异步信号传递其他第1页/共110页一、RTL编码风格RTL:寄存器传输级。编码风格:良好的编码风格:保证设计功能的正确;综合出性能更优越的电路;可调试性更好;可维护性和可调试性更好。第2页/共110页一、RTL编码风格代码风格侧重:面向功能;面向综合。面向功能:代码风格确保RTL代码描述与设计的预期功能完全一致。面向综合:代码风格使得综合后的电路具有更好的性能。第3页/共110页一、RTL编码风格模块化设计;同步设计;Verilog Coding Traps;影响性能的编码风格。第4页/共110页一(1)、模块化设计编码风格模
2、块化设计:将复杂设计划分多个层次,每层包含多个模块。第5页/共110页一(1)、模块化设计编码风格1.1 每个模块的输出信号使用寄存器输出。第6页/共110页一(1)、模块化设计编码风格模块输出信号采用寄存器寄存输出:/寄存输出module md_reg_out();output c_reg;reg c_reg;always(posedge clk)c_reg=a&b;endmodule/直接组合逻辑输出module md_nonreg_out();output c;wire c;assign c=a&b;endmodule第7页/共110页一(1)、模块化设计编码风格1.2 路径延时大的输入
3、信号使用寄存器输入。第8页/共110页一(1)、模块化设计编码风格模块输入信号采用寄存器寄存输入:/寄存输入module md_reg_out();input a,b;reg a_r,b_r;always(posedge clk)begin a_r=a;b_r=b;end assign c=a_r+b_r;endmodule/直接输入module md_nonreg_in();input a,b;wire a,b;assign c=a+b;endmodule第9页/共110页一(1)、模块化设计编码风格寄存输入和输出,可能导致接口时序延迟。解决方法:对于模块间是单向数据传递,可以考虑整体延迟所
4、有接口输入或输出信号;如果时序要求不能整体延迟一拍,则考虑预先产生输出组合逻辑,这样输出寄存后就与原时序完全一致;第10页/共110页一(1)、模块化设计编码风格解决输出寄存后时序延时的方法:/寄存输出module md_reg_out();output c_reg;reg c_reg;reg3:0 counter;always(posedge clk)counter=counter+1;always(posedge clk)c_reg=(counter=9);endmodule/直接组合逻辑输出module md_nonreg_out();output c;wire c;reg3:0 cou
5、nter;always(posedge clk)counter=counter+1;assign c=(counter=10);endmodule第11页/共110页一(1)、模块化设计编码风格1.3 模块之间不能有胶连逻辑(Glue Logic)。l上层模块一般只包含模块例化与连接!第12页/共110页一(1)、模块化设计编码风格上层模块例化与连接底层模块:/模块间不包含胶连逻辑module md_top();mod_A A1(.a(a),.b(b),)mod_B B1(.a(a),.b(b),);endmodulemodule mod_A();output a,b;assign b=();
6、endmodule/模块间包含胶连逻辑module md_top();mod_A A1(.a(a),.b(b),)mod_B B1(.a(a),.b(!b),);endmodulemodule mod_A();output a,b;assign b=();endmodule第13页/共110页一(1)、模块化设计编码风格1.1 每个模块的输出信号使用寄存器输出。1.1 路径延时大的输入信号使用寄存器输入。1.1 模块之间不能有胶连逻辑(Glue Logic)。第14页/共110页一(2)、同步设计编码风格同步设计:电路的逻辑行为在统一的时钟边沿进行。异步设计:不依赖于时钟。同步设计:稳定可靠,
7、有效避免毛刺干扰;有利于STA等EDA工具分析和设计等;可移植性好;现代ASIC设计和FPGA设计都推荐同步设计!第15页/共110页一(2)、同步设计编码风格2.1 尽可能采用一个时钟边沿触发寄存器。多个时钟:跨时钟域信号需要正确同步,违背同步设计的原则。同一时钟两个边沿:相邻寄存器建立时间约束更严格!第16页/共110页一(2)、同步设计编码风格2.1.1 FPGA设计避免内部逻辑产生新的时钟。内部逻辑产生的时钟不能走全局时钟网络,因此时钟延时和抖动都比较大,很容易导致时序不满足!采用PLL或DLL产生新的时钟信号。采用时钟使能。第17页/共110页一(2)、同步设计编码风格举例1:时钟分
8、频产生新的时钟。/module-4 counteralways(posedge clk)cnt=cnt+1b1;/divide clockalways(posedge clk)if(cnt=2b11)clk1=1b1;elseclk1=1b0;/reg2 logicalways(posedge clk1)reg2=reg1;分频器导致CLK1时钟延落后CLK时钟沿,从而可能无法满足reg1到reg2的保持时间约束第18页/共110页一(2)、同步设计编码风格正确的做法:将分频后的信号作为时钟使能信号!/module-4 counteralways(posedge clk)cnt=cnt+1b1
9、;/divide clockalways(posedge clk)if(cnt=3b111)reg2_en=1b1;else reg2_en=1b0;/reg2 logicalways(posedge clk)if(reg2_en)reg2=reg1;Reg2触发器也是由CLK触发,时钟skew小,容易满足时序约束第19页/共110页一(2)、同步设计编码风格举例2:内部逻辑门控时钟。/gating clockassign clk_gate=clock&clock_en;/using gated clock always(posedge clk_gate)q=in;简单的时钟门控:(1)毛刺;
10、(2)生成的时钟信号延时大;(3)生成的时钟信号不完整。第20页/共110页一(2)、同步设计编码风格正确的做法:利用门控信号作为时钟使能信号。/using clock enable signalalways(posedge clk)if(enable)q=data;第21页/共110页一(2)、同步设计编码风格改进的时钟门控方法:先寄存门控信号!关键点:采用了下沿锁存门控信号!有效的避免了时钟上升沿时门控信号的出现毛持等问题!第22页/共110页一(2)、同步设计编码风格2.2 延迟应该由触发器来控制。同步信号每经过一级触发器就延迟一个时钟周期。同步电路中的延迟时间应该转化为时钟周期数目。不
11、能通过组合逻辑延迟链来“凑”延迟!第23页/共110页一(2)、同步设计编码风格举例1:在某个信号有效后延时2us产生一个信号。/using delay linesalways(a)begin delay0=a;for(i=0;iMAX;i=i+1);delayi+1=delayi;a_delay=delayMAX;end延时受PVT影响严重!输出容易产生毛刺!第24页/共110页一(2)、同步设计编码风格正确的做法:采用计数产生延时。设TP=10ns,使用计数器,使计数模为d/TP=200,8位计数器即可实现。/using counteralways(posedge clk)begin if
12、(clr)counter=0;else if(state=a_arrvl)counter=counter+1;endalways(posedge clk)if(counter=199)a_delay=1b1;else a_delay=1b0;第25页/共110页一(2)、同步设计编码风格举例2:边沿检测。问题:脉冲宽度取决于逻辑门的延时,随着工艺或工作环境的改变,延时将发生改变,脉冲宽度也将缩短,使得后续电路可能无法识别这个脉冲!第26页/共110页一(2)、同步设计编码风格同步边沿检测电路/register sig1always(posedge clk)sig1_d=sig1;/detect
13、 positive pulseassign sig1_pos_pulse=sig1&(sig1_d);/detect negative pulseassign sig2_neg_pulse=(sig1)&sig1_d;/detect double pulseassign sig2_neg_pulse=sig1 sig1_d;第27页/共110页一(2)、同步设计编码风格2.3 组合逻辑的输出不能没有经过寄存而直接反馈至其输入。组合逻辑环是异步设计。它将引起电路工作不稳定。任何一个反馈环路中都必须包括触发器。第28页/共110页一(2)、同步设计编码风格举例1:环形振荡器器。问题:脉冲宽度取决于
14、逻辑门的延时,随着工艺或工作环境的改变,延时将改变,使生成的脉冲宽度发生改变,从而影响后级电路!第29页/共110页一(2)、同步设计编码风格举例1:在组合逻辑反馈回路上插入寄存器。/divide clock by 2always(posedge clk)clk_div2=clk_div2;第30页/共110页一(2)、同步设计编码风格2.3.1 尽量避免使用锁存器(Latch)。锁存器是电平敏感的存储器。锁存器从电路结构上,也是一个组合逻辑环。锁存器容易传递毛刺,导致电路工作不稳定。FPGA(特别是Altera公司)是基于触发器结构的。LE中可能没有存储器。在FPGA中实现锁存器可能需要多个
15、LE共同实现。第31页/共110页一(2)、同步设计编码风格2.3.2 避免引入意外锁存器。不规范的代码编写容易导致不必要的锁存器。如果确实需要锁存器,那么:2.3.3 通过使用FPGA公司设计的锁存器IP以减少其不利影响。同样需要遵循一定的编码风格。第32页/共110页一(2)、同步设计编码风格举例1:不完整的分支语句赋值引入latch。/if without else infers latchalways(en)if(en)q=data;/case without default infers latchalways(addr)case(addr)2b00:y=1;2b10:y=0;end
16、case;第33页/共110页一(2)、同步设计编码风格举例1:反馈的MUX结构也可能导致latch。/mux with feedbackassign q=sel?d:q;第34页/共110页一(2)、同步设计编码风格在代码中明确例化latch IP遵循FPGA公司规定的编码规范以生成需要的latch。在资源利用报告中,检查有没有生成“安全”的latch。第35页/共110页一(2)、同步设计编码风格举例2:生成安全的latch。/infer D latchalways(enable)if(enable)q=data;/infer RS latchalways(set or reset)if(
17、set)q=1;else if(reset)q=0;第36页/共110页一(2)、同步设计编码风格2.1 尽可能采用一个时钟边沿触发寄存器。2.2 延迟应该由触发器来控制。2.3 组合逻辑的输出不能没有经过寄存而直接反馈至其输入。第37页/共110页一(3)、Verilog Coding TrapsVerilogHDL是硬件描述语言,不同于软件编程语言,例如:C/C+最重要的区别:支持并行描述。必须遵循一定的编码规则才能综合出正确的电路。第38页/共110页一(3)、Verilog Coding Traps3.1 描述组合逻辑的always语句的敏感列表要完全。always语句块中所有出现在条
18、件表达式的输入信号都要在敏感列表中声明。always语句块中所有赋值语句右边的输入信号都要在敏感列表中声明。第39页/共110页一(3)、Verilog Coding Traps不完全的敏感列表导致仿真和综合结果不一致。/incomplete sensitivity listalways(a or b)f=a&b&c/complete sensitivity listalways(a or b or c)f=a&b&c第40页/共110页一(3)、Verilog Coding Traps3.2 always语句块中采用阻塞赋值(=)描述组合逻辑,采用非阻塞赋值(=)描述时序逻辑。LHS RHS
19、 LHS=RHS任何赋值分为两步完成:计算RHS;更新LHS。阻塞赋值先计算RHS,然后马上更新RHS。非阻塞赋值先计算RHS,直到满足一定条件后,同一时刻所有非阻塞赋值才同时更新LHS。第41页/共110页一(3)、Verilog Coding Traps阻塞赋值适合描述顺序执行的行为,例如:组合逻辑。非阻塞赋值适合描述并行执行的行为,例如:在同一时钟边沿触发的寄存器。之所以必须遵循3.2,是为了综合后的电路与功能仿真时一致。第42页/共110页一(3)、Verilog Coding Traps实例:阻塞赋值描述时序逻辑。仿真综合2结果不一致!综合1不同综合工具综合的结果不一致!第43页/共
20、110页一(3)、VerilogHDL Traps实例:阻塞赋值描述时序逻辑综合结果。Syplify7.6综合结果Quartus5.1综合结果第44页/共110页一(3)、Verilog Coding Traps正确的做法:非阻塞赋值描述时序逻辑。仿真和综合结果完全一致!第45页/共110页一(3)、VerilogHDL Traps3.2.1 在同一个always语句块中不能混合使用阻塞和非阻塞描述逻辑。混合使用使得综合器难于推断描述逻辑。面向综合的要求,但对避免功能仿真竞争同样有利。规则3.2.1要求组合逻辑和时序逻辑分开描述。第46页/共110页一(3)、Verilog Coding Tr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 专题讲座
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内