Verilog 入门(七)(任务、函数)

文章目录

  • 任务
    • 任务定义
    • 任务调用
  • 函数
    • 函数说明部分
    • 函数调用
  • 值变转储文件

任务

一个任务就像一个过程,它可以从描述的不同位置执行共同的代码段。共同的代码段用任务定义编写成任务,这样它就能够从设计描述的不同位置通过任务调用被调用。任务可以包含时序控制,即时延控制,并且任务也能调用其它任务和函数。

任务定义

任务定义的形式如下:

task task_id;[declarations]procedural_statement
endtask

任务可以没有或有一个或多个参数。值通过参数传入和传出任务。除输入参数外(参数从任务中接收值),任务还能带有输出参数(从任务中返回值)和输入输出参数。任务的定义在模块说明部分中编写。例如:

module Has_Task;parameter MAXBITS = 8;task Reverse_Bits;input[MAXBITS-1:0] Din;output[MAXBITS-1:0] Dout;integer K;beginfor(K=0; K<MAXBITS; K=K+1)Dout[MAXBITS-K] = Din[K]endendtask
endmodule

任务的输入和输出在任务开始处声明。这些输入和输出的顺序决定了它们在任务调用中的顺序。

任务调用

一个任务由任务调用语句调用。任务调用语句给出传入任务的参数值和接收结果的变量值。任务调用语句是过程性语句,可以在 always 语句或 initial 语句中使用。形式如下:

task_id[(expr1, expr2, ..., exprN)];

任务调用语句中参数列表必须与任务定义中的输入、输出和输入输出参数说明的顺序匹配。此外,参数要按值传递,不能按地址传递。下面是调用任务 Reverse_Bits 的实例:

reg[MAXBITS-1:0] Reg_X, New_Reg;
Reverse_Bits(Reg_X, New_Reg)

注意因为任务能够包含定时控制,任务可在被调用后再经过一定时延才返回值。因为任务调用语句是过程性语句,所以任务调用中的输出和输入输出参数必须是寄存器类型的

函数

函数,如同任务一样,也可以在模块不同位置执行共同代码。函数与任务的不同之处是函数只能返回一个值,它不能包含任何时延或时序控制(必须立即执行),并且它不能调用其它的任务。此外,函数必须带有至少一个输入,在函数中允许没有输出或输入输出说明。函数可以调用其它的函数。

函数说明部分

函数说明部分可以在模块说明中的任何位置出现,函数的输入是由输入说明指定,形式如下:

function[range] function_id;input_declarationother_declarationsprocedural_statament
endfunction

函数实例如下:

module Function_Exampleparameter MAXBITS = 8;function[MAXBITS-1:0] Reverse_Bits;input[MAXBITS-1:0] Din;integer K;beginfor(K=0; K<MAXBITS; K=K+1)Reverse_Bits[MAXBITS-K] = Din[K];endendfunction
endmodule

函数定义在函数内部隐式地声明一个寄存器变量,该寄存器变量与函数同名并且取值范围相同。函数通过在函数定义中显式地对该寄存器赋值来返回函数值。对这一寄存器的赋值必须出现在函数定义中。

函数调用

函数调用是表达式的一部分。形式如下:

func_id(expr1, expr2,..., exprN)

以下是函数调用的例子:

reg[MAXBITS-1:0] New_Reg, Reg_X;
New_Reg = Reverse_Bits(Reg_X);

与任务相似,函数定义中声明的所有局部寄存器都是静态的,即函数中的局部寄存器在函数的多个调用之间保持它们的值。

值变转储文件

值变转储(VCD)文件包含设计中指定变量取值变化的信息。它的主要目的是为其它后处理工具提供信息。

下面的系统任务用于创建和将信息导入 VCD 文件:

$dumpfile:本系统任务指定转储文件名,例如

$dumpfile("uart.dump");

dumpvars:本系统任务指定哪些变量值变化时转储进转储文件。

dumpoff:本系统任务促使转储任务被挂起。

dumplimit:本系统任务为 VCD 文件指定最大长度(字节)。转储在达到此界限时停止。

dumpflush:本系统任务刷新操作系统 VCD 文件缓冲区中的数据,将数据存到 VCD 文件中。执行此系统任务后,转储任务处于唤醒状态。

