FPGA第 11 篇,Verilog 系统函数( Verilog 中的系统函数)

前言

Verilog 作为一种强大的硬件描述语言,不仅提供了用于设计和仿真数字电路的基础语法,还包含了丰富的系统函数,帮助我们高效地完成复杂的硬件操作。系统函数是 Verilog 语言中预定义的特殊函数,通常以 $ 开头,它们涵盖了多种用途,如仿真控制、数据转换、数学运算、时间获取和显示信息等。

系统函数在硬件设计和验证过程中发挥了不可或缺的作用。例如,我们可以通过系统函数方便地输出仿真信息、执行复杂的数学运算或获取仿真时间。常见的 Verilog 系统函数包括 $display 用于信息输出,$monitor 用于实时监控信号变化,$time 获取仿真时间,以及 $random 生成随机数。

通过灵活应用这些系统函数,我们能够简化代码,增强可读性,并提高调试效率。在硬件开发和验证过程中,充分利用 Verilog 提供的系统函数将大大提升设计的效率和可靠性。掌握这些开发技巧,我们可以高效地设计和验证 FPGA 电路,从而实现所需的数字系统功能。之前介绍了 Verilog 中的运算符和分支语句,请看,

Verilog 中的运算符和分支语句icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_65793170/article/details/141829820?spm=1001.2014.3001.5502

这里我们来分享一下 Verilog 中的系统函数,记录一下


一. 分类介绍

1. Verilog 系统函数分类

        Verilog 系统函数(System Functions)通常以 $ 开头,并用于执行各种标准操作,例如格式化输出、仿真控制、时间管理等。Verilog-2001 标准定义了几十个系统函数,这些函数大致可分为以下几类:

  1. 显示相关函数
  2. 仿真时间相关函数
  3. 文件输入输出相关函数
  4. 数学函数
  5. 随机函数
  6. 仿真控制函数


二. 分类详细

1. 显示(Display)相关函数

(1)函数介绍

这些函数用于在仿真过程中输出信息,类似于 C 语言中的 printf

函数名功能用法
$display输出一行文字并自动换行$display(格式字符串, 参数1, 参数2, ...)
$write输出一行文字但不换行$write(格式字符串, 参数1, 参数2, ...)
$strobe输出信号值,在当前时间步之后再显示$strobe(格式字符串, 参数1, 参数2, ...)
$monitor监控变量值的变化并输出$monitor(格式字符串, 参数1, 参数2, ...)
$stop停止仿真$stop
$finish结束仿真$finish

(2)代码示例

module display_example;reg [7:0] a = 8'd15;reg [7:0] b = 8'd25;initial begin// 输出一行文字并自动换行$display("a=%0d, b=%0d", a, b);  // 输出: a=15, b=25// 输出一行文字但不换行$write("a=%0d", a);  // 输出: a=15$write(", b=%0d", b);  // 输出: , b=25// 输出信号值,在当前时间步之后再显示$strobe("a=%0d, b=%0d", a, b);  // 输出: a=15, b=25 (在当前时间步之后)// 监控变量值的变化并输出$monitor("a=%0d, b=%0d", a, b);  // 每次 a 或 b 变化时都会输出end
endmodule

2. 仿真时间相关函数

(1)函数介绍

这些函数用于获取仿真时间和延迟操作。

函数名功能用法
$time返回当前仿真时间,单位为 timescale 设定$time
$stime返回当前仿真时间(32位整型)$stime
$realtime返回当前仿真时间,精度为实数$realtime
$realtobits实数转换为位模式$realtobits(实数)
$bitstoreal位模式转换为实数$bitstoreal(位模式)

(2)代码示例

