systemVerilog快速入门PPT课件_第1页
systemVerilog快速入门PPT课件_第2页
systemVerilog快速入门PPT课件_第3页
systemVerilog快速入门PPT课件_第4页
systemVerilog快速入门PPT课件_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SystemVerilog 讲座讲座 第一讲第一讲: SystemVerilog 基本知识基本知识夏宇闻夏宇闻 神州龙芯集成电路设计公司神州龙芯集成电路设计公司 20082008- SystemVerilog -alias const &= |= = %=- from C / C+-int globals breakshortint enum continuelongint typedef returnByte structures do-whileShortreal unions + - += -= *= /=void casting = = if-elserepeat- Verilog -

2、1995 - System Verilog RTL RTL Netlist设计效率设计效率 testbenchCo-simOverheadHDL SimultionSystemVerilogtestbench进行全面验证的环境进行全面验证的环境断言断言验证验证 硬件辅助的验证硬件辅助的验证覆盖覆盖 测试平台测试平台仿真仿真 形式化特性形式化特性提高了验证的水平提高了验证的水平 System Verilog RTL RTL Netlist设计效率设计效率 结构化的和用户定义的数据类型与封装好的接口通信.* 蕴涵的端口实例引用testbenchCo-simOverheadHDL Simultion

3、SystemVerilogtestbench使得我们有可能使用更高速度的仿真工具,加速了设计的完成进行全面验证的环境进行全面验证的环境断言断言验证验证 硬件辅助的验证硬件辅助的验证覆盖覆盖 测试平台测试平台仿真仿真 形式化特性形式化特性提高了验证的水平提高了验证的水平仿真检查仿真检查硬件辅助验证硬件辅助验证SystemVerilog 断言断言自动测试平台自动测试平台覆盖测试覆盖测试形式化验证形式化验证 综合综合抓住设计意图与每个设计和验证工程师联络学习周期短仿真检查仿真检查硬件辅助验证硬件辅助验证 #0 阻塞赋值 计算非阻塞表达式 的RHS 连续赋值$display命令 更新非阻塞表达式的LH

4、S 阻塞赋值 更新原语的输入和的输出, $monitor系统命令 $strobe 系统命令 语句激活 语句暂停活动 非阻塞赋值 监视来自上一个时隙Verilog-2001时隙被分成4等级区域新的名称将”延迟”事件区域去下一个时隙如何才能简化这个队列?指导原则No.8:不要用#0延迟未初始化的变量 = X未初始化的线网 = Z与Verilog-2001相同未初始化的变量 = 0未初始化的线网 *= 0SystemVerilog新添加的reg r; / 4态,Verilog-2001(位宽可变)数据类型integer i; /4态,Verilog-2001(32位)有符号数据类型logic w;

5、/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 类型既可以用于变量也可以用于线网。另外还加入了其他一些数据类型SystemVerilog 新添加的数据类型reg 15:0 r16;logic 15:0 w16;bit 15:0 b16; reg, logic和 bit数据类型位宽可以改变对同一变量既进行连续赋值又进行过程赋值是非法的,不允

6、许的。- 在在SystemVerilog中:中:logic和和reg类型类型是一致的(类似于是一致的(类似于Verilog中中wire和和tri类类型是一致的)型是一致的)logic 是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.v

