Verilog HDL 实用建模技术

学习目标
• 描述过程连续赋值语句 assign, deassign , force 和 release, 解释它们在建模和调试时的重要性。
• 掌握怎样在模块调用时用defparam 语句来重新定义参数的值
•解释条件编译和 Verilog 描述部件的执行过程
• 认识和理解系统任务,如文件生成、显示层次选通显示 ( strobing )、随机数生成、存储器初始化和值变转储等系统任务。

过程连续赋值

过程赋值将值赋给寄存器, 值一直保存在寄存器中 , 直到另一个过程赋值将另外一个值存放在该寄存器中。过程连续赋值行为与之不同,它们是这样的过程语句:允许在有限时间段内将表达式的值连续地加(驱动)到寄存器或者线网,过程连续赋值 改写了寄存器或线网上的现有值, 过程连续赋值给一般过程赋值语句提供了一种有用的扩展 。
关键字 assign 和 deassign 用来表示第一类过程连续赋值语句 。过程连续赋值语句的左边只能是一个寄存器或一个拼接的寄存器组。不能是线网类型变量和部分位选、多位选择或寄存器组。一般只在一段时间范围之内
在这里插入图片描述
过程连续赋值必须要在过程里面,而连续赋值不是,并且连续赋值左边是线网类型。
这种结构比较垃圾,一般不用。知道有这种类型的声明即可。

关键字 force 和 release用来表示过程连续赋值语句的第二种形式。它们既可以用来改(覆盖)寄存器上的赋值也可以改写( 覆盖)线网上的赋值,force 和 release语句的典型应用是在交互调试过程中
此时某些寄存器或线网被强制赋值.并且提示对其他寄存器和线网的影响。建议不要在设计模块内部使用 force 和 release 语句。
它们应当只出现在激励中, 或仅作为调试语句

对寄存器连续赋值和上面类似。对于线网的连续赋值如下(可以看到也是在过程initial里面使用)
在这里插入图片描述
过程连续赋值就是在由=右边的变量值发生改变时能实时的传到左边的线网或者寄存器当中去。

改写(覆盖参数)

有两种方法改写(覆盖)参数值:通过 defparam语句或通过模块调用参数赋值。可以对不同的模块实例赋以不同的参数值。

1.用defparam改写
在这里插入图片描述

在这里插入图片描述
这个地方也有层次调用的例子(之前一直在找一直没找到),通过这个例子了解参数层次调用的方面。

一个模块中可以出现多个defparam 语句。可以用 defparam语句覆盖任何参数 。defparam结构现在被认为是一种糟糕的代码风格, 建议在Verilog HDL 代码中使用下面的替代形式。。

2.直接改变模块实例的参数值
即在调用模块实例时通过括号和#给出修改后的模块实例参数值。
在这里插入图片描述

条件编译和执行

为了解决不同编译环境不同Verilog版本涉及的问题。所谓条件编译就是要满足特定的条件后才能执行编译操作。执行也是满足了特定条件后才能执行。
和C语言有点像,但语法不一样。
在这里插入图片描述
'ifdef 和’ifndef 指令可以出现在设计的任何地方。设计者可以有条件地编译语句、模块、语句块、声明以及其他编译指令。else 指令是可选的。一·个else 指令最多可以匹配一个’ifdef或者 'ifndef。一个ifdef 或者 ifndef 可以匹配任意数量的elsif 命令。ifdef 或’ifndef 总是用相应的endif 来结束,在 Verilog 文件中,条件编译标志可以用’define’ 语句设置。在上例中, 可以通过在编译时用 'define 语句定义文本宏TEST和 ADD_B2的方式来定义标志。如果没有设置条件编译标志,那么 Verilog编译器会简单地跳过该部分·。ifdef 语句中不允许使用布尔表达式,例如使用TEST && ADD_B2来表示编译条件是不允许的

