Verilog HDL系统任务说明语句task

这篇具有很好参考价值的文章主要介绍了Verilog HDL系统任务说明语句task。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

task说明语句
如果传给任务的变量和任务完成后接受任务的变量已定义,就可以用一条语句启动任务,任务完成以后控制传回启动的过程。
1.1任务的定义
定义任务的语法如下:

task<任务名>
	<端口及数据类型声明语句>
	<语句1>
	<语句2>
	...
	<语句3>
endtask	

1.2任务的调用及变量的传递
任务调用:

<任务名>(端口名1,端口名1...端口名n)

1.3例子
用两种不同的方法设计一个功能相同的模块,完成一个四个8位2进制输入数据冒泡排序。一种方法是组合逻辑实现,另一种是时钟触发任务实现,每个时钟周期完成一次数据交换。
第一种方法:
设计代码:

module compare(
	a,
	b,
	c,
	d,
	ra,
	rb,
	rc,
	rd
);
	
	input [7:0] a,b,c,d;
	output reg [7:0] ra,rb,rc,rd;
	
	reg [7:0]va,vb,vc,vd;
	
	always @(*) begin
		{va,vb,vc,vd}={a,b,c,d};
		
		change(va,vb);
		change(vb,vc);
		change(vc,vd);
		change(va,vb);
		change(vb,vc);
		change(va,vb);
		
		{ra,rb,rc,rd}={va,vb,vc,vd};
	end
	
	task change;
		inout [7:0]x,y;
		reg [7:0] temp;
		
		if(x>y) begin
			temp=y;
			y=x;
			x=temp;
		end
	endtask


endmodule 

testbench:

`timescale 1ns/1ns
module compare_tb;
	reg clk,clk1;
	reg [7:0] a,b,c,d;
	
	wire[7:0]ra,rb,rc,rd;
	
	initial begin
		clk=0;
		clk1=0;
		a=0;
		b=0;
		c=0;
		d=0;
	end
	
	always #20 clk=~clk;
	always #50 clk1=~clk1;
	
	always@(posedge clk1) begin
		a={$random}%255;
		b={$random}%255;
		c={$random}%255;
		d={$random}%255;
	end

compare u(
	a,
	b,
	c,
	d,
	ra,
	rb,
	rc,
	rd
 );
endmodule 

仿真波形:
用两种不同的方法设计一个功能相同的模块,完成四个8位2 进制输入数据的冒泡排序,fpga开发

第二种方法:
设计代码:

module compare_2(
	clk,
	rst,
	a,
	b,
	c,
	d,
	ra,
	rb,
	rc,
	rd
);
	output reg[7:0] ra,rb,rc,rd;
	input[7:0] a,b,c,d;
	input clk,rst;
	
	reg[7:0] va=0;
	reg[7:0]vb=0;
	reg[7:0]vc=0;
	reg[7:0]vd=0;
	reg[2:0]state;
	
	parameter IDLE=0 ,s0=1,s1=2,s2=3,s3=4,s4=5,s5=6,s6=7;
	always @ (posedge clk)
	begin
	 
		 if(!rst)
		 begin
			  va<=0;
			  vb<=0;
			  vc<=0;
			  vd<=0;
			  state<=IDLE;
		 end
	else begin
		case(state)
			IDLE:begin va<=a;
						  vb<=b;
						  vc<=c;
						  vd<=d;
						  state<=s0;end
			s0:begin change(va,vb);state<=s1 ; end
			s1:begin change(vb,vc);state<=s2 ;end
			s2:begin change(vc,vd);state<=s3;end
			s3:begin change(va,vb);state<=s4; end
			s4:begin change(vb,vc);state<=s5;end
			s5:begin change(va,vb);state<=s6; end
			s6:begin ra<=va;
						rb<=vb;
						rc<=vc;
						rd<=vd;
						state<=IDLE;end
			default: state<=IDLE;
		endcase
		end
	end
	
	task change;   
	inout[7:0] x,y;  
	reg[7:0] tmp;
		 if(x>y)
			  begin
					tmp = y  ;
					  y = x   ;
					  x = tmp ;
			  end
	endtask

endmodule 

testbench:

`timescale 1ns/1ns
module compare_tb;
	reg clk,clk1;
	
	reg rst;
	reg [7:0] a,b,c,d;
	
	wire[7:0]ra,rb,rc,rd;
	
	initial begin
		clk=0;
		clk1=0;
		a=0;
		b=0;
		c=0;
		d=0;
		rst=1;
		#10 rst=0;
		#20 rst=1;
	end
	
	always #20 clk=~clk;
	always #50 clk1=~clk1;
	
	always@(posedge clk1) begin
		a={$random}%255;
		b={$random}%255;
		c={$random}%255;
		d={$random}%255;
	end

	compare_2 m1(
		.clk(clk),
		.rst(rst),
		.a(a),
		.b(b),
		.c(c),
		.d(d),
		.ra(ra),
		.rb(rb),
		.rc(rc),
		.rd(rd)
	);