module time_example;reg [7:0] a = 8'd15;initial begin#10;  // 延迟 10 时间单位// 输出当前仿真时间$display("Current simulation time: %0t", $time);  
// 输出: Current simulation time: 10// 输出当前仿真时间(32位整型)$display("Current simulation time (32-bit): %0d", $stime);  
// 输出: Current simulation time (32-bit): 10// 输出当前仿真时间,精度为实数$display("Current simulation time (real): %0f", $realtime);  
// 输出: Current simulation time (real): 10.000000// 实数转换为位模式real real_val = 3.14;reg [31:0] bits;bits = $realtobits(real_val);$display("Bits representation of real value: %h", bits);  
// 输出: Bits representation of real value: 4048f5c3// 位模式转换为实数real new_val;new_val = $bitstoreal(bits);$display("Real value from bits: %0f", new_val);  
// 输出: Real value from bits: 3.140000end
endmodule

3. 文件输入输出相关函数

(1)函数介绍

用于从文件中读取或向文件中写入数据。

函数名功能用法
$fopen打开文件,返回文件句柄integer file = $fopen("filename", "mode");
$fclose关闭文件$fclose(文件句柄);
$fdisplay向文件写入数据并换行$fdisplay(文件句柄, 格式字符串, 参数1, 参数2)
$fwrite向文件写入数据不换行$fwrite(文件句柄, 格式字符串, 参数1, 参数2)
$fscanf从文件中读取格式化数据$fscanf(文件句柄, 格式字符串, 参数1, 参数2)

(2)代码示例

module file_io_example;reg [7:0] a = 8'd15;integer file;initial begin// 打开文件以写入模式file = $fopen("output.txt", "w");// 向文件写入数据并换行$fdisplay(file, "a=%0d", a);  
// 将 "a=15" 写入 "output.txt"// 向文件写入数据不换行$fwrite(file, "Value of a is %0d", a);  
// 将 "Value of a is 15" 写入 "output.txt"// 关闭文件$fclose(file);end
endmodule

4. 数学函数

(1)函数介绍

用于执行一些常见的数学运算。

函数名功能用法
$clog2返回大于等于输入值的最小对数2值$clog2(值)
$ln自然对数$ln(值)
$log1010为底的对数$log10(值)
$exp指数函数,返回 e 的 x 次幂$exp(值)
$sqrt返回平方根$sqrt(值)
$pow幂运算,返回 x 的 y 次幂$pow(基数, 指数)

(2)代码示例

module math_functions_example;real num = 4.0;real result;initial begin// 计算对数2$display("clog2 of 16: %0d", $clog2(16));  
// 输出: clog2 of 16: 4// 计算自然对数$display("Natural log of 2.718: %0f", $ln(2.718));  
// 输出: Natural log of 2.718: 0.999// 计算10为底的对数$display("Log base 10 of 1000: %0f", $log10(1000));  
// 输出: Log base 10 of 1000: 3.000// 计算指数$display("Exp of 1: %0f", $exp(1));  
// 输出: Exp of 1: 2.718// 计算平方根$display("Square root of 16: %0f", $sqrt(16));  
// 输出: Square root of 16: 4.000// 计算幂运算result = $pow(2, 3);$display("2^3: %0f", result);  // 输出: 2^3: 8.000end
endmodule

5. 随机函数

(1)函数介绍

用于生成随机数,常用于测试仿真。

函数名功能用法
$random返回一个随机数integer r = $random;
$urandom返回一个无符号随机数integer ur = $urandom;
$urandom_range返回一个在指定范围内的无符号随机数integer ur = $urandom_range(下限, 上限);

(2)代码示例

module random_functions_example;integer r;integer ur;integer ur_range;initial begin// 生成一个随机数r = $random;$display("Random number: %0d", r);  
// 输出: Random number: <随机值>// 生成一个无符号随机数ur = $urandom;$display("Unsigned random number: %0d", ur);  
// 输出: Unsigned random number: <随机值>// 生成一个在指定范围内的无符号随机数ur_range = $urandom_range(1, 10);$display("Random number between 1 and 10: %0d", ur_range);  
// 输出: Random number between 1 and 10: <随机值>end
endmodule

6. 仿真控制函数

(1)函数介绍

用于控制仿真的执行。

函数名功能用法
$stop暂停仿真,进入交互式调试模式$stop;
$finish结束仿真并关闭模拟器$finish;

(2)代码示例

