Verilog设计优化.ppt

上传人:牧羊曲112 文档编号:6522829 上传时间:2023-11-08 格式:PPT 页数:48 大小:581KB
返回 下载 相关 举报
Verilog设计优化.ppt_第1页
第1页 / 共48页
Verilog设计优化.ppt_第2页
第2页 / 共48页
Verilog设计优化.ppt_第3页
第3页 / 共48页
Verilog设计优化.ppt_第4页
第4页 / 共48页
Verilog设计优化.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《Verilog设计优化.ppt》由会员分享,可在线阅读,更多相关《Verilog设计优化.ppt(48页珍藏版)》请在三一办公上搜索。

1、第十章 设计方法与设计优化,EDA技术与应用,教学重点,可综合的设计技术 可综合的结构 流水线设计技术,资源共享 阻塞与非阻塞赋值 毛刺的消除,10.1 设计的可综合性,10.1.1 可综合的设计,综合过程,Verilog行为级或数据流电路建模,RTL级功能块,逻辑优化,优化后的门级网表,目标工艺面积和定时约束,Verilog基本元素与硬件电路元件间的映射,数据类型(wire,reg,integer)常量语句(if,case,assign)结构(门,模块),值(0,1,无关值,不定值)元件(连线,触发器,寄存器,锁存器,ALU,MUX),不使用initial、延时描述和forever、whil

2、e、repeat 尽量采用同步方式 建议采用行为语句 always描述组合逻辑,敏感信号列出所有输入信号 尽量使用器件的全局复位端和时钟端 任务和函数通常被综合成组合逻辑,10.1.2 可综合的verilog结构,不支持=,!=要求/,%除数是2的指数,运算符+,-,*,%,&,&,|,|,=,!=,&,|,!=,?:,端口类型 input,output,inout,parameter,数据类型 wire,reg,integer,module,macromodule,可综合说明,Verilog结构,条件语句if-else,case,casex,casez,endcase,同一reg采用一种,过

3、程赋值:阻塞=,非阻塞=,持续赋值 assign,基本门元件and,nand,or,nor,xor,xnor,notbuf,bufif1,bufif0,notif1,notif0pullup,pulldown,可综合说明,Verilog结构,编译向导include,define,ifdef,else,endif,task,endtask,function,endfunction,过程语句 always块语句 begin-end,循环语句 for,可综合说明,Verilog结构,忽略的verilog结构,不支持的verilog结构,不支持的verilog结构,10.2 流水线设计技术,流水线操作

4、,【例10.1】非流水线 8位全加器module adder8(cout,sum,ina,inb,cin,clk);output7:0 sum;output cout;input7:0 ina,inb;input cin,clk;reg7:0 tempa,tempb,sum;reg cout;reg tempc;,always(posedge clk)begintempa=ina;tempb=inb;tempc=cin;endalways(posedge clk)begin cout,sum=tempa+tempb+tempc;endendmodule,普通8位全加器RTL图,时序分析 Too

5、ls|Timing Analyzer Tool目标器件 FLEX10K EPF10K10TC144-3,普通8位全加器,【例10.2】4级流水线 8位全加器module pipeline(cout,sum,ina,inb,cin,clk);output7:0 sum;output cout;input7:0 ina,inb;input cin,clk;reg7:0 tempa,tempb,sum;reg tempci,firstco,secondco,thirdco,cout;reg1:0 firsts,thirda,thirdb;reg3:0 seconda,secondb,seconds;

6、reg5:0 firsta,firstb,thirds;,always(posedge clk)begin tempa=ina;tempb=inb;tempci=cin;end always(posedge clk)/第一级加(低2位)begin firstco,firsts=tempa1:0+tempb1:0+tempci;firsta=tempa7:2;firstb=tempb7:2;endalways(posedge clk)/第二级加(第2、3位相加)begin secondco,seconds=firsta1:0+firstb1:0+firstco,firsts;seconda=fi

7、rsta5:2;secondb=firstb5:2;end,always(posedge clk)/第三级加(第4、5位相加)begin thirdco,thirds=seconda1:0+secondb1:0+secondco,seconds;thirda=seconda3:2;thirdb=secondb3:2;endalways(posedge clk)/第四级加(高两位相加)begin cout,sum=thirda1:0+thirdb1:0+thirdco,thirds;endendmodule,4级流水线8位全加器,10.3 资源共享,采用函数或任务,共享复杂的运算单元 用括号控制

8、综合结果,重用计算结果 模块数据宽度尽量小,【例10.3】2个加法器和1个选择器module resource1(sum,a,b,c,d,sel);parameter size=4;outputsize:0 sum;input sel;inputsize-1:0 a,b,c,d;regsize:0 sum;always(a or b or c or d or sel)beginif(sel)sum=a+b;elsesum=c+d;endendmodule,【例10.4】2个选择器和1个加法器module resource2(sum,a,b,c,d,sel);parameter size=4;o

9、utputsize:0 sum;input sel;inputsize-1:0 a,b,c,d;regsize:0 sum;regsize-1:0 atemp,btemp;always(a or b or c or d or sel)begin if(sel)begin atemp=a;btemp=b;endelse begin atemp=c;btemp=d;endsum=atemp+btemp;endendmodule,器件资源消耗比较,【例10.5】设计可重用举例1module adder(s1,s2,a,b,c);output4:0 s1,s2;input3:0 a,b,c;reg4:

