Verilog 高级教程笔记——持续更新中

Verilog advanced tutorial

转换函数
调用系统任务任务描述
int_val = $rtoi( real_val ) ;实数 real_val 转换为整数 int_val 例如 3.14 -> 3
real_val = $itor( int_val ) ;整数 int_vla 转换为实数 real_val 例如 3 -> 3.0
vec_val = $realtobits( real_val ) ;实数转换为多位宽的寄存器向量 寄存器内按照 IEEE-754 标准存储双精度浮点型数据
real_val = $bitstoreal( vec_val ) ;多位宽的寄存器向量转换为实数

real 型变量的产生或转换过程,都应该遵循 IEEE Std 754-1985 [B1] 标准。

利用 $realtobits 与 $bitstoreal 对数据进行转换:

  • 实例
  //real, bits*
reg [63:0]  num_bits ;
initial	beginnum_bits  = 64'h4002_8000_0000_0000 ;$display("-14.13 -> hex: %h", $realtobits(-13.14));$display("64'h4002_8000_0000_0000 -> real: %f", $bitstoreal(num_bits));
end

img

利用 $itor 与 $rtoi 对数据进行格式转换:

image-20240109153142837

由以下仿真 log 可知,$rtoi 做实数(13.14)向整数(4’hd)的转换时,只截了取整数部分。$itor 做整数 (1001) 向实数(1001.000000)的转换时,似乎没有什么变化。

img

其实,$rtoi 与 $itor 的功能是改变变量的存储方式。

例如 14 以整数型变量储存时,表示方法为 32’h1110,而如果以实数型变量存储,则表示方法为 64h402c_0000_0000_0000。

Display system tasks
System tasksDescription
$displayTo display strings, variables, and expressions immediately in the active region.立即在活动区域中显示字符串、变量和表达式。
$monitorTo monitor signal values upon its changes and executes in the postpone region.监视信号值的变化并在延迟区域执行。
$writeTo display strings, variables, and expressions without appending the newline at the end of the message and executing in the active region.显示字符串、变量和表达式,而不在消息末尾附加换行符并在活动区域中执行。
$strobeTo display strings, variables, and expressions at the end of the current time slot i.e. in the postpone region.在当前时间段的末尾(即推迟区域)显示字符串、变量和表达式。

显示系统任务使用各种格式说明符来打印值

Format specifiersDescription
%d or %DTo display variables in decimal
%b or %BTo display variables in binary
%h or %HTo display variables in hexadecimal
%o or %OTo display variables in octal
%c or %CTo display ASCII character
%s or %STo display string
%t or %TTo display the current time
%f or %FTo display real numbers in decimal format. (Ex. 3.14)
%e or %ETo display real numbers in scientific format. (Ex. 2e20)
Difference between $display and $monitor
  1. $monitor 可以连续监视提到的变量或信号值的变化,而 $display 在调用时打印提到的变量或信号值。
  2. $monitor 只能调用一次,而 $display 可以调用多次。
  3. 如果多个 $monitor 任务调用了,则仅最后一个 $monitor 语句将处于活动状态,并且先前的语句将被覆盖。
module display_tb;reg [3:0] d1, d2;initial begind1 = 4; d2 = 5;#5 d1 = 2; d2 = 3;endinitial begin$display("At time %0t: {$display A} -> d1 = %0d, d2 = %0d", $time, d1, d2);$monitor("At time %0t: {$monitor A} -> d1 = %0d, d2 = %0d", $time, d1, d2);$write("At time %0t: {$write A} -> d1 = %0d, d2 = %0d", $time, d1, d2);$strobe("At time %0t: {$strobe A} -> d1 = %0d, d2 = %0d", $time, d1, d2);#5;$display("At time %0t: {$display B} -> d1 = %0d, d2 = %0d", $time, d1, d2);// $monitor is missing -> Observe print for $monitor A$write("At time %0t: {$write B} -> d1 = %0d, d2 = %0d", $time, d1, d2);$strobe("At time %0t: {$strobe B} -> d1 = %0d, d2 = %0d", $time, d1, d2);end
endmodule