7、hmodule tb; bit_t q, d, clk, rst_n; dff u1(.q(q), .d(d), .clk(clk), .rst_n(rst_n);initial 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 d

8、ff.v +define+STATE2确省,为4态逻辑值仿真只用 2态逻辑值,仿真速度快功能相当于VHDL中的std_ulogic类型,很有效率与VHDL中的std_logic类型没有功能可比较的类型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.v

9、h无多驱动器的2态类型 - 也许下一个版本的SystemVerilog能得到修正没有容易的std_ulogic 和std_logic 之间切换的等价语句 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 对函数的内容的变化是敏感的无正跳变沿触发时钟信号(clk)无负跳变沿触发时钟信号(clk)目前对

10、综合器来说该语法是非法的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 显示设计者的意图这能综合成这能综合成ASIC厂商库中的厂商库中的双数据率(双数据率(DDR)时序逻辑吗?时序逻辑吗?full_case parallel_case看似“完全一样”的语句对应的实体是不同 的这些指令告诉综合编译器,编写的设计代码有些地方和

11、仿真器理解的有些不同综合前与综合后的仿真可能存在一些差别unique casepriority caseunique ifpriority if 使得仿真器、综合器和使得仿真器、综合器和形式化验证工具的行为形式化验证工具的行为变得一致变得一致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: - 所有的分

12、支被指定后不需要最后结束的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= 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 (irq

13、2) irq = 4b4; else if (irq3) irq = 4b8;else irq = 4b0;irq0到irq3中至少有一个必定为高否则仿真就出现运行错误default 或 最后的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

14、_case/ parallel_case unique if (sel0) muxo = a;else if (sel1) muxo = b;else if (sel2) 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

15、 = c;else muxo = x;对没有预料到的sel值不会出现仿真运行错误unique仍旧测试覆盖的条件未注明的地方输出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws= 1ws= 0Verilog 没有枚举类型变量参数被用于有限状态机的设计仿真差错诀窍综合优化诀窍输出方法1(连续赋值)初始化确省值的赋值初始化输出值到确省态输出方法2(always 块赋值)匿名的2态 整型(int)变量enum red, yellow,green light1,light2;enum bronze=3, silver,gold me

16、dal;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”)无指定值的抽象枚举名(值可以在以后指定)枚举变量state 和 next 未注明的地方输出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws=

17、 1ws= 0逗号把括在内的枚举名分隔开来 枚举关键字未指定数据类型,即假定数据为整型确省类型 用户对枚举名 赋值枚举的测试和赋值逗号分开的敏感列表*表示组合逻辑的敏感列表(简化的语法,减少RTL错误)抽象的枚举名x 赋值在仿真无关项优化综合和调试时非常有用指定4态数据类型 允许数据值为x 或者z从抽象到具体需要做的唯一修改就是在枚举定义处赋值赋值的枚举值无论对仿真器和综合器以及形式化验证工具 都相当于full_case parallel_case允许更多的类似lint的代码检查加入四状态变量的枚举类型,允许合法状态赋值和x状态赋值以未定义的抽象状态开始有利于抽象有利于观察波形有利于调试和综合

18、确切标准的波形显示能力正在定义中比Verilog的$monitor系统任务容易编写代码显示枚举名还是ASCII字符?显示2进制数字?独立的迭代变量声明本地迭代变量声明自动递加本地迭代变量是自动变量退出循环后就不再存在Verilog-2001SystemVerilog显式的递加a31:0a0:31a31:0i1i0syy31:0sSystemVerilog 还增加了一个do-while循环(底测试循环)大型大型ASIC顶层模块的端口连接非常麻烦而且顶层模块的端口连接非常麻烦而且MultOp1 regMultOut regAccumulatorMUXALU (32bit)Multiplier16

19、data16321616161616323232323232alu_outaccmultoutbsaccalu_inen_accalu_op2:0muxselld_multop1ld_multoutld_accld_shften_shftshft_lshftbs_lshft4:0ld_bsmop1mult32MultOp1 regMultOut regMultiplier端口名的匹配只需要列出一次具备所有按端口名连接的优点MUXALU (32bit)Accumulator 代码更简练!本风格重点表达端口出现不同的地方MUXALU (32bit)Accumulator 代码更简练MultOut

20、regMultOp1 regMultiplierinst u1(, .data(data7:0),.);inst u2(, .data(pdata), .);inst u3(, .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

21、 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); 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

22、都相同abcenbdenceneenasel1sel2y想设计的逻辑module drivera (output 7:0 y1,input 7:0 a,input 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 modul

23、e ena_decode (output reg ena, enb,enc, ene,input 1:0 sel);.module onehot_busmux (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);

24、endmoduley,y1,y2,y3,y4都是别名连接在一起用.* 缩短了实例端口的连接合法的工具开发者很害怕这一点.*的端口连接把所有没有必要的麻烦都清除了只列出端口连接的例外情况即可所有端口都是隐含连接的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

25、未用a2未用a3未用p0p1p2p37:02:01:03:07:02:01:03:07:02:01:03:07:02:01:03:0用名称用矢量位置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区做比较typedef logic 7:0 byte_t;typedef struct

26、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;打包的结构打包的联合cmd31:0cmd.fields.opcode15:0cmd.fields.arg17:0cmd.fields.arg27:0cmd_t 的区域cmd.byte1cmd.byte0cmd.byte2cmd.byte3typedef logic 7:0 byte_t;typedef st

27、ruct 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 = 8hBE;不需要测试数据类型DEAD1110 1111BE 数据映射到所有

28、成员 D E A D B E E FDEADDEADBE BE 1110 11111110 1111这是同一个打包的数据结构接口信息的封装添加了传递测试平台和断言值所需要的端口SystemVerilog 的设计的设计总线总线总线Verilog-2001风格风格 的设计的设计复杂的信号连接n在块中重复的总线协议n通过层次很难添加信号通信封装在接口中n减少出错的机会容易修改n显著缩短代码节省编写时间n能建立高效交易模型n允许自动化的块验证接口总线sig1sig2read()write()Assertint i;logic 7:0 a;interface intf; int i; logic 7:0

29、 a;endinterface: intfint i;logic 7:0 a;typedef struct int i; logic 7:0 a; s_type; 接口就是一束连接线正象结构是一束变量一样接口改变了但是被连接的模块并未改变还未建立端口实例化接口接口类型声明inftmod_am1mod_bm2inftwtop引用实例mod_a 和 mod_b给mod_a 和mod_b添加接口mod_am1mod_bm2inftwtopintfi1intfi2接口类似于跨骑在两个模块上的一个模块mod_am1mod_bm2infti1-w-i2top接口实例w在mod_a中被称为i1,在mod_b

30、中被称为i2接口也能包含模块端口(模块端口将在以后讨论)接口类型声明mod_am1mod_bm2infti1-w-i2top接口实例引用具体化的接口实例w在mod_a中被称为i1,在mod_b中被称为i2引用定义的接口类型 被引用接口的本地访问名 接口类型声明inftw top接口实例引用声明并引用了接口实例,声明并引用了接口实例,但并未访问过具体接口实但并未访问过具体接口实例的线网和变量例的线网和变量, 这样做这样做是合法的,但没有什么是合法的,但没有什么用处用处.接口类型声明mod_am1mod_bm2 错误:错误:1)声明了接口)声明了接口2)引用了接口)引用了接口3)但接口从未实例化过

