systemVerilog快速入门PPT

上传人:人*** 文档编号:591520444 上传时间:2024-09-18 格式:PPT 页数:124 大小:1.01MB
返回 下载 相关 举报
systemVerilog快速入门PPT_第1页
第1页 / 共124页
systemVerilog快速入门PPT_第2页
第2页 / 共124页
systemVerilog快速入门PPT_第3页
第3页 / 共124页
systemVerilog快速入门PPT_第4页
第4页 / 共124页
systemVerilog快速入门PPT_第5页
第5页 / 共124页
点击查看更多>>
资源描述

《systemVerilog快速入门PPT》由会员分享,可在线阅读,更多相关《systemVerilog快速入门PPT(124页珍藏版)》请在金锄头文库上搜索。

1、妊特渤诸活枯褒腋聪札虞闽停吁昼境榔巡俩拜姿批筒屡贼匆月尹膘窑姬矣systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog 讲座讲座 第一讲第一讲: SystemVerilog 基本知识基本知识夏宇闻夏宇闻 神州龙芯集成电路设计公司神州龙芯集成电路设计公司 2008 2008身接辟墙炸湘墩螺栈干堪琳漓歧植鹿敝霉湿酌辩堤摊栓腰柬檄淹捐捣憋界systemVerilog快速入门PPTsystemVerilog快速入门PPTVerilog HDL的发展历史的发展历史n1984: Gateway Design Automation 推出推出 Verilog

2、 初版初版n1989: Gateway 被被Cadence Design Systems 公司收购公司收购n1990: Cadence 向业界公开向业界公开 Verilog HDL 标准标准n1993: OVI 提升提升 the Verilog 标准,但没有被普遍接受标准,但没有被普遍接受 n1995: IEEE 推出推出 Verilog HDL (IEEE 1364-1995)标准标准n2001: IEEE 推出推出 Verilog IEEE Std1364-2001 标准标准n2002: IEEE 推出推出 Verilog IEEE Std1364.1-2002 标准标准n2002: Ac

3、cellera 对对 SystemVerilog 3.0 进行标准化进行标准化 Accellera 是是OVI & VHDL International (VI)合并后的合并后的国际标准化组织国际标准化组织n2003: Accellera 标准化后的标准化后的SystemVerilog 3.1n2006: IEEE 推出带推出带SystemVerilog 扩展的扩展的Verilog新标准新标准咋维避擎虹坝宪甩拜磅脑茵仇如忘迢灰叹嚏漫湾趴温壹模后饿芭辐背梆盎systemVerilog快速入门PPTsystemVerilog快速入门PPT为什么称为什么称 SystemVerilog 3.x?n S

4、ystemVerilog 是是 对对Verilog 革命性的扩展革命性的扩展n Verilog 1.0 - IEEE 1364-1995 “Verilog-1995” 标准标准 第一代第一代 IEEE Verilog 标准标准n Verilog 2.0 - IEEE 1364-2001 “Verilog-2001” 标准标准 第二代第二代 IEEE Verilog 标准标准 显著提升了显著提升了 Verilog-1995 标准的性能标准的性能n SystemVerilog 3.x - 国际标准化组织对国际标准化组织对Verilog-2001的扩展的扩展 第三代第三代 Verilog 标准标准

5、DAC-2002 - SystemVerilog 3.0 DAC-2003 - SystemVerilog 3.1豹汗彰竟丁堕坝插捉广田湍木撮毯尊透秽簇井盛摊头哭壹封燃浅倔污鹤捧systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog是是Verilog-2001扩展后的超集扩展后的超集 assertions mailboxes test program blocks semaphores clocking domains constrained random values process control direct C function ca

6、lls - SystemVerilog - from C / C+ - classes dynamic arrays inheritance associative arrays strings references 焙遍浩汕吱扁醋珊胀匀郴皇施级焰萤马低汾刻赎鸵呼查刮岁诗戌鬃窗财嵌systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog是是Verilog-2001扩展后的超集扩展后的超集 interfaces dynamic processes nested hierarchy 2-state modeling byte unrestricte

7、d ports packed arrays implicit port connections array assignmentsenhanced literals enhanced event controltime values & units unique/priority case/iflogic-specific processes root name spacealias const &= |= = %= - - from C / C+-int globals breakshortint enum continuelongint typedef returnByte structu

8、res do-whileShortreal unions + - += -= *= /=void casting = = if-elserepeat- Verilog -1995 -谩从倡猖镭植锹穗认暂肌趋殆壕零敏椿凹楷硅西租手裙六呢慨宋来镰宴沏systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog提高设计效率提高设计效率 System Verilog RTL RTL Netlist设计效率设计效率 testbenchCo-simOverheadHDL SimultionSystemVerilogtestbench进行全面验证的环境进行全面验

9、证的环境断言断言验证验证 硬件辅助的验证硬件辅助的验证覆盖覆盖 测试平台测试平台仿真仿真 形式化特性形式化特性提高了验证的水平提高了验证的水平川辰脚老喊悠榜河舰游铬名且硬拴浴郊勺镁预拧级辜迷瞩酗药么乾添玫斜systemVerilog快速入门PPTsystemVerilog快速入门PPT提高了设计效率提高了设计效率n n描述同样的功能,其代码可缩短描述同样的功能,其代码可缩短描述同样的功能,其代码可缩短描述同样的功能,其代码可缩短2 2到到到到5 5倍倍倍倍 - - - - 代码短发生意外错误的概率减小了,但仍然可以综合,代码短发生意外错误的概率减小了,但仍然可以综合,代码短发生意外错误的概率减

10、小了,但仍然可以综合,代码短发生意外错误的概率减小了,但仍然可以综合, 新的语句构造可以解决新的语句构造可以解决新的语句构造可以解决新的语句构造可以解决RTLRTLRTLRTL仿真和综合后仿真的不匹配;仿真和综合后仿真的不匹配;仿真和综合后仿真的不匹配;仿真和综合后仿真的不匹配; - - - - 小组成员间更容易理解和交流;小组成员间更容易理解和交流;小组成员间更容易理解和交流;小组成员间更容易理解和交流;n n缩短了学习周期。缩短了学习周期。缩短了学习周期。缩短了学习周期。 System Verilog RTL RTL Netlist设计效率设计效率 结构化的和用户定义的数据类型与封装好的接

11、口通信.* 蕴涵的端口实例引用刽便高雹绸粘枪探绷龟哗豆仙懊签趴矾桌龟郊译汀导煽狼席祝盈碗噪枢馈systemVerilog快速入门PPTsystemVerilog快速入门PPT极大地提高了仿真速度极大地提高了仿真速度仅一种语言就能解决设计和测试问题仅一种语言就能解决设计和测试问题仅一种语言就能解决设计和测试问题仅一种语言就能解决设计和测试问题设计和验证语言的统一提高了设计效率,学习周期设计和验证语言的统一提高了设计效率,学习周期设计和验证语言的统一提高了设计效率,学习周期设计和验证语言的统一提高了设计效率,学习周期很短,设计和验证人员都乐意采用:很短,设计和验证人员都乐意采用:很短,设计和验证人

12、员都乐意采用:很短,设计和验证人员都乐意采用:- - - - 可自动生成高级的受约束可自动生成高级的受约束可自动生成高级的受约束可自动生成高级的受约束- - - -随机测试信号语句,大随机测试信号语句,大随机测试信号语句,大随机测试信号语句,大大降低了设计和验证的复杂度;大降低了设计和验证的复杂度;大降低了设计和验证的复杂度;大降低了设计和验证的复杂度;- - - - 完整的统一的断言技术改善了设计小组和验证小完整的统一的断言技术改善了设计小组和验证小完整的统一的断言技术改善了设计小组和验证小完整的统一的断言技术改善了设计小组和验证小组之间的交流。组之间的交流。组之间的交流。组之间的交流。te

13、stbenchCo-simOverheadHDL SimultionSystemVerilogtestbench使得我们有可能使用更高速度的仿真工具,加速了设计的完成价吧好补谤孕井葱朽植寂蒋猴忍乙杀惧搜怀堡狙郸茨县是坐潭索火妒呜课systemVerilog快速入门PPTsystemVerilog快速入门PPTSyestemVerilogSyestemVerilog的全面验证和设计的全面验证和设计统一的断言扩展了验证方法的效率统一的断言扩展了验证方法的效率统一的断言扩展了验证方法的效率统一的断言扩展了验证方法的效率- -基于断言的验证基于断言的验证基于断言的验证基于断言的验证- -形式化特征的验

14、证形式化特征的验证形式化特征的验证形式化特征的验证- -线路板上的加速验证线路板上的加速验证线路板上的加速验证线路板上的加速验证进行全面验证的环境进行全面验证的环境断言断言验证验证 硬件辅助的验证硬件辅助的验证覆盖覆盖 测试平台测试平台仿真仿真 形式化特性形式化特性提高了验证的水平提高了验证的水平仿真检查仿真检查硬件辅助验证硬件辅助验证SystemVerilog 断言断言自动测试平台自动测试平台覆盖测试覆盖测试形式化验证形式化验证 综合综合抓住设计意图与每个设计和验证工程师联络学习周期短仿真检查仿真检查硬件辅助验证硬件辅助验证肩弟沦纲慎秧汉濒雹纤泡庐遍甘壁婚崔兔喊掸放届荔盛泻跨轩粥箕青块疲sy

15、stemVerilog快速入门PPTsystemVerilog快速入门PPT SystemVerilog 设计语言设计语言搔速裴审忆寒晦桶创设敢直抬补翘巳芽读阀毛裳萤遂寇喝票奠蝎骋犹饶磺systemVerilog快速入门PPTsystemVerilog快速入门PPTVerilog-2001 的事件调度的事件调度 当前的时隙 #0 阻塞赋值 计算非阻塞表达式 的RHS 连续赋值$display命令 更新非阻塞表达式的LHS 阻塞赋值 更新原语的输入和的输出, $monitor系统命令 $strobe 系统命令 语句激活 语句暂停活动 非阻塞赋值 监视来自上一个时隙Verilog-2001时隙被分

16、成4等级区域新的名称将”延迟”事件区域去下一个时隙如何才能简化这个队列?指导原则No.8:不要用#0延迟帮键门驻萄粹审敏松隘友唬磨恨盯煤竿拆们刁劣论爽碌薄伪井男苹滤纯意systemVerilog快速入门PPTsystemVerilog快速入门PPT编写代码的八项原则编写代码的八项原则 一般情况下,编写代码时如能按照以下一般情况下,编写代码时如能按照以下一般情况下,编写代码时如能按照以下一般情况下,编写代码时如能按照以下8 8 8 8条原则就可以避免条原则就可以避免条原则就可以避免条原则就可以避免90%-100%90%-100%90%-100%90%-100%由由由由VerilogVerilog

17、VerilogVerilog代码引起的冒险竞争现象:代码引起的冒险竞争现象:代码引起的冒险竞争现象:代码引起的冒险竞争现象:1 1 1 1)时序逻辑)时序逻辑)时序逻辑)时序逻辑-使用非阻塞赋值使用非阻塞赋值使用非阻塞赋值使用非阻塞赋值2 2 2 2)锁存器)锁存器)锁存器)锁存器-使用非阻塞赋值使用非阻塞赋值使用非阻塞赋值使用非阻塞赋值3 3 3 3)用)用)用)用alwaysalwaysalwaysalways块生成的组合逻辑块生成的组合逻辑块生成的组合逻辑块生成的组合逻辑-用阻塞赋值用阻塞赋值用阻塞赋值用阻塞赋值4 4 4 4)在同一个)在同一个)在同一个)在同一个alwaysalway

18、salwaysalways块中既有时序逻辑又有组合逻辑块中既有时序逻辑又有组合逻辑块中既有时序逻辑又有组合逻辑块中既有时序逻辑又有组合逻辑- 用非阻塞赋值用非阻塞赋值用非阻塞赋值用非阻塞赋值5 5 5 5)在同一个)在同一个)在同一个)在同一个alwaysalwaysalwaysalways块中不要既用阻塞赋值又用非阻塞赋值块中不要既用阻塞赋值又用非阻塞赋值块中不要既用阻塞赋值又用非阻塞赋值块中不要既用阻塞赋值又用非阻塞赋值6 6 6 6)不要在一个以上的)不要在一个以上的)不要在一个以上的)不要在一个以上的alwaysalwaysalwaysalways块中对同一个变量赋值块中对同一个变量赋

19、值块中对同一个变量赋值块中对同一个变量赋值7 7 7 7)用)用)用)用$strobe$strobe$strobe$strobe显示用非阻塞赋值指定的变量值显示用非阻塞赋值指定的变量值显示用非阻塞赋值指定的变量值显示用非阻塞赋值指定的变量值8 8 8 8)不要用)不要用)不要用)不要用 0 0 0 0 过程性赋值过程性赋值过程性赋值过程性赋值以上以上以上以上8 8 8 8条原则与条原则与条原则与条原则与Verilog-1995 Verilog-1995 Verilog-1995 Verilog-1995 完全一致,仍旧适用于完全一致,仍旧适用于完全一致,仍旧适用于完全一致,仍旧适用于Syste

