Skip to content

Commit 9e8c93e

Browse files
committed
Update and rework endpoints, update testbenches
1 parent 46fedf6 commit 9e8c93e

File tree

10 files changed

+713
-690
lines changed

10 files changed

+713
-690
lines changed

tb/axis_ep.py

Lines changed: 288 additions & 165 deletions
Large diffs are not rendered by default.

tb/i2c.py

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -25,37 +25,32 @@
2525
from myhdl import *
2626
import mmap
2727

28-
try:
29-
from queue import Queue
30-
except ImportError:
31-
from Queue import Queue
32-
3328
class I2CMaster(object):
3429
def __init__(self):
35-
self.command_queue = Queue()
36-
self.read_data_queue = Queue()
30+
self.command_queue = []
31+
self.read_data_queue = []
3732
self.has_logic = False
3833
self.clk = None
3934
self.busy = False
4035

4136
def init_read(self, address, length):
42-
self.command_queue.put(('r', address, length))
37+
self.command_queue.append(('r', address, length))
4338

4439
def init_write(self, address, data):
45-
self.command_queue.put(('w', address, data))
40+
self.command_queue.append(('w', address, data))
4641

4742
def idle(self):
48-
return self.command_queue.empty() and not self.busy
43+
return len(self.command_queue) == 0 and not self.busy
4944

5045
def wait(self):
5146
while not self.idle():
5247
yield self.clk.posedge
5348

5449
def read_data_ready(self):
55-
return not self.read_data_queue.empty()
50+
return len(self.read_data_queue) > 0
5651

5752
def get_read_data(self):
58-
return self.read_data_queue.get(False)
53+
return self.read_data_queue.pop(0)
5954

6055
def read(self, address, length):
6156
self.init_read(address, length)
@@ -68,16 +63,17 @@ def write(self, address, data):
6863
yield self.wait()
6964

7065
def create_logic(self,
71-
clk,
72-
rst,
73-
scl_i,
74-
scl_o,
75-
scl_t,
76-
sda_i,
77-
sda_o,
78-
sda_t,
79-
prescale=2,
80-
name=None):
66+
clk,
67+
rst,
68+
scl_i,
69+
scl_o,
70+
scl_t,
71+
sda_i,
72+
sda_o,
73+
sda_t,
74+
prescale=2,
75+
name=None
76+
):
8177

8278
if self.has_logic:
8379
raise Exception("Logic already instantiated!")
@@ -223,8 +219,8 @@ def logic():
223219
self.busy = False
224220

225221
# check for commands
226-
if not self.command_queue.empty():
227-
cmd = self.command_queue.get(False)
222+
if len(self.command_queue) > 0:
223+
cmd = self.command_queue.pop(0)
228224
self.busy = True
229225

230226
addr = cmd[1]
@@ -264,7 +260,7 @@ def logic():
264260
if name is not None:
265261
print("[%s] Read data a:0x%02x d:%s" % (name, addr, " ".join(("{:02x}".format(c) for c in bytearray(data)))))
266262

267-
self.read_data_queue.put((addr, data))
263+
self.read_data_queue.append((addr, data))
268264

269265
else:
270266
# bad command; ignore it
@@ -293,16 +289,17 @@ def write_mem(self, address, data):
293289
self.mem.write(data)
294290

295291
def create_logic(self,
296-
scl_i,
297-
scl_o,
298-
scl_t,
299-
sda_i,
300-
sda_o,
301-
sda_t,
302-
abw=2,
303-
address=0x50,
304-
latency=0,
305-
name=None):
292+
scl_i,
293+
scl_o,
294+
scl_t,
295+
sda_i,
296+
sda_o,
297+
sda_t,
298+
abw=2,
299+
address=0x50,
300+
latency=0,
301+
name=None
302+
):
306303

307304
if self.has_logic:
308305
raise Exception("Logic already instantiated!")

tb/test_i2c.py

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -63,44 +63,50 @@ def bench():
6363
# I2C master
6464
i2c_master_inst = i2c.I2CMaster()
6565

66-
i2c_master_logic = i2c_master_inst.create_logic(clk,
67-
rst,
68-
scl_i=m_scl_i,
69-
scl_o=m_scl_o,
70-
scl_t=m_scl_t,
71-
sda_i=m_sda_i,
72-
sda_o=m_sda_o,
73-
sda_t=m_sda_t,
74-
prescale=2,
75-
name='master')
66+
i2c_master_logic = i2c_master_inst.create_logic(
67+
clk,
68+
rst,
69+
scl_i=m_scl_i,
70+
scl_o=m_scl_o,
71+
scl_t=m_scl_t,
72+
sda_i=m_sda_i,
73+
sda_o=m_sda_o,
74+
sda_t=m_sda_t,
75+
prescale=2,
76+
name='master'
77+
)
7678

7779
# I2C memory model 1
7880
i2c_mem_inst1 = i2c.I2CMem(1024)
7981

80-
i2c_mem_logic1 = i2c_mem_inst1.create_logic(scl_i=s1_scl_i,
81-
scl_o=s1_scl_o,
82-
scl_t=s1_scl_t,
83-
sda_i=s1_sda_i,
84-
sda_o=s1_sda_o,
85-
sda_t=s1_sda_t,
86-
abw=2,
87-
address=0x50,
88-
latency=0,
89-
name='slave1')
82+
i2c_mem_logic1 = i2c_mem_inst1.create_logic(
83+
scl_i=s1_scl_i,
84+
scl_o=s1_scl_o,
85+
scl_t=s1_scl_t,
86+
sda_i=s1_sda_i,
87+
sda_o=s1_sda_o,
88+
sda_t=s1_sda_t,
89+
abw=2,
90+
address=0x50,
91+
latency=0,
92+
name='slave1'
93+
)
9094

9195
# I2C memory model 2
9296
i2c_mem_inst2 = i2c.I2CMem(1024)
9397

94-
i2c_mem_logic2 = i2c_mem_inst2.create_logic(scl_i=s2_scl_i,
95-
scl_o=s2_scl_o,
96-
scl_t=s2_scl_t,
97-
sda_i=s2_sda_i,
98-
sda_o=s2_sda_o,
99-
sda_t=s2_sda_t,
100-
abw=2,
101-
address=0x51,
102-
latency=1000,
103-
name='slave2')
98+
i2c_mem_logic2 = i2c_mem_inst2.create_logic(
99+
scl_i=s2_scl_i,
100+
scl_o=s2_scl_o,
101+
scl_t=s2_scl_t,
102+
sda_i=s2_sda_i,
103+
sda_o=s2_sda_o,
104+
sda_t=s2_sda_t,
105+
abw=2,
106+
address=0x51,
107+
latency=1000,
108+
name='slave2'
109+
)
104110

105111
@always_comb
106112
def bus():

0 commit comments

Comments
 (0)