Bug 350

Summary: LDSTCompUnit also needs to support zeroing on RA
Product: Libre-SOC's first SoC Reporter: Luke Kenneth Casson Leighton <lkcl>
Component: Source CodeAssignee: Cesar Strauss <cestrauss>
Status: CONFIRMED ---    
Severity: enhancement CC: libre-soc-bugs
Priority: Normal    
Version: unspecified   
Hardware: Other   
OS: Linux   
See Also: https://bugs.libre-soc.org/show_bug.cgi?id=318
https://bugs.libre-soc.org/show_bug.cgi?id=336
https://bugs.libre-soc.org/show_bug.cgi?id=356
https://bugs.libre-soc.org/show_bug.cgi?id=1036
NLnet milestone: NLnet.2019.02.012 total budget (EUR) for completion of task and all subtasks: 0
budget (EUR) for this task, excluding subtasks' budget: 0 parent task for budget allocation:
child tasks for budget allocation: The table of payments (in EUR) for this task; TOML format:
Bug Depends on:    
Bug Blocks: 383    

Description Luke Kenneth Casson Leighton 2020-05-25 01:13:41 BST
https://libre-soc.org/openpower/isa/fixedload/

noted that zeroing on RA is possible
Comment 1 Luke Kenneth Casson Leighton 2020-05-25 05:03:04 BST
added, untested, however may have a block when both zero and immediate set.
Comment 2 Luke Kenneth Casson Leighton 2020-05-25 12:46:13 BST
(In reply to Luke Kenneth Casson Leighton from comment #1)
> added, untested, however may have a block when both zero and immediate set.

it's fine.  unit test modified as follows:

+    rd = 0b00
+    if not imm_ok:
+        rd |= 0b10
+    if not zero_a:
+        rd |= 0b01
+
+    if rd:
+        yield dut.rd.go.eq(rd)
+        yield from wait_for(dut.rd.rel)
+        yield dut.rd.go.eq(0)
Comment 3 Luke Kenneth Casson Leighton 2020-05-25 12:57:49 BST
cesar this one likewise needs similar tests to the MultiCompUnit, might even
be able to share the same base classes at some point.

again it needs that "multi-process" simulation model:

* one function doing setup, setting oper_i, issue_i, then monitoring busy_o
  before exiting

* another that checks busy_o and, when set, proceeds to monitor a single
  bit of rd.req, sets the corresponding bit of rd.go for one cycle, then
  monitors busy_o before exiting

* likewise for write requests.

this is exactly the same as needed for MultiCompUnit (up to this point).
the additions obviously are to have extra functions that:

* monitor req_adr_o and set go_adr_i
* monitor req_st_o and set go_st_i
* check the address and the data afterwards