SystemVerilog硬件设计及建模-第34章.ppt

上传人:sh****n 文档编号:6421593 上传时间:2020-02-25 格式:PPT 页数:51 大小:370.31KB
返回 下载 相关 举报
SystemVerilog硬件设计及建模-第34章.ppt_第1页
第1页 / 共51页
SystemVerilog硬件设计及建模-第34章.ppt_第2页
第2页 / 共51页
SystemVerilog硬件设计及建模-第34章.ppt_第3页
第3页 / 共51页
点击查看更多>>
资源描述
增强的文本值改进的 define文本替换时间值新的变量类型有符号和无符号类型静态和动态变量类型转换常数 第3章SystemVerilog文本值和数据类型 3 1增强的文本赋值 Verilog中的向量赋值 parameterSIZE 64 reg SIZE 1 0 data data 0 将数据各位置0data bz 将数据各位置zdata bx 将数据各位置x 但如何给data赋全1的值 data 64 hFFFFFFFFFFFFFFFF 不可扩展 如果 SIZE改为128呢 data 0 1的补码data 1 2的补码 3 1增强的文本赋值 SystemVerilog在向量赋值的增强 1 可以只指定要赋的值 不用指定进制2 赋值可以是逻辑1 该语法指定所有位所赋的值 parameterSIZE 64 reg SIZE 1 0 data data 0 将数据各位置0data 1 data z 将数据各位置zdata x 将数据各位置x 3 2 define增强 Verilog允许在 define宏中使用双引号 但是双引号内的文本变成了文本串 即在verilog中不能采用在字符串中嵌入宏变量的文本替换宏创建字符串 defineprint v display variablev h v print data display variablev h data SystemVerilog允许字符串内的宏变量替换 defineprint v display variablev h v print data display variabledata h data 3 2 define增强 SystemVerilog允许在包含变量替换的宏文本字符串中使用隔离引号 SV中如何通过宏定义实现下面与Verilog相同功能的语句 display variable data h data defineprint v display variable v h v print data display variable data h data 3 2 define增强 SystemVerilog可以提供了一个不引入空格的方法 通过使用两个连续的重音符号 使两个或多个文本宏连接成一个新名字 bitd00 bit wandd00 net d00 bit bitd01 bit wandd01 net d01 bit bitd62 bit wandd62 net d62 bit bitd63 bit wandd63 net d63 bit defineTWO STATE NET name bitname bit wandname net name bit TWO STATE NET d00 3 3SystemVerilog变量 对象类型和数据类型SystemVerilog四态变量SystemVerilog两态变量显式及隐式变量和线网类型综合指导 3 3 1对象类型和数据类型 对象类型指明信号是变量还是线网 数据类型指明变量或线网的值系统 两态数据类型或四态数据类型 Verilog数据类型 变量 integer reg time线网 wire wor wand SystemVerilog数据类型 包含了所有的Verilog数据类型增加了一些新数据类型 byte int logic 3 3 2SystemVerilog四态变量 SystemVerilog用logic关键字描述通用的针对硬件的数据类型 logic数据类型变量与Verilog中的reg类型是大多数情况下可以互换使用 logic类型变量声明 logicresetN 一位四态变量logic 63 0 data 64位宽变量logic 0 7 array 0 255 8位数组变量 显式变量或线网声明 varlogic 63 0 addr 64位宽变量wirelogic 63 0 addr 64位宽线网 Whylogic 3 3 3SystemVerilog两态变量 适合于更高抽象层次建模 如系统级和交易级 bit 1位两态整数byte 8位两态整数 与C语言的char类似shortint 16位两态整数 与C语言的short类似int 32位两态整数 与C语言的int类似longint 64位两态整数 与C语言的long类似 bitresetN bit 63 0 data bit 0 7 array 0 255 varbit 63 0 addr 3 3 3SystemVerilog两态变量 类似C语言类型优点 类似C语言的两态类型如int和byte 主要用来描述更抽象的总线功能模型 不需要描述硬件细节 如三态总线及可能产生逻辑值X的硬件冲突易于使用SystemVerilog的直接编程接口 DPI 建立Verilog到C或C 的接口 因为数据类型相同 所以数据在两语言间的传递更简单有效for语句中的循环变量 综合后就消失了 int类型是一个很好的选择 3 3 4显式及隐式变量和线网类型 声明语句中 数据类型前没有显式指定对象类型时 则推断为隐式变量logic 7 0 busA bit 31 0 busB varlogic 7 0 varbit 31 0 b typedefenumbit FALSE TRUE bool t varbool tc var 7 0 d 四态8位变量wire 31 0 busB 隐含为四态逻辑数据类型wirelogic 31 0 busC 两态线网问题wirereg 31 0 busD 3 4RTL中使用两态类型 SystemVerilog新增加的两态类型可以用于设计抽象建模 这种情况下很少用到三态值 可能导致不确定值或不可预测值 X 的电路不会出现 SystemVerilog允许给一个两态类型赋四态值 其映射关系如下 3 4 1两态类型和四态类型仿真 1 两态模式仿真器 软件工具在设计模型不需要使用逻辑Z和X时提供的仿真模式 提高仿真速度 2 多数两态模式仿真器通常不能使用两态与四态混合仿真 3 不同两态模式仿真器将Z和X映射到两态类型时可能不同 导致仿真结果不同4 两态仿真模式对casez和casex解释不同 从而导致仿真结果不同5 SystemVerilog中标准两态类型为所有软件工具提供相同的行为 同时 四态到两态的映射也是标准化的 因此所有软件工具仿真结果也是一致的 3 4 2case语句中使用两态类型 缺省赋值两个优点 其一是综合会将条件选择项的译码逻辑进行优化 不会考虑缺省分支条件表达的值如何译码 其二是缺省X赋值有助于检测RTL模型中的设计错误 case state RESET next WAIT WAIT next LOAD LOAD next DONE DONE next WAIT default next 4 bx 不定态endcase 但如果是两态变量呢 给两态变量赋一个X值如何 3 5数据类型规则的放宽 SystemVerilog简化了模型中数据类型的使用 任何数据类型的变量都可以通过下列方式赋值 initial或always过程块中赋值在单个always comb always ff或always latch过程块中赋值通过单个模块或原语的output inout端口驱动赋值 大部分信号可以声明为变量类型 3 5数据类型规则的放宽 modulecompare outputlogiclt eq gt inputlogic 63 0 a b always a b if ab 连续赋值comparatoru1 eq a b 模块例化endmodulemodulecomparator outputlogiceq inputlogic 63 0 a b always a b eq a b endmodule 3 5数据类型规则的放宽 对变量使用的限制可以防止设计错误 多个输出端口驱动一个变量 对一个变量进行多次连续赋值 对同一个变量同时进行过程赋值和连续赋值moduleadd and increment outputlogic 63 0 sum outputlogiccarry inputlogic 63 0 a b always a b sum a b 过程赋值assignsum sum 1 error sum已经被过程赋值一次look aheadi1 carry a b carry被驱动一次overflow checki2 carry a b error carry再一次被驱动endmodulemoduleloock ahead outputwirecarry endmodulemoduleoverflow check outputwirecarry endmodule 3 6有符号和无符号修饰符 integerj verilog 1995标准 32位有符号数reg 63 0 u 无符号64位数regsigned 63 0 s 有符号64位数 verilog 2001标准SystemVerilog增加了缺省为有符号数的数据类型 byte shortint int和longintints int 有符号32位变量intunsignedu int 无符号32位变量与verilog相同 SystemVerilog只能在类型关键字后面指定signed或unsigned关键字 与C语言不同 3 7静态变量和自动变量 verilog 1995标准中 所有数据类型都是静态的verilog 2001标准中在任务和函数中添加了自动变量自动变量特点是其存储区在需要时由软件工具动态分配 不需要时被释放 因此也被称为动态变量 自动变量用途 1 用于描述在测试程序 抽象系统级 交易级或总线功能模型中的验证程序2 用于编写可重入任务或递归函数 3 7静态变量和自动变量 平衡加法器 把数组的所有元素加在一起 被加的数组元素高 低地址作为函数的输入 functionautomaticintb add intlo hi intmid lo hi 1 1 if lo 1 hi return b add lo mid 1 b add mid hi elsereturn array lo array hi endfunction 3 7静态变量和自动变量 SystemVerilog增加了关键字static 允许任何变量显式被声明为static或automatic 这个声明可以出现在任务 函数 begin end块或fork join块中 但在module一级声明的变量不能显式地声明为static或automatic 在module级 所有变量都是静态的 functionintcount ones input 31 0 data automaticlogic 31 0 count 0 automaticlogic 31 0 temp data for intj 0 j 1 endreturncount endfunction 3 7静态变量和自动变量 检查程序运行总错误数任务 typedefstructpacked packet t taskautomaticcheck results inputpacket tsent received outputinttotal errors staticinterror count 0 if sent received error count total errors error count endtask SystemVerilog缺省存储方式与Verilog兼容 在模块 begin end块 fork join块以及非自动任务和函数中 缺省存储方式为静态的 如果一个任务和函数被声明自动的 则缺省存储方式的自动的 3 7 1静态变量和自动变量的初始化 SystemVerilog对Verilog进行了扩展 在模块 任务 函数中声明的变量可以有内嵌初始值 静态变量只初始化一次 自动变量每次调用时都初始化 functionintcount ones input 31 0 data logic 31 0 count 0 logic 31 0 temp data for intk 0 k 31 k beginif temp 0 count endreturncount endfunction 上述程序不能正确工作 第一次调用时 count初始为0 再次调用时 静态变量count保持上次调用时的值 从而导致计数错误 静态变量初始化是不可综合的 动态变量初始化是可综合的 3 7 2静态变量和自动变量使用原则 在always和initial块中 如果无内嵌初始化则使用静态变量 而需要内嵌初始化则使用自动变量如果一个任务或函数是可重入的 则应设成自动的 变量也应是自动的 除非要在两次调用之间保持变量的值如果一作任务或函数用来描述硬件的独立部分 并且不是可重入的 则应声明为静态的 任务或函数中的变量也应是静态 3 8变量初始化的确定性 Verilog初始化不确定SystemVerilog内嵌初始化在时间0之前Verilog内嵌初始化可能引起事件 SystemVerilog不引起事件SystemVerilog内嵌初始化是确定的 integerj 5 integerk integerk j initialk j initial k j logicresetN 0 always posedgeclk negedgeresetN if resetN count 0 elsecount count 1 resetN初始与always过程谁先被仿真器激活 表现的结果是不同的 3 8 1时序逻辑的异步输入初始化 modulecounter inputwireclk resetN outputlogic 15 0 count always posedgeclk negedgeresetN if resetN count 0 elsecount count 1 endmodulemodulecounter test wire 15 0 count bitclk bitresetN 1 countercounter 1 clk resetN count always 10clk clk initialbeginresetN 0 2resetN 1 display ncount 0d expect0 n count endendmodule 对Verilog来说 该程序执行具有不确定性 WHY 3 9强制类型转换 verilog是弱类型语言 允许一个数据类型的值赋给另一个数据类型的变量或线网 新值按verilog标准中定义的规则转换 强制转换不同于赋值时转变数值 它可以在表达式内 将一个数值转换成一个新的类型 3 9 1静态转换 编译时转换 SystemVerilog加入了一个强制转换操作符 用于将一个值强制转换为其它类型 数据类型强制转换 7 int 2 0 3 0 向量宽度强制转换 logic 15 0 a b y y a b 16 2 符号强制转换 shortinta b inty y y signed a b 3 9 1动态强制类型转换 SystemVerilog提供了一个系统函数 cast 在运行时能够进行待转换数值的检查 cast dest var source exp intradius area always posedgeclk cast area 3 154 radius 2 typedefenum s1 s2 s3 states t states tstate next state always latchbegin cast next state state 1 end cast可以作为任务被调用 cast可以作为函数被调用 cast作为函数被调用时 会返回一个转换成功与否标志 cast不能和直接修改源表达式的操作符一块使用 如 等 cast语句不可综合 3 10常数 verilog提供三种类型常数 parameter specparam和localparam paramter可以在确立时使用defparam或内嵌参数重定义修改的常数Specparam是一个可以在确立时从SDF文件中重定义的常数Localparam是确立期常数 可以基于其它常数 但不能重定义verilog限制这些常数不能在自动任务或函数 begin end fork join中声明 3 10常数 SystemVerilog加入了一个类似C语言风格的const声明 可以将任何变量声明为常数 有确立完成之后才被赋值 并且可以在自动任务或函数 begin end fork join中声明 constlogic 23 0 c1 7 constintc2 15 constrealc3 3 14 constc4 5 error 无数据类型taskautomaticC constintN 5 endtask SystemVerilog允许用户定义新的变量和线网类型 从而能够在更高的抽象线上进行复杂的设计 使用用户自定义数据类型 可以用更少的代码完成更多的设计功能 并且代码的自文档性和可读性更好 使用typedef建立用户自定义类型使用enum建立枚举类型枚举值的使用 第4章用户自定义和枚举数据类型 4 1用户自定义类型 Verilog没有提供用户自行扩展语言变量和线网类型机制 其数据类型主要用于RTL和门级建模 SystemVerilog除增加了许多新数据类型外 还可以用typedef关键字来建立用户自定义类型 新类型定义后 可以声明这个类型的变量 如 typedefintunsigneduint uinta b uint类型的两个变量 4 1 1局部typedef声明 用户自定义类型可以在局部定义 也可以在编译单元域进行外部定义 当一个用户自定义类型只用于设计的特定部分时 typedef的定义可以在模块或设计的接口部分 modulealu typedeflogic 3 0 nibble nibbleopA opB nibble 7 0 data 由8个nibble类型组成的32位向量 endmodule nibble只有alu模块中可见 其它模块完全可以用nibble表示其它的意思 4 1 2共享typedef定义 如果一个用户自定义类型会在很多不同的模块或接口是使用 可以把typedef声明放在package或 unit中声明 packagechip types ifdefTWO STATEtypedefbitdtype t elsetypedeflogicdtype t endifendpackage 4 1 2共享typedef定义 modulecounter outputchip types dtype t 15 0 count inputchip types clock resetN always posedgeclock negedgeresetN if resetN count 0 elsecount count 1 endmodule inportchip types modulecounter outputdtype t 15 0 count inputclock resetN always posedgeclock negedgeresetN if resetN count 0 elsecount count 1 endmodule 4 2枚举数据类型 枚举数据类型提供了一种方式来声明一个具有特定允许值列表的抽象变量 每一个值都有一个确定的用户自定义名字 即标签 label Verilog语言没有枚举类型 为了给数值创建一个标签 必须定义parameter常数来表示每个值 并且将值赋给常数 标识符 define文本替换是另一种把标识符与值对应的方法 4 2枚举数据类型 defineFETCH3 H0 defineWRITE3 H1 defineADD3 H2 defineSUB3 H3 defineMULT3 H4 defineDIV3 H5 defineSHIFT3 H6 defineNOP3 H7modulecontroller outputregread write inputwire 2 0 instruction inputwireclk resetN parameterWAIT 0 LOAD 1 STORE 2 reg 1 0 state nextState 4 2枚举数据类型 always posedgeclk negedgeresetN if resetN state WAIT elsestate nextState always state begincase state WAIT nextState LOAD LOAD nextState STORE STORE nextState WAIT endcaseendalways state instruction beginread 0 write 0 if state LOADendendmodule state和nextState只取三个值吗 4 2枚举数据类型 packagechip types typedefenum FETCH WRITE ADD SUB MULT DIV SHIFT NOP instr t endpackageimportchip types modulecontroller outputlogicread write inputinstr tinstruction inputwireclk resetN enum WAIT LOAD STORE state nextState always ff posedgeclk negedgeresetN if resetN state WAIT elsestate nextState always combbegincase state WAIT nextState LOAD LOAD nextState STORE 4 2枚举数据类型 STORE nextState WAIT endcaseendalways combbeginread 0 write 0 if state LOADendendmodule 枚举类型限制数值的合法集合 例子中state nextState只能有WAIT LOAD STORE三种值 所有软件工具都使用相同的方式解释对于枚举类型变量合法值的约束 4 2枚举数据类型 枚举类型标签作用域 枚举类型列表中的标签在其作用域内必须是唯一的 可以包含枚举类型声明的作用域包括编译单元 模块 接口 任务 函数 begin end块和fork join块 moduleFSM enum GO STOP fsm1 state enum WAIT GO DONE fsm2 state endmodule 4 2枚举数据类型 枚举类型相标签代码的值 枚举类型标签缺省情况下代表的实际数值是一个int类型的整数 第一个标签表示数值0 第二个为1 以此类推 SystemVerilog支持显式地说明标签表示的数值 如 enum ONE 1 FIVE 5 TEN 10 state enum A 1 B C X 24 Y Z list1 B C Y Z enum A 1 B C D 3 list2 枚举列表中的各个标签必须具有唯一的值 4 2枚举数据类型 枚举类型的基类 枚举类型是具有一系列标签值的变量或线网 其缺省的基类是int类型 SystemVerilog允许对枚举类型的基类进行显式的声明 enumbit FALSE TRUE boolean enumlogic 1 0 WAIT LOAD READY state enumlogic 2 0 WAIT 3 b001 LOAD 3 b010 READY 3 b100 state one hot编码enum WAIT 3 b001 LOAD 3 b010 READY 3 b100 state 基类宽度与赋给标签的值宽度不同enumlogic A B C list4 标签数超过基类所能代表的宽度enumlogic ON 1 b0 OFF 1 bz switch enumlogic 1 0 WAIT ERR 2 bxx LOAD READY state 4 2枚举数据类型 枚举类型操作的强类型检验 枚举类型与其它的Verilog变量不同 它是强类型 一个枚举类型只可以进行下列赋值 枚举类型列表中的一个标签同类枚举类型的其它变量通过 cast转换成枚举类型变量的数值 typedefenum WAIT LOAD READY states t states tstate next state intfoo foo state 1 state next state state WAIT state foo 1 state state 1 state next state state 4 2枚举数据类型 将表达式强制转换为枚举类型 使用转换操作符和动态 cast系统函数 typedefenum WAIT LOAD READY states t states tstate next state next state states t state 1 cast next state state 1 如果state READY呢 会发生什么事 4 2枚举数据类型 枚举类型的专用系统任务 SystemVerilog提供了一些内置函数 可以循环访问枚举类型列表中的值 这些方法能自动处理枚举类型的半强类型特性 简化操作 first 返回枚举列表第一个成员的值 last 返回枚举列表最后一个成员的值 next 返回枚举列表中下一个成员的值 可以用一个整数作为next的参数 这种情况返回后面第N个成员的值 prev 返回枚举列表中前一个成员的值 num 返回枚举列表中元素个数 name 返回枚举变量值对应的字符串 如果这个值不在枚举变量列表中 则返回一个空字符串 4 2枚举数据类型 modulecounter inputlogicsynced compare resetN clk outputlogicin sync enum cnt 0 15 state next st always ff posedgeclk negedgeresetN if resetN state cnt0 elsestate next st always ff posedgeclk negedgeresetN if resetN in sync 0 elsebeginif state cnt8 in sync 1 if state cnt0 in sync 0 end 一个计数器的例子 输出in sync初始为0 当计数器到8时置位 计数器到0清零 如果compare和synced均为假 计数器保持当前值 如果compare和synced均为真 计数器加1 如果compare为真而synced为假 计数器减2 4 2枚举数据类型 always combbeginnext st state case state cnt0 if compareendendcaseendendmodule 4 2枚举数据类型 打印枚举类型 枚举类型值可以作为标签的内部值或标签名打印 moduleFSM inputlogicclk resetN outputlogic 3 0 control enumlogic 2 0 WAIT 3 b001 LOAD 3 b010 READY 3 b100 state next always posedgeclk negeditresetN if resetN state WAIT elsestate next always combbegin display nCurrentstateis s b state name state case state WAIT next LOAD LOAD next READY READY next WAIT endcase display nextstatewillbe s b next name next endassigncontrol state endmodule
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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