хотел сделать 2 эквивалентных куска генерации входных воздействий на фифо.
Код
initial
begin
fork
/////////////////////////////////////////////////////////////////////////
pulse_gen:
begin
forever
begin
randcase
1: rand_pulse = 1;
5: rand_pulse = 0;
endcase
@(posedge aclk);
end
end
/////////////////////////////////////////////////////////////////////////
push_data:
begin
wait(aresetn_done);
forever
begin
s_axis_tlast = 0;
s_axis_tuser = 0;
if (s_axis_tready == 1) // FIFO ready to receive data
begin
s_axis_tvalid = rand_pulse;
if (rand_pulse)
s_axis_tdata = $urandom_range(255,0);
@(posedge aclk);
end
else
begin
s_axis_tdata = 0;
@(posedge aclk);
end
end
end
/////////////////////////////////////////////////////////////////////////
join_none
end
begin
fork
/////////////////////////////////////////////////////////////////////////
pulse_gen:
begin
forever
begin
randcase
1: rand_pulse = 1;
5: rand_pulse = 0;
endcase
@(posedge aclk);
end
end
/////////////////////////////////////////////////////////////////////////
push_data:
begin
wait(aresetn_done);
forever
begin
s_axis_tlast = 0;
s_axis_tuser = 0;
if (s_axis_tready == 1) // FIFO ready to receive data
begin
s_axis_tvalid = rand_pulse;
if (rand_pulse)
s_axis_tdata = $urandom_range(255,0);
@(posedge aclk);
end
else
begin
s_axis_tdata = 0;
@(posedge aclk);
end
end
end
/////////////////////////////////////////////////////////////////////////
join_none
end
и
Код
always_ff @(posedge aclk)
begin
if (aresetn == 1'b0)
begin
s_axis_tvalid <= 0;
s_axis_tdata <= 0;
end
else
begin
s_axis_tvalid <= s_axis_tready & rand_pulse;
if (s_axis_tready & rand_pulse)
s_axis_tdata <= $urandom_range(255,0);
end
end
begin
if (aresetn == 1'b0)
begin
s_axis_tvalid <= 0;
s_axis_tdata <= 0;
end
else
begin
s_axis_tvalid <= s_axis_tready & rand_pulse;
if (s_axis_tready & rand_pulse)
s_axis_tdata <= $urandom_range(255,0);
end
end
получилось, что корка по-разному реагирует на входные воздействия в двух случаях.
в первом случае работает неверно (пропускается первый байт в пачке), во втором - все хорошо.
подскажите в чем проблема и как исправить?
спасибо.