31、)但接口从未实例化过引用了定义的接口类型 被引用接口的本地访问名 infti1 infti2 ?接口intf声明 模块端口括号中列出的接口b引用了接口实例中声明的线网和变量在模块内引用了接口实例,声明了一组线网和变量a.s12a.s11a.s10a.s2a.s3b.s12b.s11b.s10b.s2b.s3yy这个blk_if 接口a有一个隐含的时钟输入a.s12a.s11a.s10a.s2a.s3(input clk)qa.clku1 引用实例模块m3a.s12a.s11a.s10a.s2a.s3(input clk)a.clku1 引用实例模块m4u1.a.q=b_if.qmodport

32、s inputModport 定义了模块接口s,其中s1,s2为输入,q为输出a.qa.s2 a.clku1 引用实例模块m5u1.a.q=b_if.qmodport d 的输入Modport 定义了模块接口d, 其中s1,s2为输入,q为输出a.qb_if.s2modport d 的输出a.s2 a.clku1 引用实例模块m5u1.a.q=b_if.q把测试模块中的任务放在接口中定义a.qb_if.s2从接口调用写任务b_if.q不能对这些接口信号中的任何一个进行过程性赋值。(全部都是线网类型,没有变量类型的)n一般情况下,接口将把模块的输出一般情况下,接口将把模块的输出连接到另一模块的输

33、入连接到另一模块的输入 - 输出可能是过程性的或者连续性驱动的输出可能是过程性的或者连续性驱动的 - 输入是连续性驱动的输入是连续性驱动的n既然接口是把输出与输入连接起来既然接口是把输出与输入连接起来 - 输出常由过程性语句赋值输出常由过程性语句赋值 - 即使输出是由连续赋值语句指定的,当即使输出是由连续赋值语句指定的,当它们被连接到不同模块时,它也往往被转它们被连接到不同模块时,它也往往被转变成过程性赋值变成过程性赋值n双向和多驱动线网双向和多驱动线网 - 该类连接在接口定义中必须声明为线网该类连接在接口定义中必须声明为线网类型(类型(wire)双向数据总线断言将在以后讨论断言将在以后讨论后

34、面简述后面简述下载下载SystemVerilog LRM自己学习自己学习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 FAILED- %0d vector”, VECT_CNT); $write (“n - %0d passed- %d failed nn”, pass_CNT, ERROR_CNT);

