Skip to content

Commit 3dec09b

Browse files
committed
Better reporting and safer operation on mode switches
1 parent ff8cb7f commit 3dec09b

File tree

4 files changed

+50
-11
lines changed

4 files changed

+50
-11
lines changed

src/ttboard/demoboard.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ def apply_user_config(self, design:Design):
452452
RPMode.ASIC_RP_CONTROL: True,
453453
RPMode.ASIC_MANUAL_INPUTS: True
454454
}
455+
455456
if not self.apply_configs:
456457
log.debug(f'apply user conf: disabled')
457458
# don't wanna

src/ttboard/pins/pins.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,16 @@ def __init__(self, mode:int=RPMode.SAFE):
144144
self.pin_hk_csb = self.muxCtrl.ctrlpin.raw_pin
145145
self._allpins['hk_csb'] = self.hk_csb
146146

147-
self.mode = mode
148147
self._init_ioports()
148+
self.mode = mode
149149

150150

151151

152152
def _init_ioports(self):
153153
# Note: these are named according the the ASICs point of view
154154
# we can write ui_in, we read uo_out
155155
port_defs = [
156-
('uo_out', platform.read_output_byte, platform.write_output_byte),
156+
('uo_out', platform.read_output_byte, None),
157157
('ui_in', platform.read_input_byte, platform.write_input_byte),
158158
('uio_in', platform.read_bidir_byte, platform.write_bidir_byte),
159159
('uio_out', platform.read_bidir_byte, None)
@@ -181,21 +181,28 @@ def mode(self):
181181
return self._mode
182182

183183
@mode.setter
184-
def mode(self, setTo:int):
184+
def mode(self, set_mode:int):
185185
startupMap = {
186186
RPModeDEVELOPMENT.STANDALONE: self.begin_standalone,
187187
RPMode.ASIC_RP_CONTROL: self.begin_asiconboard,
188188
RPMode.ASIC_MANUAL_INPUTS: self.begin_asic_manual_inputs,
189189
RPMode.SAFE: self.begin_safe
190190
}
191191

192-
if setTo not in startupMap:
193-
setTo = RPMode.SAFE
192+
if set_mode not in startupMap:
193+
set_mode = RPMode.SAFE
194194

195-
self._mode = setTo
196-
log.info(f'Setting mode to {RPMode.to_string(setTo)}')
197-
beginFunc = startupMap[setTo]
195+
self._mode = set_mode
196+
log.info(f'Setting mode to {RPMode.to_string(set_mode)}')
197+
beginFunc = startupMap[set_mode]
198198
beginFunc()
199+
if set_mode == RPMode.ASIC_RP_CONTROL:
200+
self.ui_in.byte_write = platform.write_input_byte
201+
self.uio_in.byte_write = platform.write_bidir_byte
202+
else:
203+
self.ui_in.byte_write = None
204+
self.uio_in.byte_write = None
205+
199206

200207
def begin_inputs_all(self):
201208

src/ttboard/ports/io.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,32 @@ def __init__(self, name:str, read_byte_fn=None, write_byte_fn=None):
1515
self.port = port
1616

1717

18+
self.byte_read = read_byte_fn
19+
self.byte_write = write_byte_fn
20+
21+
@property
22+
def is_readable(self):
23+
return self.port.is_readable
24+
25+
@property
26+
def is_writeable(self):
27+
return self.port.is_readable
28+
29+
@property
30+
def byte_read(self):
31+
return self.port.byte_read
32+
@byte_read.setter
33+
def byte_read(self, func):
34+
self.port.byte_read = func
35+
@property
36+
def byte_write(self):
37+
return self.port.byte_write
38+
39+
@byte_write.setter
40+
def byte_write(self, func):
41+
self.port.byte_write = func
42+
43+
1844
def __repr__(self):
1945
val = hex(int(self.value)) if self.port.is_readable else ''
2046
return f'<IO {self.port.name} {val}>'

src/ttboard/types/ioport.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
'''
77

88
from ttboard.types.range import Range
9+
import ttboard.log as logging
10+
log = logging.getLogger(__name__)
911

1012
class Port:
1113
def __init__(self, name:str, read_byte_fn=None, write_byte_fn=None):
@@ -23,18 +25,21 @@ def is_writeable(self):
2325

2426
def set_signal_val_int(self, vint:int):
2527
if self.byte_write is None:
26-
raise RuntimeError('writes not supported')
28+
log.error(f'writes not supported on {self.name}')
29+
return
2730
self.byte_write(vint)
2831

2932
def set_signal_val_binstr(self, vstr:str):
3033
if self.byte_write is None:
31-
raise RuntimeError('writes not supported')
34+
log.error(f'writes not supported on {self.name}')
35+
return
3236
self.byte_write(int(vstr, 2))
3337

3438

3539
def get_signal_val_binstr(self):
3640
if self.byte_read is None:
37-
raise RuntimeError('reads not supported')
41+
log.error(f'reads not supported on {self.name}')
42+
return
3843
v = self.byte_read()
3944
return f'{v:08b}'
4045

0 commit comments

Comments
 (0)