条件执行
条件执行标志允许设计者在运行时控制语句执行的流程:所有语句都被编译,但是有条件地执行它们 ,条件执行标志仅能用千行为语句,系统任务关键字$test$plusargs用于条件执行。
在这里插入图片描述仅当在运行时设置了标志DISPLAY_VAR 时才显示变量可以指定 DISPLAY_VAR 选项在程序运行时设置标志。要和if配合

可以使用系统任务关键字 $value$plusargs来进一步控制条件执行。该系统任务用于测试选项的参数值。如果没有找到匹配的调用选项.那么$value$plusargs 返回 0。如果找到了匹配的询用选项,那么$value$pulsargs 返回非0值。

在这里插入图片描述

时间尺度

在这里插入图片描述
精度,指定仿真过程中延迟值进位取整的精度

常用的系统任务

文件输出:$fopen
在这里插入图片描述可以看到会返回一个函数句柄,也就是多通道描述符(32位)
述符中只有一位被设置成 1。标准输出有一个多通道描述符, 其最低位( 第 0 位)被设置成 1。标准输出也称为通道0。标准输出一直是开放的。以后对 $fopen
的每一次调用都会打开一个新的通道。并会返回一个 32 位的描述符, 其中可能设置了第1 位, 第 2 位, ….,最多可设置到第30 位, 第 31 位是保留位。通道号与多通道描述符中被设置为 1 的位相对应。
在这里插入图片描述
它的特定在于可以一次写入多个文件
在这里插入图片描述在这里插入图片描述

$fclose(handle1) //用于关闭文件

p1、p2, …、pn 可以是变量、信号名或者带引号的字符串: 文件描述符是一个多通道描述符,它可以是一个文件句柄或者多个文件句柄按位的组合。verilog会把输出写入到与文件描述符中值为1 的位相关联的所有文件(同时传进去)。

显示层次

利用任何显示任务 , 比如display, write, monitor或者strobe任务中的**%m** 选项, 可以显示任何级别的层次. 例如当一个模块的多个实例执行同一段Verilog代码时,%m选项会区分是哪个模块实例在进行输出。显示任务中的%m 选项无需参数输入。 要注意和display等关键词一起出现。
在这里插入图片描述

选通显示

选通显示 ( strobing ) 由关键字为$strobe的系统任务完成。这个任务与display任务除了一点小差异以外, 其他非常相似。如果许多其他语句和display 任务在同一个时间单位执行 , 那么这些语句任务的执行顺序是不确定的,但如果使用strobe, 该语句总是在同一时刻的其他赋值语句执行完成之后才执行。因此, $strobe 提供了一种同步机制 , 它可以确保所有在同一时钟沿赋值的其他语句在执行完毕之后才显示数据。

随机数生成

在这里插入图片描述
seed的值是可选的, 它用于确保在每次运行测试时生成同样的随机数序列。参数可以是reg, integer或者 time变量, 任务$random 返回一个32 位整数。这个32 位随机数的所有位、位选或域选都可以被使用。
在这里插入图片描述
注意怎么写,要限制符号,比如全正的话必须要加大括号{ }。用%限定范围

用数据文件对存储器进行初始化

在这里插入图片描述
可以看到是默认从地址0开始读到定义好的存储器当中。这个可以用于需要给定大量数据时可以直接来读取文件的。

值变转储文件

在这里插入图片描述值变转储文件( VCD) 是一个ASCII 文件,它包含仿真时间、范围与信号的定义以及仿真运行过程中信号值的变化等信息。设计中的所有信号或者选定的信号集合在仿真过程中都可以被写入VCD 文件。后处理工具可以把VCD文件作为输入并把层次信息、信号值和信号波形显示出来。现在有许多商业后处理工具以及集成到仿真器中的工具可供使用。对于大规模设计的仿真,设计 者可以把选定的信号转储到 VCD 文件中, 并使用后处理工具调试、分析和验证仿真输出结果。在调试过程中 VCD 文件的使用流程。过程:
定义好要存的文件、定义要存的那一层的变量、启动转存、转存关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值