多个时钟周期上的重复操作
verilog代码如下:在第一个时钟周期,sum初始化第一个值,在第4个时钟周期之后,动作流返回第一个事件控制表达式;disable位于reset中,以确保状态机正常进行初始化。
module add_4cycle(
output reg [5:0] sum,
input [3:0] data,
input clk,
input reset);
always@(posedge clk)
begin:add_loop
if(reset==1'b1)
disable add_loop;
else
sum<=data;
@(posedge clk)
if(reset==1'b1)
disable add_loop;
else
sum<=sum+data;
@(posedge clk)
if(reset==1'b1)
disable add_loop;
else
sum<=sum+data;
@(posedge clk)
if(reset==1'b1)
disable add_loop;
else
sum<=sum+data;
end
endmodule
tb代码如下:
module tb();
reg [3:0] data;
reg clk;
reg reset;
wire [5:0] sum;
parameter cycle=20;
initial
begin
clk=0;
forever #(cycle/2) clk=~clk;
end
task rst_n(
input [31:0]rst_time);
begin
reset=1&#