verilog $*命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog $*命令相关的知识,希望对你有一定的参考价值。
参考技术A注:如果没有在指定变量的显示格式,不会输出数值。如果没有指定变量显示的位置,变量值会在字符串部分之后直接显示出来,变量之间是没有间隔的,只是一次简单的显示。
$display与$write的区别是:$display会在每次显示信息后自动换行,$write不会换行。
$fopen, 有以下两种用法。
a. $fopen("<文件名>");
b. [文件句柄]=$fopen("<文件名>")
$fdisplay,将数据写入指定文件
$fclose,关闭文件
探测任务的语法和显示任务完全相同,也是把信息显示出来。也有$strobe,$strobeb,$strobeo,$strobeh四种。
两者的区别在于:$strobe命令会在当前时间部结束时完成;而$display是只要仿真器看到就会立即执行。
监测任务用于持续监测指定变量, 只要这些变量发生了变化 ,就会立即显示对应的输出语句。
同理,有$monitor,$monitorb$monitoro$monitorh。
可用$monitoroff,monitoeron关闭监事和打开监视。
区别:$stop暂停当前方针,$finish中值当前方针。
语法
$timeformat[( Units, Precision, Suffix, MinFieldWidth )];
规则
提示
用`timescale $timeformat 和$realtime (带%t)指定和显示仿真时间,用$display $monitor 或其他显示任务。
例如:
在Verilog HDL中有两类型的时间系统函数,$time和$realtime。用这两个系统用函数可以的大当前的仿真时间。
$time 可以返回一个64位的整数来表示当前仿真时刻值,该时刻是以模块的仿真时间尺度位基准的。
$realtime 返回的时间数字是一个实型数。该数也是以时间尺度为基准的。
verilog 条件编译命令`ifdef`else`endif 的应用
【摘自夏宇闻《verilog设计教程》】一般情况下,Verilog HDL源程序中所有的行都将参加编译。但是有时希望对其中的一部分内容只有在满足条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足条件时对一组语句进行编译,而当条件不满足是则编译另一部分。
条件编译命令有以下几种形式:
1) `ifdef 宏名 (标识符)
程序段1
`else
程序段2
`endif
它的作用是当宏名已经被定义过(用`define命令定义),则对程序段1进行编译,程序段2将被忽略;否则编译程序段2,程序段1被忽略。其中`else部分可以没有,即:
2) `ifdef 宏名 (标识符)
程序段1
`endif
这里的 “宏名” 是一个Verilog HDL的标识符,“程序段”可以是Verilog HDL语句组,也可以是命令行。这些命令可以出现在源程序的任何地方。注意:被忽略掉不进行编译的程序段部分也要符合Verilog HDL程序的语法规则。
通常在Verilog HDL程序中用到`ifdef、`else、`endif编译命令的情况有以下几种:
? 选择一个模块的不同代表部分。
? 选择不同的时序或结构信息。
? 对不同的EDA工具,选择不同的激励。
以下是实例:
运行结果为:
# wow is defined
# nest_one is defined
# nest_two is defined
以上是关于verilog $*命令的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Icarus Verilog 在 Verilog 中转换 VHDL 代码?
verilog 条件编译命令`ifdef`else`endif 的应用