10、0 s1,s2;always(a or b or c)begins1=a+b;s2=c+a+b;endendmodule,RTL图,【例10.6】设计可重用举例2module adder(s1,s2,a,b,c);output4:0 s1,s2;input3:0 a,b,c;reg4:0 s1,s2;always(a or b or c)begins1=a+b;s2=c+(a+b);endendmodule,RTL图,10.4 过程,过程是一个独立的运行单元 always过程 initial过程 assign赋值语句 元件调用,10.4.1 过程,过程的特点 过程只有执行和等待两种状态 过程一

11、般由敏感信号的变化启动 各过程并发执行 1个过程只能描述1个同步时序逻辑,组合与时序逻辑尽量分配到不同过程 各过程通过握手信号相互通信和协调,10.4.1 过程间的通信,DATA,10.5 阻塞与非阻塞赋值,阻塞与非阻塞赋值的定义,(1)非阻塞(non_blocking)赋值方式 赋值符号为=,在整个过程块结束时完成赋值,可以理解为并行执行。(2)阻塞(blocking)赋值方式 赋值符号为=,在该语句结束时就完成赋值。如果一个块语句有多条阻塞赋值语句,那么在前面的赋值语句没有完成之前,后面的语句就不能执行,可以理解为顺序执行。,在可综合的硬件设计中,使用阻塞和非阻塞赋值语句时,应注意以下原则

12、(1)当用“always”块来描述组合逻辑时,既可以用阻塞赋值,也可以采用非阻塞赋值,应尽量使用阻塞赋值。(2)对时序逻辑描述和建模,使用非阻塞赋值方式。(3)为锁存器(Latch)建模,应使用非阻塞赋值。(4)若在同一个“always”过程块中既为组合逻辑建模,又为时序逻辑建模,最好使用非阻塞赋值方式。,在可综合的硬件设计中,使用阻塞和非阻塞赋值语句时,应注意以下原则(5)在一个“always”过程块中,最好不要混合使用阻塞赋值和非阻塞赋值,虽然同时使用这两种赋值方式在综合时并不一定会出错,但对同一个变量不能既进行阻塞赋值,又进行非阻塞赋值,这样在综合时会报错。(6)不能在两个个或两个以上的

13、“always”过程块中对同一个变量赋值,这样会引发冲突,在综合时会报错。(7)仿真时使用$strobe显示非阻塞赋值的变量。,时序逻辑建模应尽量使用非阻塞赋值方式,【例10.9】阻塞赋值方式描述的移位寄存器1module block1(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q3=q2;/注意赋值语句的顺序 q2=q1;q1=q0;q0=din;end endmodule,例10.9的RTL综合结果,【例10.10】阻塞赋值方式描述的移位寄存器2。module blo

14、ck2(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q3=q2;q1=q0;/该句与下句的顺序与例10.9颠倒 q2=q1;q0=din;end endmodule,例10.10的RTL综合结果,【例10.11】阻塞赋值方式描述的移位寄存器3。module block3(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q0=din;/4条赋值语句的顺序与例1

15、0.9中完全颠倒 q1=q0;q2=q1;q3=q2;end endmodule,例10.11的RTL综合结果,【例10.12】非阻塞赋值方式描述的移位寄存器。module block4(q0,q1,q2,q3,din,clk);input clk,din;output reg q0,q1,q2,q3;always(posedge clk)begin q3=q2;q1=q0;q2=q1;q0=din;end endmodule,结 论,对于阻塞赋值来说,赋值语句的顺序对最后的综合结果有着直接的影响。而如果采用非阻塞赋值方式来描述的话,则可以不考虑赋值语句的排列顺序,只需将其连接关系描述清楚即可

16、。,信号在FPGA器件内部通过连线和逻辑门时,都有一定的延时。因此多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,往往会出现一些不正确的“毛刺”(Glitch),称为“冒险”(Hazard)现象。这些毛刺在电路板的设计中由于PCB走线时,存在分布电感和分布电容,所以许多毛刺能够被自然滤除,而在PLD内部没有分布电感和电容,这些毛刺将被完整地保留并向下一级传递,所以在FPGA设计中,如何消除毛刺就变得很重要。,10.6 毛刺的消除,可通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器。还可根据D触发器的D

17、输入端对毛刺不敏感的特点而消除毛刺,举例说明,【例10.23】长帧同步时钟的产生module longframe1(clk,strb);parameter DELAY=8;input clk;output reg strb;reg7:0 counter;always(posedge clk)begin if(counter=255)counter=0;else counter=counter+1;endalways(counter)begin if(counter=(DELAY-1)strb=1;else strb=0;endendmodule,毛刺,时序仿真输出波形,引入了D触发器的长帧同步

18、时钟的产生module longframe2(clk,strb);parameter DELAY=8;input clk;output strb;reg7:0 counter;reg temp,strb;always(posedge clk)begin if(counter=255)counter=0;else counter=counter+1;endalways(posedge clk)begin strb=temp;end/引入触发器always(counter)begin if(counter=(DELAY-1)temp=1;else temp=0;endendmodule,消除毛刺后的时序仿真输出波形,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号