SystemVerilog硬件设计及建模第789章课件.ppt

上传人:飞****2 文档编号:70088606 上传时间:2023-01-16 格式:PPT 页数:83 大小:709KB
返回 下载 相关 举报
SystemVerilog硬件设计及建模第789章课件.ppt_第1页
第1页 / 共83页
SystemVerilog硬件设计及建模第789章课件.ppt_第2页
第2页 / 共83页
点击查看更多>>
资源描述

《SystemVerilog硬件设计及建模第789章课件.ppt》由会员分享,可在线阅读,更多相关《SystemVerilog硬件设计及建模第789章课件.ppt(83页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、HMECMicroElectronics Center 新操作符 改进的for循环新的do while底部检测循环新的foreach循环第7章 过程语句 SystemVerilog增加了一些新的操作符和过程语句:更精确的RTL建模、更好地传达设计意图、保证软件工具按同样规则解释语句新的跳转语句增强的块命名语句标号唯一性与优先级判定HMECMicroElectronics Center7.1 新操作符递增和递减操作符:+-赋值操作符:+=-=*=/=%=&=|=设置成员操作符:insideHMECMicroElectronics Center7.1.1 递增递减操作符while(i+LIMIT)

2、begin:loop1 /i最后的值为LIMITendwhile(+j LIMIT)begin:loop2 /j最后的值为LIMIT-1end语句操作描述j=i+后加i的值赋给j,然后i加1j=+i先加i加1,然后i的值赋给jj=i-后减i的值赋给j,然后i减1j=-i先减i减1,然后i的值赋给jHMECMicroElectronics Center7.1.1递增递减操作符竞争问题:+和-操作符是阻塞赋值,为避免竞争,递增递减操作符只能用于递增递减操作的变量不会被过程块外部语句读取的逻辑建模中!always_ff(posedge clock)if(!resetn)count=0;else co

3、unt+;always_ff(posedge clock)case(state)HOLD:if(count=MAX).always_ff(posedge clock)if(!resetn)count=0;else count=count+1;always_ff(posedge clock)case(state)HOLD:if(count=MAX).HMECMicroElectronics Center7.1.2 赋值操作符注意:这些赋值操作符是阻塞赋值,同样有竞争问题!操作符功能描述+=等号左边加上等号右边并赋值-=等号左边减去等号右边并赋值*=等号左边乘以等号右边并赋值/=等号左边除以等号右

4、边并赋值%=等号左边除以等号右边,并将得到的余数赋值&=等号左边与等号右边进行位与操作并赋值|=等号左边与等号右边进行位或操作并赋值=等号左边与等号右边进行位异或操作并赋值=将等号左边逻辑右移右边指定的位数并赋值=将等号左边算术右移右边指定的位数并赋值可综合性:i+;if(-i)sum=i+;可综合性:b+=5;b=(a+=5);HMECMicroElectronics Center7.1.2 赋值操作符/example 7-1:package definitions;typedef enum logic 2:0 ADD,SUB,MULT,DIV,SL,SR opcode_t;typedef

5、enum logic UNSIGNED,SIGNED operand_type_t;typedef union packed logic 23:0 u_data;logic signed 23:0 s_data;data_t;typedef struct packed opcode_t opc;operand_type_t op_type;data_t op_a;data_t op_b;instr_t;endpackageHMECMicroElectronics Center7.1.2 赋值操作符import definitions:*;module alu(input instr_t IW;

6、output data_t alu_out);always(IW)begin if(IW.op_type=SIGNED)begin alu_out.s_data=IW.op_a.s_data;unique case(IW.opc)ADD:alu_out.s_data +=IW.op_b.s_data;SUB:alu_out.s_data-=IW.op_b.s_data;MULT:alu_out.s_data*=IW.op_b.s_data;DIV:alu_out.s_data/=IW.op_b.s_data;SL:alu_out.s_data=2;endcase end else.end en

7、dmodule /add the omitted contentsHMECMicroElectronics Center7.1.3 有无关通配符的相等操作符无通配符逻辑相等:=(!=),条件相等:=(!=)SystemVerilog增加两个操作符:=?和!=?,在这种操作符中,右操作数中的逻辑位X或Z被看作通配符,它可以与左操作数中相应位的任何值相匹配!aba=ba=ba=?ba!=ba!=ba!=?b00000000真真真假假假00000101假假假真真真010Z0101未知假未知未知真未知010Z010Z未知真真未知假假010X010Z未知假真未知真假010X010X未知真真未知假假逻辑相

8、等遇到Z或X,结果为未知,条件相等按位对0、1、X、Z进行精确匹配,左右两操作数完全相同,则结果为真,反之为假!HMECMicroElectronics Center7.1.3 有无关通配符的相等操作符Verilog中,数字中的逻辑X可以用字符X或x表示,逻辑Z可以用字符z,Z或?表示,如:logic 7:0 opcode;.if(opcode=?8b11011?)/屏蔽低三位如果两个操作数位数不同,通配相等操作符会在比较前将两向量扩展为相同长度,扩展规则与逻辑相等操作符一样。只有屏蔽位是常数表达式时通配符相等操作符才是可以综合的!即右操作数不能是变量!logic 3:0 a,b;logic

9、y1,y2;assign y1=(a=?4b1?1);assign y2=(a=?b);HMECMicroElectronics Center7.1.4 设置成员操作符insideinside是检测一个变量或值是否是某一值集合中一员的操作符。logic 2:0 a;if(a inside 3b001,3b010,3b100)/if(a=3b001)|(a=3b010)|(a=3b100)if(data inside bus1,bus2,bus3,bus4)/其它信号集int d_array 0:1023;if(13 inside d_array)/数组logic 2:0 a;if(a insi

10、de 3b1?1)/通配符/与使用=?操作符一样HMECMicroElectronics Center7.2 操作数改进Verilog的赋值转换:reg 63:0 a,y,temp;real r;temp=r*3;y=a+temp;类型强制转换:type(表达式)longint a,y;real r;y=a+longint(r*3);尺寸强制转换:size(表达式)logic 15:0 a,b,c,sum;logic carry;sum=a+16(5);carry,sum=17(a+3);sum=a+16(b-2)/c;符号强制转换:signed(表达式)unsigned(表达式)HMECMi

11、croElectronics Center7.3 改进的for循环Verilog的for循环变量必须在循环体外部声明,SystemVerilog则可以在for语句中直接声明,但该循环变量为局部自动变量,如果要在块外或层次化引用,则必须象Verilog那样在块外说明。always_ff(posedge clock)begin for(bit 4:0 i=0;i=15,i+).end.for(int i=1,byte j=0;i*j 128;i+,j+=3)HMECMicroElectronics Center7.4 底部检测的do.while循环 do begin done=0;OutofBou

12、nd=0;out=memaddr;if(addr 255)begin outofBound=1;out=mem128;end else if(addr=128)done=1;addr-=1;end while(addr=128&addr=255);与Verilog相比,SystemVerilog除有while循环外,还有至少执行一次的循环:do.while,该循环可以简化while循环代码量HMECMicroElectronics Centeralways *begin begin:loop integer i;first_bit=0;for(i=0;i=63;i=i+1)begin:pass

13、 if(i end_range)disable loop;/跳出循环 if(datai)begin first_bit=i;disable loop;/跳出循环 end end /for end /loopend/alwaysVerilog采用disalbe实现跳转功能,SystemVerilog新增了Break,continue,return语句实现跳转。disable可以跳转到循环结尾继续下一次循环,也可以直接跳出整个循环,难以理解。7.5 跳转语句HMECMicroElectronics Center/disable在任务所有语句执行完成前提前从任务中返回task add_up_to_m

14、ux(input 5:0 max,output 63:0 result);integer i begin result=1;if(max=0)disable add_up_to_mux;for(i=1;i=63;i=i+1)begin result=result+result;if(i=max)disable add_up_to_max;end endendtask7.5 跳转语句HMECMicroElectronics Centercontinue语句:logic 15:0 array 0:255;always_comb begin for(int i=0;i=255;i+)begin:lo

15、op if(array i=0)continue;/下一i transform_function(arrayi);end/forend7.5 跳转语句break语句:always_comb begin first_bit=0;for(int i=0;i=63;i+)begin:loop if(i end_range)break;/跳出循环 if(data i)begin first_bit=i;break;end end/forendHMECMicroElectronics Centerreturn语句:task add_up_to_max(input 5:0 max,output 63:0

16、result);result=1;if(max=0)return;/退出任务 for(int i=1;i=63;i=i+1;begin result=result+result;if(i=max)return;endendtask7.5 跳转语句在任务或空函数中,关键字return后面不能有表达式,而在非空函数中return后面一定要有表达式。HMECMicroElectronics Centeralways_ff(posedge clock,posedge reset)begin:FSM_procedure logic breakVar;if(reset)begin:reset_logic

17、end:reset_logic else begin:FSM_sequencer unique case(SquatState)wait_rx_valid:begin:rx_valid_state Rxready=1;breakVar=1;for(int j=0;j NumRx;j+=1)begin:loop1 for(int i=0;i NumRx;i+=1)begin:loop2 if Rxvalidi&RoundRobini&breakVar)begin:match AtMcell=RxATMcelli;Rxreadyi=0;SquatState=wait_rx_not_valid;br

18、eakVar=0;end:match end:loop2 end:loop1 end:rx_valid_state endcase end:FSM_sequencer end:FSM_procedure7.6 改进的块名HMECMicroElectronics Centeralways_comb begin:decode_block decoder:case(opcode)2b00:outer_loop:for(int i=0;i=15;i+)inter_loop:for(int j=0;j=15;j+)/对其它操作码值的译码 endcaseend:decode_block 7.7 语句标号语

19、句标号用于识别单条语句,有助于记录代码及引用这些代码,提高可读性及有助于调试和代码覆盖率分析,带标号的语句可以被disable语句取消。一个语句块可以有一个块名或标号,但是,不能同时有块名和标号!HMECMicroElectronics Centerunique case()endcasepriority case(case_expression)endcase7.8 改进的case语句Verilog标准规定case语句必须按照列举顺序来计算条件选项,这意味着case选项之间存在优先级,如果if elseif else中一样。HMECMicroElectronics Centeralways_

20、comb unique case(opcode)2b00:y=a+b;2b01:y=a b;2b10:y=a*b;2b11:y=a/b;endcaseend7.8.1 unique case条件判断u只有一个条件选项与条件表达式匹配u必须有一个条件选项与条件表达式匹配u不能有重叠的条件u必须指明所有条件logic 2:0 request;always_comb unique casez(request)3b1?:sl1_gnt=1;3b?1?:sl2_gnt=1;3b?1:sl3_gnt=1;endcaseendlogic 2:0 opcode;always_comb unique case(

21、opcode)3b000:y=a+b;3b001:y=a b;3b010:y=a*b;3b100:y=a/b;endcaseend当opcode为其它值时,将报警!casez(select)3b1?:sl1_gnt=1;3b?1?:sl2_gnt=1;3b?1:sl3_gnt=1;endcase当表达式值与多个条件选项匹配时,不会报警!HMECMicroElectronics Centeralways_comb priority case(1b1)irq0:irq=4b0001;irq1:irq=4b0010;irq2:irq=4b0100;irq3:irq=4b1000;endcaseend

22、7.8.2 priority case条件判断u至少有一个条件选项与条件表达式匹配u如果有多个条件选项的值与条件表达式匹配,必须执行第一个匹配分支u必须指明所有条件当表达式的值无条件选项匹配时,将会报警!防止产生锁存器HMECMicroElectronics Centerlogic 2:0 sel;always_comb begin if (sel=3b001)mux_out=a;else if(sel=3b010)mux_out=b;else if(sel=3b100)mux_out=c;end7.9 改进的if else判断语句Verilog中的if else if语句是有优先级顺序的,但

23、这种优先级可能并不是硬件必须的,有可能只是工程师写源代码时任意列出的。HMECMicroElectronics Center7.9 unque if else判断语句u可以并行求值u不能包含重叠的条件u对未指明的条件进行警告logic 2:0 sel;always_comb begin unique if (sel =3b001)mux_out=a;else if (sel=3b010)mux_out=b;else if (sel=3b100)mux_out=c;end /有未指明条件logic 2:0 sel;always_comb begin unique if (sel 0)mux_ou

24、t=a;else if (sel 1)mux_out=b;else if (sel 2)mux_out=c;end /有重叠项HMECMicroElectronics Center7.9 priority if else判断语句u必须按顺序求值u必须指定所有条件priority保证了软件工具之间处理的一致性,仿真器、综合器、等价检查工具和形式验证工具都按同样的方式进行解释。运行过程中,如果判定序列没有任何分支执行,就会警告,从而可以检测出是否会产生锁存逻辑!always_comb begin priority if (irq0)irq=4b0001;else if (irq1)irq=4b00

25、10;else if (irq2)irq=4b0100;else if (irq3)irq=4b1000;endHMECMicroElectronics Center 使用枚举类型建立有限状态机模型 在FSM case语句中使用枚举类型在FSM case语句中使用always_comb使用枚举类型和两态类型建模复位逻辑第8章 有限状态机建模 SystemVerilog可以使用两态类型、枚举类型和用户自定义类型进行高层次抽象建模应用前面介绍过的always_comb,always_ff,always_latch及枚举类型结合起来,建立有限状态机模型HMECMicroElectronics Cen

26、termodule traffic_light(output logic green_light,yellow_light,red_light,input sensor,input 15:0 green_downcnt,yellow_downcnt,input clock,resetN);enum RED,GREEN,YELLOW State,Next;/using enum defaults always_ff(posedge clock,negedge resetN)if(!resetN)State=RED;/reset to red light else State=Next;8.1使用

27、枚举类型建立状态机模型介绍使用枚举类型建立如有限状态机这样的硬件逻辑需要的规则HMECMicroElectronics Center always_comb begin:set_next_state Next=State;/the default for each branch below unique case(State)RED:if(sensor)Next=GREEN;GREEN:if(green_downcnt=0)Next=YELLOW;YELLOW:if(yellow_downcnt=0)Next=RED;endcase end:set_next_state always_comb

28、 begin:set_outputs green_light,yellow_light,red_light=3b000;unique case(State)RED:red_light=1b1;GREEN:green_light=1b1;YELLOW:yellow_light=1b1;endcase end:set_outputsendmodule8.1使用枚举类型建立状态机模型u典型的三过程建模风格u使用默认的枚举基类intu例子中只有3个状态,int是32位的两态类型u两态类型仿真时的默认初始值会掩盖设计问题u枚举类型默认值可能导致RTL仿真与门级实现不一致HMECMicroElectron

29、ics Centermodule traffic_light(output logic green_light,yellow_light,red_light,input sensor,input 15:0 green_downcnt,yellow_downcnt,input clock,resetN);enum logic 2:0 RED=3b001,/explicit enum definition GREEN=3b010,YELLOW=3b100 State,Next;always_ff(posedge clock,negedge resetN)if(!resetN)State=RED;/

30、reset to red light else State=Next;8.1.1使用显式枚举类型表示状态编码利用枚举类型的显式基类型和显式值建模HMECMicroElectronics Center always_comb begin:set_next_state Next=State;/the default for each branch below unique case(State)RED:if(sensor)Next=GREEN;GREEN:if(green_downcnt=0)Next=YELLOW;YELLOW:if(yellow_downcnt=0)Next=RED;endca

31、se end:set_next_state always_comb begin:set_outputs green_light,yellow_light,red_light=3b000;unique case(State)RED:red_light=1b1;GREEN:green_light=1b1;YELLOW:yellow_light=1b1;endcase end:set_outputsendmodule8.1.1使用显式枚举类型表示状态编码u枚举标签值显式指定u综合编码器将保持显式的枚举标签值,利于综合前后的功能比较u枚举类型的基类型为四态数据类型,需要正确复位HMECMicroEle

32、ctronics Centermodule traffic_light(output logic green_light,yellow_light,red_light,input sensor,input 15:0 green_downcnt,yellow_downcnt,input clock,resetN);enum R_BIT=0,/状态寄存器中RED状态索引 G_BIT=1,Y_BIT=2 state_bit;enum logic 2:0 RED=3b001 R_BIT,GREEN=3b001 G_BIT,YELLOW=3b001 Y_BIT State,Next;always_ff(

33、posedge clock,negedge resetN)if(!resetN)State=RED;/reset to red light else State=Next;8.1.2使用枚举类型的反向case语句反向case语句:条件表示式和条件选项位置颠倒,对有些综合器,反向case风格的one-hot码状态机会得到更优化的综合结果HMECMicroElectronics Center always_comb begin:set_next_state Next=State;/the default for each branch below unique case(1b1)/反向case语句

34、 StateR_BIT:if(sensor)Next=GREEN;StateG_BIT:if(green_downcnt=0)Next=YELLOW;StateY_BIT:if(yellow_downcnt=0)Next=RED;endcase end:set_next_state always_comb begin:set_outputs green_light,yellow_light,red_light=3b000;unique case(1b1)/反向case语句 StateR_BIT:red_light=1b1;StateG_BIT:green_light=1b1;StateY_BI

35、T:yellow_light=1b1;endcase end:set_outputsendmodule8.1.2使用枚举类型的反向case语句为什么用两个枚举类型?!HMECMicroElectronics Centerunique 情况指定所有条件选项必须并行求值,而不采用带优先级的编码方式,综合可以优化这些条件选项的译码逻辑unique case指定条件选项不应该有重叠项,如果条件表达式值满足两个或多个条件选项,仿真时会有警告提示unique case指定条件选项必须涵盖在仿真中会产生的条件表达式的所有值,如果仿真时,无分支执行,则有警告提示8.1.3枚举类型与unique case语句u

36、nique case语句减少了case语句的不确定性,在one-hot码状态机中的状态寄存器在某一时刻只有一位是1,也只有一个条件选项与值为1的条件表达式匹配HMECMicroElectronics Center/Verilog style case statement with X defaultreg 2:0 State,Next;/3-bit variablescase(State)3b001:Next=3b010;3b010:Next=3b100;3b100:Next=3b001;default:Next=3bXXX;endcase8.1.4指定未使用的状态值case条件表达式中可能有

37、一些未使用的值,进行设计时需要进行相应的处理:赋逻辑值X或使用full_case附注采用default选项,综合编译器将认为所有在默认条件内的条件表达式值都是未使用值,综合编译器将进一步优化HMECMicroElectronics Center/case statement with enumerated X defaultenum logic 2:0 RED=3b001,GREEN=3b010,YELLOW=3b100,BAD_STATE=3bxxx State,Next;case(State)RED:Next=GREEN;GREEN:Next=YELLOW;YELLOW:Next=RED;

38、default:Next=BAD_STATE;endcase8.1.4指定未使用的状态值枚举类型变量不能直接赋X值,如果需要赋X值,枚举类型的基类必须是四态类型,且枚举标签必须用显式X值定义事实上,SystemVerilog不再需要BAD_STATE枚举值和default条件选项,将枚举类型和unique case结合起来消除了需要使用X赋值以表明存在未使用的条件表达式值情况HMECMicroElectronics Centerenum R_BIT=0,/index of RED state in State register G_BIT=1,/index of GREEN state in

39、State register Y_BIT=2 state_bit;/shift a 1 to the bit that represents each stateenum logic 2:0 RED=3b001R_BIT,GREEN=3b001G_BIT,YELLOW=3b001Y_BIT State,Next;always_comb begin:set_next_state Next=3b000;/clear Next-ERROR:ILLEGAL ASSIGNMENT unique case(1b1)/reversed case statement/WARNING:FOLLOWING ASS

40、IGNMENTS ARE POTENTIAL DESIGN ERRORS StateR_BIT:if(sensor=1)NextG_BIT=1b1;StateG_BIT:if(green_downcnt=0)NextY_BIT=1b1;StateY_BIT:if(yellow_downcnt=0)NextR_BIT=1b1;endcaseend:set_next_state8.1.5将状态值赋给枚举类型变量枚举类型变量只能被赋其类型集合中的值,不能直接对其赋文本值对状态位个别位赋值,可能导致非法值,应尽量避免!HMECMicroElectronics Centerenum WAITE,LOAD

41、,STORE State,Next;always(posedge clock,negedge resetN)if(!resetN)State=WAITE;else State=Next;always(State)case(State)WAITE:Next=LOAD;LOAD:Next=STORE;STORE:Next=WAITE;endcase8.2在FSM中使用两态数据类型对模型仿真时,在时刻0以前,四态数据类型缺省值是X,而两态类型为0,进行复位时,其操作是将变量清0,因此,当复位逻辑有缺陷时,两态数据类型建模将会掩盖这种缺陷!当枚举类型用缺省的基类型时,情况与此相似。该例子将锁定在状态W

42、AIT,不能正确进行RTL仿真!HMECMicroElectronics Center8.2在FSM中使用两态数据类型解决两态数据类型建模状态锁定办法:1.采用四态基类型显式声明枚举变量2.采用always_comb3.将unique case和四态基类型结合使用,可以检测复位是否正确HMECMicroElectronics Center Module prototypes Nested modules Simplified netlists of module instances Netlist aliasing Passing values through module ports Por

43、t connections by reference Enhanced port declarations Parameterized types and polymorphism Variable declarations in blocksChapter 9 Design HierarchyThis chapter presents enhancements to Verilog about design hierarchyHMECMicroElectronics Center/prototype using Verilog-1995 styleextern module counter(

44、cnt,d,clock,resetN);/prototype using Verilog-2001 styleextern module counter#(parameter N=15)(output logic N:0 cnt,input wire N:0 d,input wire clock,load,resetN);9.1 Module prototypesModule instance in verilog is simple method of creating design hierarchy.but it is difficult to compile a module inst

45、ance,why?module and its ports definition is in different place than module instance!SystemVerilog solves this by module Prototypes:HMECMicroElectronics Center9.1 Module prototypes1.Extern module declarations can be listed in the same file in which the module is instantiated.2.The extern module decla

46、ration can be made in any module,at any level of the design hierarchy.3.The extern module declaration is only visible within the scope in which it is defined.4.It is not necessary for the extern module declaration to be encountered prior to an instance of the module.HMECMicroElectronics Center9.1.1

47、Prototype and actual definition1.SystemVerilog requires that the port list of an extern module declaration exactly match the actual module definition,including the order of the ports and the port sizes.2.To avoid port declaration redundancy,module definition can use.*shortcut.extern module counter#(

48、parameter N=15)(output logic N:0 cnt,input wire N:0 d,input wire clock,input wire load,input wire resetN);module counter(.*);always(posedge clock,negedge resetN)begin if(!resetN)cnt=0;else if(load)cnt=d;else cnt=cnt+1;endendmoduleHMECMicroElectronics Center9.2 Named ending statements1.Named module e

49、ndsendmodule:The name specified with endmodule must be the same as the name of the module with which it is paired.2.Named code block endsSystemVerilog also allows an ending name to be specified withother named blocks of code.These include the keyword pairs:package.endpackage,interface.endinterface,t

50、ask.endtask,function.endfunction,and begin.endSection 7.7 discusses begin end pairs in more detail.HMECMicroElectronics Center9.3 Nested module declarationsIn verilog:umodule names are global all module names,user-defined primitive(UDP)names,and system task and system function names are placed in a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