下面是在 5~12 之间计数的可逆计数器的例子:

module CountUpDown(Clk, Count, Up_Down);input Clk, Up_Down;output[0:3] Count;reg[0:3] Count;initial Count = 'd5;always@(posedge Clk) beginif(Up_Down)beginCount = Count + 1;if(Count > 12)Count = 12endelsebeginCount = Count - 1;if(Count < 5)Count = 5;endend
endmodulemodule Test;reg Clock, UpDn;wire[0:3] Cnt_Out;parameter ON_DELAY = 1, OFF_DELAY = 2;CountUpDown C1(Clock, Cnt_Out, UpDn);always beginClock = 1;#ON_DELAYClock = 0;#OFF_DELAY;endinitial beginUpDn = 0;#50 UpDn = 1;#100 $dumpflush;$stop;endinitial begin$dumpfile("count.dump");$dumplimit(4096);$dumpvars(0, Test);$dumpvars(0, C1.Count, C1.Clk, C1.Up_Down);end
endmodule

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

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

相关文章

actual combat 24 —— 创建数据库表定义码值字段时,tinyint类型和varchar(2)该如何选择?

tinyint&#xff1a;最大数值为127&#xff0c;占用1字节空间varchar(2)&#xff1a;最大数值为99&#xff0c;占用2字节空间&#xff0c;但当存储的数字为个位数时varchar类型是可变的&#xff0c;只占用1个字节空间。 从这个角度来看的话&#xff0c;用tinyint类型来存储码值…

前端开发神器之 VsCode AI 辅助插件 DevChat

目录 前言DevChat介绍DevChat 独特优势注册账号安装插件设置密钥访问指令AI 解疑 最后 #AI编程助手哪家好&#xff1f;DevChat“真”好用 # 前言 我们都有过写代码时反复看了半天也不知道bug在哪&#xff0c;大大浪费了时间。一些基础的代码可能看一会儿能够解决&#xff0c;但…

k8s(三): 基本概念-ReplicaSet与Deployment

PeplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合&#xff0c;通常用来保证给定数量的、完全相同的 Pod 的可用性。 最佳实践 Deployment 是一个可以拥有 ReplicaSet 并使用声明式方式在服务器端完成对 Pod 滚动更新的对象。 尽管 Rep…

oracle sql相关语法

SQL*PLUS 在SQL*PLUS执行&#xff0c;会在执行后显示查询的执行计划和统计信息 SET AUTOTRACE ON;SELECT * FROM your_table WHERE column_name value;SET AUTOTRACE OFF;PLSQL PLSQL查询sql界面&#xff0c;鼠标右键&#xff0c;点击执行计划&#xff0c;会出现sql的执行计…

matlab 汽车单车模型固定点跟踪算法

1、内容简介 略 29-可以交流、咨询、答疑 2、内容说明 单车模型固定点跟踪算法 单车模型&#xff0c;固定点跟踪算法&#xff0c;动画演示&#xff0c; 汽车单车模型、转弯动画、固定点跟踪算法、pid控制 3、仿真分析 略 A[0,5;0,0];B[0;1]; Q10*eye(2);R1; Klqr(A…

Java高级技术-反射

认识反射、获取类 获取类的方法 获取类的构造器 获取类的构造器、并对其进行操作 获取构造器的作用&#xff1a;依然是初始化对象返回 获取成员变量 获取成员变量的方法 获取成员变量的作用&#xff1a;赋值、取值 获取类的成员方法 方法 作用&#xff1a;依然是执行 作用、…

webGL开发学科演示项目方案

开发学科演示项目需要考虑到教育目标、互动性和用户体验。以下是一个可能的技术方案&#xff0c;可用于实现这样的项目&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.WebGL 框架&#xff1a; 选择…

golang 函数选项模式

一 什么是函数选项模式 函数选项模式允许你使用接受零个或多个函数作为参数的可变构造函数来构建复杂结构。我们将这些函数称为选项&#xff0c;由此得名函数选项模式。 例子&#xff1a; 有业务实体Animal结构体&#xff0c;构造函数NewAnimal&#xff08;&#xff09;&…

【超全】React学习笔记 上:基础使用与脚手架

