当前位置: 首页 > news >正文

Verilog HDL——任务与函数

任务与函数区别

比较点任务函数
输入、输出可以有任意多个,各种类型的参数至少有一个输入(不能有输出端口,包括inout端口)
调用任务只能在过程语句中调用,不能在连续赋值语句assign中调用函数可以作为赋值操作的表达式,用于过程赋值和连续赋值语句
触发事件控制任务不能出现always语句;可以包含延迟控制语句(#),但只能用于仿真,不克用于综合函数不能出现always、# 语句,要保证函数的执行在零时间内完成
调用其他函数和任务任务可以调用其他任务和函数函数只能调用函数,但不能调用任务
返回值无返回值调用表达式返回一个值
其他说明可以作为一条完整的语句只能作为赋值操作的表达式,不能作为一个独立的语句

任务 TASK

/*
任务调用 -- 4比特全加器实现
*/
module EXAMPLE(
A,B,CIN,S,COUT
);
input[3:0] A,B;
input CIN;
output[3:0] S;
output COUT;

reg[3:0]S;
reg COUT;
reg[1:0]S0,S1,S2,S3;

task ADD;
	input A,B,CIN;
	output[1:0] C;
	
	reg[1:0] C;
	reg S,COUT;
	
	begin
		S = A^B^CIN;
		COUT = (A&B)|(A&CIN)|(B&CIN);
		C = {COUT,S};
	end	
endtask

	always@(A or B or CIN)begin
		ADD(A[0],B[0],CIN,S0);
		ADD(A[1],B[1],S0[1],S1);
		ADD(A[2],B[2],S1[1],S2);
		ADD(A[3],B[3],S2[1],S3);
		S={S3[0],S2[0],S1[0],S0[0]};
		COUT = S3[1];
	end

endmodule

在这里插入图片描述

函数 FUNCTION

  • 函数定义只能做模块中,不能在过程块中;
  • 函数至少有一个端口(不能出现输出端口和双向端口)
  • 函数内可以调用函数不能调用任务;
  • 函数定义结构体中不能出现过程控制语句(always语句)
  • 函数结构中不能使用任何形势的时间控制语句(# wait等),不能使用disable中止语句;
  • 函数调用可以在过程块中完成,也可以在assign的连续语句中完成;
  • 函数调用不能作为单独语句出现,只能作为赋值语句的右端操作数;
/*
函数调用 -- 4比特全加器实现
*/
module comb15(
A,B,CIN,S,COUT
);
input[3:0] A,B;
input CIN;
output[3:0] S;
output COUT;


wire[1:0]S0,S1,S2,S3;

function signed[1:0]ADD;
	input A,B,CIN;
	reg S,COUT;
	
	begin
		S = A^B^CIN;
		COUT = (A&B)|(A&CIN)|(B&CIN);
		ADD = {COUT,S};
	end	
endfunction

	assign
		S0 = ADD(A[0],B[0],CIN),
		S1 = ADD(A[1],B[1],S0[1]),
		S2 = ADD(A[2],B[2],S1[1]),
		S3 = ADD(A[3],B[3],S2[1]),
		S={S3[0],S2[0],S1[0],S0[0]},
		COUT = S3[1];

endmodule

在这里插入图片描述

相关文章:

  • 2022年全国大学生数学建模竞赛E题目-小批量物料生产安排详解+思路+Python代码时序预测模型(四)
  • Python多线程的用法
  • java计算机毕业设计ssm高校运动会管理网站(源码+系统+mysql数据库+Lw文档)
  • 网课搜题公众号 搜题接口搭建步骤
  • 卷积神经网络相比循环神经网络具有哪些特征
  • Java EE——线程安全和单例模式
  • [SUCTF 2019]EasyWeb
  • 人脸识别及检测
  • Apache Doris 系列: 基础篇-Routine Load
  • 机器学习笔记 - CRAFT(文本检测的字符区域感知)论文解读
  • 【云原生-Docker】Docker 安装 Python
  • ESP8266-Arduino编程实例-TLV493D磁传感器驱动
  • Hue在大数据生态圈的集成
  • AtCoder Beginner Contest 267 (A~D)
  • 羊了个羊游戏源码搭建开发过程
  • [PHP内核探索]PHP中的哈希表
  • CentOS7简单部署NFS
  • Joomla 2.x, 3.x useful code cheatsheet
  • Laravel Telescope:优雅的应用调试工具
  • oschina
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 搞机器学习要哪些技能
  • 将回调地狱按在地上摩擦的Promise
  • 解析带emoji和链接的聊天系统消息
  • 小程序开发中的那些坑
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #在 README.md 中生成项目目录结构
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (二)windows配置JDK环境
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (力扣)1314.矩阵区域和
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (算法)Game
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)原始图像数据和PDF中的图像数据
  • .Mobi域名介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 中插件式开发实现
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net6 Api Swagger配置
  • .Net程序帮助文档制作
  • .NET开源项目介绍及资源推荐:数据持久层
  • .sys文件乱码_python vscode输出乱码
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [2021 蓝帽杯] One Pointer PHP
  • [C#]C#学习笔记-CIL和动态程序集
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [ESP32 IDF]web server