module simulation_control_example;initial begin// 暂停仿真,进入交互式调试模式$stop;  // 仿真将暂停,用户可以检查当前状态// 结束仿真并关闭模拟器$finish;  // 仿真将结束end
endmodule

这些只是 Verilog 中的一些常见系统函数,还存在其它一些更高级的系统任务或函数。学习编程语言还得多写多练,下面持续分享记录。

创作不易,感觉有用,就一键三连,感谢(●'◡'●)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】环境部署kafka集群

目录 一、kafka简介 1. 主要特点 2.组件介绍 3.消息中间件的对比 二、环境准备 1.Java环境 2.Zookeeper环境 3.硬件环境集群 三、Zookeeper的集群部署 1.下载zookeeper 2.部署zookeeper集群 &#xff08;1&#xff09;node1节点服务器 &#xff08;2&#xff09;no…

助力电商升级,智象未来(HiDream.ai)开启未来商业新篇章

近日&#xff0c;智象未来&#xff08;HiDream.ai&#xff09;凭借其创新性的“秩象™大模型”&#xff0c;在业界掀起了一场跨行业的创意革命&#xff0c;对视觉设计、运营商服务、品牌营销以及文旅传媒等领域的创新发展产生了深远影响。致力于全球领先的多模态生成式人工智能…

springCloud(一)注册中心

1.Eureka 要是user-service服务有多个&#xff0c;order-service该怎么调用&#xff1f; 这就需要用到 注册中心 了 。 1.1 搭建Eureka服务 1. pom引入依赖 <dependencies><!--eureka服务端--><dependency><groupId>org.springframework.cloud</gr…

VulnHub-Bilu_b0x靶机笔记

Bilu_b0x 靶机 概述 Vulnhub 的一个靶机&#xff0c;包含了 sql 注入&#xff0c;文件包含&#xff0c;代码审计&#xff0c;内核提权。整体也是比较简单的内容&#xff0c;和大家一起学习 Billu_b0x.zip 靶机地址&#xff1a; https://pan.baidu.com/s/1VWazR7tpm2xJZIGUS…

操作系统之磁盘

目录 一. 磁盘的结构二. 磁盘调度算法&#xff08;重点&#xff09;三. 减少磁盘延迟时间的方法四. 磁盘的管理五. 固态硬盘&#xff08;SSD&#xff09; \quad 一. 磁盘的结构 \quad 最内侧磁道上的扇区面积最小&#xff0c;因此数据密度最大 \quad 二. 磁盘调度算法&…

论文阅读与分析:Few-Shot Graph Learning for Molecular Property Prediction

论文阅读与分析&#xff1a;Few-Shot Graph Learning for Molecular Property Prediction 论文地址和代码地址1 摘要2 主要贡献3 基础知识Meta Learning1 介绍2 学习算法Step 1: What is learnable in a learning algorithm?Step 2&#xff1a;Define loss function for learn…

论文阅读-《Attention is All You Need》

注意力就是一切 【要点】&#xff1a;论文提出了一种全新的网络架构——Transformer&#xff0c;完全基于注意力机制&#xff0c;无需使用循环和卷积&#xff0c;实现了在机器翻译任务上的性能提升和训练效率的显著提高。 【方法】&#xff1a;通过构建一个仅使用注意力机制的…

内存管理(C++版)

C/C内存分布 程序经过编译生成可执行的二进制程序&#xff0c;我们可以把虚拟进程地址分为以下四个空间&#xff1a;栈&#xff0c;堆&#xff0c;常量区&#xff0c;静态区。这四个区里面存贮的也是不一样的内容。 各个区域所存储内容的说明 栈/堆栈&#xff1a;用于建立函…

