注:学习、交流就在博主的个人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之任务用法相关推荐

  1. Verilog中generate用法总结

    Verilog中generate用法总结 1.generate-for 2.generate-if 3.generate-case 生成语句可以动态的生成verilog代码,当对矢量中的多个位进行 重 ...

  2. verilog中function用法_verilog中的function用法与例子

    函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存 在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不 ...

  3. 在verilog中#的用法

    # 是延迟的意思,井号后面数字是延迟的数量,延迟的单位由`timescale控制比如有:`timescale 1ns/1ps 意思就是时间单位为1ns,精度是1ps那么,#10.5 就是延迟10.5n ...

  4. verilog中signed用法

    首先我们知道,有符号数的运算全都是补码的方式. 在Verilog里面,可以使用有符号数据进行运算,定义时使用signed,例如 reg signed[7:0] data: //定义了一个reg型有符号 ...

  5. 【FPGA】Verilog中generate用法

    创作时间:2021-08-18 1.一些说明: generate循环的语法与for循环语句的语法很相似. genvar只有在建模的时候才会出现,在仿真时就已经消失了. 但是在使用时必须先在genvar ...

  6. HarmonyOS开发19:CommonDialog基本用法

    ability_main.xml代码: <?xml version="1.0" encoding="utf-8"?> <Directional ...

  7. Verilog语言菜鸟教程知识关键点记录

    Verilog语言菜鸟教程知识关键点记录 1.两类数据类型:线网数据类型与寄存器数据类型,线网表示物理元件之间的连线,寄存器表示抽象的数据存储元件. 2.Verilog 作为硬件描述语言,主要用来生成 ...

  8. C语言task的用法,C# Task 用法

    C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...

  9. 控件用法-WdatePicker 隐藏各按钮

    转自:http://www.cnblogs.com/huangw/archive/2013/01/25/2876009.html My97DatePicker是一款非常灵活好用的日期控件.使用非常简单 ...

最新文章

  1. 汉语转拼音pinyin4j
  2. python之tkinter图形界面
  3. Lazada代运营怎么样?需不需要找?如何选择一家靠谱的公司
  4. Mxnet的.lst文件介绍
  5. python安装无法打开_无法在打开时安装/运行docker
  6. [上海]招募.net网站测试员(实习/见习)
  7. 单片机广告灯实验总结_温州很强的ly51s单片机程序开发公司
  8. 【Contact】结构体+动态内存管理+文件存储实现简易通讯录代码
  9. 关键词提取_tf_idf
  10. iphonexr电池容量_xr电池容量多少毫安,iphonexr换电池多少钱
  11. centos mysql-5.5.20_mysql-5.5.20+CentOS 6.2 编译安装全过程详解(2)
  12. 给self.navigationItem.rightBarButtonItem设置字体颜色
  13. 考研二战日记——第二天 高数第一章第二节:数列的极限
  14. arduino 控制无刷电机_怎样使用Arduino控制无刷电机
  15. HTML Entity 简介
  16. vue_小项目_吃饭睡觉打豆豆
  17. android分屏后布局变化问题,Android分屏多窗口实践
  18. 修复鼠标单击变双击的问题
  19. 阿里、腾讯、网易、极验、顶象滑块验证码识别
  20. LCD1602液晶显示屏的入门级应用(一)

热门文章

  1. java基础-Idea开发工具介绍
  2. 不懂技术,又不影响上班,网上的攒营汇适合做副业吗
  3. 小程序清理缓存的几种方法
  4. Java进阶(5)——调用方法的三种方式
  5. Unity3D 5.1烘培
  6. Mother and child 妈妈与孩子
  7. Unity 2D -- Ruby Adventure 学习笔记
  8. python app自动签到_Python实现自动签到(一)
  9. Redis 主从复制和哨兵模式
  10. 第0次作业 阅邹欣老师博客有感