Bug 350 - LDSTCompUnit also needs to support zeroing on RA
Summary: LDSTCompUnit also needs to support zeroing on RA
Status: CONFIRMED
Alias: None
Product: Libre-SOC's first SoC
Classification: Unclassified
Component: Source Code (show other bugs)
Version: unspecified
Hardware: Other Linux
: Normal enhancement
Assignee: Cesar Strauss
URL:
Depends on:
Blocks: 383
  Show dependency treegraph
 
Reported: 2020-05-25 01:13 BST by Luke Kenneth Casson Leighton
Modified: 2020-06-30 17:02 BST (History)
1 user (show)

See Also:
NLnet milestone: NLnet.2019.02
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:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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