Skip to content

Commit 011031b

Browse files
committed
Bug fix: A bug of AXI-slave interface that dismisses one of simultaneous read/write requests is fixed.
1 parent db95fe0 commit 011031b

File tree

8 files changed

+36
-34
lines changed

8 files changed

+36
-34
lines changed

examples/thread_add_ipxact/test_thread_add_ipxact.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -700,8 +700,8 @@
700700
reg _tmp_2;
701701
reg _tmp_3;
702702
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;
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);
705705
reg [_saxi_maskwidth-1:0] _tmp_5;
706706
wire signed [32-1:0] _tmp_6;
707707
assign _tmp_6 = (_tmp_5 == 0)? _saxi_register_0 :

examples/thread_embedded_verilog_ipcore/test_thread_embedded_verilog_ipxact.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,8 +1258,8 @@
12581258
reg _tmp_2;
12591259
reg _tmp_3;
12601260
reg _tmp_4;
1261-
assign saxi_awready = (_saxi_register_fsm == 0) && !_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3;
1262-
assign saxi_arready = (_saxi_register_fsm == 0) && !_tmp_2 && !_tmp_1 && _tmp_4;
1261+
assign saxi_awready = (_saxi_register_fsm == 0) && (!_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3);
1262+
assign saxi_arready = (_saxi_register_fsm == 0) && (!_tmp_2 && !_tmp_1 && _tmp_4 && !_tmp_3);
12631263
reg [_saxi_maskwidth-1:0] _tmp_5;
12641264
wire signed [32-1:0] _tmp_6;
12651265
assign _tmp_6 = (_tmp_5 == 0)? _saxi_register_0 :

examples/thread_ipxact/test_thread_ipxact.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -641,8 +641,8 @@
641641
reg _tmp_2;
642642
reg _tmp_3;
643643
reg _tmp_4;
644-
assign saxi_awready = (_saxi_register_fsm == 0) && !_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3;
645-
assign saxi_arready = (_saxi_register_fsm == 0) && !_tmp_2 && !_tmp_1 && _tmp_4;
644+
assign saxi_awready = (_saxi_register_fsm == 0) && (!_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3);
645+
assign saxi_arready = (_saxi_register_fsm == 0) && (!_tmp_2 && !_tmp_1 && _tmp_4 && !_tmp_3);
646646
reg [_saxi_maskwidth-1:0] _tmp_5;
647647
wire signed [32-1:0] _tmp_6;
648648
assign _tmp_6 = (_tmp_5 == 0)? _saxi_register_0 :

examples/thread_memcpy_ipxact/test_thread_memcpy_ipxact.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,8 +1255,8 @@
12551255
reg _tmp_2;
12561256
reg _tmp_3;
12571257
reg _tmp_4;
1258-
assign saxi_awready = (_saxi_register_fsm == 0) && !_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3;
1259-
assign saxi_arready = (_saxi_register_fsm == 0) && !_tmp_2 && !_tmp_1 && _tmp_4;
1258+
assign saxi_awready = (_saxi_register_fsm == 0) && (!_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3);
1259+
assign saxi_arready = (_saxi_register_fsm == 0) && (!_tmp_2 && !_tmp_1 && _tmp_4 && !_tmp_3);
12601260
reg [_saxi_maskwidth-1:0] _tmp_5;
12611261
wire signed [32-1:0] _tmp_6;
12621262
assign _tmp_6 = (_tmp_5 == 0)? _saxi_register_0 :

examples/thread_verilog_submodule_ipxact/test_thread_verilog_submodule_ipxact.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,8 +1266,8 @@
12661266
reg _tmp_2;
12671267
reg _tmp_3;
12681268
reg _tmp_4;
1269-
assign saxi_awready = (_saxi_register_fsm == 0) && !_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3;
1270-
assign saxi_arready = (_saxi_register_fsm == 0) && !_tmp_2 && !_tmp_1 && _tmp_4;
1269+
assign saxi_awready = (_saxi_register_fsm == 0) && (!_tmp_1 && !_tmp_2 && !saxi_bvalid && _tmp_3);
1270+
assign saxi_arready = (_saxi_register_fsm == 0) && (!_tmp_2 && !_tmp_1 && _tmp_4 && !_tmp_3);
12711271
reg [_saxi_maskwidth-1:0] _tmp_5;
12721272
wire signed [32-1:0] _tmp_6;
12731273
assign _tmp_6 = (_tmp_5 == 0)? _saxi_register_0 :

