赖瑾 /Jiin Lai
03/07/2023, 10:47 AMBow
03/08/2023, 1:33 AMKevin Jan
03/08/2023, 1:44 AMBow
03/08/2023, 1:49 AMzack
03/11/2023, 11:09 PMKevin Jan
03/12/2023, 4:58 AMzack
03/12/2023, 7:49 AMFUNCTIONAL SIM UNIT_DELAY=#1
這幾個 define 都有代進去了
->
+define+FUNCTIONAL+SIM+UNIT_DELAY=#1Kevin Jan
03/12/2023, 7:50 AMzack
03/12/2023, 8:00 AMKevin Jan
03/12/2023, 8:05 AMzack
03/12/2023, 8:19 AM赖瑾 /Jiin Lai
03/13/2023, 5:02 AMzack
03/20/2023, 1:23 AM赖瑾 /Jiin Lai
03/20/2023, 4:27 AMzack
03/20/2023, 9:45 AM赖瑾 /Jiin Lai
03/20/2023, 9:55 AMzack
03/20/2023, 2:36 PMPatrick Lin
03/20/2023, 3:42 PMPatrick Lin
03/20/2023, 3:43 PM赖瑾 /Jiin Lai
03/21/2023, 1:58 AMzack
03/21/2023, 4:05 AMzack
03/31/2023, 1:18 AM1'd1: begin
if ((~request[1])) begin
if (request[2]) begin
grant <= 2'd2;
end else begin
if (request[0]) begin
grant <= 1'd0;
從 1 跳到 0 的條件是
同一個 clock, (request[1] == 0) && (request[0] == 1)
但在 waveform 觀察到 時間 694412 ns ~ 694662 ns
request[1] 拉成 1 之後就沒有被清成 0
導致 grant 在 1 deadlock
1. 為什麼 request[1] 拉成 1
因為 top.uut.soc.core.VexRiscv.dBus_cmd_valid 拉成 1
這個詳細要再 trace
2. 為什麼 request[1] 沒有被清成 0
因為 top.uut.soc.core.shared_ack 沒有來
而 shared_ack 會來的條件綁定 top.uut.soc.core.slave_sel[6:0]
這時的 slave_sel 是 0 => 沒有人會回 shared_ack
結論:
slave_sel 為 0 的時候 不應該有 VexRiscv.dBus_cmd_valid 是 1 的情況發生
這導致 grant deadlock赖瑾 /Jiin Lai
03/31/2023, 5:38 AMzack
03/31/2023, 5:47 AMassign mgmtsoc_vexriscv_debug_bus_cyc = (shared_cyc & slave_sel[0]);
assign dff_bus_cyc = (shared_cyc & slave_sel[1]);
assign dff2_bus_cyc = (shared_cyc & slave_sel[2]);
assign mgmtsoc_litespimmap_bus_cyc = (shared_cyc & slave_sel[3]);
assign mprj_cyc = (shared_cyc & slave_sel[4]);
assign hk_cyc = (shared_cyc & slave_sel[5]);
assign mgmtsoc_wishbone_cyc = (shared_cyc & slave_sel[6]);
always @(*) begin
shared_ack = 1'd0;
shared_ack = ((((((mgmtsoc_vexriscv_debug_bus_ack | dff_bus_ack) | dff2_bus_ack) | mgmtsoc_litespimmap_bus_ack) | mprj_ack) | hk_ack) | mgmtsoc_wishbone_ack);
if (done) begin
shared_ack = 1'd1;
end
end
不過這個 done 在很久以後會來的樣子
assign done = (count == 1'd0);
if (wait_1) begin
if ((~done)) begin
count <= (count - 1'd1);
end
end else begin
count <= 20'd1000000;
end
赖瑾 /Jiin Lai
03/31/2023, 8:09 AMzack
03/31/2023, 8:50 AM赖瑾 /Jiin Lai
03/31/2023, 10:25 AM赖瑾 /Jiin Lai
03/31/2023, 10:26 AMzack
03/31/2023, 2:16 PMKevin Jan
04/23/2023, 2:22 AM