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.hqwc.cn/news/334577.html

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

相关文章

企业级快速开发平台可以用在什么行业?优点多吗?

应用专业的企业级快速开发平台可以带来什么效果&#xff1f;目前&#xff0c;低代码技术平台在很多领域都获得了广泛应用和推广&#xff0c;在实现高效率办公、流程化办公和数字化发展中扮演了非常重要的角色&#xff0c;具有举足轻重的作用。针对这个话题&#xff0c;现在将给…

react输入框检索树形(tree)结构

input搜索框搜索树形子级内容1. input框输入搜索内容2. 获取tree结构数据3. 与tree匹配输入的内容&#xff0c;tree是多维数组&#xff0c;一级一级的对比输入的内容是否匹配&#xff0c;用forEach循环遍历数据&#xff0c;匹配不到在往下找&#xff0c;直到找到为null &#x…

Golang中for和for range语句的使用技巧、对比及常见的避坑

前言 基础语法不再赘述&#xff0c;写这个原因是之前的某次面试被问道了&#xff0c;我知道会导致问题但具体答下来不是很通顺。再回想自己开发过程中&#xff0c;很多地方都是使用到了for/for range&#xff0c;但是却从没注意过一些细节&#xff0c;因此专门学习一下进行记录…

解决MySQL8.0本地服务器连接不上的问题

MySQL在同一个内网内&#xff0c;但是他人链接你的MySQL时候提示&#xff1a; Host xxx is not allowed to connect to this MySQL server 这通常是MySQL限制了用户允许访问的IP导致的&#xff0c;我们可以按照下面的步骤来接触这个限制。 办法一 进入mysql的bin目录&#xff…

Linux的网络设置

一.查看网络配置 1.查看网络接口信息 - ifconfig ① 直接使用 ifconfig 命令 默认显示活动的网卡 解析&#xff1a; ② ifconfig 具体网卡名称 只显示具体的网卡的信息 ③ ifconfig -a 显示所有的网卡 ④ ifconfig 网卡名称 down 关闭网卡 ifdown 关闭网卡 …

在黑马程序员大学的2023年终总结

起笔 时间真快&#xff0c;转眼又是年末。是时候给2023做个年终总结了&#xff0c;为这一年的学习、生活以及成长画上一个圆满的句号。 这一年相比去年经历了很多事情&#xff0c;接下来我会一一说起 全文大概4000字&#xff0c;可能会占用你15分钟左右的时间 经历 先来给大…

前端nginx配置指南

前端项目发布后&#xff0c;有些接口需要在服务器配置反向代理&#xff0c;资源配置gzip压缩&#xff0c;配置跨域允许访问等 配置文件模块概览 配置示例 反向代理 反向代理是Nginx的核心功能之一&#xff0c;是指客户端发送请求到代理服务器&#xff0c;代理服务器再将请求…

Unity 踩坑记录 AnyState 切换动画执行两次

AnySate 切换动画 Can Transition To Self 将这个勾选去掉&#xff01;&#xff01;&#xff01;

C++ Primer 第五版 中文版 阅读笔记 + 个人思考

C Primer 第五版 中文版 阅读笔记 个人思考 第 10 章 泛型算法10.1 概述练习10.1练习10.2 第 10 章 泛型算法 泛型的体现&#xff1a;容器类型&#xff08;包括内置数组&#xff09;&#xff0c;元素类型&#xff0c;元素操作方法。 顺序容器定义的操作&#xff1a;insert&a…

Domain Adaptation 相关介绍

1. Transfer Learning Transfer learning 是机器学习的一个分支, 而 Domain adpatation 是 transfer learning 的一个分支. 在 transfer learning 中有两个概念: source domain (源域) 和 target domain (目标域). 源域中往往有丰富的信息, 比如有大量的数据点和其真实的标签;…

基于OpenCV的图像缩放

基础概念 缩放是将图像的尺寸变小或变大的过程&#xff0c;即减少或增加原图像数据的像素个数&#xff0c;或者说通过增加或删除像素点来改变图像的尺寸&#xff1b; 基本原理&#xff1a;将分辨率&#xff08;图片尺寸&#xff09;为(w,h)的图像&#xff0c;缩放后其图像分辨…