Output:

image-20240109154531043

Simulation controlling system tasks
$resetresets the simulation back to time 0;
$stopIt is used to stop or suspend the running simulation. It is generally used for debugging purposes and puts the simulation mode in interactive mode so that designers can examine signal values.
$finishIt is used to terminate the simulation.
Random number generator system task

$random – It returns a 32-bit signed integer i.e. it can be positive or negative integer.

image-20240109154627727

$time, $stime, $realtime

它们分别以 64 位整数、32 位整数和实数形式返回当前模拟时间。

$scope, $showscope

$scope(hierarchy_name) 将当前分层范围设置为hierarchy_name。 $showscopes(n) 列出当前范围内(及以下,如果 n 设置为 1)的所有模块、任务和块名称。

$dumpfile, $dumpvar, $dumpon, $dumpoff, $dumpall

这些可以将变量变化转储到像德彪西这样的模拟查看器。转储文件能够转储模拟中的所有变量。这对于调试来说很方便,但可能会很慢。

image-20240109155036479

$fopen, $fdisplay, $fstrobe $fmonitor and $fwrite

这些命令更有选择性地写入文件。

  • $fopen 打开一个输出文件并为打开的文件提供一个句柄以供其他命令使用。
  • $fclose 关闭文件并允许其他程序访问它。
  • $fdisplay 和 $fwrite 每当执行时都会将格式化数据写入文件。它们是相同的,只是 $fdisplay 在每次执行后插入一个新行,而 $write 则不然。
  • $strobe 在执行时也会写入文件,但它会等到时间步中的所有其他操作完成后才写入。因此初始#1 a=1; b = 0;
  • $fstrobe(hand1, a,b); b=1;将为a和b写1 1。
  • 只要 $monitor 的任何参数发生更改,就会写入文件。

image-20240109155235368

$signed(expr) or $unsigned(expr)
  • 这些调用的返回值与输入值的大小相同。
  • 无论之前的符号如何,返回值的符号都是强制的。
$readmemb and $readmemh
  • 使用 $readmemb 进行二进制表示。
  • 使用 $readmemh 进行十六进制表示。
  • 使用索引参数来避免 Vivado 综合和模拟器之间的行为冲突。
$readmemb("rams_20c.data",ram, 0, 7);
Real Math functions

image-20240109210243091

Synthesizable and Non-Synthesizable Verilog constructs
SynthesizableNon-Synthesizable
BasicIdentifiers, escaped identifiers, Sized constants (b, o, d, h), Unsized constants (2’b11, 3’07, 32’d123, 8’hff), Signed constants (s) 3’bs101, module, endmodule, macromodule, ANSI-style module, task, and function port lists —— 标识符、转义标识符、大小常量 (b、o、d、h)、未大小常量 (2’b11、3’07、32’d123、8’hff)、有符号常量 (s) 3’bs101、module、endmodule、宏模块、ANSI 样式模块、任务和函数端口列表system tasks, real constants
Data typeswire, wand, wor, tri, triand, trior, supply0, supply1, trireg (treated as wire), reg, integer, parameter, input, output, inout, memory(reg [7:0] x [3:0] `;), N-dimensional arrays,real, time, event, tri0, tri1
Module instancesConnect port by name, order, Override parameter by order, Override parameter by name, Constants connected to ports, Unconnected ports, Expressions connected to ports, ——按名称、顺序连接端口、按顺序覆盖参数、按名称覆盖参数、连接到端口的常量、未连接的端口、连接到端口的表达式、Delay on built-in gates 内置门延迟
Generate statementsif,case,for generate, concurrent begin end blocks, genvar,
Primitivesand, or, nand, nor, xor, xnor,not, notif0, notif1, buf, bufif0, bufif1, tran,User defined primitives 用户定义的原语 (UDPs), table, pullup, pulldown, pmos, nmos, cmos, rpmos, rnmos, rcmos, tranif0, tranif1, rtran, rtranif0, rtranif1,
Operators and expressions+, - (binary and unary)
Bitwise operations&, |, ^, ~^, ^~
Reduction operations&, |, ^, ~&, ~|, ~^, ^~, !, &&, || , ==, !=, <, <=, >, >=, <<, >>, <<< >>>, {}, {n{}}, ?:, function call=== , ! ==
Event controlevent or, @ (partial), event or using comma syntax, posedge, negedge (partial),Event trigger (->), delay and wait (#)
Bit and part selectsBit select, Bit select of array element, Constant part select, Variable part select ( +:, -`:), Variable bit-select on left side of an assignment ——位选择、数组元素的位选择、常量部分选择、变量部分选择(+:、-:)、赋值左侧的变量位选择
Continuous assignmentsnet and wire declaration, assignUsing delay
Procedural blocksalways (exactly one @ required),initial
Procedural statements;, begin-end, if-else, repeat, case, casex, casez, default, for-while-forever-disable(partial),fork, join
Procedural assignmentsblocking (=), non-blocking (<=)force, release
Functions and tasksFunctions, tasks
Compiler directives`define, `undef,`resetall, `ifndef, `elsif, `line, `ifdef, `else, `endif, `include

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yolov5水果分类识别+pyqt交互式界面(附代码)

