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	begin
    num_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 begin
    d1 = 4; d2 = 5;
    
    #5 d1 = 2; d2 = 3;
  end
  
  initial 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jquery 合并table表格行或列

合并行 $("#tableId").find("tr").each(function(rowIndex) {var cells $(this).find("td");cells.each(function(cellIndex) {var cell $(this);var prevRowCell table.find("tr:eq(" (rowIndex - 1) ")").find(&quo…

有关“修改地址”的回复话术大全

类型一:不能改地址 1.亲非常抱歉 这边发货后客服就没法帮您操作修改地址了 2.非常遗憾&#xff0c;订单一旦下单完成 地址是无法进行修改的。如果您这边需要修改地址的话也是可以尝试去和这个物流方进行协商的哦&#xff0c;这边没有修改的按钮没法操作的 3.抱歉呢亲亲。修改…

【C语言题解】 | 101. 对称二叉树

101. 对称二叉树 101. 对称二叉树代码 101. 对称二叉树 这个题目要求判断该二叉树是否为对称二叉树&#xff0c;此题与上一题&#xff0c;即 100. 相同的树 这个题有异曲同工之妙&#xff0c;故此题可借鉴上题。 我们先传入需要判断二叉树的根节点&#xff0c;通过isSameTree()…

Java设计模式-访问者模式

访问者模式 一、概述二、结构三、案例实现四、优缺点五、使用场景六、扩展 一、概述 定义&#xff1a; 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 二、结构 访问者模式包含以下主要角色: …

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 分段锁的好处&#xff1a; 结语 我的其他博客 前言 在Java 8中&#xff0c;ConcurrentHashMap的实现经历了重大的改进&am…

Visual Studio 2017 + opencv4.6 + contribute + Cmake(Aruco配置版本)指南

之前配置过一次这个&#xff0c;想起这玩意就难受&#xff0c;贼难配置。由于要用到里面的一个库&#xff0c;不得已再进行配置。看网上的博客是真的难受&#xff0c;这写一块&#xff0c;那里写一块&#xff0c;乱七八糟&#xff0c;配置一顿发现写的都是错的&#xff0c;还得…

【Python学习】Python学习10-列表

目录 【Python学习】Python学习10-列表 前言创建语法访问列表中的值更新和删除列表元素操作列表列表截取Python列表函数&方法参考 文章所属专区 Python学习 前言 本章节主要说明Python的列表List。 创建语法 创建一个列表 通过方括号和逗号分割创建&#xff0c;列表数据…

一个大场景下无线通信仿真架构思路(对比omnet与训练靶场)

2020年分析过omnet的源码&#xff0c;读了整整一年&#xff0c;读完之后收获不小&#xff0c;但是也遗憾的发现这个东西只适合实验室做研究的人用于协议的研发与测试&#xff0c;并不适合大场景&#xff08;军事游戏等&#xff09;的应用&#xff0c;因为其固有架构更侧重于每个…

视频号小店和抖音小店相比,新手做哪个比较好?

我是电商珠珠 抖音小店在19年被抖音所发展&#xff0c;在这过程中&#xff0c;抖音小店通过自身的不断完善&#xff0c;从兴趣电商到全域兴趣电商模式&#xff0c;从直播电商到商城的出现&#xff0c;凭借着门槛低流量高的优势&#xff0c;让很多商家尝到了红利。 尤其是在20…

1042: 数列求和3 和 1057: 素数判定 和 1063: 最大公约与最小公倍

1042: 数列求和3 题目描述 求1-2/33/5-4/75/9-6/11...的前n项和&#xff0c;结果保留3位小数。 输入 输入正整数n(n>0)。 输出 输出一个实数&#xff0c;保留3位小数&#xff0c;单独占一行。 样例输入 5 样例输出 0.917 #include<stdio.h> int main(){in…

归并排序-排序算法

前言 如果一个数组的左右区间都有序&#xff0c;我们可以使用一种方法&#xff08;归并&#xff09;&#xff0c;使这个数组变得有序。 如下图&#xff1a; 过程也很简单&#xff0c;分别取左右区间中的最小元素&#xff0c;再把其中较小的元素放到临时数组中&#xff0c;例如…

JavaSE学习笔记 2023-12-28 --MySQL

MySQL 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 文章目录 MySQL1.数据库介绍2.数据库的分类3.数据库中的常用术语4.数据库安装和配置5.MySQL的逻辑结构6.SQL语句7.DML7.1DQL7.1.1基本查询7.1.2过滤查询7.1.2.1条件运算符7.1.2.2逻辑运算符7.1.2.…

Spring 基于注解的AOP见解4

5.基于注解的AOP配置 5.1创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

【AI视野·今日NLP 自然语言处理论文速览 第六十七期】Mon, 1 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 1 Jan 2024 Totally 42 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Principled Gradient-based Markov Chain Monte Carlo for Text Generation Authors Li Du, Afra Amini, Lucas…

基于Springboot的计算机学院校友网(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的计算机学院校友网(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

红队打靶练习:RICKDICULOUSLYEASY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 gobuster dirsearch WEB get flag1 /robots.txt FTP get flag2 telenet登录 get flag3 get flag4 9090端口 get flag5 dirsearch ssh登录 Summer用户 get flag6 信息收集 get flag7 get fl…

目标检测数据集大全「包含VOC+COCO+YOLO三种格式+划分脚本+训练脚本」(持续原地更新)

一、作者介绍&#xff1a;五年算法开发经验、AI 算法经理、阿里云开发社区专家博主、稀土掘金人工智能内容评审委员会成员。擅长&#xff1a;检测、分割、理解、AIGC 等算法训练与部署。 二、数据集介绍&#xff1a; 质量高&#xff1a;高质量图片、高质量标注数据&#xff0c;…

Java中什么序列化?

在Java中&#xff0c;序列化是一种将对象转换为字节序列的机制&#xff0c;使得对象可以在网络上传输或存储到文件中&#xff0c;而后可以通过反序列化还原为对象。Java提供了java.io.Serializable接口&#xff0c;通过实现这个接口的类可以实现对象的序列化和反序列化。 序列…

众和策略:沪指跌0.91%险守2900点,半导体、金融等板块走低

8日早盘&#xff0c;两市股指低开低走&#xff0c;沪指一度失守2900点&#xff0c;深成指、创业板指跌约1%&#xff0c;科创50指数创前史新低。 到午间收盘&#xff0c;沪指跌0.91%报2902.4点&#xff0c;深成指跌1.17%&#xff0c;创业板指跌0.99%&#xff0c;科创50指数跌超…

唠一唠Java线程池

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Java线程池&#xff0c;如果没有线程池&#xff0c;每个线程都需要手动创建和销毁线程&#xff0c;那将是多么低效和耗资源啊&#xff01; 线程池的核心作用就是复用已创建的线程&#xff0c;减少…