tests/extension/types_/axi_/slave_readwrite/test_types_axi_slave_readwrite.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -672,8 +672,8 @@
672672
reg _tmp_3;
673673
reg _tmp_4;
674674
reg _tmp_5;
675-
assign myaxi_awready = (fsm == 0) && !_tmp_2 && !_tmp_3 && !myaxi_bvalid && _tmp_4;
676-
assign myaxi_arready = (fsm == 0) && !_tmp_3 && !_tmp_2 && _tmp_5;
675+
assign myaxi_awready = (fsm == 0) && (!_tmp_2 && !_tmp_3 && !myaxi_bvalid && _tmp_4);
676+
assign myaxi_arready = (fsm == 0) && (!_tmp_3 && !_tmp_2 && _tmp_5 && !_tmp_4);
677677
reg [32-1:0] rdata;
678678
reg _myaxi_cond_0_1;
679679
assign myaxi_wready = fsm == 100;

tests/extension/types_/axi_/slave_readwrite_lite/test_types_axi_slave_readwrite_lite.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,8 @@
485485
reg _tmp_2;
486486
reg _tmp_3;
487487
reg _tmp_4;
488-
assign myaxi_awready = (fsm == 0) && !_tmp_1 && !_tmp_2 && !myaxi_bvalid && _tmp_3;
489-
assign myaxi_arready = (fsm == 0) && !_tmp_2 && !_tmp_1 && _tmp_4;
488+
assign myaxi_awready = (fsm == 0) && (!_tmp_1 && !_tmp_2 && !myaxi_bvalid && _tmp_3);
489+
assign myaxi_arready = (fsm == 0) && (!_tmp_2 && !_tmp_1 && _tmp_4 && !_tmp_3);
490490
reg [32-1:0] rdata;
491491
reg _myaxi_cond_0_1;
492492
assign myaxi_wready = fsm == 100;

veriloggen/types/axi.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,16 +1551,17 @@ def pull_request_counter(self, cond, counter=None):
15511551
prev_arvalid(self.raddr.arvalid)
15521552
)
15531553

1554-
writeval = (vtypes.Ands(vtypes.Not(writevalid), vtypes.Not(readvalid),
1555-
vtypes.Not(self.wresp.bvalid),
1556-
prev_awvalid) if ready is None else
1557-
vtypes.Ands(ready, vtypes.Not(writevalid), vtypes.Not(readvalid),
1558-
vtypes.Not(self.wresp.bvalid),
1559-
prev_awvalid))
1560-
readval = (vtypes.Ands(vtypes.Not(readvalid), vtypes.Not(writevalid),
1561-
prev_arvalid) if ready is None else
1562-
vtypes.Ands(ready, vtypes.Not(readvalid), vtypes.Not(writevalid),
1563-
prev_arvalid))
1554+
writeval = vtypes.Ands(vtypes.Not(writevalid), vtypes.Not(readvalid),
1555+
vtypes.Not(self.wresp.bvalid),
1556+
prev_awvalid)
1557+
if ready is not None:
1558+
writeval = vtypes.Ands(ready, writeval)
1559+
1560+
readval = vtypes.Ands(vtypes.Not(readvalid), vtypes.Not(writevalid),
1561+
prev_arvalid, vtypes.Not(prev_awvalid))
1562+
1563+
if ready is not None:
1564+
readval = vtypes.Ands(ready, readval)
15641565

15651566
_connect_ready(self.waddr.awready._get_module(),
15661567
self.waddr.awready, writeval)
@@ -2094,16 +2095,17 @@ def pull_request(self, cond):
20942095
prev_arvalid(self.raddr.arvalid)
20952096
)
20962097

2097-
writeval = (vtypes.Ands(vtypes.Not(writevalid), vtypes.Not(readvalid),
2098-
vtypes.Not(self.wresp.bvalid),
2099-
prev_awvalid) if ready is None else
2100-
vtypes.Ands(ready, vtypes.Not(writevalid), vtypes.Not(readvalid),
2101-
vtypes.Not(self.wresp.bvalid),
2102-
prev_awvalid))
2103-
readval = (vtypes.Ands(vtypes.Not(readvalid), vtypes.Not(writevalid),
2104-
prev_arvalid) if ready is None else
2105-
vtypes.Ands(ready, vtypes.Not(readvalid), vtypes.Not(writevalid),
2106-
prev_arvalid))
2098+
writeval = vtypes.Ands(vtypes.Not(writevalid), vtypes.Not(readvalid),
2099+
vtypes.Not(self.wresp.bvalid),
2100+
prev_awvalid)
2101+
if ready is not None:
2102+
writeval = vtypes.Ands(ready, writeval)
2103+
2104+
readval = vtypes.Ands(vtypes.Not(readvalid), vtypes.Not(writevalid),
2105+
prev_arvalid, vtypes.Not(prev_awvalid))
2106+
2107+
if ready is not None:
2108+
readval = vtypes.Ands(ready, readval)
21072109

21082110
_connect_ready(self.waddr.awready._get_module(),
21092111
self.waddr.awready, writeval)

0 commit comments

Comments
 (0)