10 verilog基础语法-task和function

虚拟机:VMware-workstation-full-14.0.0.24051
环 境:ubuntu 18.04.1
应用工具:VCS(verilog compiled simulator,编译型代码仿真器)



一、学习内容

  
在这里插入图片描述


二、task和function

  task和function语句分别用来由用户定义任务和函数;任务和函数往往是大的程序模块中在不同地点多次用到的
相同的程序段;利用任务和函数可将一个很大的程序模块分解为许多较小的任务和函数,便于理解和调试;输入、输出和总线信号的值可以传入、传出任务和函数。

(1)task语句

//任务定义		task <任务名>;
							端口及数据类型声明语句;
							其他语句;
						endtask
//任务调用		<任务名>(端口1,端口2,...
  • 注1:任务的定义与调用必须在一个module模块内;
  • 注2:任务被调用时,需列出端口名列表,且必须与任务定义中的I/O变量一一对应;
  • 注3:一个任务可以调用其他任务和函数。

【例 1】

//任务定义
task my_task;
	input a,b;
	inout c;
	output d,e;
	...
	<语句> //执行任务工作相应的语句
	...
	c = foo1;
	d = foo2; //对任务的输出变量赋值
	e = foo3;
endtask

//任务调用
my_task(v,w,x,y,z);

  当任务启动时,由v、w和x传入的变量赋给了a、b和c;当任务完成后,输出通过c、d和e赋给了x、y和z 。

(2)function

  函数的目的是通过返回一个用于某表达式的值,来响应输入信号。适于对不同变量采取同一运算的操作。函数在模块内部定义,通常在本模块中调用,也能根据按模块层次分级命名的函数名从其他模块调用。而任务只能在同一模块内定义与调用。

//函数定义		function <返回值位宽或类型说明> 函数名;
							端口声明;
							局部变量定义;
							其他语句;
						endfunction

//函数调用		<函数名><表达式> <表达式>)

function[7:0] gefun; //函数的定义
	input [7:0] x;
	...
	<语句> //进行运算
	gefun = count; //赋值语句
endfunction

	assign number = gefun(rega); //对函数的调用
//1:函数的调用是通过将函数作为调用函数的表达式中的操作数来实现的
//2:函数在综合时,被理解成具有独立运算功能的电路,每调用一次函数,相当于改变此电路的输入,以此得到相应的计算结果

注意

  • 函数的定义不能包含任何时间控制语句——用延迟#、事件控制@或等待wait标识的语句。
  • 函数不能启动(即调用)任务!
  • 定义函数时至少要有一个输入参量!且不能有任何输出或输入/输出双向变量。
  • 在函数的定义中必须有一条赋值语句,给函数中的一个内部寄存器赋以函数的结果值,该内部寄存器与函数同名

【例2】 利用函数对一个8位二进制数中为0的位进行计数
在这里插入图片描述在这里插入图片描述
**【例 3】**阶乘运算函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)任务和函数的区别

在这里插入图片描述

  


三、思考和小结

(1)思考

  1. 边沿触发的always块和电平触发的always块分别表示什么类型的逻辑电路?
  2. 用always块实现一个占空比为50%的8分频时钟分频
  3. 通过任务调用完成4个4位二进制输入数据的从大到小排列的冒泡排序
  • 通过任务调用完成4个4位二进制输入数据的从大到小排列的冒泡排序
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(2)小结

在这里插入图片描述


作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xlinxdu

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值