




已阅读5页,还剩119页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SystemVerilog讲座 第一讲 SystemVerilog基本知识 夏宇闻神州龙芯集成电路设计公司2008 VerilogHDL的发展历史 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 1 SystemVerilog是Verilog 2001扩展后的超集 assertionsmailboxestestprogramblockssemaphoresclockingdomainsconstrainedrandomvaluesprocesscontroldirectCfunctioncalls SystemVerilog fromC C classesdynamicarraysinheritanceassociativearraysstringsreferences SystemVerilog是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 whileforforever if elserepeat Verilog 1995 SystemVerilog提高设计效率 提高了设计效率 描述同样的功能 其代码可缩短2到5倍 代码短发生意外错误的概率减小了 但仍然可以综合 新的语句构造可以解决RTL仿真和综合后仿真的不匹配 小组成员间更容易理解和交流 缩短了学习周期 结构化的和用户定义的数据类型 与封装好的接口通信 蕴涵的端口实例引用 极大地提高了仿真速度仅一种语言就能解决设计和测试问题 设计和验证语言的统一提高了设计效率 学习周期很短 设计和验证人员都乐意采用 可自动生成高级的受约束 随机测试信号语句 大大降低了设计和验证的复杂度 完整的统一的断言技术改善了设计小组和验证小组之间的交流 使得我们有可能使用更高速度的仿真工具 加速了设计的完成 SyestemVerilog的全面验证和设计 统一的断言扩展了验证方法的效率 基于断言的验证 形式化特征的验证 线路板上的加速验证 SystemVerilog设计语言 Verilog 2001的事件调度 当前的时隙 0阻塞赋值 计算非阻塞表达式的RHS 连续赋值 display命令 更新非阻塞表达式的LHS 阻塞赋值 更新原语的输入和的输出 monitor系统命令 strobe系统命令 语句激活 语句暂停活动 非阻塞赋值 监视 来自上一个时隙 Verilog 2001时隙被分成4等级区域 新的名称将 延迟 事件区域 去下一个时隙 编写代码的八项原则 一般情况下 编写代码时如能按照以下8条原则就可以避免90 100 由Verilog代码引起的冒险竞争现象 1 时序逻辑 使用非阻塞赋值2 锁存器 使用非阻塞赋值3 用always块生成的组合逻辑 用阻塞赋值4 在同一个always块中既有时序逻辑又有组合逻辑 用非阻塞赋值5 在同一个always块中不要既用阻塞赋值又用非阻塞赋值6 不要在一个以上的always块中对同一个变量赋值7 用 strobe显示用非阻塞赋值指定的变量值8 不要用 0过程性赋值以上8条原则与Verilog 1995完全一致 仍旧适用于SystemVerilog SystemVerilog的基本数据类型 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 stateendif defines vh 设计策略 用各种typedefs 只要用typedef就可以很容易地在4态和2态逻辑仿真之间切换以加快仿真速度 verilog cmddefine vhtb vdff v verilog cmddefine vhtb vdff v define STATE2 确省 为4态逻辑值仿真 只用2态逻辑值 仿真速度快 已确定的和待确定的类型 四态和两态设计策略用待确定类型是最容易的 功能相当于VHDL中的std ulogic类型 很有效率 与VHDL中的std logic类型没有功能可比较的类型 ifdefSTATE2typedefbitbit t 2 态 elsetypedeflogicbit t 4 态 endif define vh ifdefSTATE2typedefbitbit t 2 态typedef tri t 2 态 elsetypedefregbit t 4 态typedefwiretri t 4 态 endif define vh 无多驱动器的2态类型 也许下一个版本的SystemVerilog能得到修正 没有容易的std ulogic和std logic之间切换的等价语句 Verilog 2001数据类型 模块内部 模块的输入必须是线网类型的信号 moduleA out in outputout inputin regout wirein always in out in endmodule moduleB out in outputout inputin wireout wirein assignout in endmodule 用reg类型的输出 过程赋值语句的LHS必须用变量类型 输出是线网类型的 用连续赋值驱动的变量类型 Verilog 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 Verilog 2001数据类型 模块内部 外部和测试放在一起 线网声明语句 过程赋值语句的LHS必须用变量类型 通常是reg类型 这些都声明为线网类型 moduletest regt in wirea2b wiret out Au1 out a2b in t in Bu2 out t out in a2b initialt in 1 endmodule a2b t out 变量声明语句 SystemVerilog 对端口定义没有限制 SystemVerilog允许过程或者连续赋值给变量赋值 线网声明语句 logic类型可以替代所有其他类型 包括reg类型 这些都声明为线网类型 moduletest logict in logica2b logict out Au1 out a2b in t in Bu2 out t out in a2b initialt in 1 endmodule a2b t out 只有一个驱动源的变量都可以声明为logic类型 SystemVerilog表示数字的语法有改进 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 特定逻辑过程 SystemVerilog有三个新的特定的逻辑过程来表达设计者的意图 always combalways latchalways ff always combbegintmp1 aend always latchif en q d always ff posedgeclk negedgerst n if rst n q 0 elseq d 允许仿真工具进行某些语法功能检查 lintingfunctionality always comb特定逻辑过程 always comb 允许仿真工具检查正确的组合逻辑代码风格 正确的 moduleao1 outputbit ty inputbit ta b c d bit ttmp1 tmp2 always combbegintmp1 aendendmodule moduleao1 outputbit ty inputbit ten d always combif en q 0 endmodule 错误 想生成组合逻辑但产生了锁存器 可能发生的错误信息 always latch特定逻辑过程 always latch 允许仿真工具检查正确的锁存器逻辑代码风格 正确的 modulelat1 outputbit tq inputbit ten d always latchif en q d endmodule modulelat1 outputbit tq inputbit ten d always latchif en q d elseq q endmodule 错误 组合逻辑反馈环路不能生成锁存器 可能发生的错误信息 always ff特定逻辑过程 always ff 允许仿真工具检查正确的寄存器逻辑代码风格 正确的 moduledff1 outputbit tq inputbit td clk rst n always ff posedgeclk negedgerst n if rst n q 0 elseq d endmodule moduledff1 outputbit tq inputbit td clk rst n always ff clk rst n if rst n q 0 elseq q endmodule 错误 非法敏感列表不能生成触发器 可能发生的错误信息 always 与always comb的差别 它们之间的真正有什么差别 IEEEVSG和AccelleraSystemVerilog委员会还在辩论中 尚未最后确认 modulefsm svlb 3 always beginnext x case state end endmodule always comb对于函数内容的变化是敏感的 存在一些差别 always comb可用来检查非法锁存器 always comb在0时刻结束时自动触发一次 可以写在always块内 modulefsm svlb 3 always combbeginnext x case state end endmodule Void函数 没有返回值的函数不必从Verilog表达式中被调用 Void函数可以象Verilog任务一样 独立地调用与Verilog任务不同 Void函数 不能等待 不能包括延迟 不能包括事件触发 被always comb搜寻到的信号自动加入敏感列表 always 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 endtaskendmodule always orf1 a 等价于 always a 等价于 always a b c void函数的行为类似于0延迟的任务 等价于 always a Verilog任务 b和c是隐含的输入 always ort1 a 等价于 always a b和c是隐含的输入 或者 或者 只有always comb对函数的内容的变化是敏感的 always 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 时序逻辑吗 设计意图 unique priority 有优先的还是没有优先的 来回考虑综合时常容易产生的错误 full caseparallel case 看似 完全一样 的语句对应的实体是不同的 这些指令告诉综合编译器 编写的设计代码有些地方和仿真器理解的有些不同 综合前与综合后的仿真可能存在一些差别 unique和priority这两个新添的指令告诉仿真器和综合器同一个信息 uniquecaseprioritycaseuniqueifpriorityif 使得仿真器 综合器和形式化验证工具的行为变得一致 设计意图 priority prioritycase full case full case的仿真和综合 所有的可能都已经定义了 任何其他的可能都是错误的 prioritycase 1 b1 irq0 irq 4 b1 0 irq1 irq 4 b1 1 irq2 irq 4 b1 2 irq3 irq 4 b1 3 endcase priorityif 所有的分支被指定后不需要最后结束的else priorityif 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 endcase priorityif 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关键字无效 设计意图 Unique uniquecase full case parallel case full case和parallel case的仿真和综合 所有的可能都已经定义了 任何其他的可能都是错误的 uniquecase 1 b1 sel 0 muxo a sel 1 muxo b sel 2 muxo c endcase uniqueif full case parallel case uniqueif 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 endcase uniqueif sel 0 muxo a elseif sel 1 muxo b elseif sel 2 muxo c elsemuxo x 对没有预料到的sel值不会出现仿真运行错误 unique仍旧测试覆盖的条件 MooreFSM举例 状态图 FSM状态图 两个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没有枚举类型变量 参数被用于有限状态机的设计 两个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 连续赋值 两个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块赋值 枚举 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 枚举类型的抽象 modulefsm svla 3 enum IDLE READ DLY DONE XX state next endmodule 无指定值的抽象枚举名 值可以在以后指定 枚举变量state和next 逗号把括在 内的枚举名分隔开来 枚举关键字 枚举 赋整型值 modulefsm svla 3 enum IDLE 3 b000 READ 3 b001 DLY 3 b010 DONE 3 b011 XX 3 b111 state next endmodule 未指定数据类型 即假定数据为整型 确省类型 用户对枚举名赋值 在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错误 抽象的枚举名 枚举 指定四状态值 modulefsm svlb 3 enumreg 1 0 IDLE 2 b00 READ 2 b01 DLY 2 b10 DONE 2 b11 XX x state next endmodule x赋值在仿真无关项优化综合和调试时非常有用 指定4态数据类型允许数据值为x或者z 在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 从抽象到具体需要做的唯一修改就是在枚举定义处赋值 赋值的枚举值 在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的代码检查 在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 有利于抽象 有利于观察波形 有利于调试和综合 枚举类型 波形显示 enumreg 1 0 IDLE 2 b00 READ 2 b01 DLY 2 b10 DONE 2 b11 XX x state next 确切标准的波形显示能力正在定义中 循环语句的性能得到增强 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 endmodule modulefor4b 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 2001 SystemVerilog 显式的递加 a 31 0 a 0 31 a 31 0 i1 i0 s y y 31 0 s SystemVerilog还增加了一个do while循环 底测试循环 隐含的端口连接 Verilog和VHDL都能用按端口名连接或按顺序连接的方式引用实例模块SystemVerilog用了两个新的隐含端口连接解决了顶层代码编写时表示端口连接代码的冗长 name端口连接 隐含的端口连接 大型ASIC顶层模块的端口连接非常麻烦而且冗长 下面是一个中等大小模块的例子 中央算术逻辑单元 CALU 方块图 注意 所有寄存器的时钟端都由 clk 驱动 异步复位都由 rst n 驱动 MultOp1reg shifter 0 1 4 MultOutreg Accumulator Barrelshifter 0 16 MUX ALU 32bit Multiplier 16data 16 32 16 16 16 16 16 32 32 32 32 32 32 alu out acc multout bs acc alu in en acc alu op 2 0 muxsel ld multop1 ld multout ld acc ld shft en shft shft lshft bs lshft 4 0 ld bs mop1 mult 32 中央算术逻辑单元 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 MultOp1reg MultOutreg Multiplier multop1multop1 mop1 data ld multop1 clk rst n 端口名的匹配只需要列出一次 中央算术逻辑单元 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 MUX ALU 32bit Accumulator shifter 0 1 4 代码更简练 中央算术逻辑单元 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 MUX ALU 32bit Accumulator shifter 0 1 4 代码更简练 MultOutreg MultOp1reg 隐含 name和 端口连接的规则 在同一个实例引用中禁止混用 和 name端口 允许在同一个实例引用中使用 name和 name signal 连接 也允许在同一个实例引用中使用 和 name signal 的连接 必须用 name signal 连接的情况 位宽不匹配 名称不匹配 没有连接的端口 instu1 data data 7 0 instu2 data pdata instu3 berr 注意 比Verilog2001有更强大的端口连接描述 表述更简洁 CALU顶层模四种不同端口连接代码长度不同 隐含端口连接的缺点 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 endmodule moduledriverd output 7 0 y input 7 0 c inputena assigny ena d 8 bz endmodule moduledriverb output 7 0 y input 7 0 b inputena assigny ena b 8 bz endmodule 使能信号名ena都相同 想设计的逻辑 端口连接时用别名 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关键字alias moduleena 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 endmodule y y1 y2 y3 y4都是别名连接在一起 用 缩短了实例端口的连接 用 隐含端口连接的优缺点 优点 编写顶层模块时容易多了扫描多达1000个端口的顶层设计更加容易比按照名字或者顺序连接端口的代码简洁多了 仍旧保留显式端口连接的优点编写用模块组装的顶层测试模块变得容易多了 使测试模块的信号与端口名一致 缺点 可能造成不想要的连接 很难发现错误 使模块的分别编译变得复杂 用户使用错误时工具会发生崩溃对低层结构性的网表没有什么用处 原语端口很少能与线网匹配 合法的工具开发者很害怕这一点 的端口连接把所有没有必要的麻烦都清除了 只列出端口连接的例外情况即可 所有端口都是隐含连接的 第二讲 SystemVerilog提高了设计和验证的效率 设计和验证只需用同一种语言大大提高工作效率 容易学习 SystemVerilog语言本身很容易掌握改善了设计小组和验证小组之间的联络由于具备高级语言结构 因而减少了设计和验证工作的复杂性 打包的和未打包的数组 未打包的位数组 打包的位数组 1K16位未打包的存储器 1K16位打包的存储器 bita 3 0 bit 3 0 p bit 15 0 memory 1023 0 initialbeginmemory i memory i memory i 15 8 0 end bit 1023 0 15 0 vframe always vcmd if vcmd INV vfram vframe 打包的索引可以分块 可以对整个存储器进行操作 未打包的四维数组 对应这个语句最大的可访问单元为1位 logicxdata 3 0 2 0 1 0 7 0 7 0 2 0 1 0 3 0 打包的一维数组和未打包的三维数组 对应这个语句最大的可访问单元为8位 logic 7 0 xdata 3 0 2 0 1 0 7 0 2 0 1 0 3 0 打包的二维数组和未打包的二维数组 对应这个语句最大的可访问单元为16位 logic 1 0 7 0 xdata 3 0 2 0 7 0 2 0 1 0 3 0 打包的四维数组 对应这个语句最大的可访问单元为192位 logic 3 0 2 0 1 0 7 0 xdata 7 0 2 0 1 0 3 0 数据的组织 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 用名称 用矢量位置 数据的组织 目标 把数据组织得与高级编程语言一样 使其他人能非常清晰地理解设计中数据之间的关系 SystemVerilog增加了结构 联合和数组类型 能够分别使用这些类型 或者结合起来使用从而能更精确地描述设计的意图 数据的组织 结构 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区做比较 数据的组织打包的结构和打包的联合 未打包的结构 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 数据的组织打包的结构和打包的联合 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 hDEADBEEF initialbegincmd fields opcode 16 hDEAD cmd 7 0 8 hEF cmd bytes 1 8 hBE 不需要测试数据类型 D E A D 11101111 B E 数据映射到所有成员 DEADBEEF D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 以读书与成长为话题的作文(8篇)
- (正式版)DB15∕T 3357-2024 《羔羊早期断奶饲养管理技术规程》
- 电厂检修考试题及答案
- 《光合作用的原理与过程:高二植物学教学教案》
- 南京中医院护理考试题库及答案
- 农村畜牧养殖业供需供应合同
- 合法操作使用保证承诺书(4篇)
- 多场景决策分析工具及其使用方法
- 农业对外交流与合作框架协议
- 企业内训与知识分享模板
- 2024年游泳初级指导员认证理论考试题库(浓缩500题)
- 新能源发电技术 电子课件 2.5 可控核聚变及其未来利用方式
- GB/T 9799-2024金属及其他无机覆盖层钢铁上经过处理的锌电镀层
- 退休返聘人员劳务合同范本
- DL-T5190.1-2022电力建设施工技术规范第1部分:土建结构工程
- 第2课 中国特色社会主义的开创和发展 教案-2023-2024学年中职高教(2023)中国特色社会主义
- KLA缺陷检查培训
- 两个责任 培训课件
- 弥勒湖泉酒店云南营销策划方案
- 2023年四川能投宜宾市叙州电力限公司招聘历年高频难易度、易错点模拟试题(共500题)附带答案详解
- 通信管道管线施工安全操作规程
评论
0/150
提交评论