35、end待所有生成的子过程结束后待所有未决的PLI调用被取消后结束块才执行$finish 命令事件队列变为空终止所有程序块(产生隐含的$finish)PLI执行tf_dofinish()或vpi_control(vpiFinish.)final 块不允许有延迟当前时隙 #0 阻塞赋值 计算非阻塞表达式 的RHS 连续赋值$display命令 更新非阻塞表达式的LHS 阻塞赋值更新原语的输入和 输出 $monitor系统命令 非阻塞赋值 观察来自上一个时隙SystemVerilog时隙被分成11个等级区域(7个Verilog 和4个PLI区)去下一个时隙 放置SV新命令的区域非阻塞赋值完成观察后准

36、备(preponed) 预备启动 准备非阻塞赋值 语句重新激活 延迟SV新的放置PLI命令的区域 $strobe系统命令 语句暂停活动 语句激活PLIPLIPLIPLI 放置SV新命令的区域计算断言 执行测试平台命令 非阻塞赋值 观察来自上一个时隙 #1 step去下一个时隙 放置SV新命令的区域准备(preponed) 语句重新激活 延迟 语句暂停活动 语句激活用于采样和验证输入clocking bus (posedge clk) default input #10ns output #2ns; input data, ready, enable = top.mem1.enable; out

37、put done; output negedge ack; input #1step addr;endclockingnSystemVerilog增加了一个时钟块用于: - 为了验证所做的采样 - 驱动激励新的clocking 和endclocking关键词由缺省值指定的输入是在时钟clk正跳变沿前10ns采样的 由缺省值指定的输出是在时钟clk正跳变沿后2ns时驱动的 采样信号的输入对驱动的输出例外的输出(该信号由时钟clk的负跳变沿驱动)例外的输入(在时钟clk的正跳变沿前1step采样该信号) 指定了同步采样和驱动时间: - 输入歪斜是为了采样 - 输出歪斜是为了驱动 - 缺省的输入歪斜

38、是1step缺省的输出歪斜是0信号在这儿采样指定的时钟域时钟 常用(posedge clk) 信号驱动在这儿输出的歪斜当输入被采样并当激励被驱动时的时钟块包装输入的歪斜clockinputoutput clocking fifo (posedge wclk) default input #1step output negedge); input wfull ; output wdata, winc, wrst; endclocking wfull信号在wclk正跳变沿前面#1step处采样时钟事件是wclk的正跳变沿缺省情况下,采样输入正好在wclk的正跳变沿前一步输入的歪斜wclkwfull

39、wdata,winc,wrst输出的歪斜(negedge wclk)wdata,winc,wrs在(negedge wclk)被驱动缺省情况下,在wclk的负跳变沿时刻,驱动FIFO的激励 测试模块编写时:fifo.wfull fifo.wdatafifo.winc fifo.wrst wclk的正沿wfull信号在wclk正跳变沿前#1step 处采样wclkwfullwdata,winc,wrst输出的歪斜(negedge wclk)wdata,winc,wrs在(negedge wclk)被驱动preponed wclk的负沿Reactive preponed Active Inacti

40、ve NBA ObservedPostpondReactive Active Inactive NBA ObservedPostpondwclk 前一步#1step 采样驱动 等待1个wclk周期然后驱动wdata n指定一个缺省时钟指定一个缺省时钟 default clocking tb.fifo.wclkn每个模块、接口、程序只允许一个缺省时钟每个模块、接口、程序只允许一个缺省时钟n描述周期延迟的句法描述周期延迟的句法 # # 5; /等待等待5个周期个周期 # 1 fifo.wdata = 8hff; # 2; fifo.wdata = 8hAA; fifo.wdata = #2 d;