项目实现:云备份服务端①(文件操作、Json等工具类实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话&#xff0c;可以先移步这篇文章内容&#xff1a; 云备份项目的介绍 其中介绍了云备份项…

代码管理-使用TortoiseGit同步项目到Github/Gitee

1 什么是TortoiseGit TortoiseGit下载地址 TortoiseGit是Git的Windows桌面可视化工具&#xff0c;通过软件的操作来实现Git命令的效果&#xff0c;使所有的操作都能用图形化实现。TortoiseGit安装很简单&#xff0c;这里不对安装流程进行讲解。下载之后即可按照普通软件的方式…

[vue2+axios]下载文件+文件下载为乱码

export function downloadKnowledage(parameter) {return axios({url: /knowledage/download,method: GET,params: parameter,responseType: blob}) }添加 responseType: blob’解决以下乱码现象 使用触发a标签下载文件 downloadKnowledage(data).then((res) > {let link …

Linux配置静态IP详细步骤及联网问题,以及更改主机名问题

一&#xff0c;Linux配置静态IP详细步骤及联网问题 我的Linux操作系统版本是是CentOS7/CentOS8 1.网络适配器&#xff1a;NAT模式点击设置-网络适配器-网络连接 &#xff08;选择NAT模式&#xff09;-点击确定 2.查看网关相关配置点击 编辑-虚拟网络编辑器-选择VMnet8-点击更…

JZ2440开发板——S3C2440的存储控制器

以下内容源于韦东山课程的学习与整理&#xff0c;如有侵权请告知删除。 课程中说的“内存控制器”&#xff0c;准确来说是“存储控制器”&#xff0c;其配套书籍写的也是“存储控制器”。 另外“Nor Flash控制器”&#xff0c;说的也是“存储控制器”&#xff0c;或者“存储控…

深入剖析大模型原理——Qwen Blog

1. 输入部分 Text&#xff1a;原始输入文本&#xff0c;模型需要处理的自然语言数据。Tokenizer&#xff1a;分词器&#xff0c;将输入文本转换为词汇表中的索引&#xff08;ID&#xff09;&#xff0c;便于后续处理。Input_ids&#xff1a;经过分词处理后的ID序列&#xff0c…

如何借助项目管理系统实现审批流程的自动化与标准化?

在快节奏的项目申报领域中&#xff0c;繁琐的审批流程往往成为制约项目推进速度的瓶颈。传统的人工审批方式不仅耗时耗力&#xff0c;还容易因人为因素导致审批效率低下、结果不一致等问题。为此&#xff0c;一款能够支持在线审批流程、实现审批自动化与标准化的项目管理系统显…

MATLAB基本语句

MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构&#xff0c;也可以出现对M-文件的调用(相当于对外部过程的调用)。 由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的&#xff0c;故其既有FORTRAN的特征&#xff0c;又在许多语言规…

小琳AI课堂:机器学习

大家好&#xff0c;这里是小琳AI课堂&#xff0c;今天我们要聊的是机器学习&#xff0c;它是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;主要研究如何让计算机系统通过数据学习&#xff0c;从而做出决策或预测。 下面我们就从四个角度来详细解释一下“什么是机器…

感知笔记:ROS 视觉- 跟随红球

- 目录 - 如何在 ROS 中可视化 RGB 相机。如何作为机器人切换主题。如何创建 blob 检测器。如何获取要跟踪的颜色的颜色编码。如何使用 blob 检测数据并移动 RGB 相机以跟踪 blob。 机器人技术中最常见的传感器是不起眼的 RGB 摄像头。它用于从基本颜色跟踪&#xff08;blob 跟…

把设计模式用起来!(4) 用不好模式?之原理不明

&#xff08;清华大学出版社 《把设计模式用起来》书稿试读&#xff09; 上一篇&#xff1a;把设计模式用起来&#xff01;&#xff08;3&#xff09;用不好模式&#xff1f;之时机不对 为什么用不好设计模式&#xff1f;——原理不明 难搞的顾客&#xff1a;“抹这种霜&#…

学习ROS2第一天—新手笔记(humble版本)

————今早七点达到实验室&#xff0c;吃了早饭收拾了一下现在07&#xff1a;24开始学习———— 1. RO2与ROS1的不同架构&#xff1a; ROS1架构下&#xff0c;所有节点都是Master进行管理 ROS使用基于DDS的Discovery机制&#xff0c;和Master说再见 API的重新设计 编译…