19,verilog之任务用法
注:学习、交流就在博主的个人weixin公众号 “FPGA动力联盟” 留言或直接+博主weixin “fpga_start” 私信~
任务这个功能要比函数的功能强大许多,理论上来说,函数可以被任务取代。
Verilog中任务的声明如下:
task task_name(ports_list);
……
endtask
Verilog中任务的简单例子如下:
task and(input a, input b, output result);
……
endtask
Verilog中任务的调用格式如下:
task_name(input_variable1, input_variable1,……);
Verilog中任务的调用例子如下:
and(a, b, result);
在书写任务的代码时,需要强调以下几个原则:
1,任务的输入、输出端口和双向端口数量不受限制,甚至可以没有输入、输出
2,任务定义的描述语句中,可以使用不可综合语句(比如延迟控制语句),但这样会造成该任务不可综合
3,在任务中既可以调用其他任务或函数,也可以调用自身
4,在任务定义结构中不能出现initial和always过程块
5,任务调用语句只能出现在过程块内
6,任务调用语句和一条普通的行为描述语句处理方法一致
7,函数结构中不能使用任何形式的时间控制语句(#, wait等),也不能使用disable中止语句
8,可综合的任务只能实现组合逻辑
下面给出具体的任务应用的代码,包括调用函数,我们在应用时依葫芦画瓢就行:
module function_total(input clk,input rst,input [7:0] width,output reg[16:0] area
);
//
function[15:0] circle(input [7:0]diameter);begincircle= (24'd201 * {16'h0, diameter}*{16'h0, diameter})/256;end
endfunctionfunction[15:0] square(input [7:0] width);beginsquare= {8'h0, width}*{8'h0, width};end
endfunction
//
task total(input [7:0] width, output [16:0]area);beginarea<= {1'b0, square(width)} + {1'b0, circle(width)};end
endfunction
///
always @ (posedge clk or negedge rst)if(!rst)area<= 17'd0;elsetotal(width,area);
endmodule
任务同函数一样可以被多次调用,也可以在关键字task后加automatic实现变量地址空间的动态分配。
参考文献:
1,verilog传奇——从电路出发的HDL代码设计
2,verilog编程艺术
19,verilog之任务用法相关推荐
- Verilog中generate用法总结
Verilog中generate用法总结 1.generate-for 2.generate-if 3.generate-case 生成语句可以动态的生成verilog代码,当对矢量中的多个位进行 重 ...
- verilog中function用法_verilog中的function用法与例子
函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存 在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不 ...
- 在verilog中#的用法
# 是延迟的意思,井号后面数字是延迟的数量,延迟的单位由`timescale控制比如有:`timescale 1ns/1ps 意思就是时间单位为1ns,精度是1ps那么,#10.5 就是延迟10.5n ...
- verilog中signed用法
首先我们知道,有符号数的运算全都是补码的方式. 在Verilog里面,可以使用有符号数据进行运算,定义时使用signed,例如 reg signed[7:0] data: //定义了一个reg型有符号 ...
- 【FPGA】Verilog中generate用法
创作时间:2021-08-18 1.一些说明: generate循环的语法与for循环语句的语法很相似. genvar只有在建模的时候才会出现,在仿真时就已经消失了. 但是在使用时必须先在genvar ...
- HarmonyOS开发19:CommonDialog基本用法
ability_main.xml代码: <?xml version="1.0" encoding="utf-8"?> <Directional ...
- Verilog语言菜鸟教程知识关键点记录
Verilog语言菜鸟教程知识关键点记录 1.两类数据类型:线网数据类型与寄存器数据类型,线网表示物理元件之间的连线,寄存器表示抽象的数据存储元件. 2.Verilog 作为硬件描述语言,主要用来生成 ...
- C语言task的用法,C# Task 用法
C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...
- 控件用法-WdatePicker 隐藏各按钮
转自:http://www.cnblogs.com/huangw/archive/2013/01/25/2876009.html My97DatePicker是一款非常灵活好用的日期控件.使用非常简单 ...
最新文章
- 汉语转拼音pinyin4j
- python之tkinter图形界面
- Lazada代运营怎么样?需不需要找?如何选择一家靠谱的公司
- Mxnet的.lst文件介绍
- python安装无法打开_无法在打开时安装/运行docker
- [上海]招募.net网站测试员(实习/见习)
- 单片机广告灯实验总结_温州很强的ly51s单片机程序开发公司
- 【Contact】结构体+动态内存管理+文件存储实现简易通讯录代码
- 关键词提取_tf_idf
- iphonexr电池容量_xr电池容量多少毫安,iphonexr换电池多少钱
- centos mysql-5.5.20_mysql-5.5.20+CentOS 6.2 编译安装全过程详解(2)
- 给self.navigationItem.rightBarButtonItem设置字体颜色
- 考研二战日记——第二天 高数第一章第二节:数列的极限
- arduino 控制无刷电机_怎样使用Arduino控制无刷电机
- HTML Entity 简介
- vue_小项目_吃饭睡觉打豆豆
- android分屏后布局变化问题,Android分屏多窗口实践
- 修复鼠标单击变双击的问题
- 阿里、腾讯、网易、极验、顶象滑块验证码识别
- LCD1602液晶显示屏的入门级应用(一)