EDA技术与Verilog设计第12章.ppt
《EDA技术与Verilog设计第12章.ppt》由会员分享,可在线阅读,更多相关《EDA技术与Verilog设计第12章.ppt(54页珍藏版)》请在装配图网上搜索。
第12章Verilog语言的发展 12 1语法结构的扩展和增强12 2设计管理12 3定时检查12 4系统任务和系统函数的扩展12 5VCD文件的扩展12 6综合12 7编程语言接口 PLI 内容 Verilog语言的发展 12 1语法结构的扩展与增强 12 1 1模块声明的扩展 Verilog1995声明方式 module模块标识名 端口列表 模块内容 endmoduleVerilog2001声明方式 属性 module模块标识名 模块参数列表 端口声明列表 模块内容 endmodule 12 1 2对符号和运算符的扩展 1 对符号的扩展在Verilog 1995中 整数可以带正负号 但net型和reg型的变量是不允许带符号的 在Verilog 2001中 对带符号的算术运算作了如下一些扩充 net型和reg型的变量可以声明为符号 signed 变量 函数的返回值可以带符号 任何宽度的整数都可以带符号 操作数可以从无符号数转换为有符号数 增加了算术移位操作符 signed 是Verilog 1995中的保留字 但没有使用 在Verilog 2001中 用 signed 保留字来定义数据类型 端口 整数 函数等 在Verilog 1995中 书写敏感信号列表时 用 or 来连接敏感信号 如 always aorborcin cout sum a b cin always posedgeclkornegedgeclr if clr q 0 elseq d 在Verilog 2001中可用逗号分隔敏感信号always a b cin cout sum a b cin always posedgeclock negedgeclr if clr q 0 elseq d 2 敏感信号列表中用逗号分隔敏感信号 用always过程块描述组合逻辑时 应在敏感信号列表中列出所有的输入信号 在Verilog 2001中可用通配符 来包括该过程块中的所有信号变量 比如 在Verilog 1995中 一般这样写敏感信号列表 always aorborcin cout sum a b cin 在Verilog 2001中可表示为如下两种形式 always 形式1 cout sum a b cin always 形式2 cout sum a b cin 3 在敏感信号列表中使用通配符 Verilog 2001增加了算术移位操作符 和 3 逻辑右移后其值为8 b00010100A 3 算术右移后其值为8 b11110100 4 新增算术移位操作符和指数运算符 12 1 3对向量部分选择的扩展 Verilog1995标准 vect msb expr lsb expr 其中msb expr和lsb expr必须是常量表达式 Verilog 2001对向量的部分选择进行了扩展 增加了一种方式 索引的部分选择 indexedpart select 其形式如下 reg 15 0 big vect reg 0 15 little vect big vect lsb base expr width expr little vect msb base expr width expr big vect msb base expr width expr little vect lsb base expr width expr 12 1 4矩阵的扩展 Verilog 1995标准只允许一维的矩阵变量 memory Verilog 2001对其进行了扩展 允许使用多维矩阵 如下所示 reg 7 0 array1 0 255 reg 7 0 array2 0 255 0 255 0 255 在Verilog 1995标准中 不允许直接访问矩阵的某一位或某几位 必须首先将要进行操作的单元转移到相同大小的变量中 然后再进行访问 而在Verilog 2001标准中 可直接访问矩阵的某个单元的一位或几位 12 1 5表达式确定的数据位宽的改动 在Verilog 1995标准中 i j的结果的数据位宽规定为i和j的数据位宽相加之和 而在Verilog 2001标准中 i j的结果位宽规定为与i j位宽较大的相同 对于Verilog 2001标准新增的指数运算符 i j的结果位宽与i的位宽相等 12 1 6变量声明赋值 Verilog 2001标准规定可以在变量声明时对其赋值 所赋的值必须是常量 并且在下次赋值之前 变量都会保持不变 对变量在声明时的赋值并不适用于矩阵 而且只允许模块级的变量声明赋值 例如reg 3 0 a 4 h4 也可同时声明多个变量 为其中的一个或者几个赋值如integeri 0 j realr1 2 5 n300k 3E6 12 1 7generate语句 Verilog 2001新增了语句 generate 通过generate循环 可以产生一个对象 比如一个元件或一个模块等 的多个例化 为可变尺度的设计提供了方便 generate语句一般在循环和条件语句中使用 为此Verilog 2001增加了四个关键字generate endgenerate genvar和localparam genvar是一个新的数据类型 用在generate循环中的标尺变量必须定义为genvar型数据 12 1 8任务和函数中增加的关键字automatic Verilog 2001新增关键字 automatic 可用于任务和函数的定义中 将任务分为了两种类型 若在定义任务时没有使用 automatic 则定义了一个静态任务 statictask 若定义任务时使用了 automatic 则定义了一个自动任务 automatictask 一个任务有可能被多次调用 并行执行 对于自动任务来说 其定义的所有变量将被并行执行的每一个任务所复制 以存储其特定的状态 而对静态任务来说 不管并行调用了多少 其变量始终是静态的 12 1 9常数函数 Verilog 2001标准增加了一类特殊的函数 常数函数 它是verilog函数集的一个子集 其定义和其他Verilog函数的定义相同 常数函数主要是用来支持在详细描述 elaboration 时进行复杂计算的结构 常数函数有助于创建可改变位数和规模的可重用模型 如下例定义了一个常数函数clogb2 根据ram的深度来确定ram地址线的宽度 12 1 10模块实例化时的参数定义 当一个模块在另一个模块中实例化时 其内部定义的参数 parameter 值是可以改变的 有两种方法改变其全局参数值 使用defparam语句显式地重新定义 模块实例化时重新定义参数值 在Verilog 1995中可使用 符号隐式地重新定义参数 定义的顺序必须与参数在实例化模块中声明的顺序相同 并且不能跳过任何参数 由于这种方法含义不易理解 且容易出错 所以Verilog 2001标准增加了一种在线显式重新定义参数的方式 这种方式允许在线参数值按照任意顺序排列 12 1 11新增条件编译语句 Verilog 2001标准增加了条件编译语句 elsif和 ifndef ifdef else elsif和 endif作为一组条件编译语句使用 ifndef else elsif和 endif作为一组条件编译语句使用 12 2设计管理 Verilog 2001标准增加了对设计内容的配置增加关键字config endconfig design instance cell use和liblist 配置块位于模块定义之外 可以指定每一个Verilog模块的版本及其源代码的位置 Verilog程序设计从顶层模块开始执行 找到在顶层模块中实例化的模块 进而确定其源代码的位置 照此顺序 直到确定整个设计的源程序 设计管理举例 源文件 filetop vfileadder vfileadder vgmoduletop moduleadder moduleadder rtl级 门级addera1 foof1 foof1 addera2 foof2 foof2 endmoduleendmoduleendmodulemodulefoo modulefoo modulefoo rtl级 rtl级 门级endmoduleendmoduleendmodule 库映射文件 filelib maplibraryrtlLibtop v libraryaLibadder librarygateLibadder vg 假设top v adder v adder vg都已通过编译 产生了如下的文件结构 rtlLib top 来自top vrtlLib foo 来自top vaLib adder 来自adder vaLib foo 来自adder vgateLib adder 来自adder vggateLib foo 来自adder vg 若没有进行配置 库文件的搜索将按照map文件声明的顺序 这意味着顶层模块中所有的实例化加法器都来自aLib adder 因为aLib是在map文件声明中第一个包含名为adder的单元 cell 的库 同样道理 所有的foo也都来自rtlLib foo 1 库映射文件的默认配置 configcfg1 designrtlLib topdefaultliblistaLibrtlLib endconfig以上的程序可以使foo始终引用adder v文件 因为defaultliblist覆盖了lib map文件声明的库搜索顺序 使aLib始终在rtlLib之前被搜索 而gataLib没有包含在liblist中 因此 门级的adder和foo不会被引用 若要引用门级描述的adder和foo 则可按如下方式配置 configcfg2 designrtlLib topdefaultliblistgateLibaLibrtlLib endconfig 2 default语句的使用 configcfg3 designrtlLib topdefaultliblistaLibrtlLib cellfoousegateLib foo endconfig以上的程序可以引用来自aLib的rtl级adder和gataLib的门级foo cell语句指定了所有名为 foo 的单元均引用gateLib库中的门级描述 3 cell语句的使用 configcfg4designrtlLib topdefaultliblistgateLibrtlLib instancetop a2liblistaLib endconfig以上的程序可以使top a1adder 及其所包含的foo 使用来自gataLib的门级adder top a2adder 及其所包含的foo 使用来自aLib的rtl级adder 4 instance语句的使用 configcfg5 designaLib adder defaultliblistgateLibaLib instanceadder f1liblistrtlLib endconfig本例中指定aLib adder为顶层文件 并且f1引用来自rtlLib的foo f2使用来自gateLib的foo 5 层次化的配置 12 3定时检查 在Verilog 1995标准中 定时检查是作为系统任务的一个子集出现的 主要包含有 hold period setup skew nochange recovery setuphold和 width 在Verilog 2001标准中 不再把定时检查作为系统任务 但是仍沿用以前的习惯 以 符号开头 并且对其进行了扩展 Verilog 2001将定时检查分为了两类 一类主要以稳定时间窗来描述 主要有 setup hold setuphold recovery removal和 recrem 另一类用于检查时钟和控制信号 主要以两个事件发生的时间差来描述 包括 skew timeskew fullskew width period和 nochange 语法 removal reference event data event timing check limit notify reg 参考事件通常是控制信号 比如清零信号 置位信号 数据事件通常是时钟信号 1 removal 语法 recrem reference event data event timing check limit timing check limit notify reg stamptime condition checktime condition delayed reference delayed data recrem实际是将 removal和 recovery的功能合在了一起 2 recrem 语法 timeskew reference event data event timing check limit notify reg event based flag remain active flag 当满足如下条件时 timeskew报告一次违例 定时检查时刻 定时记录时刻 limit 3 timeskew 语法 fullskew reference event data event timing check limit timing check limit notify reg event based flag remain active flag 除了参考事件和数据事件顺序可变之外 fullskew和 timeskew是一样的 4 fullskew 12 4系统任务和系统函数的扩展 12 4 1系统任务和系统函数的调整 Verilog 2001标准对系统任务和函数做了一些调整和增强 如定时检查不再作为系统任务 增加了17个文件输入 输出任务 增加了命令行输入 commandlineinput 系统任务等 Verilog 2001增加了17个文件输入 输出任务 fgetc ungetc fflush ferror fgets rewind swrite swriteb swriteo swriteh sformat sdf annotate fscanf sscanf fread ftell fseek 增加了两个转换函数 signed和 unsigned 在显示系统任务中 增加了 lor L uor U zor Z 格式控制符 格式控制符 integermcd fopen file name integerfd fopen file name type fclose mcd fclose fd type 是一个字符串 它决定了文件以何种方式打开 也决定了 fopen返回一个32比特的多通道描述符 mcd 还是返回一个32比特的文件描述符 filedescriptor 参数type type参数说明 12 4 2新增系统任务和系统函数 语法结构如下 string output tasks string output tasks name output reg list of arguments swrite系统函数与 fwrite系统函数类似 唯一的不同就是 fwrite将格式化的文本写到mcd指定的文件中 而 swrite是将文本写到寄存器中 1 swrite swriteb swriteh swriteo fgetc的用法如下 c fgetc fd 从fd指定的文件中读取一个字节 若发生错误 则c被置为EOF 1 将c设置为数据宽度大于8比特的变量可以区别EOF 1 和值为0 xFF的字符 2 fgetc ungetc fgets可从文件中读取字符串 用法如下 integercode fgets str fd 从fd指定的文件中读取字符串到寄存器型变量str中 直到str装满 或者读到 换行符 newlinecharacter 或者遇到文件结束条件 指令结束 当出现错误时 code中的返回值为0 否则为读取的字符数 3 fgets fscanf和 sscanf用于读取格式化数据 用法如下 integercode fscanf fd format args integercode sscanf str format args 4 fscanf sscanf fread可从文件中读取二进制数据 其用法如下 integercode fread myreg fd integercode fread mem fd integercode fread mem fd start integercode fread mem fd start count integercode fread mem fd count 5 fread 12 5VCD文件的扩展 VCD文件用于存储选定的变量数值变化的信息 信息的记录由VCD系统任务来完成 在Verilog 1995标准中只有一种类型的VCD文件 即四状态类型 这种类型的VCD文件只记录变量在0 1 x和z状态之间的变化 而且不记录信号强度信息 而在Verilog 2001标准中增加了一种扩展类型的VCD文件 能够记录变量在所有状态之间的转换 同时记录信号强度信息 dumpports dumpportsoff dumpportson dumpportsall dumpportslimit dumpportsflush vcdclose 扩展型VCD系统任务 12 6综合 为了使综合器输出的结果和基于IEEEStd1364 2001标准的仿真和分析工具的结果相一致 IEEEStd1364 1 1 2002标准为VerilogHDL的RTL级综合定义了一系列的建模准则 它将VerilogHDL结构分为了三类 支持 RTL综合器可将此类结构映射为硬件电路 忽略 RTL综合器将忽略此类结构 不将其映射到硬件上 遇到此类结构并不会导致综合失败 但是有可能使综合的网表和RTL模型之间出现功能失配 不支持 RTL综合工具不支持此类结构 当遇到此类结构时 综合失败 12 6 1硬件单元建模 组合逻辑建模只能使用always结构 连续赋值和net型变量声明时赋值 在一个always块中不能同时对一个变量进行阻塞赋值 和非阻塞赋值 组合逻辑的敏感信号列表中不能包含有posedge和negedge 为了不使综合结果和仿真结果出现功能上的失配 应将always块中所有出现在右手侧 RHS 的变量都包含在敏感信号列表中 可以使用 或 结构 1 组合逻辑建模 时序逻辑建模必须使用always块 且其敏感信号列表中应包含有关键字posedge或negedge 对于只包含一个边沿事件的always块 其中的变量赋值用边沿敏感存储器来建模 赋值方式推荐使用非阻塞赋值来避免竞争 regout always posedgeclock out in out建立的模型是一个上升沿触发的寄存器 2 边沿敏感时序逻辑建模 当满足以下两个条件时 使用电平敏感存储器为变量建模 变量在always块中赋值 敏感信号列表中没有边沿事件 组合逻辑建模风格 在always块外部没有对此变量赋值 赋值方式推荐使用非阻塞赋值以避免竞争 3 电平敏感存储器建模 当变量被赋值 z 时使用三态驱动器建模 若一个信号的任意一个驱动器可以是z 则所有的驱动器都可以是z z不能通过赋值在变量之间传递 moduleztest test2 test1 test3 ena input 0 1 ena input 7 0 test1 test3 output 7 0 test2 wire 7 0 test2 assigntest2 ena 2 b01 test1 8 bz assigntest2 ena 2 b10 test3 8 bz endmodule 当ena为2 b00或2 b11时 test2也为三态的 4 三态驱动器建模 12 6 2属性 Verilog 2001增加了属性这种机制 属性用来向综合工具传达信息 以控制综合工具的行为和操作 属性包含在两个 之间 可用于对象的所有实例调用 也可只应用于某一个实例调用 IEEEStd1364 1 1 2002标准中定义了一系列属性 其语法如下 synthesis async set reset signal name1 signal name2 synthesis black box synthesis combinational synthesis fsm state synthesis full case synthesis implementation synthesis keep synthesis label name synthesis logic block synthesis op sharing synthesis parallel case synthesis ram block synthesis rom block synthesis sync set reset signal name1 signal name2 synthesis probe port full case属性用于告诉综合器 对于在case结构中没有指定的可能分支项 其对应输出的赋值为x 1 full case属性 parallel case属性用于告诉综合器 对所有的case分支项都要进行检验 即使可能存在多个case分支项同时满足控制表达式的情况注意 Verilog的case结构中可以出现多个分支项同时满足case表达式的情况 在这种情况下 将执行第一个满足控制表达式的分支项 而后中断case语句 不再检验其余的分支项 而parallel case属性使综合电路每次都要检验所有的case分支项 RTL级case结构以门级实现时 此属性通常用于去除门级结构中的优先编码器 2 parallel case属性 full case和parallel case可同时出现在一个属性中 如下所示 synthesis full case parallel case 3 full case和parallel case属性同时使用 语法 synthesis ram block 此属性用于指示以RAM形式建模及选择RAM的风格 4 ram block属性 语法 synthesis rom block 此属性用于指示以ROM形式建模及选择ROM的风格 5 rom block属性 12 7编程语言接口 编程语言接口包括三个C功能库 分别是ACC TF和VPI Verilog 2001标准清理和更正了旧的ACC和TF库中的许多定义 但并没有增加任何新的功能 Verilog 2001对PLI的所有改进都体现在VPI库中 包括增加了六个VPI子程序 vpi control vpi get data vpi put data vpi get userdata vpi put userdata 和vpi flush 为用户提供了更大的便利 vpi control 的作用是传递用户给仿真器的指令 vpi flush 的作用是将仿真器输出缓冲区和log文件输出缓冲区清空 vpi put data 的作用是将数据放到一次仿真的save restart位置 其语法格式为 vpi put data id dataLoc numOfBytes 其中numOfBytes是个正整数 以字节为单位指定了要放置的数据的数目 dataLoc代表了数据所在的位置 Id代表了vpi get vpiSaveRestartID NULL 返回的save restartID 函数的返回值是数据的字节数 若出错则返回0 vpi put userdata 将用户数据放置到系统任务 函数实例的存储位置 习题 12 1了解所使用综合器对Verilog 2001语法结构的支持情况 用Verilog 2001语法结构编写模块并综合 12 2比较模块实例化时的隐式和显式参数传递方式 并举例说明两种方式的不同点 12 3了解Verilog 2001标准新增系统任务和系统函数的使用方法 编写测试文件 12 4了解所使用综合器对属性的支持情况 设计一个地址线为8bit 数据线为4bit的ROM 并分别以组合逻辑形式和ROM形式进行综合 比较资源耗用情况- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 Verilog 设计 12
![提示](https://www.zhuangpeitu.com/images/bang_tan.gif)
关于本文