本文介绍了基于Yolov5模型的水果分类识别系统以及使用PyQt库构建的交互式界面。 首先&#xff0c;Yolov5是一种目标检测算法&#xff0c;它可以通过输入图片&#xff0c;自动识别出其中包含的不同目标&#xff0c;并标注出它们的位置和类别。我们利用Yolov5模型对水果图片进行…

【算法Hot100系列】有效的数独

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本&#xff0c;提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

01-连接池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库&#xff0c;里面预先创建了一个database名叫chat&#xff0c;用户名root&#xff0c;密码password。 1.2 Visual Studio预操作 在Windows上使用…

openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存

文章目录 openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存189.1 TPCC运行时&#xff0c;注入磁盘满故障&#xff0c;TPCC卡住的问题189.1.1 问题现象189.1.2 原因分析189.1.3 处理分析 189.2 备机处于need repair(WAL)状态问题189.2.1问题现象189.…

1876_电感的特性小结

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1876_电感的特性小结 主要是…

何小鹏的「超级爆品」X9诞生背后

作者 |张祥威 编辑 |德新 小鹏汽车将X9的上市日期定在了2024年的第一天&#xff0c;也是元旦假期的最后一天。 内部选择这天上市发布&#xff0c;据HiEV了解&#xff0c;这既包含了X9要争夺纯电MPV品类销冠的寓意&#xff08;No.1&#xff09;&#xff0c;也是告诉内外部&…

加密钱包监控:守护企业资产与信誉的利器

作者&#xff1a;stellafootprint.network 随着加密资产的崛起&#xff0c;企业正在面临前所未有的监管和信誉风险。那么&#xff0c;如何才能有效掌握加密钱包的交互情况&#xff0c;以维护企业与监管机构的和谐关系呢&#xff1f; 借助强大的钱包画像分析工具&#xff0c;合…

软件测试|MySQL算术运算符使用详解

简介 MySQL是一种流行的开源关系型数据库管理系统&#xff0c;广泛用于各种应用程序和网站的数据存储和管理。在MySQL中&#xff0c;算术运算符是执行数学计算的特殊符号&#xff0c;用于处理数字类型的数据。本文将详细介绍MySQL中常用的算术运算符及其使用方法。 常用算术运…

qt初入门2:qt选择一个文件或者目录,获取当前目录,操作文件目录等整理

最近用qt操作文件或者目录的动作比较多&#xff0c;简单整理一下常用的接口&#xff0c;方便回顾。 总的来说&#xff0c;其实就是用文件选择对话框QFileDialog类&#xff0c;以及操作文件信息的QFileInfo类&#xff0c;以及相关QCoreApplication中静态成员函数获取一些信息&a…

