From: bugzilla-daemon@libre-soc.org
To: libre-riscv-dev@lists.libre-riscv.org
Subject: [libre-riscv-dev] [Bug 318] fix LDSTCompUnit
Date: Sun, 17 May 2020 13:20:21 +0000
Message-ID: <bug-318-13-pbbCyAeC2l@https.bugs.libre-soc.org/> (raw)
In-Reply-To: <bug-318-13@https.bugs.libre-soc.org/>
https://bugs.libre-soc.org/show_bug.cgi?id=318
--- Comment #7 from Luke Kenneth Casson Leighton <lkcl@lkcl.net> ---
On Sun, May 17, 2020 at 1:59 PM Cesar Strauss <cestrauss@gmail.com> wrote:
> I think I have enough information available, to proceed. I'm beginning
> already to have some understanding of the problem at hand.
there are *eight* possible input-combinations that the FSM has to
handle, based on:
* op: LD or ST
* mode: immediate or indexed address-calculation (termed "Effective Address")
* update: EA is to be outputted as a *SECOND* register yes/no
these 8 permutations make the FSM riiiiidiculouslly complicated and
there's really nothing that can be done about it: we need to be
compliant with POWER9 requirements.
* op LD/ST will cause the FSM to ignore operand3 if op == LD.
this has to include *NOT* requesting operand3 (not setting rd.req[2])
however because it is a LD, the LD data will be latched from the
L0CacheBuffer port: thus when that happens, wr.req[0] MUST send out
a request for the REGFILE write port. when this is available,
wr.go[0] will be activated for ONE cycle.
after that one cycle, wr.req[0] MUST be dropped.
* if op == ST, operand 3 contains the value to be stored, so must be
rd.req[2]-ested.
however because it is a ST, there is no LD data to output, and therefore
wr.req[0] must not be activated.
* immediate-mode will cause the FSM to use the immediate *instead* of
operand2.
therefore, in immediate-mode, operand2 must *NOT* be requested
(rd.req[1] must never be set).
* update=TRUE will cause the FSM to activate wr.req[1] and wait for wr.go[1]
when wr.go[1] is activated, this indicates to the FSM that the latched
address (EA) in addr_o is being broadcast onto a REGFILE WRITE port.
it will get *one* chance to do that (one cycle), and MUST drop wr.req[1]
on the next cycle: its job is then "done"
this is *independent* of the logic that manages / monitors the LD/ST
Port (!)
why? because the address computation (EA) is an independent parallel
path from actual LD/ST
it's... just... ridiculously complicated.
at the very least if you can review it, and greatly improve the unit
tests, it would be fantastic.
as i said i *might* have got it working, 10 minutes ago, however the
complexity is so high i am not in the slightest bit confident of that,
nor of the correctness of the unit tests.
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
libre-riscv-dev mailing list
libre-riscv-dev@lists.libre-riscv.org
http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev
next prev parent reply index
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-17 10:08 [libre-riscv-dev] [Bug 318] New: " bugzilla-daemon
2020-05-17 10:09 ` [libre-riscv-dev] [Bug 318] " bugzilla-daemon
2020-05-17 10:10 ` bugzilla-daemon
2020-05-17 10:31 ` bugzilla-daemon
2020-05-17 10:35 ` bugzilla-daemon
2020-05-17 10:51 ` bugzilla-daemon
2020-05-17 11:02 ` bugzilla-daemon
2020-05-17 13:20 ` bugzilla-daemon [this message]
2020-05-17 14:44 ` bugzilla-daemon
2020-05-17 16:43 ` bugzilla-daemon
2020-05-17 17:06 ` bugzilla-daemon
2020-05-17 23:01 ` bugzilla-daemon
2020-05-17 23:31 ` bugzilla-daemon
2020-05-18 4:09 ` bugzilla-daemon
2020-05-18 16:26 ` bugzilla-daemon
2020-05-18 16:38 ` bugzilla-daemon
2020-05-18 16:56 ` bugzilla-daemon
2020-05-18 17:19 ` bugzilla-daemon
2020-05-20 3:09 ` bugzilla-daemon
2020-05-20 3:17 ` bugzilla-daemon
2020-05-20 14:40 ` bugzilla-daemon
2020-05-21 12:05 ` bugzilla-daemon
2020-05-21 12:58 ` bugzilla-daemon
2020-05-21 17:55 ` bugzilla-daemon
2020-05-25 0:14 ` bugzilla-daemon
2020-06-10 16:44 ` bugzilla-daemon
2020-06-10 17:20 ` bugzilla-daemon
2020-06-11 22:58 ` bugzilla-daemon
2020-06-11 23:22 ` bugzilla-daemon
2020-06-12 10:58 ` bugzilla-daemon
2020-06-12 11:13 ` bugzilla-daemon
2020-06-12 11:15 ` bugzilla-daemon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bug-318-13-pbbCyAeC2l@https.bugs.libre-soc.org/ \
--to=bugzilla-daemon@libre-soc.org \
--cc=libre-riscv-dev@lists.libre-riscv.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Libre RISC-V Mailing list Archives (accessible via public-inbox)
Archives are clonable: git clone --mirror https://inbox.libre-soc.org/libre-riscv-dev
Example config snippet for mirrors
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git