Skip to content

Commit 74539cd

Browse files
committed
Fix dma_write and dma_wait_write behavior for written data consistency.
1 parent 08f856f commit 74539cd

31 files changed

+2305
-1999
lines changed

examples/simulation_verilator/test_simulation_verilator.py

Lines changed: 194 additions & 186 deletions
Large diffs are not rendered by default.

examples/thread_add_ipxact/test_thread_add_ipxact.py

Lines changed: 86 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -55,103 +55,104 @@
5555
assign _saxi_bready = 1;
5656
assign _saxi_arcache = 3;
5757
assign _saxi_arprot = 0;
58-
wire [32-1:0] _tmp_0;
59-
assign _tmp_0 = _saxi_awaddr;
58+
reg [32-1:0] outstanding_wreq_count_0;
59+
wire [32-1:0] _tmp_1;
60+
assign _tmp_1 = _saxi_awaddr;
6061
6162
always @(*) begin
62-
saxi_awaddr = _tmp_0;
63+
saxi_awaddr = _tmp_1;
6364
end
6465
65-
wire [4-1:0] _tmp_1;
66-
assign _tmp_1 = _saxi_awcache;
66+
wire [4-1:0] _tmp_2;
67+
assign _tmp_2 = _saxi_awcache;
6768
6869
always @(*) begin
69-
saxi_awcache = _tmp_1;
70+
saxi_awcache = _tmp_2;
7071
end
7172
72-
wire [3-1:0] _tmp_2;
73-
assign _tmp_2 = _saxi_awprot;
73+
wire [3-1:0] _tmp_3;
74+
assign _tmp_3 = _saxi_awprot;
7475
7576
always @(*) begin
76-
saxi_awprot = _tmp_2;
77+
saxi_awprot = _tmp_3;
7778
end
7879
79-
wire _tmp_3;
80-
assign _tmp_3 = _saxi_awvalid;
80+
wire _tmp_4;
81+
assign _tmp_4 = _saxi_awvalid;
8182
8283
always @(*) begin
83-
saxi_awvalid = _tmp_3;
84+
saxi_awvalid = _tmp_4;
8485
end
8586
8687
assign _saxi_awready = saxi_awready;
87-
wire [32-1:0] _tmp_4;
88-
assign _tmp_4 = _saxi_wdata;
88+
wire [32-1:0] _tmp_5;
89+
assign _tmp_5 = _saxi_wdata;
8990
9091
always @(*) begin
91-
saxi_wdata = _tmp_4;
92+
saxi_wdata = _tmp_5;
9293
end
9394
94-
wire [4-1:0] _tmp_5;
95-
assign _tmp_5 = _saxi_wstrb;
95+
wire [4-1:0] _tmp_6;
96+
assign _tmp_6 = _saxi_wstrb;
9697
9798
always @(*) begin
98-
saxi_wstrb = _tmp_5;
99+
saxi_wstrb = _tmp_6;
99100
end
100101
101-
wire _tmp_6;
102-
assign _tmp_6 = _saxi_wvalid;
102+
wire _tmp_7;
103+
assign _tmp_7 = _saxi_wvalid;
103104
104105
always @(*) begin
105-
saxi_wvalid = _tmp_6;
106+
saxi_wvalid = _tmp_7;
106107
end
107108
108109
assign _saxi_wready = saxi_wready;
109110
assign _saxi_bresp = saxi_bresp;
110111
assign _saxi_bvalid = saxi_bvalid;
111-
wire _tmp_7;
112-
assign _tmp_7 = _saxi_bready;
112+
wire _tmp_8;
113+
assign _tmp_8 = _saxi_bready;
113114
114115
always @(*) begin
115-
saxi_bready = _tmp_7;
116+
saxi_bready = _tmp_8;
116117
end
117118
118-
wire [32-1:0] _tmp_8;
119-
assign _tmp_8 = _saxi_araddr;
119+
wire [32-1:0] _tmp_9;
120+
assign _tmp_9 = _saxi_araddr;
120121
121122
always @(*) begin
122-
saxi_araddr = _tmp_8;
123+
saxi_araddr = _tmp_9;
123124
end
124125
125-
wire [4-1:0] _tmp_9;
126-
assign _tmp_9 = _saxi_arcache;
126+
wire [4-1:0] _tmp_10;
127+
assign _tmp_10 = _saxi_arcache;
127128
128129
always @(*) begin
129-
saxi_arcache = _tmp_9;
130+
saxi_arcache = _tmp_10;
130131
end
131132
132-
wire [3-1:0] _tmp_10;
133-
assign _tmp_10 = _saxi_arprot;
133+
wire [3-1:0] _tmp_11;
134+
assign _tmp_11 = _saxi_arprot;
134135
135136
always @(*) begin
136-
saxi_arprot = _tmp_10;
137+
saxi_arprot = _tmp_11;
137138
end
138139
139-
wire _tmp_11;
140-
assign _tmp_11 = _saxi_arvalid;
140+
wire _tmp_12;
141+
assign _tmp_12 = _saxi_arvalid;
141142
142143
always @(*) begin
143-
saxi_arvalid = _tmp_11;
144+
saxi_arvalid = _tmp_12;
144145
end
145146
146147
assign _saxi_arready = saxi_arready;
147148
assign _saxi_rdata = saxi_rdata;
148149
assign _saxi_rresp = saxi_rresp;
149150
assign _saxi_rvalid = saxi_rvalid;
150-
wire _tmp_12;
151-
assign _tmp_12 = _saxi_rready;
151+
wire _tmp_13;
152+
assign _tmp_13 = _saxi_rready;
152153
153154
always @(*) begin
154-
saxi_rready = _tmp_12;
155+
saxi_rready = _tmp_13;
155156
end
156157
157158
reg [32-1:0] counter;
@@ -170,13 +171,13 @@
170171
reg __saxi_cond_5_1;
171172
reg signed [32-1:0] _th_ctrl_araddr_8;
172173
reg __saxi_cond_6_1;
173-
reg signed [32-1:0] axim_rdata_13;
174+
reg signed [32-1:0] axim_rdata_14;
174175
reg signed [32-1:0] _th_ctrl_v_9;
175176
reg __saxi_cond_7_1;
176-
reg signed [32-1:0] axim_rdata_14;
177+
reg signed [32-1:0] axim_rdata_15;
177178
reg __saxi_cond_8_1;
178179
assign _saxi_rready = (th_ctrl == 21) || (th_ctrl == 25) || (th_ctrl == 30);
179-
reg signed [32-1:0] axim_rdata_15;
180+
reg signed [32-1:0] axim_rdata_16;
180181
reg signed [32-1:0] _th_ctrl_c_10;
181182
reg signed [32-1:0] _th_ctrl_end_time_11;
182183
reg signed [32-1:0] _th_ctrl_time_12;
@@ -233,6 +234,7 @@
233234
_saxi_wvalid = 0;
234235
_saxi_araddr = 0;
235236
_saxi_arvalid = 0;
237+
outstanding_wreq_count_0 = 0;
236238
counter = 0;
237239
th_ctrl = th_ctrl_init;
238240
_th_ctrl_i_3 = 0;
@@ -248,12 +250,12 @@
248250
__saxi_cond_5_1 = 0;
249251
_th_ctrl_araddr_8 = 0;
250252
__saxi_cond_6_1 = 0;
251-
axim_rdata_13 = 0;
253+
axim_rdata_14 = 0;
252254
_th_ctrl_v_9 = 0;
253255
__saxi_cond_7_1 = 0;
254-
axim_rdata_14 = 0;
255-
__saxi_cond_8_1 = 0;
256256
axim_rdata_15 = 0;
257+
__saxi_cond_8_1 = 0;
258+
axim_rdata_16 = 0;
257259
_th_ctrl_c_10 = 0;
258260
_th_ctrl_end_time_11 = 0;
259261
_th_ctrl_time_12 = 0;
@@ -268,6 +270,7 @@
268270
269271
always @(posedge CLK) begin
270272
if(RST) begin
273+
outstanding_wreq_count_0 <= 0;
271274
_saxi_awaddr <= 0;
272275
_saxi_awvalid <= 0;
273276
__saxi_cond_0_1 <= 0;
@@ -312,6 +315,12 @@
312315
if(__saxi_cond_8_1) begin
313316
_saxi_arvalid <= 0;
314317
end
318+
if(_saxi_awvalid && _saxi_awready && !(_saxi_bvalid && _saxi_bready)) begin
319+
outstanding_wreq_count_0 <= outstanding_wreq_count_0 + 1;
320+
end
321+
if(!(_saxi_awvalid && _saxi_awready) && (_saxi_bvalid && _saxi_bready) && (outstanding_wreq_count_0 > 0)) begin
322+
outstanding_wreq_count_0 <= outstanding_wreq_count_0 - 1;
323+
end
315324
if((th_ctrl == 7) && (_saxi_awready || !_saxi_awvalid)) begin
316325
_saxi_awaddr <= _th_ctrl_awaddr_4;
317326
_saxi_awvalid <= 1;
@@ -446,10 +455,10 @@
446455
_th_ctrl_b_6 <= 0;
447456
_th_ctrl_start_time_7 <= 0;
448457
_th_ctrl_araddr_8 <= 0;
449-
axim_rdata_13 <= 0;
450-
_th_ctrl_v_9 <= 0;
451458
axim_rdata_14 <= 0;
459+
_th_ctrl_v_9 <= 0;
452460
axim_rdata_15 <= 0;
461+
axim_rdata_16 <= 0;
453462
_th_ctrl_c_10 <= 0;
454463
_th_ctrl_end_time_11 <= 0;
455464
_th_ctrl_time_12 <= 0;
@@ -550,14 +559,14 @@
550559
end
551560
th_ctrl_21: begin
552561
if(_saxi_rready && _saxi_rvalid) begin
553-
axim_rdata_13 <= _saxi_rdata;
562+
axim_rdata_14 <= _saxi_rdata;
554563
end
555564
if(_saxi_rready && _saxi_rvalid) begin
556565
th_ctrl <= th_ctrl_22;
557566
end
558567
end
559568
th_ctrl_22: begin
560-
_th_ctrl_v_9 <= axim_rdata_13;
569+
_th_ctrl_v_9 <= axim_rdata_14;
561570
th_ctrl <= th_ctrl_23;
562571
end
563572
th_ctrl_23: begin
@@ -574,14 +583,14 @@
574583
end
575584
th_ctrl_25: begin
576585
if(_saxi_rready && _saxi_rvalid) begin
577-
axim_rdata_14 <= _saxi_rdata;
586+
axim_rdata_15 <= _saxi_rdata;
578587
end
579588
if(_saxi_rready && _saxi_rvalid) begin
580589
th_ctrl <= th_ctrl_26;
581590
end
582591
end
583592
th_ctrl_26: begin
584-
_th_ctrl_v_9 <= axim_rdata_14;
593+
_th_ctrl_v_9 <= axim_rdata_15;
585594
th_ctrl <= th_ctrl_27;
586595
end
587596
th_ctrl_27: begin
@@ -598,14 +607,14 @@
598607
end
599608
th_ctrl_30: begin
600609
if(_saxi_rready && _saxi_rvalid) begin
601-
axim_rdata_15 <= _saxi_rdata;
610+
axim_rdata_16 <= _saxi_rdata;
602611
end
603612
if(_saxi_rready && _saxi_rvalid) begin
604613
th_ctrl <= th_ctrl_31;
605614
end
606615
end
607616
th_ctrl_31: begin
608-
_th_ctrl_c_10 <= axim_rdata_15;
617+
_th_ctrl_c_10 <= axim_rdata_16;
609618
th_ctrl <= th_ctrl_32;
610619
end
611620
th_ctrl_32: begin
@@ -695,13 +704,13 @@
695704
localparam _saxi_shift = 2;
696705
reg [32-1:0] _saxi_register_fsm;
697706
localparam _saxi_register_fsm_init = 0;
698-
reg [32-1:0] _tmp_0;
699-
reg _tmp_1;
700-
reg _tmp_2;
701-
reg _tmp_3;
702-
reg _tmp_4;
703-
assign saxi_awready = (_saxi_register_fsm == 0) && (!_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3);
704-
assign saxi_arready = (_saxi_register_fsm == 0) && (!_tmp_2 && !_tmp_1 && _tmp_4 && !_tmp_3);
707+
reg [32-1:0] addr_0;
708+
reg writevalid_1;
709+
reg readvalid_2;
710+
reg prev_awvalid_3;
711+
reg prev_arvalid_4;
712+
assign saxi_awready = (_saxi_register_fsm == 0) && (!writevalid_1 && !readvalid_2 && !saxi_bvalid && prev_awvalid_3);
713+
assign saxi_arready = (_saxi_register_fsm == 0) && (!readvalid_2 && !writevalid_1 && prev_arvalid_4 && !prev_awvalid_3);
705714
reg [_saxi_maskwidth-1:0] _tmp_5;
706715
wire signed [32-1:0] _tmp_6;
707716
assign _tmp_6 = (_tmp_5 == 0)? _saxi_register_0 :
@@ -741,11 +750,11 @@
741750
always @(posedge CLK) begin
742751
if(RST) begin
743752
saxi_bvalid <= 0;
744-
_tmp_3 <= 0;
745-
_tmp_4 <= 0;
746-
_tmp_1 <= 0;
747-
_tmp_2 <= 0;
748-
_tmp_0 <= 0;
753+
prev_awvalid_3 <= 0;
754+
prev_arvalid_4 <= 0;
755+
writevalid_1 <= 0;
756+
readvalid_2 <= 0;
757+
addr_0 <= 0;
749758
saxi_rdata <= 0;
750759
saxi_rvalid <= 0;
751760
_saxi_cond_0_1 <= 0;
@@ -783,16 +792,16 @@
783792
if(saxi_wvalid && saxi_wready) begin
784793
saxi_bvalid <= 1;
785794
end
786-
_tmp_3 <= saxi_awvalid;
787-
_tmp_4 <= saxi_arvalid;
788-
_tmp_1 <= 0;
789-
_tmp_2 <= 0;
795+
prev_awvalid_3 <= saxi_awvalid;
796+
prev_arvalid_4 <= saxi_arvalid;
797+
writevalid_1 <= 0;
798+
readvalid_2 <= 0;
790799
if(saxi_awready && saxi_awvalid && !saxi_bvalid) begin
791-
_tmp_0 <= saxi_awaddr;
792-
_tmp_1 <= 1;
800+
addr_0 <= saxi_awaddr;
801+
writevalid_1 <= 1;
793802
end else if(saxi_arready && saxi_arvalid) begin
794-
_tmp_0 <= saxi_araddr;
795-
_tmp_2 <= 1;
803+
addr_0 <= saxi_araddr;
804+
readvalid_2 <= 1;
796805
end
797806
if((_saxi_register_fsm == 1) && (saxi_rready || !saxi_rvalid)) begin
798807
saxi_rdata <= _tmp_6;
@@ -967,13 +976,13 @@
967976
end else begin
968977
case(_saxi_register_fsm)
969978
_saxi_register_fsm_init: begin
970-
if(_tmp_2 || _tmp_1) begin
971-
_tmp_5 <= (_tmp_0 >> _saxi_shift) & _saxi_mask;
979+
if(readvalid_2 || writevalid_1) begin
980+
_tmp_5 <= (addr_0 >> _saxi_shift) & _saxi_mask;
972981
end
973-
if(_tmp_2) begin
982+
if(readvalid_2) begin
974983
_saxi_register_fsm <= _saxi_register_fsm_1;
975984
end
976-
if(_tmp_1) begin
985+
if(writevalid_1) begin
977986
_saxi_register_fsm <= _saxi_register_fsm_3;
978987
end
979988
end

0 commit comments

Comments
 (0)