내 작업 재귀를 사용할 때 직면 한 한 가지 문제를 이해하도록 도와주십시오. 따라서 enable 및 ddr_clk 신호를 추적해야하는 작업이 있습니다. 그것들은 비동기 신호이며 enable은 ddr_clk posedge 전에 나타날 수 있습니다. 이 경우 태스크는 enable이 하이 (high)가 될 때까지 기다려야한다. @ (posedge itf.ddr_clk)는 쓰기가 완료 될 때까지 일어난다.작업에서 재귀 사용 문제
task automatic write();
$display ("%t:\tdriver: write function", $time);
if (itf.enable == 1) begin
$display ("%t:\tdriver-write: ->writing in DUT: assiging wdata and waiting for ddr_clk posedge...", $time);
itf.wdata = req.data_wfifo_data; // assign and wait for clk posedge
fork
begin : wait_clock;
@ (posedge itf.ddr_clk)
$display ("%t:\tdriver-write: Got ddr_clk posedge, considering write done", $time);
end
@(itf.enable) // In case when enable goes to low before posedge
begin
$display ("%t:\tdriver-write: enable changed, re-calling write", $time);
disable wait_clock;
write;
end
join_any
end else
begin
$display ("%t:\tdriver-write-enable: waiting for enable...", $time);
@(itf.enable)
write;
end
$display ("%t:\tdriver: END write function", $time);
endtask
을 그리고 이것은 시뮬레이션 결과가주는 것입니다 : 내가 작업에서 재귀를 사용하고이를 구현하는 작업이 exitting 다음 여러 번 전화를하고있는 같은 시뮬레이션 시간에서
65490750.0 ps: driver: write function
65490750.0 ps: driver-write: ->writing in DUT: assiging data_wfifo_data and waiting for ddr_clk posedge...
65490850.0 ps: driver-write: enable changed, re-calling write
65490850.0 ps: driver: write function
65490850.0 ps: driver-write-enable: waiting for enable...
65490850.0 ps: driver-write: enable changed, re-calling write
65490850.0 ps: driver: write function
65490850.0 ps: driver-write-enable: waiting for enable...
65490850.0 ps: driver: END write function
65490850.0 ps: Driver: END Calling write task to write in DUT
.
행동에 대한 이해를 돕기 바랍니다. "disable wait_clock"문이 작동하지 않는다는 인상을 받았습니다 ...
불편을 끼쳐 드려 죄송합니다. 아마도 몇 가지 파형을 그릴 수 있습니까? –