React学习笔记 React系列笔记学习 中篇笔记地址&#xff1a;【超全】React学习笔记 中&#xff1a;进阶语法与原理机制 下篇笔记地址&#xff1a;【超全】React学习笔记 下&#xff1a;路由与Redux状态管理 React 简介 React 是一个由 Facebook 开发并维护的用于构建用户界面的…

C++的一些基础

1、reinterpret_cast reinterpret_cast是四种强制转换中功能最为强大的&#xff08;最暴力&#xff0c;最底层&#xff0c;最不安全&#xff09;。它的本质是编译器的指令。 它的作用&#xff1a;它可以把一个指针转换成一个整数&#xff0c;也可以把一个整数转换成一个指针。…

网络运维与网络安全 学习笔记2023.12.2

网络运维与网络安全 学习笔记 第三十三天 今日目标 Linux系统综述、部署本地Linux、配置Linux网络 SSH远程控制、远程文档管理、选购ECS云主机 Linux系统综述 Linux是一种操作系统 Linux之父&#xff0c;Linus Torwalds 1991年10月&#xff0c;发布0.02版&#xff08;第一…

Redis集群详解

1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务&#xff0c;提高整体性能和可靠性。根据搭建的方式和集群的特性&#xff0c;Redis集群主要有三种模式&#xff1a;主从复制…

海林猴头菇 区域公用品牌形象正式发布

猴头菇是中国八大“山珍”之一&#xff0c;自古就有“山珍猴头&#xff0c;海味燕窝”之说&#xff0c;猴头菇在中国既是食用珍品&#xff0c;又是重要的药用菌。 海林市位于黑龙江省东南部&#xff0c;地处长白山脉张广才岭东麓&#xff0c;素有“林海雪原”之称。 海林猴头菇…

zookeeper集群+kaafka集群

kafka3.0之前依赖于zookeeper zookeeper开源&#xff0c;分布式的架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式涉及的分布式服务管理架构 存储和管理数据&#xff0c;分布式节点上的服务接受观察者的注册&#xff0c;一旦分布式节点上的…

计算机网络TCP篇②

一、TCP 重传、滑动窗口、流量控制、拥塞控制 1.1、重传机制 在 TCP 中&#xff0c;当发送端的数据达到接受主机时&#xff0c;接收端主机会返回一个确认应答消息&#xff0c;表示已收到消息。但是在复杂的网络中&#xff0c;并一定能顺利正常的进行数据传输&#xff0c;&…

Linux 匿名页反向映射

1. 何为反向映射 正向映射&#xff1a; 用户进程在申请内存时&#xff0c;内核并不会立刻给其分配物理内存&#xff0c;而是先为其分配一段虚拟地址空间&#xff0c;当进程访问该虚拟地址空间时&#xff0c;触发page fault异常&#xff0c;异常处理流程中会为其分配物理页面&am…

关于Typora如何插入自己的云端视频的方法

关于Typora如何插入自己的云端视频的方法 文章目录 关于Typora如何插入自己的云端视频的方法前言&#xff1a;实现步骤&#xff1a;小结 前言&#xff1a; 我本来使用gitee来作为typora的图床&#xff0c;但我现在想要把我自己的视频上传到云端&#xff0c;然后通过超链接在ty…

【力扣1929】数组串联

【力扣1929】数组串联 一.题目描述 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans &#xff0c;数组下标 从 0 开始计数 &#xff0c;对于所有 0 < i < n 的 i &#xff0c;满足下述所有要求&#xff1a; ans[i] nums[i]ans[i n] nums…

Go 语言真正有什么用处?

在其十几年的发展过程中&#xff0c;Google 的Go 编程语言已经从 alpha 极客的好奇心发展成为世界上一些最重要的云原生软件项目背后经过考验的编程语言。 为什么Docker、Kubernetes等项目的开发者会选择 Go &#xff1f;Go 的定义特征是什么&#xff1f;它与其他编程语言有何…

215. 数组中的第K个最大元素

题目&#xff1a; 解法一、优先级队列 代码 #include<queue> class Solution { public:int findKthLargest(vector<int>& nums, int k){//使用优先级队列直接秒杀&#xff01;priority_queue<int ,vector<int>,less<int>> q;for(int i0;i&…