20、mVerilogSystemVerilogSystemVerilogSystemVerilog榜卤休阑滑搪策九钎劝咕莹终淮轴维疏穷始榔认痈怜卖炸莹题零峙腹匠节systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog的基本数据类型的基本数据类型SystemVerilog SystemVerilog 可以定义:可以定义:可以定义:可以定义: - -4 4 态数据类型态数据类型态数据类型态数据类型: 0,1,X,Z : 0,1,X,Z - -2 2 态数据类型态数据类型态数据类型态数据类型: 0,1 : 0,1 未初始化的变量 = X未初始化的线网

21、= Z与Verilog-2001相同未初始化的变量 = 0未初始化的线网 *= 0SystemVerilog新添加的reg r; / 4态,Verilog-2001(位宽可变)数据类型integer i; /4态,Verilog-2001(32位)有符号数据类型logic w; /4态,(位宽可变) 0,1,x,或者 zbit b; /2态,(位宽可变) 1位 0 或 1byte b8; /2态,(8位)有符号整型数shortint s; /2态,(16位)有符号整型数int i; /2态,(32位)有符号整型数longint l; /2态,(64位)有符号整型数注:* -bit 类型既可以用

22、于变量也可以用于线网。另外还加入了其他一些数据类型SystemVerilog 新添加的数据类型reg 15:0 r16;logic 15:0 w16;bit 15:0 b16; reg, logic和 bit数据类型位宽可以改变矩思惨图傻歧赁伸称惑朽傈减夜伯睬逗茵掳哑阶廖碘航吻儿运锈枫装释赶systemVerilog快速入门PPTsystemVerilog快速入门PPT几乎通用的数据类型几乎通用的数据类型logic( ( ( (等价于原来的等价于原来的等价于原来的等价于原来的 reg reg类型类型类型类型) )n nlogic logic 类型类似于类型类似于类型类似于类型类似于VHDLVH

23、DL中的中的中的中的std_ulogicstd_ulogic类型类型类型类型- - 对应的具体元件待定对应的具体元件待定对应的具体元件待定对应的具体元件待定- - 只允许使用一个驱动源,或者来自于一个或者多个过程块的过程赋值只允许使用一个驱动源,或者来自于一个或者多个过程块的过程赋值只允许使用一个驱动源,或者来自于一个或者多个过程块的过程赋值只允许使用一个驱动源,或者来自于一个或者多个过程块的过程赋值对同一变量既进行连续赋值又进行过程赋值是非法的,不允许的。- 在在SystemVerilog中:中:logic和和reg类型类型是一致的(类似于是一致的(类似于Verilog中中wire和和tri

24、类类型是一致的)型是一致的)n n wire wire数据类型仍旧有用因为:数据类型仍旧有用因为:数据类型仍旧有用因为:数据类型仍旧有用因为:- - 多驱动源总线多驱动源总线多驱动源总线多驱动源总线: : 如多路总线交换器(如多路总线交换器(如多路总线交换器(如多路总线交换器(bus crossbars & onehot muxesbus crossbars & onehot muxes)- - 双向总线(两个驱动源)双向总线(两个驱动源)双向总线(两个驱动源)双向总线(两个驱动源)logic 是4态数据类型的变量bit 相当于2态数据类型的变量或线网动前响靳企哦锅掩日倪转娩卤疏忿万菌箭传批驳

25、兢宰赂颐奴衷忙蜀速抵西systemVerilog快速入门PPTsystemVerilog快速入门PPT用户定义的类型用户定义的类型-typedefn n允许生成用户定义的或者容易改变的类型允许生成用户定义的或者容易改变的类型定义:定义:- -好的命名规则用好的命名规则用“_t”做后缀做后缀 typedef existing_type mytype_t;ifdef STATE2 typedef bit bit_t; /2 state else typedef logic bit_t; /4 stateendifdefines.vh掂一闰醚闭情吞恤糖皂篡宇粮焦厉行滤臃滩绳遥城皱匠察枣竖幸悉崖欧椽s

26、ystemVerilog快速入门PPTsystemVerilog快速入门PPT设计策略:用各种设计策略:用各种typedefsn只要用typedef 就可以很容易地在4态和2态逻辑仿真之间切换以加快仿真速度ifdef STATE2 typedef bit bit_t; /2 state else typedef logic bit_t; /4 stateendifdefines.vhmodule tb; bit_t q, d, clk, rst_n; dff u1(.q(q), .d(d), .clk(clk), .rst_n(rst_n);initial begin /stimulus en

27、dendmoduletb.vmodule dff( output bit_t q, input bit_t d, clk,rst_n); always (posedge clk), if (!rst_n) q=0; else q Other=)语句进行语句进行“ “填满填满” ”的操作的操作x x 等于等于Verilog-2001Verilog-2001的的bx bx z z 等于等于Verilog-2001Verilog-2001的的bz bz 1 1 等于赋等于赋-1-1的值(即的值(即-1-1的的2 2进制补码,进制补码,也就是所有位赋为也就是所有位赋为1 1)0 0 等于赋给等于赋给0

28、 0的值(也就是所有位赋的值(也就是所有位赋为为0 0)敲蛊交克澡贯秤乙钨醋诲识湖坐逛忘土豹措参轩崔瑞赢勾装街蓑恕读既覆systemVerilog快速入门PPTsystemVerilog快速入门PPT特定逻辑过程特定逻辑过程nSystemVerilog 有三个新的特定的逻辑过程来有三个新的特定的逻辑过程来表达设计者的意图:表达设计者的意图:always_combalways_combalways_latchalways_latchalways_ffalways_ffalways_comb beginalways_comb begin tmp1= a & b; tmp1= a & b; tmp2

29、=c & d; tmp2=c & d; y = tmp1 | tmp2; y = tmp1 | tmp2; end endalways_latch always_latch if (en) q = d; if (en) q = d;always_ff (posedge clk, negedge rst_n) always_ff (posedge clk, negedge rst_n) if (!rst_n) q = 0 ; if (!rst_n) q = 0 ; else q = d; else q = d; 允许仿真工具进行某些允许仿真工具进行某些允许仿真工具进行某些允许仿真工具进行某些 语

30、法功能检查(语法功能检查(语法功能检查(语法功能检查(linting linting functionalityfunctionality)肮真苗笼袍侠取惹达微椭杀拾扩射放网闪援晌稀射下横跨雇食率砷晨嚼届systemVerilog快速入门PPTsystemVerilog快速入门PPTalways_comb特定逻辑过程特定逻辑过程nalways_comb -允许仿真工具检查正确的组合逻辑代允许仿真工具检查正确的组合逻辑代码风格码风格 正确的正确的正确的正确的module ao1(module ao1( output bit_t y, output bit_t y, input bit_t a,

31、b, c, d ); input bit_t a, b, c, d ); bit_t tmp1, tmp2; bit_t tmp1, tmp2; always_comb begin always_comb begin tmp1 = a & b; tmp1 = a & b; tmp2 = c & d; tmp2 = c & d; y = tmp1 | tmp2; y = tmp1 | tmp2; end endendmoduleendmodulemodule ao1(module ao1( output bit_t y, output bit_t y, input bit_t en, d );

32、input bit_t en, d );always_comb always_comb if (en) q = 0 ; if (en) q = 0 ;endmoduleendmodule 错误:错误: 想生成组合逻辑想生成组合逻辑但产生了锁存器但产生了锁存器可能发生的可能发生的错误信息:错误信息:摧司尉洱顶懒贱翱激戒蛊骚军皮晚崭侦贰拢涟阻舌珊淘反喘臆儒摆株苇孤systemVerilog快速入门PPTsystemVerilog快速入门PPTalways_latch特定逻辑过程特定逻辑过程nalways_latch -允许仿真工具检查正确的锁存器逻辑允许仿真工具检查正确的锁存器逻辑代码风格代码风格

33、 正确的正确的正确的正确的module lat1(module lat1( output bit_t q, output bit_t q, input bit_t en, d ); input bit_t en, d ); always_latch always_latch if (en) q = d; if (en) q = d; endmoduleendmodule module lat1( module lat1( output bit_t q, output bit_t q, input bit_t en, d ); input bit_t en, d ); always_latch

34、always_latch if (en) q = d; if (en) q = d; else q = q; else q = q;endmoduleendmodule 错误:错误: 组合逻辑反馈环组合逻辑反馈环路不能生成锁存器路不能生成锁存器可能发生的可能发生的错误信息:错误信息:潮姥巍壹缺淌嘻扩孩矣遂拷匪榜草礼坪峭页媳斤赔员芝夫逆汇始汐娇啊耕systemVerilog快速入门PPTsystemVerilog快速入门PPTalways_ff特定逻辑过程特定逻辑过程nalways_ff -允许仿真工具检查正确的寄存器逻辑代码允许仿真工具检查正确的寄存器逻辑代码风格风格 正确的正确的正确的正确的

35、module dff1( output bit_t q,module dff1( output bit_t q, input bit_t d, clk, rst_n ); input bit_t d, clk, rst_n ); always_ff (posedge clk, negedge always_ff (posedge clk, negedge rst_n) rst_n) if (!rst_n) q = 0; if (!rst_n) q = 0; else q = d ; else q = d ;endmoduleendmodule module dff1 ( output bit_

36、t q, module dff1 ( output bit_t q, input bit_t d, clk, rst_n ); input bit_t d, clk, rst_n ); always_ff (clk, rst_n) always_ff (clk, rst_n) if (!rst_n) q = 0; if (!rst_n) q = 0; else q = q; else q = q;endmoduleendmodule 错误:错误: 非法敏感列表非法敏感列表不能生成触发器不能生成触发器可能发生的可能发生的错误信息:错误信息:务酉窥功灌夫会俊铭蚀滇邱燃绥宜独戎榨继史商觅撵蔼汤靴舰学

37、虎萤何逢systemVerilog快速入门PPTsystemVerilog快速入门PPTalways * 与与 always_comb 的差别的差别n它们之间的真正有什么差别,它们之间的真正有什么差别,IEEE VSG和和Accellera SystemVerilog 委员会还在辩论中,尚未最后确认委员会还在辩论中,尚未最后确认module fsm_svlb_3module fsm_svlb_3 . . always * begin always * begin next = x; next = x; case (state) case (state) . . end end . .endmo

38、duleendmodulealways_comb always_comb 对于函数内容的变化是敏感的对于函数内容的变化是敏感的 存在一些存在一些差别差别always_comb always_comb 可用来检查非法锁存器可用来检查非法锁存器 always_comb always_comb 在在0 0时刻结束时自动触发一次时刻结束时自动触发一次 * * 可以写在可以写在always always 块内块内 module fsm_svlb_3module fsm_svlb_3 . . always_comb begin always_comb begin next = x; next = x; c

39、ase (state) case (state) . . end end . .endmoduleendmodule酿逛土挞蝗沁俘届恢币痊字万位浦之轰尺萍灸身西涟蛹施锈逻杜逸罪迫龄systemVerilog快速入门PPTsystemVerilog快速入门PPT Void 函数函数n没有返回值的函数没有返回值的函数n不必从不必从Verilog 表达式中被调用表达式中被调用 -Void 函数可以象函数可以象Verilog 任务一样,独立地调用任务一样,独立地调用n与与Verilog 任务不同,任务不同, Void 函数函数- 不能等待不能等待- 不能包括延迟不能包括延迟- 不能包括事件触发不能包括

40、事件触发- 被被always_comb 搜寻到的信号自动加入敏感列表搜寻到的信号自动加入敏感列表律劳余糊皋屿鲸墩姿任魏素沏絮纪械兢隆吻俐杨渺温遍蒙萤宣植晚圆衣随systemVerilog快速入门PPTsystemVerilog快速入门PPT always_comb 与与 Void 函数函数module comb1( output bit_t 2:1 y, input bit_t a, b, c) ;always_comb orf1(a);function void orf1; input a; y1 = a | b | C;endfunctionalways_comb ort1(a); tas

41、k ort1; input a; y2 = 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 对函数的内容的变化是敏感的冒膝凿稽荧构朔常优骤叹瓶秋洋溜侩共水毫蘸劣枕囚粒斩裂泳幢忍篓悠扭systemVerilog快速入门PPTsystemVeri

42、log快速入门PPT always_ff 用于双数据率(用于双数据率(DDR)时序逻辑?)时序逻辑?n 有可能提高未来综合工具的性能?有可能提高未来综合工具的性能? 无正跳变沿触发时钟信号(clk)无负跳变沿触发时钟信号(clk)目前对综合器来说该语法是非法的module ddrff ( output bit_t q, input bit_t d, clk, rst_n ); always_ff (clk, negedge rst_n) if (! rst_n) q = 0; else q = d;endmodule去掉正跳变沿是否可以允许用正负两个沿触发?always_ff 显示设计者的意图

43、这能综合成这能综合成ASIC厂商库中的厂商库中的双数据率(双数据率(DDR)时序逻辑吗?时序逻辑吗?趟毙批卧玲疾炬毋宽盏荔憎惭烹玉骏磅船淫谬卖渤佐序嚏甩戮娠奴立笼守systemVerilog快速入门PPTsystemVerilog快速入门PPT 设计意图设计意图unique/priority n有优先的还是没有优先的?有优先的还是没有优先的? 来回考虑来回考虑n综合时常容易产生的错误综合时常容易产生的错误! full_case parallel_case看似“完全一样”的语句对应的实体是不同 的这些指令告诉综合编译器,编写的设计代码有些地方和仿真器理解的有些不同综合前与综合后的仿真可能存在一些

44、差别n unique 和 priority 这两个新添的指令告诉这两个新添的指令告诉仿真器和综合器同一个信息仿真器和综合器同一个信息 unique casepriority caseunique ifpriority if 使得仿真器、综合器和使得仿真器、综合器和形式化验证工具的行为形式化验证工具的行为变得一致变得一致缓吠邵烟禁我秀原剔钞犊轻汗晴锰盼刮愉慰供远臀偏憋肪奸友傈讼改暴烛systemVerilog快速入门PPTsystemVerilog快速入门PPT 设计意图设计意图 priority priority case: - full_case full_case的仿真和综合所有的可能都已

45、经定义了,任何其他的可能都是错误的priority case (1b1)irq0: irq= 4b1 0;irq1: irq= 4b1 1;irq2: irq= 4b1 2;irq3: irq= 4b1 3;endcasepriority if: - 所有的分支被指定后不需要最后结束的elsepriority if (irq0) irq = 4b1;else if (irq1) irq = 4b2;else if (irq2) irq = 4b4; else if (irq3) irq = 4b8;priority case (1b1)irq0: irq= 4b1 0;irq1: irq= 4

46、b1 1;irq2: irq= 4b1 2;irq3: irq= 4b1 3; default: irq = 0;endcasepriority if (irq0) irq = 4b1;else if (irq1) irq = 4b2;else if (irq2) irq = 4b4; else if (irq3) irq = 4b8;else irq = 4b0;irq0到irq3中至少有一个必定为高否则仿真就出现运行错误default 或 最后的else语句使得 priority关键字无效篮豢写颗窿国仟弹规撇堕倾谗惫瘩膘候不秀饼征锦惶孔茎到砰梯素呼冬褐systemVerilog快速入门PP

47、TsystemVerilog快速入门PPT 设计意图设计意图 Unique unique case: - full_case / parallel_case full_case 和parallel_case的仿真和综合所有的可能都已经定义了,任何其他的可能都是错误的unique case (1b1)sel0: muxo = a;sel1: muxo = b;sel2: muxo = c;endcaseunique if: - full_case/ parallel_case unique if (sel0) muxo = a;else if (sel1) muxo = b;else if (s

48、el2) muxo = c; if sel = = 3 b011 仿真出现运行错误任何没有预料到的sel值将使仿真出现运行错误unique case (1b1)sel0: muxo = a;sel1: muxo = b;sel2: muxo = c;default: muxo = x;endcaseunique if (sel0) muxo = a;else if (sel1) muxo = b;else if (sel2) muxo = c;else muxo = x;对没有预料到的sel值不会出现仿真运行错误unique仍旧测试覆盖的条件问禽妥仰阅精盗纵钢岔蝎峭凿特铲贺模锭又蛔猩橡墟踌铬酷

49、焙芜耀挞佣腰systemVerilog快速入门PPTsystemVerilog快速入门PPTMoore FSM举例举例 - - 状态图状态图 n nFSM状态图状态图未注明的地方输出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws= 1ws= 0稚隋别接特悍类邻盘莹体幌渡嵌庐许赎震陷叛藤区耐涪遁解覆叶挡琴含持systemVerilog快速入门PPTsystemVerilog快速入门PPT两个两个always块的编码风格块的编码风格(符号、参数赋值(符号、参数赋值(符号、参数赋值(符号、参数赋值时序时序时序时序alwaysa

50、lways块)块)块)块)module sm2a (rd,ds,go,ws,clk,rstN);module sm2a (rd,ds,go,ws,clk,rstN); output rd, ds; output rd, ds; input go, ws, clk, rstN; input go, ws, clk, rstN; parameter IDLE = 2b00, parameter IDLE = 2b00, READ = 2b01, READ = 2b01, DLY = 2b10, DLY = 2b10, DONE = 2b11; DONE = 2b11; reg 1:0 state,

51、 next; reg 1:0 state, next; always (posedge clk or negedge rstN) always (posedge clk or negedge rstN) if (!rstN) state =IDLE; if (!rstN) state =IDLE; else state = next; else state = next;Verilog 没有枚举类型变量参数被用于有限状态机的设计燕量劝现槽束象谐衰莉卿狼不胡枚滴垫知糟毒煽辈激框揍捻枕冬氦嚎责仇systemVerilog快速入门PPTsystemVerilog快速入门PPT两个两个always块的

52、编码风格块的编码风格(组合逻辑(组合逻辑(组合逻辑(组合逻辑alwaysalways块块块块- - - -连续赋值输出)连续赋值输出)连续赋值输出)连续赋值输出) always (state or go or ws) begin always (state or go or ws) begin next = 2bx; next = 2bx; case(state) case(state) IDLE: if (go) next = READ; IDLE: if (go) next = READ; else next = IDLE; else next = IDLE; READ: next = D

53、LY; READ: next = DLY; DLY : if (!ws) DLY : if (!ws) next = DONE; next = DONE; else next = READ; else next = READ; DONE: next = IDLE; DONE: next = IDLE; endcase endcase end endassign rd = (state = read)|(state=DLY);assign rd = (state = read)|(state=DLY);assign ds = (state = DONE);assign ds = (state =

54、 DONE);endmoduleendmodule 仿真差错诀窍综合优化诀窍输出方法1(连续赋值)搓谦扶陷幌茁芥什肾刊胖鸥盒搁压素庆亭迭冉寸涝号将掠奎砚猎沽裔刷希systemVerilog快速入门PPTsystemVerilog快速入门PPT两个两个always块的编码风格块的编码风格(组合逻辑(组合逻辑(组合逻辑(组合逻辑alwaysalways块块块块- - - -alwaysalways阻塞赋值输出)阻塞赋值输出)阻塞赋值输出)阻塞赋值输出) always (state or go or ws) begin always (state or go or ws) begin next =

55、2bx; next = 2bx; rd = 1b0; rd = 1b0; ds = 1 b0; ds = 1 b0; case(state) case(state) IDLE: if (go) next = READ; IDLE: if (go) next = READ; else next = IDLE; else next = IDLE; READ: begin rd = 1b1; READ: begin rd = 1b1; next = DLY; next = DLY; end end DLY : begin rd = 1b1; DLY : begin rd = 1b1; if (!ws

56、) next = DONE; if (!ws) next = DONE; else next = READ; else next = READ; end end DONE: begin ds = 1b1; DONE: begin ds = 1b1; next = IDLE; next = IDLE; end end endcase endcase end endendmoduleendmodule 初始化确省值的赋值初始化输出值到确省态输出方法2(always 块赋值)锨弦摆鞭花膘洱最东季义汪勘响戴醛帜悟庆仇逆髓绍抗君淖涛定术讹讯琶systemVerilog快速入门PPTsystemVeril

57、og快速入门PPT枚举(枚举(enumeratedenumerated)数据类型)数据类型(更高(更高(更高(更高抽象抽象抽象抽象层面的层面的层面的层面的功能强大的数据类型功能强大的数据类型功能强大的数据类型功能强大的数据类型)typedef enumred, yellow,green,blue,white,black clolors_t; clolors_t light1, light2; ; initial begin light1 = red; if (light1 = red) light1 = green; end 匿名的2态 整型(int)变量enum red, yellow,gr

58、een light1,light2;enum bronze=3, silver,gold medal;enum a=0, b=7, c, d = 8 alphabet;enum bronze=4h3, silver,gold medal;silver = 4, gold = 5;silver = 4h4, gold = 4h5;语法错误(隐含)c= 8, (明确)d = 8;traffic_light = 0 (“red”)traffic_light = 2 (“green”)满央宫好疤协秉圭弦廉昆客灌封矢盎附坚县狈坍乒刷扁势苯吓秩敲圃兆惕systemVerilog快速入门PPTsystemV

59、erilog快速入门PPT枚举类型的抽象枚举类型的抽象 module fsm_svla_3;. enum IDLE, READ, DLY, DONE, XX state, next; .endmodule 无指定值的抽象枚举名(值可以在以后指定)枚举变量state 和 next 未注明的地方输出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws= 1ws= 0逗号把括在内的枚举名分隔开来 枚举关键字烈枣试执拇梁矛洗上备镐妙紧慈巴辑离携臣矮琉献肘仗坡陨磐其豹侩烈罚systemVerilog快速入门PPTsystemVerilo

60、g快速入门PPT枚举枚举-赋整型值赋整型值 module fsm_svla_3;. enum IDLE = 3b000, READ = 3b001, DLY = 3b010, DONE = 3b011, XX = 3b111 state, next; .endmodule 未指定数据类型,即假定数据为整型确省类型 用户对枚举名 赋值蛹厌驾绰明厦憎肄洲疫启曲躬叠远树书肃逊而乖折什溪瑰央艘漫条鲁墨赂systemVerilog快速入门PPTsystemVerilog快速入门PPT 在在 FSM FSM 设计用设计用3 3个个always块块 应用枚举应用枚举应用枚举应用枚举 module fsm_s

61、vla_3; (output reg rd,ds, input go, ws, clk,rst_n ); enum IDLE , READ , DLY , DONE , XX state, next; always (posedge clk, negedge rst_n) if (!rst_n) state = IDLE; else state = next;always * begin next = xx; case (state) IDLE: if (go) next = READ; else next = IDLE; READ: next = DLY; DLY: if (!ws) nex

62、t = DONE; else next = READ; DONE: next = IDLE; end. 枚举的测试和赋值 . always (posedge clk, negedge rst_n) if (!rst_n) begin rd = 1b0; ds = 1b0; end else begin rd = 1b0; ds = 1b0; case (next) READ: rd = 1b1; DLY: rd = 1b1; DONE: ds = 1b1; endcase endendmodule 逗号分开的敏感列表*表示组合逻辑的敏感列表(简化的语法,减少RTL错误)抽象的枚举名呼坍共袖明溃

63、整亥迹伟矿弓尖柱消拉斥倦幂鹰垣昏瓷叉善游净夷芍延蛤找systemVerilog快速入门PPTsystemVerilog快速入门PPT枚举枚举 指定四状态值指定四状态值 module fsm_svlb_3;. enum reg 1:0 IDLE = 2b00, READ = 2b01, DLY = 2b10, DONE = 2b11, XX = x state, next; .endmodule x 赋值在仿真无关项优化综合和调试时非常有用指定4态数据类型 允许数据值为x 或者z没崭俏七点够峭滨啥寂缠戊妖钓欣笑疯侯渺诞讯捷敝习砒印庞抡默磊竭鸯systemVerilog快速入门PPTsystemV

64、erilog快速入门PPT在在 FSM FSM 设计用设计用3 3个个always块块 应用赋值枚举应用赋值枚举应用赋值枚举应用赋值枚举 module fsm_svla_3; (output reg rd,ds, input go, ws, clk,rst_n ); enum reg 1:0 IDLE=2b00 , READ=2b01 , DLY=2b10 , DONE =2b11 , XX =x state, next; always (posedge clk, negedge rst_n) if (!rst_n) state = IDLE; else state = next;always

65、 * begin next = xx; case (state) IDLE: if (go) next = READ; else next = IDLE; READ: next = DLY; DLY: if (!ws) next = DONE; else next = READ; DONE: next = IDLE; end. . always (posedge clk, negedge rst_n) if (!rst_n) begin rd = 1b0; ds = 1b0; end else begin rd = 1b0; ds = 1b0; case (next) READ: rd = 1

66、b1; DLY: rd = 1b1; DONE: ds = 1b1; endcase endendmodule 从抽象到具体需要做的唯一修改就是在枚举定义处赋值赋值的枚举值颗力诀械埃酒援梳枉昂瓷邮垛贰律列让字饿鄙即竟躯兑酗淆鞍龙摹舆晚巫systemVerilog快速入门PPTsystemVerilog快速入门PPT在在在在 FSM FSM FSM FSM 设计用设计用设计用设计用3 3 3 3个个个个alwaysalways块块块块 SystemVerilog 3.0 - SystemVerilog 3.0 - SystemVerilog 3.0 - SystemVerilog 3.0 - 应

67、用赋值枚举应用赋值枚举应用赋值枚举应用赋值枚举 module fsm_svla_3; (output reg rd,ds, input go, ws, clk,rst_n ); enum reg 1:0 IDLE=2b00 , READ=2b01 , DLY=2b10 , DONE =2b11 , XX =x state, next; always_ff (posedge clk, negedge rst_n) if (!rst_n) state = IDLE; else state = next;always_comb begin next = xx; unique case (state)

68、 IDLE: if (go) next = READ; else next = IDLE; READ: next = DLY; DLY: if (!ws) next = DONE; else next = READ; DONE: next = IDLE; end. . always (posedge clk, negedge rst_n) if (!rst_n) begin rd = 1b0; ds = 1b0; end else begin rd = 1b0; ds = 1b0; case (next) READ: rd = 1b1; DLY: rd = 1b1; DONE: ds = 1b

69、1; endcase endendmodule 无论对仿真器和综合器以及形式化验证工具 都相当于full_case parallel_case允许更多的类似lint的代码检查丘嫌鼎念幼嘱弛汛泡粉伤檬预潮懊诵灵淑钝剧禁成赣音多穿拳债玖痊掷幸systemVerilog快速入门PPTsystemVerilog快速入门PPT在在在在 FSM FSM FSM FSM 设计用设计用设计用设计用3 3 3 3个个个个alwaysalways块块块块 SystemVerilog 3.0 - SystemVerilog 3.0 - SystemVerilog 3.0 - SystemVerilog 3.0 -

70、应用赋值枚举应用赋值枚举应用赋值枚举应用赋值枚举 enum reg 1:0 IDLE=2b00, READ=2b01, DLY=2b10, DONE =2b11 , XX =x state, next; 加入四状态变量的枚举类型,允许合法状态赋值和x状态赋值以未定义的抽象状态开始enum IDLE, READ, DLY, DONE, XX state, next; 有利于抽象有利于观察波形有利于调试和综合犹戮摘摈凰秽晶鼓冻傲官泳岩匡锥晓吨喷痴咋纱邪压匣锤骤继患漂萌檀预systemVerilog快速入门PPTsystemVerilog快速入门PPT枚举类型枚举类型 波形显示波形显示 enum r

71、eg 1:0 IDLE=2b00, READ=2b01, DLY=2b10, DONE =2b11 , XX =x state, next; 确切标准的波形显示能力正在定义中比Verilog的$monitor系统任务容易编写代码显示枚举名还是ASCII字符?显示2进制数字? IDLE READ READ DLY DONE IDLE 00 01 10 01 11 00 式碾畔毁胡踏襄轮瞳嚏唬殊桓而骋旧婚挠妄乌致拿畏酿琐守帽诬深幕济匿systemVerilog快速入门PPTsystemVerilog快速入门PPT循环语句的性能得到增强循环语句的性能得到增强module for4a( output

72、reg 31:0 y, input 31:0 a, input s); integer i; always (a or s) for ( i=0; i32; i=i+1) if (!s) yi = ai; else yi = a 31-i;endmodulemodule for4b( output logic 31:0 y, input 31:0 a, input s); always (a or s) for ( int i=0; i32; i+) if (!s) yi = ai; else yi = a 31-i;endmodule独立的迭代变量声明本地迭代变量声明自动递加本地迭代变量是自

73、动变量退出循环后就不再存在Verilog-2001SystemVerilog显式的递加a31:0a0:31a31:0i1i0syy31:0sSystemVerilog 还增加了一个do-while循环(底测试循环)硬搭复匡潮骑乾位伏爵令妮尖济恳媳坑勿曼掷钮悦棕峙粳烂机睛侍难裕琳systemVerilog快速入门PPTsystemVerilog快速入门PPT隐含的端口连接隐含的端口连接n nVerilog 和和VHDL都能用按端口名连接或都能用按端口名连接或按顺序连接的方式引用实例模块按顺序连接的方式引用实例模块n nSystemVerilog用了两个新的隐含端口用了两个新的隐含端口连接解决了顶

74、层代码编写时表示端口连接连接解决了顶层代码编写时表示端口连接代码的冗长代码的冗长 - .name 端口连接端口连接 - .* 隐含的端口连接隐含的端口连接大型大型ASIC顶层模块的端口连接非常麻烦而且顶层模块的端口连接非常麻烦而且冗长冗长冗长冗长下面是一个中等大小模块的例子下面是一个中等大小模块的例子下面是一个中等大小模块的例子下面是一个中等大小模块的例子刘帛贷浪韶忌命定钦议豆佬串融匡冬莲一嚎吐空捍涂淬锈劫愧敛谜秉巾稠systemVerilog快速入门PPTsystemVerilog快速入门PPT中央算术逻辑单元(中央算术逻辑单元(CALU)方块图)方块图注意:所有寄存器的时钟端都由“clk”

75、驱动,异步复位都由“rst_n”驱动MultOp1 regshifter(0,1,4)shifter(0,1,4)MultOut regAccumulatorBarrel shifterBarrel shifter (0-16) (0-16)MUXALU (32bit)Multiplier16 data16321616161616323232323232alu_outaccmultoutbsaccalu_inen_accalu_op2:0muxselld_multop1ld_multoutld_accld_shften_shftshft_lshftbs_lshft4:0ld_bsmop1mul

76、t32群微根谚精绪慕栅涂罕诣斋膀喻猛回殃挝孟涉馋鼓撅蠢犹毗戳茵睫桌摈惑systemVerilog快速入门PPTsystemVerilog快速入门PPT中央算术逻辑单元(中央算术逻辑单元(CALU)模块之一)模块之一module calu3(inout 15:0 data;input 4:0 bs_lshft;input 2:0 alu_op;input 1:0 shft_lshft;input calu_muxsel, en_shft, ld_acc, ld_bs;input clk,rst_n);wire 31:0 acc, alu_in, alu_out, bs, mult, multou

77、t;wire 15:0 mop1;multop1 multop1 (.mop1, .data, .ld_multop1, .clk, . rst_n);multiplier multiplier(.mult, .mop1, .data);multoutreg multoutreg (.multout, .mult, .ld_multout, .clk, .rst_n); MultOp1 regMultOut regMultipliermultop1 multop1 (.mop1, .data, .ld_multop1,multop1 multop1 (.mop1, .data, .ld_mul

78、top1, .clk, . rst_n); .clk, . rst_n);端口名的匹配只需要列出一次啦茁呆泻邢抠按坞宾嗅弥躺诉镶婚爸檬险芥趋咬霄阮芳细丈捌拣抡耸抄驻systemVerilog快速入门PPTsystemVerilog快速入门PPT中央算术逻辑单元(中央算术逻辑单元(CALU)模块之二)模块之二 barrel_shifter barrel_shifter( .bs, .data, .bs_lshft, .ld_bs, .clk, . rst_n);mult2 mux ( .y(alu_in), .i1(acc), .sel1(calu_muxsel);alu alu (.aluou

79、t, .zero( ), .neg( ), .alu_in, .acc, .alu_op); accumulator accumulator (.acc, .alu_out, .ld_acc, .clk, .rst_n);shifter shifter(.data, .acc, .shft_lshft,. ld_shft, .en_shft, .clk, . rst_n);tribuf tribuf (.data, .acc(acc15:0), en_acc);endmodule 具备所有按端口名连接的优点Barrel shifterBarrel shifter (0-16) (0-16)MU

80、XALU (32bit)Accumulatorshifter(0,1,4)shifter(0,1,4) 代码更简练!妙抵来禄剪腥戊旭孟婴炎屁爹酬碑墟宠领腾邑限船囚赤宛仲郭铬亥廖掂拱systemVerilog快速入门PPTsystemVerilog快速入门PPT中央算术逻辑单元(中央算术逻辑单元(CALU)顶层模块)顶层模块 用 * 表示隐含的端口module calu4(inout 15:0 data,input 4:0 bs_lshft,input 2:0 alu_op,input 1:0 shft_lshft,input calu_muxsel, en_shft, ld_acc, ld_b

81、s,input ld_multop1, ld_multout, ls_shft, en_acc,input clk, rst_n) ;wire 31:0 acc, alu_in, alu_out, bs, mult, multout;wire 15:0 mop1;multop1 multtop1 ( .* );multiplier multiplier ( .* );multoutreg multoutreg ( .* ); barrel_shifter barrel_shifter ( .* );mult2 mux ( .y(alu_in), .i0(multout), i1(acc), s

82、ell(calu_muxsel );alu alu ( .*, .zero( ), .neg( ); accumulator accumulator ( .* );shifter shifter( .* );tribuf tribuf (.*, .acc(acc15:0 );endmodule 本风格重点表达端口出现不同的地方Barrel shifterBarrel shifter (0-16) (0-16)MUXALU (32bit)Accumulatorshifter(0,1,4)shifter(0,1,4) 代码更简练MultOut regMultOp1 regMultiplier钵舰尽

83、扼冉贡滤梅仪背返漠庞呸菲芦历惭痞兼栓左摔另懦蠕丧逐撇骂孪硕systemVerilog快速入门PPTsystemVerilog快速入门PPT 隐含隐含 .name 和和 . * 端口连接的规则端口连接的规则n在同一个实例引用中禁止混用 .* 和 .name端口;n允许在同一个实例引用中使用 .name和 .name(signal)连接;n也允许在同一个实例引用中使用 .* 和 .name(signal)的连接;n必须用 .name(signal) 连接的情况: - 位宽不匹配 - 名称不匹配 - 没有连接的端口 inst u1(, .data(data7:0),.);inst u2(, .dat

84、a(pdata), .);inst u3(, .berr( ), .);注意:比Verilog2001有更强大的端口连接描述,表述更简洁循涡魁穗臣墨关裂村袋湘旅壮置俏徊跨痴圾乐念嚷膨赛旺体垮芦逝某熬汾systemVerilog快速入门PPTsystemVerilog快速入门PPTCALU顶层模四种不同端口连接顶层模四种不同端口连接代码长度不同 31行代码680个字符按位置的端口连接按名字的端口连接43行代码1020个字符.名字的隐含端口连接32行代码757个字符.*的隐含端口连接23行代码518个字符翱滔聂拱加满传勋叁容斡线畸吁赖瞥娶酱氮埋陶礼合滓徘牵苏淹纽冈拙为systemVerilog快速

85、入门PPTsystemVerilog快速入门PPT隐含端口连接的缺点隐含端口连接的缺点 module drivera (output 7:0 y,input 7:0 a,input ena); assign y = ena? a : 8bz;endmodule n如果端口标识符相同很容易造成连接错误 - 出错后很难发现module driverc (output 7:0 y,input 7:0 c,input ena); assign y = ena ? c : 8bz;endmodule module driverd (output 7:0 y,input 7:0 c,input ena);

86、 assign y = ena? d : 8bz;endmodule module driverb (output 7:0 y,input 7:0 b,input ena); assign y = ena? b : 8bz;endmodule 使能信号名ena都相同abcenbdenceneenasel1sel2y想设计的逻辑佑漓才骚潘埔敝劣末老酱昆讶乎煮衷尿豹乖幕涡匆幅啦哑狂锚会绰州垫催systemVerilog快速入门PPTsystemVerilog快速入门PPT端口连接时用别名端口连接时用别名 module drivera (output 7:0 y1,input 7:0 a,input

87、 ena);module driverc (output 7:0 y3,input 7:0 c,input ena);module driverd (output 7:0 y4,input 7:0 c,input ena);module driverb (output 7:0 y2,input 7:0 b,input ena);abcenbdenceneenasel1sel2y新的SystemVerilog关键字alias module ena_decode (output reg ena, enb,enc, ene,input 1:0 sel);.module onehot_busmux (

88、output 7:0 y,input 7:0 a,b,c,d,input 1:0 sel);wire ena,enb,enc,ene;wire 7:0 y1,y2,y3,y4;alias y=y1=y2=y3=y4;ena_decode u0(.*);drivera u1(.*); drivera u2(.*, .ena(enb);drivera u3(.*, . ena(enc); drivera u4(.*, .ena(ene);endmoduley,y1,y2,y3,y4都是别名连接在一起用.* 缩短了实例端口的连接追姜诬窒盆源爹快掷尽梢魔厄栓增遗芯摇鄂霄联螟绍截是寝足滤魏睁拄芹syst

89、emVerilog快速入门PPTsystemVerilog快速入门PPT用用 .* .* 隐含端口连接的优缺点隐含端口连接的优缺点优点:优点:优点:优点:n编写顶层模块时容易多了n扫描多达1000个端口的顶层设计更加容易n比按照名字或者顺序连接端口的代码简洁多了。n仍旧保留显式端口连接的优点n编写用模块组装的顶层测试模块变得容易多了 -使测试模块的信号与端口名一致缺点缺点缺点缺点:n可能造成不想要的连接 - 很难发现错误 - 使模块的分别编译变得 复杂 - 用户使用错误时工具会 发生崩溃n对低层结构性的网表没有什么用处 -原语端口很少能与线网匹配合法的工具开发者很害怕这一点.*的端口连接把所有

90、没有必要的麻烦都清除了只列出端口连接的例外情况即可所有端口都是隐含连接的械冲潘品搜代闹筒握薄站滦憎讹暮睡嚷漂闻鲜越回滚艰皂任雍窒妥雄讳腿systemVerilog快速入门PPTsystemVerilog快速入门PPT第二讲:第二讲:SystemVerilog 提高了设计和验证的效率提高了设计和验证的效率样奖自撩呜耻绑骸绕葬蚀毫困辣票党乞渭钱卫糠探房民检棒膝污它硒豆县systemVerilog快速入门PPTsystemVerilog快速入门PPT设计和验证只需用同一种语言设计和验证只需用同一种语言大大提高工作效率大大提高工作效率n n容易学习容易学习 - SystemVerilog - Syst

91、emVerilog 语言本身很容易掌握语言本身很容易掌握语言本身很容易掌握语言本身很容易掌握n n改善了设计小组和验证小组之间的改善了设计小组和验证小组之间的联络联络n n由于具备高级语言结构,因而减少由于具备高级语言结构,因而减少了设计和验证工作的复杂性了设计和验证工作的复杂性芒氨帕键片惋臭姻哀仓茅睬橇最求叮渴北苑上橙涣舅欠氓搔擞菲遮浅臼酷systemVerilog快速入门PPTsystemVerilog快速入门PPT打包的和未打包的数组打包的和未打包的数组未打包的位数组打包的位数组1K161K161K161K16位未位未位未位未打包包包包的存储器的存储器的存储器的存储器1K161K161K

92、161K16位位位位打包的包的包的包的存储器存储器存储器存储器bit a 3:0;bit 3:0 p ;bit 15:0 memory 1023:0;initial beginmemory i = memoryi;memory i 15:8 = 0;endbit 1023:0 15:0 vframe;always (vcmd ) if (vcmd =INV) vfram = vframe;打包的索引可以分块可以对整个存储器进行操作 未用a0未用a1未用a2未用a3未用p0p1p2p3肘赁厌族雷忙绣杯捂居躬掘狠菇商缔壁苦傍快豺瑟铂堑翘鳞拆馏街来骡贷systemVerilog快速入门PPTsyst

93、emVerilog快速入门PPT未打包的四维数组未打包的四维数组对应这个语句最大的可访问单元为1位logic xdata 3:0 2:0 1:0 7:07:02:01:03:0令俺矫错菊妹赂鞋雹滩靶遣缎际疟铰梧识雌掖聚盒鲸廓魏妒著争癸别边槐systemVerilog快速入门PPTsystemVerilog快速入门PPT打包的一维数组和未打包打包的一维数组和未打包的三维数组的三维数组对应这个语句最大的可访问单元为8位logic 7:0 xdata 3:0 2:0 1:07:02:01:03:0脯汝亲败堆哑龚些扯斯磅宽豌坠劲多僵桓螺牟阂惶丛贪谤晤祝毒挽濒晴涵systemVerilog快速入门PPT

94、systemVerilog快速入门PPT打包的二维数组和未打包打包的二维数组和未打包的二维数组的二维数组对应这个语句最大的可访问单元为16位logic 1:0 7:0 xdata 3:0 2:07:02:01:03:0蒋帛献墒滔拔萨滩邦荷毫私渣霓勤刃喊代谜旧季诚贬天绸予蔑摇络鬼颤勋systemVerilog快速入门PPTsystemVerilog快速入门PPT打包的四维数组打包的四维数组 对应这个语句最大的可访问单元为192位logic 3:0 2:01:0 7:0 xdata7:02:01:03:0酉杆需淌嘛殆共欢恒奇甜比猾缅颊玖慢扔鹿捉妒驾网魏谩怕廓郡码躲狐歹systemVerilog快速

95、入门PPTsystemVerilog快速入门PPT数据的组织数据的组织 reg 47:0 pktsrc_adr;reg 47:0 pktdst_adr;reg 7:0 InstOpCde;reg 7:0 InstOpRF127:0;n n信号成组后有意义信号成组后有意义 - 指令: 操作符和操作数 - 包的区域:地址、数据和纠错码n nVerilog只提供非正式分组只提供非正式分组define opcode 31:16 reg 31:0 Instruction;Instruction opcode 用名称用矢量位置瞄鹿擎巍谈呛排寺降壕啊彰侵赤郴辈记耳孪随褂莎默莽踌睛天油血恕狮允systemVe

96、rilog快速入门PPTsystemVerilog快速入门PPT数据的组织数据的组织 n n目标:把数据组织得与高级编程语言一样目标:把数据组织得与高级编程语言一样 - 使其他人能非常清晰地理解设计中数据之间的关系;n nSystemVerilog 增加了结构,联合和数增加了结构,联合和数组类型组类型 - 能够分别使用这些类型,或者结合起来使用从而能更精确地描述设计的意图。非之规玉叛餐倦姨场羌轧卵拟得嗅嘲沙知读蚜孕懦颓搐勾赞泌拇丈扔纫憋systemVerilog快速入门PPTsystemVerilog快速入门PPT数据的组织数据的组织 n n 结构(结构(Structs)保留了逻辑分组保留了逻

97、辑分组n n 引用结构成员需要引用结构成员需要用比较长的表达式但用比较长的表达式但代码的意义很容易理代码的意义很容易理解解struct addr_t src_adr; addr_t dst_adr; data_t data; pkt;initial begin pkt.src_adr = src_adr; if(pkt.src_adr = = node.adr); .end把src_adr值 赋给pkt结构中的src_adr区把node结构中的adr区与pkt结构中的dst_adr区做比较瘤寻谚诲斗咳潞汐签促稳盛绥舵徒湍箩晤迄竿圆霉躬袜尚找朗尝诡茅日榜systemVerilog快速入门PPTs

98、ystemVerilog快速入门PPT数据的组织数据的组织打包的结构和打包的联合打包的结构和打包的联合打包的结构和打包的联合打包的结构和打包的联合 n n未打包的结构未打包的结构未打包的结构未打包的结构(Struct) - 保留了逻辑分组n n 打包的结构打包的结构打包的结构打包的结构(Struct) - 保留了逻辑分组 - 方便了访问typedef logic 7:0 byte_t;typedef struct packed logic 15:0 opcode;logic 7:0 arg1;logic 7:0 arg2; cmd_t;typedef union packed byte_t 3

99、:0 bytes;cmd_t fields; instruction_u;instruction_u cmd;打包的结构打包的联合cmd31:0cmd.fields.opcode15:0cmd.fields.arg17:0cmd.fields.arg27:0cmd_t 的区域cmd.byte1cmd.byte0cmd.byte2cmd.byte3摹珠狞泡愚酥郧县拔车敬注孺晴芦衣份味迭多纸设托愁濒超玛眉冰惰筷烽systemVerilog快速入门PPTsystemVerilog快速入门PPT数据的组织数据的组织打包的结构和打包的联合打包的结构和打包的联合打包的结构和打包的联合打包的结构和打包的联合

100、 typedef logic 7:0 byte_t;typedef struct packed logic 15:0 opcode;logic 7:0 arg1;logic 7:0 arg2; cmd_t;typedef union packed byte_t 3:0 bytes;cmd_t fields; instruction_u;instruction_u cmd;打包的联合使得我们能方便地用不同名称引用同一个数据cmd 现在等于32hDEADBEEFinitial begincmd.fields.opcode = 16hDEAD;cmd7:0 = 8hEF;cmd.bytes1 = 8

101、hBE;不需要测试数据类型DEAD1110 1111BE 数据映射到所有成员 D E A D B E E FDEADDEADBE BE 1110 11111110 1111这是同一个打包的数据结构侠炕收拢既功频邯设讨辩忧邓烦衅徊打着淀短隶肖攀晚师窜糙亭咙党靖个systemVerilog快速入门PPTsystemVerilog快速入门PPT 第三讲第三讲SystemVerilog 模块的接口模块的接口 郸这跪钻枪迭震毅团喷晦葱爹之他床氧油模旗臣膘描促瓷曼烫晌杖平燥帝systemVerilog快速入门PPTsystemVerilog快速入门PPT实例模块端口的连接实例模块端口的连接n nSyste

102、mVerilog的改进的改进 - - 用用用用 .name .name 和和和和 .* .* 来简化端口的连接来简化端口的连接来简化端口的连接来简化端口的连接 - - 用接口实现用接口实现用接口实现用接口实现 SystemVerilog SystemVerilog 模块的连接模块的连接模块的连接模块的连接-第一层第一层第一层第一层 - - 用接口实现用接口实现用接口实现用接口实现 SystemVerilog SystemVerilog 模块的连接模块的连接模块的连接模块的连接-第二层第二层第二层第二层 可以用宏指令(可以用宏指令(可以用宏指令(可以用宏指令(includeinclude)包含:

103、任务、函数、断言等)包含:任务、函数、断言等)包含:任务、函数、断言等)包含:任务、函数、断言等 对测试平台的开发非常重要:因为接口包含了合法的接口命令对测试平台的开发非常重要:因为接口包含了合法的接口命令对测试平台的开发非常重要:因为接口包含了合法的接口命令对测试平台的开发非常重要:因为接口包含了合法的接口命令 对对对对IPIP的开发非常重要:因为接口可以报告出错的开发非常重要:因为接口可以报告出错的开发非常重要:因为接口可以报告出错的开发非常重要:因为接口可以报告出错接口信息的封装添加了传递测试平台和断言值所需要的端口而丹制封绣塔染奥崖备铆旅呵浓鹿痈等试颧射归谍陷役赖掠硝担麻斡耀拐syst

104、emVerilog快速入门PPTsystemVerilog快速入门PPT接口的功能接口的功能n n 接口能传递穿越端口的记录数据类型接口能传递穿越端口的记录数据类型n n 有两种类型的接口元素:有两种类型的接口元素: - 声明的声明的 - 作为参数可以直接传递进入模块作为参数可以直接传递进入模块n n接口可以是:接口可以是: - 参数,常数参数,常数 和变量和变量 - 函数和任务函数和任务 - 断言断言焉殉释烷炭颁滋擒碰朔新赂卉仇华耀咆德线著冕淹胰秉翻柞窿瓮字裕眶泌systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog的接口的接口 白板上的设

105、计白板上的设计白板上的设计白板上的设计SystemVerilog 的设计的设计总线总线总线Verilog-2001风格风格 的设计的设计复杂的信号连接n在块中重复的总线协议n通过层次很难添加信号通信封装在接口中n减少出错的机会容易修改n显著缩短代码节省编写时间n能建立高效交易模型n允许自动化的块验证接口总线sig1sig2read()write()Assert脉菲降洋甄潍琵掘乾砂歹擞燕砍硒谱傅胞罐牲滑搬馆政攻凉咕闹馆七演耽systemVerilog快速入门PPTsystemVerilog快速入门PPT接口是什么?接口是什么?n n提供新层次结构提供新层次结构提供新层次结构提供新层次结构 - 把

106、内部连接和通信封装起来 - 把模块的通信功能从其他功能中分离出来 - 消除了接线引起的错误 - RTL级别的抽象成为可能int i;logic 7:0 a;interface intf; int i; logic 7:0 a;endinterface: intfint i;logic 7:0 a;typedef struct int i; logic 7:0 a; s_type; 接口就是一束连接线正象结构是一束变量一样凡跃着渗绵引誉疾团肘眉锦躺拓雏缔座氓蛙绊佬沃裂史脚账巳碰选仍衰乙systemVerilog快速入门PPTsystemVerilog快速入门PPT接口的引用接口的引用 变量和函数

107、变量和函数变量和函数变量和函数 n n接口变量可以用接口实例名加(接口变量可以用接口实例名加(接口变量可以用接口实例名加(接口变量可以用接口实例名加(. .)变量名引用)变量名引用)变量名引用)变量名引用n n接口函数可以用接口实例名加(接口函数可以用接口实例名加(接口函数可以用接口实例名加(接口函数可以用接口实例名加(. .)函数名引用)函数名引用)函数名引用)函数名引用n n通过接口的模块连接通过接口的模块连接通过接口的模块连接通过接口的模块连接 - - 能调用接口任务和函数的成员来驱动通信能调用接口任务和函数的成员来驱动通信能调用接口任务和函数的成员来驱动通信能调用接口任务和函数的成员来

108、驱动通信 - - 抽象级和通信协议能容易地加以修改抽象级和通信协议能容易地加以修改抽象级和通信协议能容易地加以修改抽象级和通信协议能容易地加以修改 用一个包含相同成员的新接口来替换原来的接口用一个包含相同成员的新接口来替换原来的接口用一个包含相同成员的新接口来替换原来的接口用一个包含相同成员的新接口来替换原来的接口接口改变了但是被连接的模块并未改变诺遵墓联警稽蔫鲁蜗光编种伦锋碧疵矢倍拈通诊骋翟卡牌铣席民谷柳测蝉systemVerilog快速入门PPTsystemVerilog快速入门PPT接口如何工作接口如何工作 interface intf;interface intf; logic a,b

109、; logic a,b; logic c,d; logic c,d; logic e,f; logic e,f;endinterfaceendinterfacemodule top;module top; intf w(); intf w(); mod_a m1(); mod_a m1(); mod_b m2(); mod_b m2();endmoduleendmodulemodule mod_a;module mod_a;endmoduleendmodulemodule mod_b;module mod_b;endmoduleendmodule还未建立端口实例化接口接口类型声明inftmod

110、_am1mod_bm2inftwtop引用实例mod_a 和 mod_b宾脊投她伟尾撬瘤帆港束菩伪砖届案尾枚宫揪天淋拷弘紫旺盟躬巾恼棺墅systemVerilog快速入门PPTsystemVerilog快速入门PPT接口如何工作接口如何工作 interface intf;interface intf; logic a,b; logic a,b; logic c,d; logic c,d; logic e,f; logic e,f;endinterfaceendinterfacemodule top;module top; intf w(); intf w(); mod_a m1(); mod_

111、a m1(); mod_b m2(); mod_b m2();endmoduleendmodulemodule mod_a (intf i1);module mod_a (intf i1);endmoduleendmodulemodule mod_b (intf i2);module mod_b (intf i2);endmoduleendmodule给mod_a 和mod_b添加接口mod_am1mod_bm2inftwtopintfi1intfi2敌燎执帅昔泽鸣此猿挫钵尉峙尤入抄堤悯域央堰焚怕惹胎胜灭缨瞳轮脊咙systemVerilog快速入门PPTsystemVerilog快速入门PPT

112、接口如何工作接口如何工作 interface intf;interface intf; logic a,b; logic a,b; logic c,d; logic c,d; logic e,f; logic e,f;endinterfaceendinterfacemodule top;module top; intf w(); intf w(); mod_a m1 (.i1( w ) ); mod_a m1 (.i1( w ) ); mod_b m2 (.i2( w ) ); mod_b m2 (.i2( w ) );endmoduleendmodulemodule mod_a (intf

113、i1);module mod_a (intf i1);endmoduleendmodulemodule mod_b (intf i2);module mod_b (intf i2);endmoduleendmodule接口类似于跨骑在两个模块上的一个模块mod_am1mod_bm2infti1-w-i2top接口实例w在mod_a中被称为i1,在mod_b中被称为i2接口也能包含模块端口(模块端口将在以后讨论)虚停链扦揪制盈钨贤讨丹始迫惰篮伦复祥芍中论拾酉纷今橡企验瓷垄表瑟systemVerilog快速入门PPTsystemVerilog快速入门PPT接口的使用接口的使用 interface

114、intf;interface intf; logic a,b; logic a,b; logic c,d; logic c,d; logic e,f; logic e,f;endinterfaceendinterfacemodule top;module top; intf w(); intf w(); mod_a m1 (.i1( w ) ); mod_a m1 (.i1( w ) ); mod_b m2 (.i2( w ) ); mod_b m2 (.i2( w ) );endmoduleendmodulemodule mod_a (intf i1);module mod_a (intf

115、i1);endmoduleendmodulemodule mod_b (intf i2);module mod_b (intf i2);endmoduleendmodule接口类型声明mod_am1mod_bm2infti1-w-i2top接口实例引用具体化的接口实例w在mod_a中被称为i1,在mod_b中被称为i2引用定义的接口类型 被引用接口的本地访问名 雅丰尽值拇承鞠困怪涝密绷荆食殆罗子枷枷沽诱搅狭口迸贤卡鹊撅伎介粗systemVerilog快速入门PPTsystemVerilog快速入门PPT接口的合法使用接口的合法使用 interface intf;interface intf;

116、logic a,b; logic a,b; logic c,d; logic c,d; logic e,f; logic e,f;endinterfaceendinterfacemodule top;module top; intf w(); intf w(); endmoduleendmodule接口类型声明inftw top接口实例引用声明并引用了接口实例,声明并引用了接口实例,但并未访问过具体接口实但并未访问过具体接口实例的线网和变量例的线网和变量, 这样做这样做是合法的,但没有什么是合法的,但没有什么用处用处.问撵饿顽建树会脾丧朵饵忽肢滴孵艾妈抢沿莲桑悼泪脏航嘶扰狸焚学喂扑system

117、Verilog快速入门PPTsystemVerilog快速入门PPT接口的非法使用接口的非法使用 interface intf;interface intf; logic a,b; logic a,b; logic c,d; logic c,d; logic e,f; logic e,f;endinterfaceendinterfacemodule mod_a (intf i1);module mod_a (intf i1);endmoduleendmodulemodule mod_b (intf i2);module mod_b (intf i2);endmoduleendmodule接口类

118、型声明mod_am1mod_bm2 错误:错误:1)声明了接口)声明了接口2)引用了接口)引用了接口3)但接口从未实例化过)但接口从未实例化过引用了定义的接口类型 被引用接口的本地访问名 infti1 infti2 ?接口intf声明灿掠炊伐圈伯银煤诽蛤镐魔眷捣湍侥锣刽改皮缔试脊展醋医便孤捌方躇挤systemVerilog快速入门PPTsystemVerilog快速入门PPT简单的接口简单的接口 interface blk_if;interface blk_if; logic 2:0 s1; logic 2:0 s1; logic s2; logic s2; logic s3; logic s

119、3;endinterfaceendinterfacemodule m1;module m1; blk_if a; blk_if a; assign y = assign y = endmoduleendmodule 模块端口括号中列出的接口b引用了接口实例中声明的线网和变量在模块内引用了接口实例,声明了一组线网和变量a.s12a.s11a.s10a.s2a.s3module m2( blk_if b); module m2( blk_if b); assign y = assign y = endmoduleendmoduleb.s12b.s11b.s10b.s2b.s3yassign y=a

120、.s2 & a.s3;assign y=a.s2 & a.s3;yassign y=b.s2 & b.s3;assign y=b.s2 & b.s3;提吮速表硬驼颤惟音弹磨界刘翼负詹缴眼氰切纽鲤轴互扫链挟瓦进完投溶systemVerilog快速入门PPTsystemVerilog快速入门PPT带端口的简单接口带端口的简单接口 interface blk_if(input bit clk); logic 2:0 s1; logic s2; logic s3;endinterface这个blk_if 接口a有一个隐含的时钟输入module tb;module tb; bit clk; bit cl

121、k; blk_if b_if (.clk); blk_if b_if (.clk); m3 u1 (.a(b_if); m3 u1 (.a(b_if); b_if.s12 b_if.s12 b_if.s11 b_if.s11 b_if.s10 b_if.s10 b_if.s2 b_if.s2 b_if.s3 b_if.s3 always #10 clk = clk; always #10 clk = clk;endmoduleendmodulemodule m3( blk_if a); always (posedge a.clk) q = a.s10;endmodulea.s12a.s11a.

122、s10a.s2a.s3(input clk)qa.clku1 引用实例模块m3拐港惮墨架人上湘琼冬焰敬吮晦半谓灵惹绵匝瓶硬募榜叠拂参闲服怔疡逞systemVerilog快速入门PPTsystemVerilog快速入门PPT带模块端口的简单接口带模块端口的简单接口 interface blk_if(input bit clk); logic 2:0 s1; logic s2; logic s3; logic q; modport s (input clk,s1,s2,output q);endinterfacemodule tb;module tb; bit clk; bit clk; blk_

123、if b_if (.clk); blk_if b_if (.clk); m4 u1 (.a(b_if); m4 u1 (.a(b_if); b_if.s12 b_if.s12 b_if.s11 b_if.s11 b_if.s10 b_if.s10 b_if.s2 b_if.s2 b_if.s3 b_if.s3 always #10 clk = clk; always #10 clk = clk;endmoduleendmodulemodule m4( blk_if.s a); always (posedge a.clk) a.q = a.s10;endmodulea.s12a.s11a.s10

124、a.s2a.s3(input clk)a.clku1 引用实例模块m4u1.a.q=b_if.qmodport s inputModport 定义了模块接口s,其中s1,s2为输入,q为输出a.q揖膀优瑚愚蒲巡似渡模瑞蝴砖赶忘抒鼓即化昼凸扒栈漱加先涧裕播与堕辐systemVerilog快速入门PPTsystemVerilog快速入门PPT与接口一起工作与接口一起工作-tb 的任务的任务 interface blk_if(input bit clk); logic 2:0 s1; logic s2; logic s3; logic q; modport d (input clk, s2, out

125、put q);endinterfacemodule tb;module tb; bit clk; bit clk; blk_if b_if (.clk); blk_if b_if (.clk); m5 u1 (.a(b_if); m5 u1 (.a(b_if); initial begin initial begin write (1b1); write (1b1); end end task write (input val) task write (input val) (negedge clk) (negedge clk) b_if.s2 = val; b_if.s2 = val; en

126、dtask endtaskendmoduleendmodulemodule m5( blk_if.d a); always (posedge a.clk) a.q = a.s2;endmodulea.s2 a.clku1 引用实例模块m5u1.a.q=b_if.qmodport d 的输入Modport 定义了模块接口d, 其中s1,s2为输入,q为输出a.qb_if.s2modport d 的输出嘴惶游础妈焕叙扁炼烦犯景录蹈罕躯畅哩撞达离重巫傅安均驱湾矛柏津图systemVerilog快速入门PPTsystemVerilog快速入门PPT接口任务接口任务 module tb;module t

127、b; bit clk; bit clk; blk_if2 b_if (.clk); blk_if2 b_if (.clk); m5 u1 (.a(b_if); m5 u1 (.a(b_if); initial begin initial begin b_if. write (1b1); b_if. write (1b1); endmoduleendmodulemodule m5( blk_if2.d a); always (posedge a.clk) a.q = a.s2;endmodulea.s2 a.clku1 引用实例模块m5u1.a.q=b_if.q把测试模块中的任务放在接口中定义a

128、.qb_if.s2从接口调用写任务interface blk_if2(input bit clk); logic 2:0 s1; logic s2; logic s3; logic q; modport d (input clk,s2,output q); task write (input val); (negedge clk) s2 = val; endtaskendinterfaceb_if.q房哄历谭戳吓婚矿橱龚休开姐求芬谜策浪酵笑毛逊嘎龄同那赊乱寨裤撅弊systemVerilog快速入门PPTsystemVerilog快速入门PPT接口接口 - - 不要都用线网类型不要都用线网类型

129、不能对这些接口信号中的任何一个进行过程性赋值。(全部都是线网类型,没有变量类型的)interface good_if1; logic 7:0 addr; logic n2; wire 7:0 data;endinterfaceinterface bad_if1; wire 2:0 n1; wire n2; wire n3;endinterfacen一般情况下,接口将把模块的输出一般情况下,接口将把模块的输出连接到另一模块的输入连接到另一模块的输入 - 输出可能是过程性的或者连续性驱动的输出可能是过程性的或者连续性驱动的 - 输入是连续性驱动的输入是连续性驱动的n既然接口是把输出与输入连接起来既

130、然接口是把输出与输入连接起来 - 输出常由过程性语句赋值输出常由过程性语句赋值 - 即使输出是由连续赋值语句指定的,当即使输出是由连续赋值语句指定的,当它们被连接到不同模块时,它也往往被转它们被连接到不同模块时,它也往往被转变成过程性赋值变成过程性赋值n双向和多驱动线网双向和多驱动线网 - 该类连接在接口定义中必须声明为线网该类连接在接口定义中必须声明为线网类型(类型(wire)双向数据总线训桔均瀑幢倾协誉候掸皑云阁陌唱宿哺魁办倦契惶茶添号列它畦基牢僚蘑systemVerilog快速入门PPTsystemVerilog快速入门PPT鲁观颠校没啄匆队菩专深互膨弟裹进叁糜诊狗畅陛就倚煽码碴攒猿澈陌

131、醒systemVerilog快速入门PPTsystemVerilog快速入门PPT第三讲第三讲SystemVerilog提高了验证代码的的效率提高了验证代码的的效率铭烧亡痔穆矛咸绞垛糟什蜘塑栓矿静考转窗猜利袄檬钻驱煎渺浇滓耀铬驰systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog 的时钟和程序块的时钟和程序块n n时钟块(域)和基于周期的属性时钟块(域)和基于周期的属性 - - 方便测试平台的开发方便测试平台的开发方便测试平台的开发方便测试平台的开发 - - 促进测试平台的重复使用促进测试平台的重复使用促进测试平台的重复使用促进测试平台的重

132、复使用 - - 基于周期的信号采样基于周期的信号采样基于周期的信号采样基于周期的信号采样 - - 基于周期的测试激励信号的产生(驱动)基于周期的测试激励信号的产生(驱动)基于周期的测试激励信号的产生(驱动)基于周期的测试激励信号的产生(驱动) - - 同步采样同步采样同步采样同步采样 - - 无冒险竞争的程序内容无冒险竞争的程序内容无冒险竞争的程序内容无冒险竞争的程序内容n n分割和包装测试代码的程序块分割和包装测试代码的程序块捉拖梅肌稍汇奋雀沈闷栖套锗粗机笛幽桨涛搅士带能盗遮侣类猜犬祈磋锑systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilo

133、g 功能强大的断言功能强大的断言n n 用于验证的断言(用于验证的断言(Assertion)机制)机制 - - 设计意图设计意图设计意图设计意图 - - 功能覆盖意图功能覆盖意图功能覆盖意图功能覆盖意图n n 新的属性和时序声明新的属性和时序声明n n 带动作块(带动作块(action block)的断言和覆盖)的断言和覆盖语句语句断言将在以后讨论断言将在以后讨论黎须凰虐漠头抨簿砰舌藐创箭浦找辊壬溺欣蚕臣押疹扬撤毫担粉授陆狱哈systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog 提高了验证效率提高了验证效率n n直接编程接口(直接编程接口(

134、直接编程接口(直接编程接口(DPIDPIDPIDPI)-DirectC-DirectC-DirectC-DirectCn n新类型新类型新类型新类型 - - - - C C C C 类型、字符串、动态数组、相关数组类型、字符串、动态数组、相关数组类型、字符串、动态数组、相关数组类型、字符串、动态数组、相关数组n n经子程序的变量传递经子程序的变量传递经子程序的变量传递经子程序的变量传递 - - - - 比比比比Verilog-2001Verilog-2001版的重入任务(版的重入任务(版的重入任务(版的重入任务(reentrant tasksreentrant tasksreentrant t

135、asksreentrant tasks)更好使用)更好使用)更好使用)更好使用n n同步同步同步同步 - - - - 动态过程的产生动态过程的产生动态过程的产生动态过程的产生 - - - - 过程控制过程控制过程控制过程控制 - - - - 内部过程之间的通信内部过程之间的通信内部过程之间的通信内部过程之间的通信n n现存现存现存现存VerilogVerilogVerilogVerilog事件的性能提高事件的性能提高事件的性能提高事件的性能提高n n内建的同步原语(内建的同步原语(内建的同步原语(内建的同步原语(primitiveprimitiveprimitiveprimitive) - -

136、 - - 信号灯(信号灯(信号灯(信号灯(SemaphoreSemaphoreSemaphoreSemaphore)和邮箱)和邮箱)和邮箱)和邮箱n n类和方法类和方法类和方法类和方法 - - - - 用面向对象的机制进行抽象和包装用面向对象的机制进行抽象和包装用面向对象的机制进行抽象和包装用面向对象的机制进行抽象和包装后面简述后面简述下载下载SystemVerilog LRM自己学习自己学习燥瑟航么汰浅逐合典冕后巫刽创溢仟诧惊告脐挺绳窿熟烬侗迷亭菠夷富禁systemVerilog快速入门PPTsystemVerilog快速入门PPTFinal 块块 n n结束块(结束块(结束块(结束块(fi

137、nal blockfinal blockfinal blockfinal block)类似于初始块,)类似于初始块,)类似于初始块,)类似于初始块, 但是在仿真结束时触发执行但是在仿真结束时触发执行但是在仿真结束时触发执行但是在仿真结束时触发执行 final begin if (ERROR_CNT = 0) & (VECT_CNT!=0) begin $write (“n TEST PASSED- %0d vector”, VECT_CNT); $write (“n - %0d passednn”, pass_CNT); end else begin $write (“n TEST FAILE

138、D- %0d vector”, VECT_CNT); $write (“n - %0d passed- %d failed nn”, pass_CNT, ERROR_CNT);end待所有生成的子过程结束后待所有未决的PLI调用被取消后结束块才执行$finish 命令事件队列变为空终止所有程序块(产生隐含的$finish)PLI执行tf_dofinish()或vpi_control(vpiFinish.)final 块不允许有延迟畔惮帽磺垛詹归陡讣殷巧妊尘卑映铺锑馒艺及绥半仍霞淤饿捞惊于氨淡披systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVeril

139、og SystemVerilog 事件调度的改进事件调度的改进事件调度的改进事件调度的改进 当前时隙 #0 阻塞赋值 计算非阻塞表达式 的RHS 连续赋值$display命令 更新非阻塞表达式的LHS 阻塞赋值更新原语的输入和 输出 $monitor系统命令 非阻塞赋值 观察来自上一个时隙SystemVerilog时隙被分成11个等级区域(7个Verilog 和4个PLI区)去下一个时隙 放置SV新命令的区域非阻塞赋值完成观察后准备(preponed) 预备启动 准备非阻塞赋值 语句重新激活 延迟SV新的放置PLI命令的区域 $strobe系统命令 语句暂停活动 语句激活PLIPLIPLIPL

140、I 放置SV新命令的区域低抡嫉窟走佛理栽腻换边哺悸卜怒罢甫尸撤总赶浙阂抬涛是夜仗恋郭动叼systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog 命令的调度命令的调度 计算断言 执行测试平台命令 非阻塞赋值 观察来自上一个时隙 #1 step去下一个时隙 放置SV新命令的区域准备(preponed) 语句重新激活 延迟 语句暂停活动 语句激活用于采样和验证输入塑闪峨禄挖灿土诅数纽觅他党笋抓忙鲸败勇增澳矢放通顾徊权鲸锗跟迟烩systemVerilog快速入门PPTsystemVerilog快速入门PPT时钟块时钟块 clocking bus (p

141、osedge clk) default input #10ns output #2ns; input data, ready, enable = top.mem1.enable; output done; output negedge ack; input #1step addr;endclockingnSystemVerilog增加了一个时钟块用于: - 为了验证所做的采样 - 驱动激励新的clocking 和endclocking关键词由缺省值指定的输入是在时钟clk正跳变沿前10ns采样的 由缺省值指定的输出是在时钟clk正跳变沿后2ns时驱动的 采样信号的输入对驱动的输出例外的输出(该

142、信号由时钟clk的负跳变沿驱动)例外的输入(在时钟clk的正跳变沿前1step采样该信号) 储掇剂蛹曹暴账午纶仍谓录贴说耳星袋当辅熙讫袋被迪运梦租枕乞漳枢惮systemVerilog快速入门PPTsystemVerilog快速入门PPT时钟的歪斜时钟的歪斜 指定了同步采样和驱动时间: - 输入歪斜是为了采样 - 输出歪斜是为了驱动 - 缺省的输入歪斜是1step缺省的输出歪斜是0信号在这儿采样指定的时钟域时钟 常用(posedge clk) 信号驱动在这儿输出的歪斜当输入被采样并当激励被驱动时的时钟块包装输入的歪斜clockinputoutput熊做钾呐唁族吠荷写笺吕烂本嚷蹬贵瑶肚槐督摘晒桶醛

143、妊扑旧晌杠铡庄核systemVerilog快速入门PPTsystemVerilog快速入门PPT时钟的同步接口时钟的同步接口 clocking fifo (posedge wclk) default input #1step output negedge); input wfull ; output wdata, winc, wrst; endclocking wfull信号在wclk正跳变沿前面#1step处采样时钟事件是wclk的正跳变沿缺省情况下,采样输入正好在wclk的正跳变沿前一步输入的歪斜wclkwfullwdata,winc,wrst输出的歪斜(negedge wclk)wdat

144、a,winc,wrs在(negedge wclk)被驱动缺省情况下,在wclk的负跳变沿时刻,驱动FIFO的激励 测试模块编写时:fifo.wfull fifo.wdatafifo.winc fifo.wrst 毛猿捡帝雹蚊睡闰桃哇须那洁忿汞借巡宪骨舞菌懒驶夕哀妓儡舍切肄氏矿systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog新的调度命令新的调度命令 wclk的正沿wfull信号在wclk正跳变沿前#1step 处采样wclkwfullwdata,winc,wrst输出的歪斜(negedge wclk)wdata,winc,wrs在(neg

145、edge wclk)被驱动preponed wclk的负沿Reactive preponed Active Inactive NBA ObservedPostpondReactive Active Inactive NBA ObservedPostpondwclk 前一步#1step 采样驱动 恕难君然锡候勘桅迎杀殷酱弄辨偏丑朴兽魏耍垄松鹃既坞我掖膘示趾煮娃systemVerilog快速入门PPTsystemVerilog快速入门PPT缺省的时钟和同步驱动缺省的时钟和同步驱动 等待1个wclk周期然后驱动wdata n指定一个缺省时钟指定一个缺省时钟 default clocking tb.f

146、ifo.wclkn每个模块、接口、程序只允许一个缺省时钟每个模块、接口、程序只允许一个缺省时钟n描述周期延迟的句法描述周期延迟的句法 # # 5; /等待等待5个周期个周期 # 1 fifo.wdata = 8hff; # 2; fifo.wdata = 8hAA; fifo.wdata = #2 d; 等待2个缺省的时钟周期,然后驱动wdata 记住d的值 ,然后在2个wclk时钟周期后驱动wdata 优火末稼邻田孵殃馅族街懊酿兹既仓唬琵滤舆茂扯贸辱貌铝欲伎绝洁打迹systemVerilog快速入门PPTsystemVerilog快速入门PPT程序块程序块 n目的:标识验证用的代码段目的:标

147、识验证用的代码段 default clocking tb.fifo.wclkn 一段不同与模块的程序一段不同与模块的程序 - 只允许使用只允许使用initial 块块 - 特殊的语法特殊的语法 在重新激活区执行在重新激活区执行 设计设计时钟时钟/断言断言 程序程序RTL 设计 时钟和断言 Reactive preponed Active Inactive NBA ObservedPostpondprogram name() ; /type, func, class,clocking ; initial endprogram暖虐攫剂叹徊秒泳沟脂斟士痰扔炊欺谣死墒累迎勺爽炎玻留硬愁玫廉硅瓜syst

148、emVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog DPI Direct Programming Interface直接编程接口直接编程接口无绞丛孰欣鬼畅少骏猫相袜竹疑肮垃原校夏滦拒舱蘸团起伪函拴辙梅硕险systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog 简化了简化了C模块的调用模块的调用n使用更加便利使用更加便利n允许直接调用允许直接调用C C函数函数n提供了类似于提供了类似于C/C+C/C+的高级数据类型的高级数据类型不需要用户成为PLI专家丢了什么?C程序不能调用SystemVeril

149、og任务(而Superlog允许)来自于C程序不消费时间已提出建议允许C程序调用SystemVerilog任务好!不好!不好!宅喳痕小驱摊缺外低野亩宴铃钞佣协研蕊捐代辩腔劣苗针吹聚蹭喊旁倪绰systemVerilog快速入门PPTsystemVerilog快速入门PPT 直接调用直接调用C模块模块nSystemVerilog 3.1-26节中有详细的描述节中有详细的描述n直接编程接口(直接编程接口(DPI)的双方都是完全独立的)的双方都是完全独立的 - SystemVerilog 不必分析不必分析 C 的代码的代码 - C 编译器也不必分析编译器也不必分析SystemVerilog的代码的代码

150、n输入的函数输入的函数 - 用用SystemVerilog 调用的调用的C 函数函数 - 输入的函数必须声明输入的函数必须声明 import “DPI” function .; n输出的函数输出的函数 -用用C调用的调用的SystemVerilog 函数函数 - 输入的函数必须声明输入的函数必须声明 export “DPI” c_identifier = function function_identifier; n所有所有C 和和 SystemVerilog 函数必须在零时间内完成函数必须在零时间内完成在26节中介绍了多种形式和选择可选择变量纷缉契侥诀佃烧减沽斧簇蔚迈瞥怪聊煞瘩古罚骆宜眉充衍

151、急窿关些赊江奠systemVerilog快速入门PPTsystemVerilog快速入门PPT SystemVerilog 和和 SystemCnSystemVerilog 有一个内部的有一个内部的C接口接口 - 有效率的有效率的RTL建模和仿真建模和仿真 - 有效率的门级仿真有效率的门级仿真 - SystemC 在进行在进行RTL和门级仿真时效率低下和门级仿真时效率低下 - 如果用户想严格地用如果用户想严格地用C编程,也可以不需要用编程,也可以不需要用SystemC n如果用户必须用如果用户必须用C+编写软件,他也许想使编写软件,他也许想使SystemC 与与SystemVerilog交互交

152、互 - 软件出身的工程师喜欢用软件出身的工程师喜欢用SystemC - SystemC 具有具有C+的操作过载、指针等所有的强大功能的操作过载、指针等所有的强大功能 - SystemC有帮助库,可以在信号级和时序细节上给予帮助有帮助库,可以在信号级和时序细节上给予帮助 - 大多数工作将用大多数工作将用C+来做来做 这正是大多数工程师想让Verilog仿真器苗茨绿署恫誓途贪叙劫焊蛰耙杯斡司铅昼躲号炙肮今蜒咎严显欧型盔劣弛systemVerilog快速入门PPTsystemVerilog快速入门PPT SystemVerilog 和和 SystemC(续)(续)(续)(续)nSystemVeril

153、og 不支持指针不支持指针 - 通过改变指针来改变值通过改变指针来改变值 -很难检测事件很难检测事件nSystemC提供了常用的提供了常用的C语言语法,这也许得到行为语言语法,这也许得到行为 综合工具的支持综合工具的支持 对行为综合器厂商来说只支持C编程风格比较容易 美厢军转躯身高籍恃渭顺钮匿遭嚼稚厩巍嘲杜洛燥藻隘抖忽戊约绣盾布细systemVerilog快速入门PPTsystemVerilog快速入门PPT SystemVerilog DPIDPI总结总结 nDPI(直接编程接口)不需要(直接编程接口)不需要PLI( (编程语言接口编程语言接口) ) - DPI 使得使得SystemVeri

154、log与与C代码的联合仿真变得容易代码的联合仿真变得容易 - 可以把编译后的可以把编译后的C目标码直接连接到目标码直接连接到SystemVerilog的仿真器的仿真器n与与SystemVerilog一起运行的一起运行的C模型运行速度快模型运行速度快 - 没有没有PLI接口来降低接口来降低SystemVerilog与与C之间的通信之间的通信nSystemVerilog仍然支持仍然支持PLI(编程语言接口),编程语言接口), 因而受到欢迎因而受到欢迎EDA工具仍旧用PLI来探索结构,并与设计交互 壮另咏残灸宣烩惦髓弄肠收梦妨耙奖诌砚淮候剁牌做矮敲占梧儿启记翠娘systemVerilog快速入门PP

155、TsystemVerilog快速入门PPTSystemVerilog 断言断言讲课材料源于基于断言的设计讲课材料源于基于断言的设计作者:作者:Foster,Krolnik & Lacey新出版的有关SystemVerilog断言(检测)的书书中的例子用到: SystemVerilog断言(SVA)特性指定语言(PSL)开放验证库(OVL)断言陛佰沂南倪绽墓怯猫屋钎阑悯蹬羽蜕广纠漳巩阉溪惋良缄栅竹糊瑰蝶画绒systemVerilog快速入门PPTsystemVerilog快速入门PPT 断言(断言(Assertion)是什么?)是什么?n 断言是关于设计所做的断言是关于设计所做的 “真相的声明真

156、相的声明”或或 “事实的说明事实的说明” 如果声明的断言不是事实,断言就无效如果声明的断言不是事实,断言就无效 设计中的断言最好由设计者本人编写设计中的断言最好由设计者本人编写 断言的唯一目的是保证设计者的意图与最后生成断言的唯一目的是保证设计者的意图与最后生成 电路逻辑功能的一致性电路逻辑功能的一致性断言是设计者企图使所设计的电路逻辑具有某种行为的声明 孕踌痈仟眼檄壕呸埋倡凿屡履车够唁熏返诬喀凤咐搏跳吠氖毕统扁窖睹以systemVerilog快速入门PPTsystemVerilog快速入门PPT 谁在使用断言谁在使用断言 ?n 许多著名的公司都使用断言进行设计,许多著名的公司都使用断言进行设

157、计, 其中包括:其中包括: - Cisco System, Inc. - Digital Equipment Corporation - Hewlett-Packard - IBM - Intel - LSI Logic - Motorola, Inc - Silicon Graphics, Inc惜划悼燥拢渊沫剂拾标掀事奎乏惑宇综掐凶像凄注七缩俊隐绩文砾委叼抛systemVerilog快速入门PPTsystemVerilog快速入门PPT 用开放验证库(用开放验证库(OVL)的断言)的断言来提高查错的效率来提高查错的效率 HP公司的公司的ASIC项目项目 - 总共用总共用2793个断言个断言

158、 . - 小于项目总开销的小于项目总开销的3% Cisco公司的公司的ASIC项目项目 - 总共用了总共用了10656个断言个断言 - 只占项目总开销的只占项目总开销的15% - 只用了约只用了约50个需要自己编写的特殊断言个需要自己编写的特殊断言氮瘩强抹砍斧擂襄换思磅悯颖囚熊体灯油祁鸡藐拳疫昼叮荫陡贫却制蛙烘systemVerilog快速入门PPTsystemVerilog快速入门PPT 用断言来提高查错的效率用断言来提高查错的效率 这些公司的设计师报告:这些公司的设计师报告: - 在在DEC Alpha 21164项目的所有错误中,项目的所有错误中,34%是由断言发现的是由断言发现的. -

159、 在在DEC Alpha 21264项目的所有错误中,项目的所有错误中,25%是由断言发现的是由断言发现的. - 在在 Cyrix M3(p1) 项目的所有错误中,项目的所有错误中,17%是由断言发现的是由断言发现的. - 在在 Cyrix M3(p2) 项目的所有错误中,项目的所有错误中,25%是由断言发现的是由断言发现的. 750个错误在加断言前就被查出在设计代码加断言后一周内,发现错误的速率快了三倍断言发现了剩余错误中的50%猛郑尉短舟懈幻倍桂碗务企艳衣吟金尿善锁嘴仪佑辆辗舵敷蕴踪冤番另去systemVerilog快速入门PPTsystemVerilog快速入门PPT RTL断言带来的影

160、响断言带来的影响Intel Centrino Intel Centrino 移动技术移动技术移动技术移动技术 RTL断言在断言在Intel Intel 公司已用了十多年公司已用了十多年公司已用了十多年公司已用了十多年 - 许多工具都利用断言 基本组合的断言基本组合的断言 - 大部分是互斥或禁止断言 - RTL代码中包含上千句断言 由由RTL断言发现的错误个数占总错误数的断言发现的错误个数占总错误数的25%以上以上 - 在集群测试环境中(CTE)断言在查错时非常有效率(超过25%) - 排在指定集群测试检查之后,名列第二(超过50%) - 在全芯片环境下,断言是最有效的差错方法(超过27%) 断

161、言能最早发现错误断言能最早发现错误 - 断言比集群测试检查更本地 - 断言大多数可以组合起来 RTL断言缩缩短了查错的过程断言缩缩短了查错的过程 断言在全芯片查错中最有用 可在设计过程的早期由断言发现错误断言直接指向错误 畸倘誊偶音章证烈誊帆退咋英秘婉昆酗刮且挠阁埃袍黍兽漓晌拣边拟碟脾systemVerilog快速入门PPTsystemVerilog快速入门PPT查错的效率查错的效率(来自于HP公司更新的技术资料)n nHPHP公司公司公司公司ASICASIC项目统计项目统计项目统计项目统计(2002年8月前后) - 约 4300个断言 - 约占仿真总开销的10% - 根据一年的统计,总错误数

162、的约85%由断言发现n nHPHP公司是如何确定公司是如何确定公司是如何确定公司是如何确定85%85%的百分比的?的百分比的?的百分比的?的百分比的? - 工程师把开放验证库(OVL)报告的错误信息剪贴到错误报告中 - 用Unix字符串查找工具(grep)确定OVL错误的百分比 - 实际的百分比可能更高工程师们并没有报告所有发现的RTL错误敏怒消詹摧则流藕拒诈仑谰牌瞒绊扛浸泡灿测痰她扑揩蹈叫疤启露绕蘑方systemVerilog快速入门PPTsystemVerilog快速入门PPT究竟应该由谁在代码中添加断言?究竟应该由谁在代码中添加断言? n n 基本原代码中,由设计者自己添加基本原代码中,

163、由设计者自己添加基本原代码中,由设计者自己添加基本原代码中,由设计者自己添加! - 断言与设计者的意图交流 - 根据他们对设计的认识,添加有关设计的事实 n n 二级原代码中,由验证工程师添加二级原代码中,由验证工程师添加二级原代码中,由验证工程师添加二级原代码中,由验证工程师添加 - 断言仍然由设计者本人添加 - 验证工程师有必要在设计的初期指导设计师编写断言n n设计师将在下一个项目中更多地使用断言设计师将在下一个项目中更多地使用断言设计师将在下一个项目中更多地使用断言设计师将在下一个项目中更多地使用断言 对设计工程师而言,断言是一些积极的设计注释,说明设计者意图和电路的行为,在开发和测试

164、环境中,能帮助设计者发现和确定设计和验证中的错误。 哼攀矿奉品慷匀通傲乡卖跪凛讹锗封蹦亡扎凸惨臻忱抓靡堪股衙类板搪郁systemVerilog快速入门PPTsystemVerilog快速入门PPT断言的好处断言的好处 n n 两个测试需求两个测试需求两个测试需求两个测试需求 - 必须产生合适的激励信号以激活测试电路中的错误 - 必须产生合适的激励信号以便把被测试模块中由错误产生的效果通过输出传送出来HDL测试发现的错误经常出现在设计某个不相关的地方n n减少了查错调试时间减少了查错调试时间减少了查错调试时间减少了查错调试时间 - 断言改进了可观察性 - HDL验证并不能从极其复杂的逻辑中直接查

165、出错误HDL测试发现的错误经常在过了好几个时钟后才出现 断言查错可以准确地知道错误发生的时刻和地点 断言需要的只是合适的输入激励信号! 断言改进了可改进了可观察性观察性 DEC Alpha 小组和Cyrix M3 小组发生的时刻和地点 侧芬孙顶扔贴胀为尸厩海纶琶梅铡裴丧糖邓巨玖柒王龙增沧巴龋缸捉进促systemVerilog快速入门PPTsystemVerilog快速入门PPT用于新设计的断言方法学用于新设计的断言方法学(学习重点)(学习重点)(学习重点)(学习重点)n n使断言成为设计检查过程使断言成为设计检查过程使断言成为设计检查过程使断言成为设计检查过程整体的一部分整体的一部分整体的一部

166、分整体的一部分 - 设计师只要分析系统中某处必须的断言类型就可以发现设计错误 新的代码新的错误.n n添加断言必须付出一定的代价添加断言必须付出一定的代价添加断言必须付出一定的代价添加断言必须付出一定的代价- -设计小组必须接受以下事实:设计小组必须接受以下事实:设计小组必须接受以下事实:设计小组必须接受以下事实: - 编写RTL代码的过程稍微延长些 - 调试时间显著缩短 - 在编写代码时刻,问题就已经潜入设计中 添加断言后,验证查错时间可以缩短50%以上 仅通过添加断言就能检查出错误添加断言只增加1%-3%编写RTL代码的时间在设计检查中使用断言住霍蚊值吴谗玛虞沼饯整税玲钢陇既国啼仍酚逐芯棱

167、粕寺快千盛江搂杜五systemVerilog快速入门PPTsystemVerilog快速入门PPT最好的断言实践最好的断言实践 n n把把把把 RTL RTL RTL RTL代码和有关的断言放在代码和有关的断言放在代码和有关的断言放在代码和有关的断言放在同一个代码段中同一个代码段中同一个代码段中同一个代码段中 - 能更好地对代码做注释 - 帮助识别代码的不同部分,分清有断言的和没有断言的n设计和开发有断言的IPn 回答以下问题: - 直接测试能否找到设计错误? - 随机测试能否找到设计错误? - 断言能否找到设计错误?n分析断言不能识别的设计错误 能否编写新的断言来检查这类错误?回答这些问题将

168、帮助同学理解断言方法的重要性编写嵌入断言的IP 把断言添加在相关的RTL代码段附近枯室舶迸诫唱得捂甸要裳胁烩客抄恐唱臻埃居肌蚂子饮夸张霓瞅邢鼓沃淮systemVerilog快速入门PPTsystemVerilog快速入门PPT断言的密度断言的密度 添加断言到模块的接口 这使得这些模块与接口信号的定义更接近n指导原则指导原则 :在编写:在编写RTL代码的过程中,以下几个地方代码的过程中,以下几个地方是插入断言最理想的地方:可能出问题的地方、希望核是插入断言最理想的地方:可能出问题的地方、希望核实的地方、想添加注释说明的地方实的地方、想添加注释说明的地方断言的密度 = 断言的条数/代码的行数n 块

169、接口断言块接口断言 - 不同的设计者可能对接口指标的理解不同不同的设计者可能对接口指标的理解不同 - 在在RTL模块的顶层添加所有模块的接口断言模块的顶层添加所有模块的接口断言“如果设计者不能为块或者芯片的接口编写断言,他也许还不清楚接口的细节”姥哎傈太揽陷雹镐焉衬羹比皑钟晓午坦刻彭牌绊妆沂须谎帕脉吧仑绷氨既systemVerilog快速入门PPTsystemVerilog快速入门PPT用于现成设计的断言方法学用于现成设计的断言方法学解决问题所需要的时间从7天下降到两天 每周发现的问题从20个增加到60个n 在成熟的设计中插入断言丢失了获取设计者最初设想在成熟的设计中插入断言丢失了获取设计者最

170、初设想的一些优势。的一些优势。 - 在成熟的设计中插入断言仍将带来好处在成熟的设计中插入断言仍将带来好处 断言的密度 = 断言的条数/代码的行数n Cyrix 设计:设计: - 插入断言后,错误报告增加了三倍插入断言后,错误报告增加了三倍n 插入断言的好地方:插入断言的好地方: - 在诸如以下注释的地方:在诸如以下注释的地方:“这永远不会发生这永远不会发生” 或者或者“任何此类任何此类操作都会引起操作都会引起.”n 为块的接口编写断言为块的接口编写断言 接口总是插入断言的好地方皮噪涉贰逾九榜谱函购辽混胡柞铣款谜娠模对接麻炮磊彼瞅咋赚潍裴投糕systemVerilog快速入门PPTsystemV

171、erilog快速入门PPTSystemVerilog把断言整合到把断言整合到Verilog语言中语言中统一的断言统一的断言nSVA和PSL的公共子集n句法和语法主要基于SVAn与形式化验证和仿真兼容 PSLSystemVerilog 断言将变得更象Verilog统一的断言统一的断言 PSL 1.1 有可能使得PSL 1.01语法过时 句法 类似 Verilog, 几乎没有做什么改变荚犹瑰捕搬怎孜很拍岳囱邮窍财猛鞋艰慢铁拷框腋掸陡氧的剪庆仕渝蔬鸵systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog提供了强大的提供了强大的 断言功能断言功能 仿

172、真检查自动测试平台硬件辅助的验证 覆盖 形式特性 综合SystemVerilog断言断言n每个设计者都可以访问n与Verilog很类似的语言学习容易nSystemVerilog 部分- 不是为最大限度提高设计效率而专门设计的古怪语言- 设计和验证工程师很容易上手和掌握,对编写可综合模块和验证模块都很有用n使用灵活,可以内嵌或者编写独立的文件n在简单的验证流程中可以无缝地与测试平台和调试实用程序交互学习曲线快屿堑不载鬃址瘦夹筋瀑缴腥遁己尺输道纠螟氛滓库樟叮赌款喘匪庄睬州目systemVerilog快速入门PPTsystemVerilog快速入门PPTSystemVerilog 的的 断言断言 nSystemVerilog的断言能力远远大于开放验证库的断言能力远远大于开放验证库(OVL)中的断言)中的断言 - SystemVerilog添加了两种类型的断言 n立即断言立即断言- 执行起来类似于过程块中的语句- 主要想用于仿真- 用关键字: assertn并发断言并发断言- 基于时钟的语义- 用于采样变量值- 用关键字 assert property址淳稽扒绳乳鲍庙眉粹活取钓骄雨抢抱外癸筒钧帆纳荔朔脏彭爆瑟访摄硼systemVerilog快速入门PPTsystemVerilog快速入门PPT

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号