Verilog语法【repeat和task】

1.task

语法格式:

task my_task;
input a, b;
inout c;
output d, e;
begin
. . . // statements that perform the work of the task
. . .
c = foo1; // the assignments that initialize result regs
d = foo2;
e = foo3;
end
endtask

语法格式二:

task my_task (input a, b, inout c, output d, e);
begin
. . . // statements that perform the work of the task
. . .
c = foo1; // the assignments that initialize result regs
d = foo2;
e = foo3;
end
endtask

使用:

my_task (v, w, x, y, z);

2.repeat

用法一:

repeat(10)begin
...//执行10次
end 

用法二:

repeat(10)@(posedge clk);//延迟10个时钟周期
a=b;

或者直接写成:

a=repeat(10)@(posedge clk) b ;

3.testbench使用举例

实现流水灯效果的一个testbench,迅速掌握task和repeat的用法。

`timescale 1ns/1ns
`define clock_period 20
module traffic_lights;
reg 
	clock, 
	red, 
	amber, 
	green;
	
parameter 
	on = 1, 
	off = 0; 
//产生时钟	
always #(`clock_period/2)clock = ~clock;
//设置初始值
initial begin 
	red = off;
	amber = off;
	green = off;
	clock = 1;
end 
//主程序
always begin
	repeat(10)begin 
		red = on;
		light(red,(`clock_period*10)); 
		green = on;
		light(green,(`clock_period*10)); 
		amber = on;
		light(amber,(`clock_period*10)); 
	end
	#100;
	$stop;
end
//task
task light;
	output color;
	input [31:0] delay;
	color = repeat (delay) @ (posedge clock) off;
endtask

endmodule 

仿真结果
在这里插入图片描述

  • 16
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值