systemVerilog快速入门PPT.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《systemVerilog快速入门PPT.ppt》由会员分享,可在线阅读,更多相关《systemVerilog快速入门PPT.ppt(125页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、- SystemVerilog -alias const &= |= = %=- from C / C+-int globals breakshortint enum continuelongint typedef returnByte structures do-whileShortreal unions + - += -= *= /=void casting = = if-elserepeat- Verilog -1995 - System Verilog RTL RTL Netlist设计效率设计效率 testbenchCo-simOverheadHDL SimultionSystemV
2、erilogtestbench进行全面验证的环境进行全面验证的环境断言断言验证验证 硬件辅助的验证硬件辅助的验证覆盖覆盖 测试平台测试平台仿真仿真 形式化特性形式化特性提高了验证的水平提高了验证的水平 System Verilog RTL RTL Netlist设计效率设计效率 结构化的和用户定义的数据类型与封装好的接口通信.* 蕴涵的端口实例引用testbenchCo-simOverheadHDL SimultionSystemVerilogtestbench使得我们有可能使用更高速度的仿真工具,加速了设计的完成进行全面验证的环境进行全面验证的环境断言断言验证验证 硬件辅助的验证硬件辅助的验
3、证覆盖覆盖 测试平台测试平台仿真仿真 形式化特性形式化特性提高了验证的水平提高了验证的水平仿真检查仿真检查硬件辅助验证硬件辅助验证SystemVerilog 断言断言自动测试平台自动测试平台覆盖测试覆盖测试形式化验证形式化验证 综合综合抓住设计意图与每个设计和验证工程师联络学习周期短仿真检查仿真检查硬件辅助验证硬件辅助验证 #0 阻塞赋值 计算非阻塞表达式 的RHS 连续赋值$display命令 更新非阻塞表达式的LHS 阻塞赋值 更新原语的输入和的输出, $monitor系统命令 $strobe 系统命令 语句激活 语句暂停活动 非阻塞赋值 监视来自上一个时隙Verilog-2001时隙被分
4、成4等级区域新的名称将”延迟”事件区域去下一个时隙如何才能简化这个队列?指导原则No.8:不要用#0延迟未初始化的变量 = X未初始化的线网 = 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
5、位)有符号整型数int i; /2态,(32位)有符号整型数longint l; /2态,(64位)有符号整型数注:* -bit 类型既可以用于变量也可以用于线网。另外还加入了其他一些数据类型SystemVerilog 新添加的数据类型reg 15:0 r16;logic 15:0 w16;bit 15:0 b16; reg, logic和 bit数据类型位宽可以改变对同一变量既进行连续赋值又进行过程赋值是非法的,不允许的。- 在在SystemVerilog中:中:logic和和reg类型类型是一致的(类似于是一致的(类似于Verilog中中wire和和tri类类型是一致的)型是一致的)log
6、ic 是4态数据类型的变量bit 相当于2态数据类型的变量或线网ifdef STATE2 typedef bit bit_t; /2 state else typedef logic bit_t; /4 stateendifdefines.vhifdef 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
7、 begin /stimulus endendmoduletb.vmodule dff( output bit_t q, input bit_t d, clk,rst_n); always (posedge clk), if (!rst_n) q=0; else q =d;endmoduledff.vverilog_cmd define.vh tb.v dff.vverilog_cmd define.vh tb.v dff.v +define+STATE2确省,为4态逻辑值仿真只用 2态逻辑值,仿真速度快功能相当于VHDL中的std_ulogic类型,很有效率与VHDL中的std_logic类
8、型没有功能可比较的类型ifdef STATE2 typedef bit bit_t /2-态else typedef logic bit_t;/4-态endif define.vhifdef STATE2 typedef bit bit_t /2-态 typedef ? tri_t /2-态else typedef reg bit_t;/4-态 typedef wire tri_t;/4-态endif define.vh无多驱动器的2态类型 - 也许下一个版本的SystemVerilog能得到修正没有容易的std_ulogic 和std_logic 之间切换的等价语句 always * orf
9、1(a) ;等价于:always (a) 等价于:always (a,b,c) void 函数的行为类似于0延迟的任务等价于:always (a) Verilog 任务 b 和 c 是隐含的输入always * ort1(a) ;等价于:always (a) b 和 c 是隐含的输入-或者-或者-只有always_comb 对函数的内容的变化是敏感的无正跳变沿触发时钟信号(clk)无负跳变沿触发时钟信号(clk)目前对综合器来说该语法是非法的module ddrff ( output bit_t q, input bit_t d, clk, rst_n ); always_ff (clk, n
10、egedge rst_n) if (! rst_n) q = 0; else q = d;endmodule去掉正跳变沿是否可以允许用正负两个沿触发?always_ff 显示设计者的意图这能综合成这能综合成ASIC厂商库中的厂商库中的双数据率(双数据率(DDR)时序逻辑吗?时序逻辑吗?full_case parallel_case看似“完全一样”的语句对应的实体是不同 的这些指令告诉综合编译器,编写的设计代码有些地方和仿真器理解的有些不同综合前与综合后的仿真可能存在一些差别unique casepriority caseunique ifpriority if 使得仿真器、综合器和使得仿真器、
11、综合器和形式化验证工具的行为形式化验证工具的行为变得一致变得一致priority case: - full_case full_case的仿真和综合所有的可能都已经定义了,任何其他的可能都是错误的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
12、 = 4b4; else if (irq3) irq = 4b8;priority case (1b1)irq0: irq= 4b1 0;irq1: irq= 4b1 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中至少有一个必定为高否则仿真就出现运行错误defau
13、lt 或 最后的else语句使得 priority关键字无效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 (sel2) mux
14、o = 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仍旧测试覆盖的条件未注明的地方输出:rd = 0; ds = 0;IDLEREADDO
15、NEDLYrd = 1rd = 1ds= 1go= 0go= 1ws= 1ws= 0Verilog 没有枚举类型变量参数被用于有限状态机的设计仿真差错诀窍综合优化诀窍输出方法1(连续赋值)初始化确省值的赋值初始化输出值到确省态输出方法2(always 块赋值)匿名的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=4h3, silver,gold medal;silver = 4, gold
16、= 5;silver = 4h4, gold = 4h5;语法错误(隐含)c= 8, (明确)d = 8;traffic_light = 0 (“red”)traffic_light = 2 (“green”)无指定值的抽象枚举名(值可以在以后指定)枚举变量state 和 next 未注明的地方输出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws= 1ws= 0逗号把括在内的枚举名分隔开来 枚举关键字未指定数据类型,即假定数据为整型确省类型 用户对枚举名 赋值枚举的测试和赋值逗号分开的敏感列表*表示组合逻辑的敏感列表(简化
17、的语法,减少RTL错误)抽象的枚举名x 赋值在仿真无关项优化综合和调试时非常有用指定4态数据类型 允许数据值为x 或者z从抽象到具体需要做的唯一修改就是在枚举定义处赋值赋值的枚举值无论对仿真器和综合器以及形式化验证工具 都相当于full_case parallel_case允许更多的类似lint的代码检查加入四状态变量的枚举类型,允许合法状态赋值和x状态赋值以未定义的抽象状态开始有利于抽象有利于观察波形有利于调试和综合确切标准的波形显示能力正在定义中比Verilog的$monitor系统任务容易编写代码显示枚举名还是ASCII字符?显示2进制数字?独立的迭代变量声明本地迭代变量声明自动递加本地
18、迭代变量是自动变量退出循环后就不再存在Verilog-2001SystemVerilog显式的递加a31:0a0:31a31:0i1i0syy31:0sSystemVerilog 还增加了一个do-while循环(底测试循环)大型大型ASIC顶层模块的端口连接非常麻烦而且顶层模块的端口连接非常麻烦而且MultOp1 regMultOut regAccumulatorMUXALU (32bit)Multiplier16 data16321616161616323232323232alu_outaccmultoutbsaccalu_inen_accalu_op2:0muxselld_multop1
19、ld_multoutld_accld_shften_shftshft_lshftbs_lshft4:0ld_bsmop1mult32MultOp1 regMultOut regMultiplier端口名的匹配只需要列出一次具备所有按端口名连接的优点MUXALU (32bit)Accumulator 代码更简练!本风格重点表达端口出现不同的地方MUXALU (32bit)Accumulator 代码更简练MultOut regMultOp1 regMultiplierinst u1(, .data(data7:0),.);inst u2(, .data(pdata), .);inst u3(,
20、.berr( ), .);注意:比Verilog2001有更强大的端口连接描述,表述更简洁31行代码680个字符按位置的端口连接按名字的端口连接43行代码1020个字符.名字的隐含端口连接32行代码757个字符.*的隐含端口连接23行代码518个字符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
21、 y = ena ? c : 8bz;endmodule module driverd (output 7:0 y,input 7:0 c,input ena); 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想设计的逻辑module drivera (output 7:0 y1,input 7:0 a,input ena);mo
22、dule 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 (output 7
23、: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都是别名连接在一起用.* 缩短了实例端口的连接合法的工具开发者很害怕这一点.*的端口连接把所有没有必要的麻烦都清除了只列出端口连接的例
24、外情况即可所有端口都是隐含连接的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未用p0p1p2p37:02:01:03:07:02:01:03:07:02:01:03:07:02:01:03:0用名称用矢量位置struct addr_t s
25、rc_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区做比较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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- systemVerilog 快速 入门 PPT
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内