endmodule 

仿真波形:
用两种不同的方法设计一个功能相同的模块,完成四个8位2 进制输入数据的冒泡排序,fpga开发文章来源地址https://www.toymoban.com/news/detail-780234.html

到了这里,关于Verilog HDL系统任务说明语句task的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog概述一:Verilog HDL和 VHDL详细对比

    当前比较流行的硬件设计语言有两种,即 VHDL 与 Verilog HDL,两者各有优劣,也各有相当多的拥护者。 VerilogHDL和VHDL都是完备的HDL设计和验证语言,具有完整的设计方法和设计规范。 HDL (hardware description language) 硬件描述语言 具有特殊功能结构能够对硬件逻辑电路的功能进行描

    2024年02月02日
    浏览(61)
  • 有限状态机设计(Verilog HDL)

    一、有限状态机 - 基本概念 有限状态机(Finite State Machine, FSM)是电路设计的经典方法,通常可以认为是组合逻辑和寄存器逻辑的组合,其中组合逻辑用于状态译码和产生输出信号,寄存器用于存储状态。 - Moore和Mealy型状态机 摩尔型(Moore)状态机: 输出只是当前状态的函数

    2024年02月16日
    浏览(40)
  • Verilog HDL语言基础知识

    目录 Verilog HDL语言基础知识  6.1.2  Verilog HDL模块的结构 6.1.3 逻辑功能定义 6.2.1  常量 6.3 运算符及表达式 6.4.2 条件语句 先来看两个Verilog HDL程序。 例6.1    一个8位全加器的 Verilog HDL源代码 【例6.2】一个8位计数器的Verilog HDL源代码     从上面的例子可以看出:     ①

    2024年02月05日
    浏览(43)
  • 【FPGA Verilog开发实战指南】初识Verilog HDL-基础语法

    就是用代码来描述硬件结构 语言有VHDL与Verilog HDL Verilog HDL 是从C语言来的,学的快 ###例子 也叫保留字,一般是小写 module 表示模块的开始 endmodule 模块的结束 模块名 一般与.v文件的名字一致 输入信号 input 输出信号 output 既做输入也做输出 inout 需要一些变量和参数对输

    2024年02月21日
    浏览(45)
  • 【Verilog HDL】FPGA-Verilog文件的基本结构

    🎉欢迎来到FPGA专栏~Verilog文件的基本结构 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ Verilog HDL系列博客参考书籍 《

    2024年02月04日
    浏览(83)
  • 【FPGA】组合逻辑电路三种建模方式(Verilog HDL 门级建模、Verilog HDL 数据流建模、组合电路行为级建模)

    目录   Verilog HDL 门级建模 各种逻辑门的表示和使用 门级建模书写实例 Verilog HDL 数据流建模 数据流建模 数据流建模书写实例 组合电路行为级建模 always语句 条件语句 多路分支语句 循环语句 for while repeat forever 行为级建模示例   可以理解为对逻辑电路中各个门依次进行描述

    2024年04月13日
    浏览(49)
  • 【【Verilog典型电路设计之log函数的Verilog HDL设计】】

    log函数是一种典型的单目计算函数,与其相应的还有指数函数、三角函数等。对于单目计算函数的硬件加速器设计一般两种简单方法:一种是查找表的方式;一种是使用泰勒级数展开成多项式进行近似计算。这两种方式在设计方法和精确度方面有很大的不同。查找表方式是通过

    2024年02月11日
    浏览(44)
  • 【Verilog HDL实践】汽车尾灯控制电路实现

    【Verilog HDL实践】汽车尾灯控制电路实现 使用芯片:Altera Cyclone® IV EP4CE22F17C6N FPGA 开发工具:Quartus Ⅱ 开发项目: 设计一个汽车尾灯控制电路。已知汽车左右两侧各有3个尾灯,采用K0、K1进行状态控制,要求尾灯按如下规则亮灭。 (1)汽车沿直线行驶时,两侧的指示灯全灭;

    2024年02月04日
    浏览(40)
  • Verilog HDL中模块参数传递的方法

    “parameter”是Verilog HDL中的一个,代表着参数型常量,即用parameter来定义一个标识符代表一个常量,这样可以提高程序的可读性与可维护性。 例如: parameter max_time = 10; //定义参数max_time为常量10 参数型常量在Verilog HDL中通常用来定义时间延迟和数据位宽。 一方面,对于

    2024年02月11日
    浏览(40)
  • verilog常用系统任务和函数

    在FPGA开发中编写仿真测试激励文件(testbench),经常会用到verilog的系统函数,使用系统函数非常方便,本文总结了常用的系统函数,并提供了说明和使用示例。 1、打开文件$fopen和关闭文件$fclose 打开文件$fopen函数 : 第1个参数:文件路径,绝对路径和相对路径均可。 第2个

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包