首页 systemVerilog快速入门PPT

systemVerilog快速入门PPT

举报
开通vip

systemVerilog快速入门PPTSystemVerilog讲座第一讲:SystemVerilog基本知识夏宇闻神州龙芯集成电路设计公司2008精选pptVerilogHDL的发展历史1984:GatewayDesignAutomation推出Verilog初版1989:Gateway被CadenceDesignSystems公司收购1990:Cadence向业界公开VerilogHDL标准1993:OVI提升theVerilog标准,但没有被普遍接受1995:IEEE推出VerilogHDL(IEEE1364-1995)标准2001:IEEE推出...

systemVerilog快速入门PPT
SystemVerilog讲座第一讲:SystemVerilog基本知识夏宇闻神州龙芯集成电路设计公司2008精选pptVerilogHDL的发展历史1984:GatewayDesignAutomation推出Verilog初版1989:Gateway被CadenceDesignSystems公司收购1990:Cadence向业界公开VerilogHDL 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 1993:OVI提升theVerilog标准,但没有被普遍接受1995:IEEE推出VerilogHDL(IEEE1364-1995)标准2001:IEEE推出VerilogIEEEStd1364-2001标准2002:IEEE推出VerilogIEEEStd1364.1-2002标准2002:Accellera对SystemVerilog3.0进行标准化–Accellera是OVI&VHDLInternational(VI)合并后的国际标准化组织2003:Accellera标准化后的SystemVerilog3.12006:IEEE推出带SystemVerilog扩展的Verilog新标准精选ppt为什么称SystemVerilog3.x?SystemVerilog是对Verilog革命性的扩展Verilog1.0-IEEE1364-1995“Verilog-1995”标准–第一代IEEEVerilog标准Verilog2.0-IEEE1364-2001“Verilog-2001”标准–第二代IEEEVerilog标准–显著提升了Verilog-1995标准的性能SystemVerilog3.x-国际标准化组织对Verilog-2001的扩展–第三代Verilog标准–DAC-2002-SystemVerilog3.0–DAC-2003-SystemVerilog3.1精选pptSystemVerilog是Verilog-2001扩展后的超集assertionsmailboxestestprogramblockssemaphoresclockingdomainsconstrainedrandomvaluesprocesscontroldirectCfunctioncalls-----------------------SystemVerilog------------------------------------fromC/C++--------classesdynamicarraysinheritanceassociativearraysstringsreferences精选pptSystemVerilog是Verilog-2001扩展后的超集interfacesdynamicprocessesnestedhierarchy2-statemodelingbyteunrestrictedportspackedarraysimplicitportconnectionsarrayassignmentsenhancedliteralsenhancedeventcontroltimevalues&unitsunique/prioritycase/iflogic-specificprocessesrootnamespacealiasconst&=|=^=%=--------------------------------------------------------------fromC/C++--------intglobalsbreakshortintenumcontinuelonginttypedefreturnBytestructuresdo-whileShortrealunions++--+=-=*=/=voidcasting>>=<<=>>>=<<<=aliasconst&=|=^=%=-------------------------SystemVerilog-------------------------------精选pptSystemVerilog是Verilog-2001扩展后的超集ANSICstyleportsstandardfileI/O(*attributes*)generate$value$plusargsconfigurationslocalparam`ifndef`elsif`linememorypartselectsconstantfunctions@*variablepartselect--------fromC/C++--------multidimensionalarrayssignedtypesAutomatic**(poweroperator)----------------------------------Verilog-2001-------------------------------精选pptSystemVerilog是Verilog-2001扩展后的超集modules$finish$fopen$fcloseinitialwireregparameters$display$writedisableintegerrealfunction/task$monitoreventstimealways@`define`ifdef`elsewait#@packedarraysassign`include`timescalefork–join2Dmemory--------fromC/C++--------begin–end+=*/%whileforforever>>< 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 设计和验证语言的统一提高了设计效率,学习周期很短,设计和验证人员都乐意采用:-可自动生成高级的受约束-随机测试信号语句,大大降低了设计和验证的复杂度;-完整的统一的断言技术改善了设计小组和验证小组之间的交流。使得我们有可能使用更高速度的仿真工具,加速了设计的完成精选pptSyestemVerilog的全面验证和设计统一的断言扩展了验证方法的效率-基于断言的验证-形式化特征的验证-线路板上的加速验证精选pptSystemVerilog设计语言精选pptVerilog-2001的事件调度当前的时隙#0阻塞赋值计算非阻塞表达式的RHS连续赋值$display命令更新非阻塞表达式的LHS阻塞赋值更新原语的输入和的输出,$monitor系统命令$strobe系统命令语句激活语句暂停活动非阻塞赋值监视来自上一个时隙Verilog-2001时隙被分成4等级区域新的名称将”延迟”事件区域去下一个时隙精选ppt编写代码的八项原则一般情况下,编写代码时如能按照以下8条原则就可以避免90%-100%由Verilog代码引起的冒险竞争现象:1)时序逻辑----使用非阻塞赋值2)锁存器----使用非阻塞赋值3)用always块生成的组合逻辑----用阻塞赋值4)在同一个always块中既有时序逻辑又有组合逻辑---用非阻塞赋值5)在同一个always块中不要既用阻塞赋值又用非阻塞赋值6)不要在一个以上的always块中对同一个变量赋值7)用$strobe显示用非阻塞赋值指定的变量值8)不要用#0过程性赋值以上8条原则与Verilog-1995完全一致,仍旧适用于SystemVerilog精选pptSystemVerilog的基本数据类型SystemVerilog可以定义:4态数据类型:0,1,X,Z2态数据类型:0,1未初始化的变量=X未初始化的线网=Z与Verilog-2001相同未初始化的变量=0未初始化的线网*=0SystemVerilog新添加的regr;//4态,Verilog-2001(位宽可变)数据类型integeri;//4态,Verilog-2001(32位)有符号数据类型logicw;//4态,(位宽可变)0,1,x,或者zbitb;//2态,(位宽可变)1位0或1byteb8;//2态,(8位)有符号整型数shortints;//2态,(16位)有符号整型数inti;//2态,(32位)有符号整型数longintl;//2态,(64位)有符号整型数[注]:*-bit类型既可以用于变量也可以用于线网。另外还加入了其他一些数据类型SystemVerilog新添加的数据类型reg[15:0]r16;logic[15:0]w16;bit[15:0]b16;reg,logic和bit数据类型位宽可以改变精选ppt几乎通用的数据类型—logic(等价于原来的reg类型)logic类型类似于VHDL中的std_ulogic类型-对应的具体元件待定-只允许使用一个驱动源,或者来自于一个或者多个过程块的过程赋值对同一变量既进行连续赋值又进行过程赋值是非法的,不允许的。-在SystemVerilog中:logic和reg类型是一致的(类似于Verilog中wire和tri类型是一致的)wire数据类型仍旧有用因为:-多驱动源总线:如多路总线交换器(buscrossbars&onehotmuxes)-双向总线(两个驱动源)logic是4态数据类型的变量bit相当于2态数据类型的变量或线网精选ppt用户定义的类型---typedef允许生成用户定义的或者容易改变的类型定义:好的命名规则用“_t”做后缀typedefexisting_typemytype_t;`ifdefSTATE2typedefbitbit_t;//2–state`elsetypedeflogicbit_t;//4–stateendifdefines.vh精选ppt设计策略:用各种typedefs只要用typedef就可以很容易地在4态和2态逻辑仿真之间切换以加快仿真速度verilog_cmddefine.vhtb.vdff.vverilog_cmddefine.vhtb.vdff.v+define+STATE2确省,为4态逻辑值仿真只用2态逻辑值,仿真速度快精选ppt已确定的和待确定的类型四态和两态设计策略用待确定类型是最容易的。功能相当于VHDL中的std_ulogic类型,很有效率与VHDL中的std_logic类型没有功能可比较的类型`ifdefSTATE2typedefbitbit_t//2-态`elsetypedeflogicbit_t;//4-态`endifdefine.vh`ifdefSTATE2typedefbitbit_t//2-态typedef???tri_t//2-态`elsetypedefregbit_t;//4-态typedefwiretri_t;//4-态`endifdefine.vh无多驱动器的2态类型----也许下一个版本的SystemVerilog能得到修正没有容易的std_ulogic和std_logic之间切换的等价语句精选pptVerilog-2001数据类型(模块内部)模块的输入必须是线网类型的信号moduleA(out,in);outputout;inputin;regout;wirein;always@(in)out=in;endmodulemoduleB(out,in);outputout;inputin;wireout;wirein;assignout=in;endmodule用reg类型的输出(过程赋值语句的LHS必须用变量类型)输出是线网类型的(用连续赋值驱动的变量类型)精选pptVerilog-2001数据类型(模块外部)信号由源驱动的必须定义为线网类型moduleA(out,in);黑箱输出输入moduleB(out,in);黑箱输出输入实例的输入往往由测试模块的变量驱动a2b输出信号必须定义为线网类型moduletest;regt_in;wirea2b;wiret_out;Au1(.out(a2b),.in(t_in));Bu2(.out(t_out),.in(a2b));initialt_in=1;t_out精选pptVerilog-2001数据类型(模块内部、外部和测试放在一起)线网声明语句过程赋值语句的LHS必须用变量类型,通常是reg类型这些都声明为线网类型moduletest;regt_in;wirea2b;wiret_out;Au1(.out(a2b),.in(t_in));Bu2(.out(t_out),.in(a2b));initialt_in=1;…….endmodulea2bt_out变量声明语句精选pptSystemVerilog—对端口定义没有限制SystemVerilog允许过程或者连续赋值给变量赋值线网声明语句logic类型可以替代所有其他类型,包括reg类型这些都声明为线网类型moduletest;logict_in;logica2b;logict_out;Au1(.out(a2b),.in(t_in));Bu2(.out(t_out),.in(a2b));initialt_in=1;…….endmodulea2bt_out只有一个驱动源的变量都可以声明为logic类型精选pptSystemVerilog表示数字的语法有改进modulefsm_sv1b_3;……..always@*beginnext=`x;case(stat側Ů………endmodule类似VHDL的(Other=>…)语句进行“填满”的操作`x等于Verilog-2001的`bx`z等于Verilog-2001的`bz`1等于赋-1的值(即-1的2进制补码,也就是所有位赋为1)`0等于赋给0的值(也就是所有位赋为0)精选ppt特定逻辑过程SystemVerilog有三个新的特定的逻辑过程来表达设计者的意图:always_combalways_latchalways_ffalways_combbegintmp1=a&b;tmp2=c&d;y=tmp1|tmp2;endalways_latchif(en)q<=d;always_ff@(posedgeclk,negedgerst_n)if(!rst_n)q<=0;elseq<=d;允许仿真工具进行某些语法功能检查(lintingfunctionality)精选pptalways_comb特定逻辑过程always_comb-允许仿真工具检查正确的组合逻辑代码风格正确的moduleao1(outputbit_ty,inputbit_ta,b,c,d);bit_ttmp1,tmp2;always_combbegintmp1=a&b;tmp2=c&d;y=tmp1|tmp2;endendmodulemoduleao1(outputbit_ty,inputbit_ten,d);always_combif(en)q<=0;endmodule错误:想生成组合逻辑但产生了锁存器可能发生的错误信息:精选pptalways_latch特定逻辑过程always_latch-允许仿真工具检查正确的锁存器逻辑代码风格正确的modulelat1(outputbit_tq,inputbit_ten,d);always_latchif(en)q<=d;endmodulemodulelat1(outputbit_tq,inputbit_ten,d);always_latchif(en)q<=d;elseq<=q;endmodule错误:组合逻辑反馈环路不能生成锁存器可能发生的错误信息:精选pptalways_ff特定逻辑过程always_ff-允许仿真工具检查正确的寄存器逻辑代码风格正确的moduledff1(outputbit_tq,inputbit_td,clk,rst_n);always_ff@(posedgeclk,negedgerst_n)if(!rst_n)q<=0;elseq<=d;endmodulemoduledff1(outputbit_tq,inputbit_td,clk,rst_n);always_ff@(clk,rst_n)if(!rst_n)q<=0;elseq<=q;endmodule错误:非法敏感列表不能生成触发器可能发生的错误信息:精选pptalways@*与always_comb的差别它们之间的真正有什么差别,IEEEVSG和AccelleraSystemVerilog委员会还在辩论中,尚未最后确认modulefsm_svlb_3….always@*beginnext=‘x;case(state)…..end…..endmodulealways_comb对于函数内容的变化是敏感的存在一些差别always_comb可用来检查非法锁存器always_comb在0时刻结束时自动触发一次@*可以写在always块内modulefsm_svlb_3….always_combbeginnext=‘x;case(state)…..end…..endmodule精选pptVoid函数没有返回值的函数不必从Verilog表达式中被调用-Void函数可以象Verilog任务一样,独立地调用与Verilog任务不同,Void函数-不能等待-不能包括延迟-不能包括事件触发-被always_comb搜寻到的信号自动加入敏感列表精选pptalways_comb与Void函数modulecomb1(outputbit_t[2:1]y,inputbit_ta,b,c);always_comborf1(a);functionvoidorf1;inputa;y[1]=a|b|C;endfunctionalways_combort1(a);taskort1;inputa;y[2]=a|b|C;endtaskendmodulealways@*orf1(a);等价于:always@(a)等价于:always@(a,b,c)void函数的行为类似于0延迟的任务等价于:always@(a)Verilog任务b和c是隐含的输入always@*ort1(a);等价于:always@(a)b和c是隐含的输入-或者--或者-只有always_comb对函数的内容的变化是敏感的精选pptalways_ff用于双数据率(DDR)时序逻辑??有可能提高未来综合工具的性能??无正跳变沿触发时钟信号(clk)无负跳变沿触发时钟信号(clk)目前对综合器来说该语法是非法的moduleddrff(outputbit_tq,inputbit_td,clk,rst_n);always_ff@(clk,negedgerst_n)if(!rst_n)q<=0;elseq<=d;endmodule去掉正跳变沿是否可以允许用正负两个沿触发??always_ff显示设计者的意图这能综合成ASIC厂商库中的双数据率(DDR)时序逻辑吗??精选ppt设计意图—unique/priority有优先的还是没有优先的?来回考虑综合时常容易产生的错误!full_caseparallel_case看似“完全一样”的语句对应的实体是不同的这些指令告诉综合编译器,编写的设计代码有些地方和仿真器理解的有些不同综合前与综合后的仿真可能存在一些差别unique和priority这两个新添的指令告诉仿真器和综合器同一个信息uniquecaseprioritycaseuniqueifpriorityif使得仿真器、综合器和形式化验证工具的行为变得一致精选ppt设计意图—priorityprioritycase:-full_casefull_case的仿真和综合所有的可能都已经定义了,任何其他的可能都是错误的prioritycase(1’b1)irq0:irq=4’b1<<0;irq1:irq=4’b1<<1;irq2:irq=4’b1<<2;irq3:irq=4’b1<<3;endcasepriorityif:-所有的分支被指定后不需要最后结束的elsepriorityif(irq0)irq=4’b1;elseif(irq1)irq=4’b2;elseif(irq2)irq=4’b4;elseif(irq3)irq=4’b8;prioritycase(1’b1)irq0:irq=4’b1<<0;irq1:irq=4’b1<<1;irq2:irq=4’b1<<2;irq3:irq=4’b1<<3;default:irq=0;endcasepriorityif(irq0)irq=4’b1;elseif(irq1)irq=4’b2;elseif(irq2)irq=4’b4;elseif(irq3)irq=4’b8;elseirq=4’b0;irq0到irq3中至少有一个必定为高否则仿真就出现运行错误default或最后的else语句使得priority关键字无效精选ppt设计意图—Uniqueuniquecase:-full_case/parallel_casefull_case和parallel_case的仿真和综合所有的可能都已经定义了,任何其他的可能都是错误的uniquecase(1’b1)sel[0]:muxo=a;sel[1]:muxo=b;sel[2]:muxo=c;endcaseuniqueif:-full_case/parallel_caseuniqueif(sel[0])muxo=a;elseif(sel[1])muxo=b;elseif(sel[2])muxo=c;ifsel==3‘b011仿真出现运行错误任何没有预料到的sel值将使仿真出现运行错误uniquecase(1’b1)sel[0]:muxo=a;sel[1]:muxo=b;sel[2]:muxo=c;default:muxo=‘x;endcaseuniqueif(sel[0])muxo=a;elseif(sel[1])muxo=b;elseif(sel[2])muxo=c;elsemuxo=‘x;对没有预料到的sel值不会出现仿真运行错误unique仍旧测试覆盖的条件精选pptMooreFSM举例--状态图FSM状态图精选ppt两个always块的编码风格(符号、参数赋值—时序always块)modulesm2a(rd,ds,go,ws,clk,rstN);outputrd,ds;inputgo,ws,clk,rstN;parameterIDLE=2’b00,READ=2’b01,DLY=2’b10,DONE=2’b11;reg[1:0]state,next;always@(posedgeclkornegedgerstN)if(!rstN)state<=IDLE;elsestate<=next;Verilog没有枚举类型变量参数被用于有限状态机的设计精选ppt两个always块的编码风格(组合逻辑always块-连续赋值输出)always@(stateorgoorws)beginnext=2’bx;case(state)IDLE:if(go)next=READ;elsenext=IDLE;READ:next=DLY;DLY:if(!ws)next=DONE;elsenext=READ;DONE:next=IDLE;endcaseendassignrd=((state==read)||(state==DLY);assignds=(state==DONE);endmodule仿真差错诀窍综合优化诀窍输出方法1(连续赋值)精选ppt两个always块的编码风格(组合逻辑always块-always阻塞赋值输出)…………always@(stateorgoorws)beginnext=2’bx;rd=1’b0;ds=1‘b0;case(state)IDLE:if(go)next=READ;elsenext=IDLE;READ:beginrd=1’b1;next=DLY;endDLY:beginrd=1’b1;if(!ws)next=DONE;elsenext=READ;endDONE:beginds=1’b1;next=IDLE;endendcaseendendmodule初始化确省值的赋值初始化输出值到确省态输出方法2(always块赋值)精选ppt枚举(enumerated)数据类型(更高抽象层面的功能强大的数据类型)typedefenum{red,yellow,green,blue,white,black}clolors_t;clolors_tlight1,light2;initialbeginlight1=red;if(light1==red)light1=green;end匿名的2态整型(int)变量enum{red,yellow,green}light1,light2;enum{bronze=3,silver,gold}medal;enum{a=0,b=7,c,d=8}alphabet;enum{bronze=4’h3,silver,gold}medal;silver=4,gold=5;silver=4’h4,gold=4’h5;语法错误(隐含)c=8,(明确)d=8;traffic_light=0(“red”)traffic_light=2(“green”)精选ppt枚举类型的抽象modulefsm_svla_3;….enum{IDLE,READ,DLY,DONE,XX}state,next;….endmodule无指定值的抽象枚举名(值可以在以后指定)枚举变量state和next逗号把括在{}内的枚举名分隔开来枚举关键字精选ppt枚举--赋整型值modulefsm_svla_3;….enum{IDLE=3’b000,READ=3’b001,DLY=3’b010,DONE=3’b011,XX=3’b111}state,next;….endmodule未指定数据类型,即假定数据为整型确省类型用户对枚举名赋值精选ppt在FSM设计用3个always块应用枚举modulefsm_svla_3;(outputregrd,ds,inputgo,ws,clk,rst_n);enum{IDLE,READ,DLY,DONE,XX}state,next;always@(posedgeclk,negedgerst_n)if(!rst_n)state<=IDLE;elsestate<=next;always@*beginnext=xx;case(state)IDLE:if(go)next=READ;elsenext=IDLE;READ:next=DLY;DLY:if(!ws)next=DONE;elsenext=READ;DONE:next=IDLE;end….枚举的测试和赋值………..always@(posedgeclk,negedgerst_n)if(!rst_n)beginrd<=1’b0;ds<=1’b0;endelsebeginrd<=1’b0;ds<=1’b0;case(next)READ:rd<=1’b1;DLY:rd<=1’b1;DONE:ds<=1’b1;endcaseendendmodule逗号分开的敏感列表@*表示组合逻辑的敏感列表(简化的语法,减少RTL错误)抽象的枚举名精选ppt枚举—指定四状态值modulefsm_svlb_3;….enumreg[1:0]{IDLE=2’b00,READ=2’b01,DLY=2’b10,DONE=2’b11,XX=`x}state,next;….endmodulex赋值在仿真无关项优化综合和调试时非常有用指定4态数据类型允许数据值为x或者z精选ppt在FSM设计用3个always块应用赋值枚举modulefsm_svla_3;(outputregrd,ds,inputgo,ws,clk,rst_n);enumreg[1:0]{IDLE=2’b00,READ=2’b01,DLY=2’b10,DONE=2’b11,XX=‘x}state,next;always@(posedgeclk,negedgerst_n)if(!rst_n)state<=IDLE;elsestate<=next;always@*beginnext=xx;case(state)IDLE:if(go)next=READ;elsenext=IDLE;READ:next=DLY;DLY:if(!ws)next=DONE;elsenext=READ;DONE:next=IDLE;end….………..always@(posedgeclk,negedgerst_n)if(!rst_n)beginrd<=1’b0;ds<=1’b0;endelsebeginrd<=1’b0;ds<=1’b0;case(next)READ:rd<=1’b1;DLY:rd<=1’b1;DONE:ds<=1’b1;endcaseendendmodule从抽象到具体需要做的唯一修改就是在枚举定义处赋值赋值的枚举值精选ppt在FSM设计用3个always块SystemVerilog3.0-应用赋值枚举modulefsm_svla_3;(outputregrd,ds,inputgo,ws,clk,rst_n);enumreg[1:0]{IDLE=2’b00,READ=2’b01,DLY=2’b10,DONE=2’b11,XX=‘x}state,next;always_ff@(posedgeclk,negedgerst_n)if(!rst_n)state<=IDLE;elsestate<=next;always_combbeginnext=xx;uniquecase(state)IDLE:if(go)next=READ;elsenext=IDLE;READ:next=DLY;DLY:if(!ws)next=DONE;elsenext=READ;DONE:next=IDLE;end….………..always@(posedgeclk,negedgerst_n)if(!rst_n)beginrd<=1’b0;ds<=1’b0;endelsebeginrd<=1’b0;ds<=1’b0;case(next)READ:rd<=1’b1;DLY:rd<=1’b1;DONE:ds<=1’b1;endcaseendendmodule无论对仿真器和综合器以及形式化验证工具都相当于full_caseparallel_case允许更多的类似lint的代码检查精选ppt在FSM设计用3个always块SystemVerilog3.0-应用赋值枚举enumreg[1:0]{IDLE=2’b00,READ=2’b01,DLY=2’b10,DONE=2’b11,XX=‘x}state,next;加入四状态变量的枚举类型,允许合法状态赋值和x状态赋值以未定义的抽象状态开始enum{IDLE,READ,DLY,DONE,XX}state,next;有利于抽象有利于观察波形有利于调试和综合精选ppt枚举类型–波形显示enumreg[1:0]{IDLE=2’b00,READ=2’b01,DLY=2’b10,DONE=2’b11,XX=‘x}state,next;确切标准的波形显示能力正在定义中精选ppt循环语句的性能得到增强modulefor4a(outputreg[31:0]y,input[31:0]a,inputs);integeri;always@(aors)for(i=0;i<32;i=i+1)if(!s)y[i]=a[i];elsey[i]=a[31-i];endmodulemodulefor4b(outputlogic[31:0]y,input[31:0]a,inputs);always@(aors)for(inti=0;i<32;i++)if(!s)y[i]=a[i];elsey[i]=a[31-i];endmodule独立的迭代变量声明本地迭代变量声明自动递加本地迭代变量是自动变量退出循环后就不再存在Verilog-2001SystemVerilog显式的递加a[31:0]a[0:31]a[31:0]i1i0syy[31:0]sSystemVerilog还增加了一个do-while循环(底测试循环)精选ppt隐含的端口连接Verilog和VHDL都能用按端口名连接或按顺序连接的方式引用实例模块SystemVerilog用了两个新的隐含端口连接解决了顶层代码编写时表示端口连接代码的冗长-.name端口连接-.*隐含的端口连接大型ASIC顶层模块的端口连接非常麻烦而且冗长下面是一个中等大小模块的例子精选ppt中央算术逻辑单元(CALU)方块图注意:所有寄存器的时钟端都由“clk”驱动,异步复位都由“rst_n”驱动MultOp1regshifter(0,1,4)MultOutregAccumulatorBarrelshifter(0-16)MUXALU(32bit)Multiplier16data16321616161616323232323232alu_outaccmultoutbsaccalu_inen_accalu_op[2:0]muxselld_multop1ld_multoutld_accld_shften_shftshft_lshftbs_lshft[4:0]ld_bsmop1mult32精选ppt中央算术逻辑单元(CALU)模块之一modulecalu3(inout[15:0]data;input[4:0]bs_lshft;input[2:0]alu_op;input[1:0]shft_lshft;inputcalu_muxsel,en_shft,ld_acc,ld_bs;inputclk,rst_n);wire[31:0]acc,alu_in,alu_out,bs,mult,multout;wire[15:0]mop1;multop1multop1(.mop1,.data,.ld_multop1,.clk,.rst_n);multipliermultiplier(.mult,.mop1,.data);multoutregmultoutreg(.multout,.mult,.ld_multout,.clk,.rst_n);MultOp1regMultOutregMultipliermultop1multop1(.mop1,.data,.ld_multop1,.clk,.rst_n);端口名的匹配只需要列出一次精选ppt中央算术逻辑单元(CALU)模块之二……barrel_shifterbarrel_shifter(.bs,.data,.bs_lshft,.ld_bs,.clk,.rst_n);mult2mux(.y(alu_in),.i1(acc),.sel1(calu_muxsel));alualu(.aluout,.zero(),.neg(),.alu_in,.acc,.alu_op);accumulatoraccumulator(.acc,.alu_out,.ld_acc,.clk,.rst_n);shiftershifter(.data,.acc,.shft_lshft,.ld_shft,.en_shft,.clk,.rst_n);tribuftribuf(.data,.acc(acc[15:0]),en_acc);endmodule具备所有按端口名连接的优点Barrelshifter(0-16)MUXALU(32bit)Accumulatorshifter(0,1,4)代码更简练!!精选ppt中央算术逻辑单元(CALU)顶层模块用*表示隐含的端口modulecalu4(inout[15:0]data,input[4:0]bs_lshft,input[2:0]alu_op,input[1:0]shft_lshft,inputcalu_muxsel,en_shft,ld_acc,ld_bs,inputld_multop1,ld_multout,ls_shft,en_acc,inputclk,rst_n);wire[31:0]acc,alu_in,alu_out,bs,mult,multout;wire[15:0]mop1;multop1multtop1(.*);multipliermultiplier(.*);multoutregmultoutreg(.*);barrel_shifterbarrel_shifter(.*);mult2mux(.y(alu_in),.i0(multout),i1(acc),sell(calu_muxsel));alualu(.*,.zero(),.neg());accumulatoraccumulator(.*);shiftershifter(.*);tribuftribuf(.*,.acc(acc[15:0]);endmodule本风格重点表达端口出现不同的地方Barrelshifter(0-16)MUXALU(32bit)Accumulatorshifter(0,1,4)代码更简练MultOutregMultOp1reg精选ppt隐含.name和.*端口连接的规则在同一个实例引用中禁止混用.*和.name端口;允许在同一个实例引用中使用.name和.name(signal)连接;也允许在同一个实例引用中使用.*和.name(signal)的连接;必须用.name(signal)连接的情况:-位宽不匹配-名称不匹配-没有连接的端口instu1(…,.data(data[7:0]),….);instu2(…,.data(pdata),….);instu3(…,.berr(),….);注意:比Verilog2001有更强大的端口连接描述,表述更简洁精选pptCALU顶层模四种不同端口连接代码长度不同精选ppt隐含端口连接的缺点moduledrivera(output[7:0]y,input[7:0]a,inputena);assigny=ena?a:8’bz;endmodule如果端口标识符相同很容易造成连接错误-出错后很难发现moduledriverc(output[7:0]y,input[7:0]c,inputena);assigny=ena?c:8’bz;endmodulemoduledriverd(output[7:0]y,input[7:0]c,inputena);assigny=ena?d:8’bz;endmodulemoduledriverb(output[7:0]y,input[7:0]b,inputena);assigny=ena?b:8’bz;endmodule使能信号名ena都相同想设计的逻辑精选ppt端口连接时用别名moduledrivera(output[7:0]y1,input[7:0]a,inputena);moduledriverc(output[7:0]y3,input[7:0]c,inputena);moduledriverd(output[7:0]y4,input[7:0]c,inputena);moduledriverb(output[7:0]y2,input[7:0]b,inputena);新的SystemVerilog关键字aliasmoduleena_decode(outputregena,enb,enc,ene,input[1:0]sel);…..moduleonehot_busmux(output[7:0]y,input[7:0]a,b,c,d,input[1:0]sel);wireena,enb,enc,ene;wire[7:0]y1,y2,y3,y4;aliasy=y1=y2=y3=y4;ena_decodeu0(.*);driverau1(.*);driverau2(.*,.ena(enb));driverau3(.*,.ena(enc));driverau4(.*,.ena(ene));endmoduley,y1,y2,y3,y4都是别名连接在一起用.*缩短了实例端口的连接精选ppt用.*隐含端口连接的优缺点优点:编写顶层模块时容易多了扫描多达1000个端口的顶层设计更加容易比按照名字或者顺序连接端口的代码简洁多了。仍旧保留显式端口连接的优点编写用模块组装的顶层测试模块变得容易多了-使测试模块的信号与端口名一致缺点:可能造成不想要的连接-很难发现错误-使模块的分别编译变得复杂-用户使用错误时工具会发生崩溃对低层结构性的网表没有什么用处-原语端口很少能与线网匹配合法的工具开发者很害怕这一点.*的端口连接把所有没有必要的麻烦都清除了只列出端口连接的例外情况即可所有端口都是隐含连接的精选ppt第二讲:SystemVerilog提高了设计和验证的效率精选ppt设计和验证只需用同一种语言大大提高工作效率容易学习-SystemVerilog语言本身很容易掌握改善了设计小组和验证小组之间的联络由于具备高级语言结构,因而减少了设计和验证工作的复杂性精选ppt打包的和未打包的数组未打包的位数组打包的位数组1K16位未打包的存储器1K16位打包的存储器bita[3:0];bit[3:0]p;bit[15:0]memory[1023:0];initialbeginmemory[i]=~memory[i];memory[i][15:8]=0;endbit[1023:0][15:0]vframe;always@(vcmd)if(vcmd==INV)vfram=~vframe;打包的索引可以分块可以对整个存储器进行操作精选ppt未打包的四维数组对应这个语句最大的可访问单元为1位logicxdata[3:0][2:0][1:0][7:0][7:0][2:0][1:0][3:0]精选ppt打包的一维数组和未打包的三维数组对应这个语句最大的可访问单元为8位logic[7:0]xdata[3:0][2:0][1:0][7:0][2:0][1:0][3:0]精选ppt打包的二维数组和未打包的二维数组对应这个语句最大的可访问单元为16位logic[1:0][7:0]xdata[3:0][2:0][7:0][2:0][1:0][3:0]精选ppt打包的四维数组对应这个语句最大的可访问单元为192位logic[3:0][2:0][1:0][7:0]xdata[7:0][2:0][1:0][3:0]精选ppt数据的组织reg[47:0]pktsrc_adr;reg[47:0]pktdst_adr;reg[7:0]InstOpCde;reg[7:0]InstOpRF[127:0];信号成组后有意义-指令:操作符和操作数-包的区域:地址、数据和纠错码Verilog只提供非正式分组`defineopcode31:16reg[31:0]Instruction;Instruction[`opcode]用名称用矢量位置精选ppt数据的组织目标:把数据组织得与高级编程语言一样-使其他人能非常清晰地理解设计中数据之间的关系;SystemVerilog增加了结构,联合和数组类型-能够分别使用这些类型,或者结合起来使用从而能更精确地描述设计的意图。精选ppt数据的组织结构(Structs)保留了逻辑分组引用结构成员需要用比较长的表达式但代码的意义很容易理解struct{addr_tsrc_adr;addr_tdst_adr;data_tdata;}pkt;initialbeginpkt.src_adr=src_adr;if(pkt.src_adr==node.adr);……..end把src_adr值赋给pkt结构中的src_adr区把node结构中的adr区与pkt结构中的dst_adr区做比较精选ppt数据的组织打包的结构和打包的联合未打包的结构(Struct)-保留了逻辑分组打包的结构(Struct)-保留了逻辑分组-方便了访问typedeflogic[7:0]byte_t;typedefstructpacked{logic[15:0]opcode;logic[7:0]arg1;logic[7:0]arg2;}cmd_t;typedefunionpacked{byte_t[3:0]bytes;cmd_tfields;}instruction_u;instruction_ucmd;打包的结构打包的联合cmd[31:0]cmd.fields.opcode[15:0]cmd.fields.arg1[7:0]cmd.fields.arg2[7:0]cmd_t的区域cmd.byte[1]cmd.byte[0]cmd.byte[2]cmd.byte[3]精选ppt数据的组织打包的结构和打包的联合typedeflogic[7:0]byte_t;typedefstructpacked{logic[15:0]opcode;logic[7:0]arg1;logic[7:0]arg2;}cmd_t;typedefunionpacked{byte_t[3:0]bytes;cmd_tfields;}instruction_u;instruction_ucmd;打包的联合使得我们能方便地用不同名称引用同一个数据cmd现在等于32’hDEADBEEFinitialbegincmd.fields.opcode=16’hDEAD;cmd[7:0]=8’hEF;cmd.bytes[1]=8’hBE;不需要测试数据类型DEAD11101111BE数据映射到所有成员DEADBEEFDEADDEADBEBE1110111111101111这是同一个打包的数据结构精选ppt第三讲SystemVerilog模块的接口精选ppt实例模块端口的连接SystemVerilog的改进-用.name和.*来简化端口的连接-用接口实现SystemVerilog模块的连接--第一层-用接口实现SystemVerilog模块的连接--第二层可以用宏指令(`include)包含:任务、函数、断言等对测试平台的开发非常重要:因为接口包含了合法的接口命令对IP的开发非常重要:因为接口可以 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 出错接口信息的封装添加了传递测试平台和断言值所需要的端口精选ppt接口的功能接口能传递穿越端口的 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 数据类型有两种类型的接口元素:-声明的-作为参数可以直接传递进入模块接口可以是:-参数,常数和变量-函数和任务-断言精选pptSystemVerilog的接口白板上的设计SystemVerilog的设计总线总线总线Verilog-2001风格的设计复杂的信号连接在块中重复的总线 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 通过层次很难添加信号通信封装在接口中减少出错的机会—容易修改显著缩短代码—节省编写时间能建立高效交易模型允许自动化的块验证接口总线sig1sig2read()write()Assert精选ppt接口是什么?提供新层次结构-把内部连接和通信封装起来-把模块的通信功能从其他功能中分离出来-消除了接线引起的错误-RTL级别的抽象成为可能inti;logic[7:0]a;interfaceintf;inti;logic[7:0]a;endinterface:intfinti;logic[7:0]a;typedefstruct{inti;logic[7:0]a;}s_type;接口就是一束连接线正象结构是一束变量一样精选ppt接口的引用变量和函数接口变量可以用接口实例名加(.)变量名引用接口函数可以用接口实例名加(.)函数名引用通过接口的模块连接-能调用接口任务和函数的成员来驱动通信-抽象级和通信协议能容易地加以修改用一个包含相同成员的新接口来替换原来的接口接口改变了但是被连接的模块并未改变精选ppt接口如何工作interfaceintf;logica,b;logicc,d;logice,f;endinterfacemoduletop;int
本文档为【systemVerilog快速入门PPT】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
爱赢
公司经营范围:网络软件设计、制作、图文设计、影视制作(编辑)
格式:ppt
大小:832KB
软件:PowerPoint
页数:0
分类:教育学
上传时间:2021-02-19
浏览量:10