docker部署kibana

1&#xff0c;简介 官网 kibana 2&#xff0c;安装docker 参考 linux安装docker 3&#xff0c;准备 Kibana 配置文件 # 进入主节点配置文件目录 cd /export/server/docker/kibana/config # 编辑单机版配置文件 vi kibana.ymlkibana.yml内容 # 主机地址&#xff0c;可以是…

Java后端返回的MySQL日期数据在前端格式错误的解决方法,区分jackson和fastjson

写在前面 在写web项目的时候经常会遇到后端返回的MySQL日期数据(date)类型在前端显示不正确的情况&#xff0c;有的时候会出现一串数字的时间戳&#xff0c;有的时候显示为日期晚了一天。 这是因Json给前端返回数据的时候格式问题造成的 解决方法 其实总结起来就是一句话在…

大模型笔记【2】 LLM in Flash

Apple最近发表了一篇文章&#xff0c;可以在iphone, MAC 上运行大模型&#xff1a;【LLM in a flash: Efficient Large Language Model Inference with Limited Memory】。 主要解决的问题是在DRAM中无法存放完整的模型和计算&#xff0c;但是Flash Memory可以存放完整的模型。…

代码训练营Day.28 | 93. 复原IP地址、78. 子集、90. 子集II

93. 复原IP地址 1. LeetCode链接 . - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 3. 解法 字符串切四刀&#xff0c;最后一刀必须是在末位。 麻烦的地方在于文本的各种限制条件、剪枝等等。 class Solution { public:vector<string> results;string result…

最优化理论复习--最优性条件(二)

文章目录 上一篇约束极值问题的最优性条件基本概念一般情况的约束类型最优化条件 上一篇 最优化理论分析复习–最优性条件&#xff08;一&#xff09; 约束极值问题的最优性条件 基本概念 凸规划 m i n f ( x ) min f(x) minf(x) s . t . { g i ( x ) ≥ 0 &#xff0c; …

Android Matrix (二)具体图形变换参数的获取

Android Matrix &#xff08;二&#xff09;具体图形变换参数的获取 Matrix 类在 Android 中用于表示 3x3 的变换矩阵。这个矩阵可以应用于画布&#xff08;Canvas&#xff09;&#xff0c;视图&#xff08;View&#xff09;或者位图&#xff08;Bitmap&#xff09;&#xff0…

服务器日常维护要素,应该如何做好维护

维护服务器的目的是为了让服务器的性能保持最佳状态&#xff0c;发现问题及时解决&#xff0c;没有问题也可以对相关的应用和配置进行调优。但也有很多用户疑问&#xff0c;服务器具体会有哪些方面需要维护的&#xff0c;今天就一起来看看吧。 服务器日常维护&#xff0c;主要包…

Python基础入门第九课笔记(文件和文件夹)

1&#xff0c;新建文本并且写内容 a open(1.text,w) a.write("""aaa bbb ccc""") a.close() 2,seek( )移动文件指针 文件对象.seek(偏移量&#xff0c;起始位置) # 起始位置&#xff1a;0开头&#xff0c;1当前位置&#xff0c;2文件结尾…

7+坏死性凋亡+分型+预后模型+实验,筛坏死性凋亡相关基因并建模

今天给同学们分享一篇生信文章“MLKL and other necroptosis-related genes promote the tumor immune cell infiltration, guiding for the administration of immunotherapy in bladder urothelial carcinoma”&#xff0c;这篇文章发表在Apoptosis期刊上&#xff0c;影响因子…

【新华三】IPsec VPN 实验配置(地址固定)

【新华三】IPsec VPN 实验配置&#xff08;地址固定&#xff09; 注意实验需求配置思路配置命令拓扑R1基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA ISP_R2基础配置 R3基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA PCPC1PC2 检查建立成功查看命令清除IKE / IPsec S…