SystemVerilog讲座第一讲:SystemVerilog基本知识夏宇闻神州龙芯集成电路设计公司2008VerilogHDL的发展历史1984:GatewayDesignAutomation推出Verilog初版1989:Gateway被CadenceDesignSystems公司收购1990:Cadence向业界公开VerilogHDL标准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新标准为什么称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.1SystemVerilog是Verilog-2001扩展后的超集assertionsmailboxestestprogramblockssemaphoresclockingdomainsconstrainedrandomvaluesprocesscontroldirectCfunctioncalls-----------------------SystemVerilog------------------------------------fromC/C++--------classesdynamicarraysinheritanceassociativearraysstringsreferencesSystemVerilog是Verilog-2001扩展后的超集interfacesdynamicprocessesnestedhierarchy2-statemodelingbyteunrestrictedportspackedarraysimplicitportconnectionsarrayassignmentsenhancedliteralsenhancedeventcontroltimevalues&unitsunique/prioritycase/iflogic-specificprocessesrootnamespacealiasconst&=|=^=%=--------------------------------------------------------------fromC/C++--------intglobalsbreakshortintenumcontinuelonginttypedefreturnBytestructuresdo-whileShortrealunions++--+=-=*=/=voidcasting====aliasconst&=|=^=%=-------------------------SystemVerilog-------------------------------SystemVerilog是Verilog-2001扩展后的超集ANSICstyleportsstandardfileI/O(*attributes*)generate$value$plusargsconfigurationslocalparam`ifndef`elsif`linememorypartselectsconstantfunctions@*variablepartselect--------fromC/C++--------multidimensionalarrayssignedtypesAutomatic**(poweroperator)----------------------------------Verilog-2001-------------------------------SystemVerilog是Verilog-2001扩展后的超集modules$finish$fopen$fcloseinitialwireregparameters$display$writedisableintegerrealfunction/task$monitoreventstimealways@`define`ifdef`elsewait#@packedarraysassign`include`timescalefork–join2Dmemory--------fromC/C++--------begin–end+=*/%whileforforeverif-elserepeat-------------------------Verilog-1995-------------------------------SystemVerilog提高设计效率SystemVerilogRTLRTLNetlist设计效率testbenchCo-simOverheadHDLSimultionSystemVerilogtestbench进行全面验证的环境断言验证硬件辅助的验证覆盖测试平台仿真形式化特性提高了验证的水平提高了设计效率描述同样的功能,其代码可缩短2到5倍-代码短发生意外错误的概率减小了,但仍然可以综合,新的语句构造可以解决RTL仿真和综合后仿真的不匹配;-小组成员间更容易理解和交流;缩短了学习周期。SystemVerilogRTLRTLNetlist设计效率结构化的和用户定义的数据类型与封装好的接口通信.*蕴涵的端口实例引用极大地提高了仿真速度仅一种语言就能解决设计和测试问题设计和验证语言的统一提高了设计效率,学习周期很短,设计和验证人员都乐意采用:-可自动生成高级的受约束-随机测试信号语句,大大降低了设计和验证的复杂度;-完整的统一的断言技术改善了设计小组和验证小组之间的交流。testbenchCo-simOverheadHDLSimultionSystemVerilogtestbench使得我们有可能使用更高速度的仿真工具,加速了设计的完成SyestemVerilog的全面验证和设计统一的断言扩展了验证方法的效率-基于断言的验证-形式化特征的验证-线路板上的加速验证进行全面验证的环境断言验证硬件辅助的验证覆盖测试平台仿真形式化特性提高了验证的水平仿真检查硬件辅助验证SystemVerilog断言自动测试平台覆盖测试形式化验证综合抓住设计意图与每个设计和验证工程师联络学习周期短仿真检查硬件辅助验证SystemVerilog设计语言Verilog-2001的事件调度当前的时隙#0阻塞赋值计算非阻塞表达式的RHS连续赋值$display命令更新非阻塞表达式的LHS阻塞赋值更新原语的输入和的输出,$monitor系统命令$strobe系统命令语句激活语句暂停活动非阻塞赋值监视来自上一个时隙Verilog-2001时隙被分成4等级区域新的名称将”延迟”事件区域去下一个时隙如何才能简化这个队列?指导原则No.8:不要用#0延迟编写代码的八项原则一般情况下,编写代码时如能按照以下8条原则就可以避免90%-100%由Verilog代码引起的冒险竞争现象:1)时序逻辑----使用非阻塞赋值2)锁存器----使用非阻塞赋值3)用always块生成的组合逻辑----用阻塞赋值4)在同一个always块中既有时序逻辑又有组合逻辑---用非阻塞赋值5)在同一个always块中不要既用阻塞赋值又用非阻塞赋值6)不要在一个以上的always块中对同一个变量赋值7)用$strobe显示用非阻塞赋值指定的变量值8)不要用#0过程性赋值以上8条原则与Verilog-1995完全一致,仍旧适用于SystemVerilogSystemVerilog的基本数据类型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数据类型位宽可以改变几乎通用的数据类型—logic(等价于原来的reg类型)logic类型类似于VHDL中的std_ulogic类型-对应的具体元件待定-只允许使用一个驱动源,或者来自于一个或者多个过程块的过程赋值对同一变量既进行连续赋值又进行过程赋值是非法的,不允许的。-在SystemVerilog中:logic和reg类型是一致的(类似于Verilog中wire和tri类型是一致的)wire数据类型仍旧有用因为:-多驱动源总线:如多路总线交换器(buscrossbars&onehotmuxes)-双向总线(两个驱动源)logic是4态数据类型的变量bit相当于2态数据类型的变量或线网用户定义的类型---typedef允许生成用户定义的或者容易改变的类型定义:好的命名规则用“_t”做后缀typedefexisting_typemytype_t;`ifdefSTATE2typedefbitbit_t;//2–state`elsetypedeflogicbit_t;//4–stateendifdefines.vh设计策略:用各种typedefs只要用typedef就可以很容易地在4态和2态逻辑仿真之间切换以加快仿真速度`ifdefSTATE2typedefbitbit_t;//2–state`elsetypedeflogicbit_t;//4–stateendifdefines.vhmoduletb;bit_tq,d,clk,rst_n;dffu1(.q(q),.d(d),.clk(clk),.rst_n(rst_n));initialbegin//stimulusendendmoduletb.vmoduledff(outputbit_tq,inputbit_td,clk,rst_n);always@(posedgeclk),if(!rst_n)q=0;elseq=d;endmoduledff.vverilog_cmddefine.vhtb.vdff.vverilog_cmddefine.vhtb.vdff.v+define+STATE2确省,为4态逻辑值仿真只用2态逻辑值,仿真速度快已确定的和待确定的类型四态和两态设计策略用待确