当前位置:网站首页>第九章 实用建模技术
第九章 实用建模技术
2022-07-26 18:05:00 【江南小作坊】
实用建模技术
前言
- 来了来了,Verilog语言的另外一些增强特性,这些特性使Verilog语言在建模和设计分析等方面具有更强大的灵活性。
过程连续赋值
- 过程赋值:将值赋给寄存器,值一直保存在寄存器中,直到另一个过程赋值将另外一个值存放在该寄存器中。
- 过程连续赋值:允许在有限时间段内将表达式的值连续地加(驱动)到寄存器或线网中。改写寄存器或线网上的现有值。
assign和deassign
- 关键字:
assign、deassign - 用来表示第一类过程连续赋值语句,不建议使用,了解一下。

force和release
- 关键字:
force、release - 过程连续赋值语句的第二种形式,既可以用来改写(覆盖)寄存器上的赋值,也可以改写(覆盖)线网上的赋值。
- 典型应用:交互式调试过程中。
- 建议不要在设计模块内部使用,应当只出现在激励中,或仅作为调试语句。
作用在寄存器上
- 在一个受控时间段内改写q和qbar的值。

作用在线网上
- 线网被释放后,立即返回自己的正常驱动。线网可以被强制赋值为一个表达式或一个数值。

改写参数
- 又称覆盖参数。参数可以在模块定义内定义,但是在Verilog模块编译过程中,参数值可以针对每个模块调用单独改变。
- 两种方法:通过defparam语句、通过模块调用参数赋值。
defparam语句
- 关键字:
defparam - 可以在任意模块调用中改变参数值,模块调用的层次名称可以用在改写(覆盖)参数值的语句中。

- 一个模块中可以出现多个defparam语句。
- 可以用defparam语句覆盖任何参数。
- ok,又到了糟糕的环节,defparam语句被认为是糟糕的代码风格,建议在Verilog HDL代码中使用替代形式。了解一下即可。
模块实例的参数值
- 在调用模块时可以改写(覆盖)其原来定义的参数值。
- 将上面例子做如下修改

- 参数按名称赋值

条件编译与执行
- 条件编译:Verilog代码的一部分可能使用于某个编译环境,但不适用另一个环境。设计者在代码中指定其中某一部分代码只有在设置了特定的标志后才能被编译。这就是条件编译。
- 条件执行:同理,在程序运行,设置了某个标志后才能执行Verilog设计的某些部分。
条件编译
编译指令:
`ifdef, `ifndef, `else, `elsif, `endif如下

由于指令前面的符号与编辑器有冲突,以下不带符号说明。
ifdef和ifndef指令可以出现在设计的任何地方。
else指令是可选的。一个else指令最多可以匹配一个ifdef或者ifndef。
一个ifdef或者ifndef可以匹配任意数量的elsif命令。
ifdef或者ifndef总是用相应的endif来结束。
在Verilog文件中,条件编译标志可以用define语句设置。
条件执行
- 条件执行标志允许设计者在运行时控制语句执行的流程。所有语句都被编译,但是有条件地执行它们。
- 条件执行标志仅能用于行为语句。
- 关键字:
$test$plusargs$、$value$plusargs$ - 用
$test$plusargs$控制
- 用
$value$plusargs$进一步控制条件执行,该系统任务用于测试调用选项的参数值,如果没有找到匹配的调用选项,则$value$plusargs$返回0,如果找到了,则$value$plusargs$返回非0值。
时间尺度
在仿真中,一个模块的延迟值需要用某个时间单位来定义。
关键字:
'timescale如
'timescale 1ns/1ps其中,1ns是指定的时间和延迟的测量单位,1ps是延迟值进位取整的精度。只有1,10和100才是合法的说明时间单位和时间精度的整整数。
`timescale 100ns/1ns module fx(); ... // 500ns clk翻转一次 #5 clk = ~clk; ...
常见的系统任务
- 常用系统任务:文件输出、显示层次、选通显示、随机数生成、内存初始化、值变转储等。
文件输出
- Verilog的结果通常输出到标准输出和文件verilog.log中,可以将其输出重定向到选择的文件。
打开文件
系统任务:
$fopen用法:
- 一,
$fopen("文件名"); - 二,
file_handle = $fopen("文件名");
- 一,
$fopen返回一个32位多通道描述符,且多通道描述符中只有一位被设置成1.标准输出有一个多通道描述符,其最低位(第0位)被设置成1.
标准输出也称为通道0,一直是开放的。
$fopen的每一次调用都会打开一个新的通道,并会返回一个32位的通道符,可以设置第1位,第二位……一直到30位,第31位是保留位。多通道的优点:可以有选择的同时写多个文件。
// 多通道描述符 integer handle1, handle2; // 标准输出是打开的,即第0位置1 // descriptor = 32'h0000_0001 initial begin handle1 = $fopen("file1.out"); // handle1 = 32'h0000_0002(第1位置1) handle2 = $fopen("file1.out"); // handle2 = 32'h0000_0004(第2位置1) end
写文件
- 系统任务:
$fdisplay、$fmonitor、$fwrite、$fstrobe - 常用
$fdisplay、$fmonitor - 用法:
$fdisplay(<file_descriptor>,p1,p2,...,pn);$fmonitor(<file_descriptor>,p1,p2,...,pn);p1,p2,...,pn可以是变量、信号名或带引号的字符串。
- 文件描述符是一个多通道描述符,它可以是一个文件句柄或多个文件句柄按位的组合。
- Verilog会把输出写入与文件描述符值中值为1的位相关联的所有文件。

