Skip to content

Commit 425692a

Browse files
author
Jean-François Nguyen
authored
csr.wishbone: fix WishboneCSRBridge cycle counter.
1 parent f23dcc8 commit 425692a

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

nmigen_soc/csr/wishbone.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ def segment(index):
8484
with m.Default():
8585
m.d.sync += wb_bus.dat_r[segment(index)].eq(csr_bus.r_data)
8686
m.d.sync += wb_bus.ack.eq(1)
87-
m.d.sync += cycle.eq(0)
8887

8988
with m.Else():
9089
m.d.sync += wb_bus.ack.eq(0)
90+
91+
with m.If(wb_bus.ack):
9192
m.d.sync += cycle.eq(0)
9293

9394
return m

nmigen_soc/test/test_csr_wishbone.py

+20-10
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@ def sim_test():
5959
yield dut.wb_bus.dat_w.eq(0x55)
6060
yield
6161
yield
62-
yield dut.wb_bus.stb.eq(0)
6362
yield
6463
self.assertEqual((yield dut.wb_bus.ack), 1)
64+
yield dut.wb_bus.stb.eq(0)
65+
yield
6566
self.assertEqual((yield reg_1.r_count), 0)
6667
self.assertEqual((yield reg_1.w_count), 1)
6768
self.assertEqual((yield reg_1.data), 0x55)
@@ -71,9 +72,10 @@ def sim_test():
7172
yield dut.wb_bus.dat_w.eq(0xaa)
7273
yield
7374
yield
74-
yield dut.wb_bus.stb.eq(0)
7575
yield
76+
yield dut.wb_bus.stb.eq(0)
7677
self.assertEqual((yield dut.wb_bus.ack), 1)
78+
yield
7779
self.assertEqual((yield reg_2.r_count), 0)
7880
self.assertEqual((yield reg_2.w_count), 0)
7981
self.assertEqual((yield reg_2.data), 0)
@@ -83,9 +85,10 @@ def sim_test():
8385
yield dut.wb_bus.dat_w.eq(0xbb)
8486
yield
8587
yield
86-
yield dut.wb_bus.stb.eq(0)
8788
yield
8889
self.assertEqual((yield dut.wb_bus.ack), 1)
90+
yield dut.wb_bus.stb.eq(0)
91+
yield
8992
self.assertEqual((yield reg_2.r_count), 0)
9093
self.assertEqual((yield reg_2.w_count), 1)
9194
self.assertEqual((yield reg_2.data), 0xbbaa)
@@ -96,21 +99,23 @@ def sim_test():
9699
yield dut.wb_bus.stb.eq(1)
97100
yield
98101
yield
99-
yield dut.wb_bus.stb.eq(0)
100102
yield
101103
self.assertEqual((yield dut.wb_bus.ack), 1)
102104
self.assertEqual((yield dut.wb_bus.dat_r), 0x55)
105+
yield dut.wb_bus.stb.eq(0)
106+
yield
103107
self.assertEqual((yield reg_1.r_count), 1)
104108
self.assertEqual((yield reg_1.w_count), 1)
105109

106110
yield dut.wb_bus.adr.eq(1)
107111
yield dut.wb_bus.stb.eq(1)
108112
yield
109113
yield
110-
yield dut.wb_bus.stb.eq(0)
111114
yield
112115
self.assertEqual((yield dut.wb_bus.ack), 1)
113116
self.assertEqual((yield dut.wb_bus.dat_r), 0xaa)
117+
yield dut.wb_bus.stb.eq(0)
118+
yield
114119
self.assertEqual((yield reg_2.r_count), 1)
115120
self.assertEqual((yield reg_2.w_count), 1)
116121

@@ -120,10 +125,11 @@ def sim_test():
120125
yield dut.wb_bus.stb.eq(1)
121126
yield
122127
yield
123-
yield dut.wb_bus.stb.eq(0)
124128
yield
125129
self.assertEqual((yield dut.wb_bus.ack), 1)
126130
self.assertEqual((yield dut.wb_bus.dat_r), 0xbb)
131+
yield dut.wb_bus.stb.eq(0)
132+
yield
127133
self.assertEqual((yield reg_2.r_count), 1)
128134
self.assertEqual((yield reg_2.w_count), 1)
129135

@@ -154,9 +160,10 @@ def sim_test():
154160
yield
155161
yield
156162
yield
157-
yield dut.wb_bus.stb.eq(0)
158163
yield
159164
self.assertEqual((yield dut.wb_bus.ack), 1)
165+
yield dut.wb_bus.stb.eq(0)
166+
yield
160167
self.assertEqual((yield reg.r_count), 0)
161168
self.assertEqual((yield reg.w_count), 1)
162169
self.assertEqual((yield reg.data), 0x44332211)
@@ -170,9 +177,10 @@ def sim_test():
170177
yield
171178
yield
172179
yield
173-
yield dut.wb_bus.stb.eq(0)
174180
yield
175181
self.assertEqual((yield dut.wb_bus.ack), 1)
182+
yield dut.wb_bus.stb.eq(0)
183+
yield
176184
self.assertEqual((yield reg.r_count), 0)
177185
self.assertEqual((yield reg.w_count), 1)
178186
self.assertEqual((yield reg.data), 0x44332211)
@@ -186,10 +194,11 @@ def sim_test():
186194
yield
187195
yield
188196
yield
189-
yield dut.wb_bus.stb.eq(0)
190197
yield
191198
self.assertEqual((yield dut.wb_bus.ack), 1)
192199
self.assertEqual((yield dut.wb_bus.dat_r), 0x44332211)
200+
yield dut.wb_bus.stb.eq(0)
201+
yield
193202
self.assertEqual((yield reg.r_count), 1)
194203
self.assertEqual((yield reg.w_count), 1)
195204

@@ -203,10 +212,11 @@ def sim_test():
203212
yield
204213
yield
205214
yield
206-
yield dut.wb_bus.stb.eq(0)
207215
yield
208216
self.assertEqual((yield dut.wb_bus.ack), 1)
209217
self.assertEqual((yield dut.wb_bus.dat_r), 0x00332200)
218+
yield dut.wb_bus.stb.eq(0)
219+
yield
210220
self.assertEqual((yield reg.r_count), 1)
211221
self.assertEqual((yield reg.w_count), 1)
212222

0 commit comments

Comments
 (0)