41、等待2个缺省的时钟周期,然后驱动wdata 记住d的值 ,然后在2个wclk时钟周期后驱动wdata n目的:标识验证用的代码段目的:标识验证用的代码段 default clocking tb.fifo.wclkn 一段不同与模块的程序一段不同与模块的程序 - 只允许使用只允许使用initial 块块 - 特殊的语法特殊的语法 在重新激活区执行在重新激活区执行 设计设计时钟时钟/断言断言 程序程序RTL 设计 时钟和断言 Reactive preponed Active Inactive NBA ObservedPostpondprogram name() ; /type, func, cla

42、ss,clocking ; initial endprogramDirect Programming Interface直接编程接口直接编程接口n使用更加便利使用更加便利n允许直接调用允许直接调用C C函数函数n提供了类似于提供了类似于C/C+C/C+的高级数据类型的高级数据类型不需要用户成为PLI专家丢了什么?C程序不能调用SystemVerilog任务(而Superlog允许)来自于C程序不消费时间已提出建议允许C程序调用SystemVerilog任务好!不好!不好!nSystemVerilog 3.1-26节中有详细的描述节中有详细的描述n直接编程接口(直接编程接口(DPI)的双方都是完

43、全独立的)的双方都是完全独立的 - SystemVerilog 不必分析不必分析 C 的代码的代码 - C 编译器也不必分析编译器也不必分析SystemVerilog的代码的代码n输入的函数输入的函数 - 用用SystemVerilog 调用的调用的C 函数函数 - 输入的函数必须声明输入的函数必须声明 import “DPI” function .; n输出的函数输出的函数 -用用C调用的调用的SystemVerilog 函数函数 - 输入的函数必须声明输入的函数必须声明 export “DPI” c_identifier = function function_identifier; n所

44、有所有C 和和 SystemVerilog 函数必须在零时间内完成函数必须在零时间内完成在26节中介绍了多种形式和选择可选择变量nSystemVerilog 有一个内部的有一个内部的C接口接口 - 有效率的有效率的RTL建模和仿真建模和仿真 - 有效率的门级仿真有效率的门级仿真 - SystemC 在进行在进行RTL和门级仿真时效率低下和门级仿真时效率低下 - 如果用户想严格地用如果用户想严格地用C编程,也可以不需要用编程,也可以不需要用SystemC n如果用户必须用如果用户必须用C+编写软件,他也许想使编写软件,他也许想使SystemC 与与SystemVerilog交互交互 - 软件出身

45、的工程师喜欢用软件出身的工程师喜欢用SystemC - SystemC 具有具有C+的操作过载、指针等所有的强大功能的操作过载、指针等所有的强大功能 - SystemC有帮助库,可以在信号级和时序细节上给予帮助有帮助库,可以在信号级和时序细节上给予帮助 - 大多数工作将用大多数工作将用C+来做来做 这正是大多数工程师想让Verilog仿真器nSystemVerilog 不支持指针不支持指针 - 通过改变指针来改变值通过改变指针来改变值 -很难检测事件很难检测事件nSystemC提供了常用的提供了常用的C语言语法,这也许得到行为语言语法,这也许得到行为 综合工具的支持综合工具的支持 对行为综合器

46、厂商来说只支持C编程风格比较容易 nDPI(直接编程接口)不需要(直接编程接口)不需要PLI( (编程语言接口编程语言接口) ) - DPI 使得使得SystemVerilog与与C代码的联合仿真变得容易代码的联合仿真变得容易 - 可以把编译后的可以把编译后的C目标码直接连接到目标码直接连接到SystemVerilog的仿真器的仿真器n与与SystemVerilog一起运行的一起运行的C模型运行速度快模型运行速度快 - 没有没有PLI接口来降低接口来降低SystemVerilog与与C之间的通信之间的通信nSystemVerilog仍然支持仍然支持PLI(编程语言接口),编程语言接口), 因而受到欢迎因而受到欢迎EDA工具仍旧用PLI来探索结构,并与设计交互 新出版的有关SystemVerilog断言(检测)的书书中的例子用到: SystemVerilog断言(SVA)特性指定语言(PSL)开放验证库(OVL)断言断言是设计者企图使所设计的电路逻辑具有某种行为的声明 750个错误在加断言前就被查出在设计代码加断言后一周内,发现错误的速率快了三倍断言发现了剩余错误中的50%断言在全芯片查错中最有用 可在设计过程的早期由断言发现错误

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论