关闭文件
- 系统任务:
$fclose - 用法:
$fclose(<file_descriptor>);
显示层次
- 利用任何显示任务,
$display,$write,$monitor,$strobe任务中的%m选项,显示任何级别的层次。
- 输出结果

选通显示
- 系统任务:
$strobe $strobe提供同步机制,可以确保所有在同一时钟沿赋值的其他语句在执行完毕之后才会显示数据。
- 时钟上升沿的值在语句a=b和c=d执行完之后才会显示。
随机数生成
- 系统任务:
$random - 用法:
$random;$random(<seed>);<seed>是可选的,用于确保在每次运行测试时生成同样的随机数序列,其值可以是reg,integer或者time变量。
- 任务
$random返回一个32位整数。
- 产生带符号整数

初始化存储器
- 根据数据文件对存储器进行初始化。
- 系统任务:
$readmemb(二进制数)、$readmemh(十六进制数) - 用法:
$readmemb("<file_name>", <memory_name>);$readmemb("<file_name>", <memory_name>, <start_addr>);$readmemb("<file_name>", <memory_name>, <start_addr>, <finish_addr>);$readmemh与之相同。- 文件名和存储器名是必须的,
<start_addr>和<finish_addr>是可选的。
- 如下例

- 文件init.dat包含初始化数据。 地址以十六进制数说明,数据用空格符分隔,数据可以包含x或z。

- 仿真测试结果

值变转储文件
- 值变转储文件(VCD)是什么?
- 一个ASCⅡ文件,包含仿真时间、范围与信号的定义以及仿真运行过程中信号值的变化等信息。
- 如何使用呢?
- 设计中的所有信号或选定的信号集合在仿真过程中都可以被写入VCD文件,后处理工具可以将VCD文件作为输入并把层次信息、信号值和信号波形显示出来。

- 系统任务有:
$dumpvars:选择要转储的模块实例或模块实例信号;$dumpfile:选择VCD文件的名称;$dumpon:选择转储的起点;$dumpoff:选择转储的终点;$dumpall:选择生成测试点;
- 如下例所示

边栏推荐
- MySQL - function and constraint commands
- 2022g1 industrial boiler stoker certificate question bank and simulation examination
- 自动化测试的使用场景
- PMP每日一练 | 考试不迷路-7.26(包含敏捷+多选)
- 一文详解MES系统给企业带来的5大好处,附应用场景
- How to become an excellent test / development programmer? Focus on planning and then move
- 图解用户登录验证流程,写得太好了!
- Unity farm 2 - planting system
- Gongfu developer community is settled! On July 30!
- (ICLR-2022)TADA!用于视频理解的时间自适应卷积
猜你喜欢

How far can Volvo, which has lost its "safety brand" due to declining sales and marginalization of its brand?

SSM integration - functional module and interface testing

Unity 农场 2 —— 种植系统

SSM integration - exception handler and project exception handling scheme

LeetCode简单题之数组能形成多少数对

Advanced template (runner's notes)

JS question brushing plan - array

支持代理直连Oracle数据库,JumpServer堡垒机v2.24.0发布

The first letter of leetcode simple question appears twice

基础模块及算例#pytorch学习
随机推荐
SSM integration - functional module and interface testing
SMMU carding
网络协议:TCP/IP协议
CoVOS:无需解码!利用压缩视频比特流的运动矢量和残差进行半监督的VOS加速(CVPR 2022)...
Tensor Rt的int8量化原理
立创EDA使用笔记
2022年流动式起重机司机考试试题模拟考试平台操作
SSM整合-功能模块和接口测试
Briefly describe the 11 core functional modules of MES system
Write a thesis and read this one
LeetCode简单题之第一个出现两次的字母
How to become an excellent test / development programmer? Focus on planning and then move
一文详解MES系统给企业带来的5大好处,附应用场景
从6月25日考试之后,看新考纲如何复习PMP
MES系统的选择需重点考虑哪些方面?
Unity farm 2 - planting system
Sentinel 隔离与降级
Excellent JSON processing tool
Kubectl common commands and simple explanations
Flex layout