From: bugzilla-daemon@libre-soc.org
To: libre-riscv-dev@lists.libre-riscv.org
Subject: [libre-riscv-dev] [Bug 336] ALU CompUnit needs to recognise that RA (src1) can be zero
Date: Sun, 14 Jun 2020 23:21:04 +0000
Message-ID: <bug-336-13-uXHXs5tRyh@https.bugs.libre-soc.org/> (raw)
In-Reply-To: <bug-336-13@https.bugs.libre-soc.org/>
https://bugs.libre-soc.org/show_bug.cgi?id=336
--- Comment #59 from Cesar Strauss <cestrauss@gmail.com> ---
Created attachment 64
--> https://bugs.libre-soc.org/attachment.cgi?id=64&action=edit
Suggested pipeline design for the ALU Comp Unit
(In reply to Luke Kenneth Casson Leighton from comment #58)
> (In reply to Cesar Strauss from comment #57)
> > I don't really recall being much afflicted by this sort of issue. But then,
> > I normally try to avoid using latches as much as possible, this may be the
> > reason.
>
> yyeah they're not a "normal" way to do FSMs. however with some aspects being
> combinatorial and some being sync, we can't use "standard" techniques.
Did you consider implementing the ALU CompUnit as a pipeline?
I have put some thought into it. See the attached diagram.
First, consider that rel / go protocol seems to be compatible with the valid /
ready protocol, by connecting n.ready_o->rd.rel_i and rd.go_o->n.valid_i.
Likewise on the dest port. A pass-thru stage helps, I think.
In the idle state, the switches will be set as shown, disconnecting the
pipeline from the input and output ports, connecting them instead to a full
sink and empty source respectively. So, there can be no activity on these
ports.
At issue time, you transition the dest switch from straight to crossed. Also,
in each parallel arm, choose either one of the src or imm switches to cross.
The barrier / combiner joins the input data, and outputs n.valid_o only when
both p.valid_o are active. And then, it copies n.ready_i to both p.ready_i.
This combiner takes care to inform the ALU that all its operands input are
valid.
The ALU outputs directly to the dest port. holding the data itself, according
to the protocol, until the dest port can accept it.
Notice the little need for FSMs and latches in the design. The total complexity
is divided in manageable pieces, tucked inside the pipeline stages.
If all stages work in isolation, we can be confident that the design will work
when put together.
Does it make sense?
I think it is worth investing the time to implement this. If it turns up that
it works, we can be more confident on the design. Even apply the same principle
to LDSTCompUnit.
I can give it a try, in parallel with other tasks. It would be a nice way to
learn more about the pipeline API.
--
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: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-21 16:24 [libre-riscv-dev] [Bug 336] New: add indicator to Decode2ExecuteType that RA is zero bugzilla-daemon
2020-05-21 16:35 ` [libre-riscv-dev] [Bug 336] ALU CompUnit needs to recognise that RA (src1) can be zero bugzilla-daemon
2020-05-21 16:36 ` bugzilla-daemon
2020-05-21 21:12 ` bugzilla-daemon
2020-05-21 21:41 ` bugzilla-daemon
2020-05-22 1:11 ` bugzilla-daemon
2020-05-23 12:51 ` bugzilla-daemon
2020-05-23 13:07 ` bugzilla-daemon
2020-05-23 19:09 ` bugzilla-daemon
2020-05-23 19:16 ` bugzilla-daemon
2020-05-23 19:39 ` bugzilla-daemon
2020-05-23 20:52 ` bugzilla-daemon
2020-05-23 22:52 ` bugzilla-daemon
2020-05-23 23:10 ` bugzilla-daemon
2020-05-24 1:46 ` bugzilla-daemon
2020-05-24 3:33 ` bugzilla-daemon
2020-05-24 13:46 ` bugzilla-daemon
2020-05-24 14:00 ` bugzilla-daemon
2020-05-24 14:37 ` bugzilla-daemon
2020-05-24 14:44 ` bugzilla-daemon
2020-05-24 15:07 ` bugzilla-daemon
2020-05-24 20:01 ` bugzilla-daemon
2020-05-24 20:29 ` bugzilla-daemon
2020-05-24 20:41 ` bugzilla-daemon
2020-05-25 0:14 ` bugzilla-daemon
2020-05-25 0:56 ` bugzilla-daemon
2020-05-25 1:19 ` bugzilla-daemon
2020-05-25 1:27 ` bugzilla-daemon
2020-05-25 1:31 ` bugzilla-daemon
2020-05-25 2:21 ` bugzilla-daemon
2020-05-25 2:29 ` bugzilla-daemon
2020-05-25 4:05 ` bugzilla-daemon
2020-05-25 7:28 ` bugzilla-daemon
2020-05-25 9:42 ` bugzilla-daemon
2020-05-25 10:43 ` bugzilla-daemon
2020-05-25 15:14 ` bugzilla-daemon
2020-05-25 15:25 ` bugzilla-daemon
2020-05-25 15:32 ` bugzilla-daemon
2020-05-25 23:06 ` bugzilla-daemon
2020-05-25 23:41 ` bugzilla-daemon
2020-05-26 10:01 ` bugzilla-daemon
2020-05-26 10:15 ` bugzilla-daemon
2020-05-26 16:29 ` bugzilla-daemon
2020-05-26 17:22 ` bugzilla-daemon
2020-05-28 10:44 ` bugzilla-daemon
2020-05-31 16:42 ` bugzilla-daemon
2020-06-01 11:09 ` bugzilla-daemon
2020-06-01 11:46 ` bugzilla-daemon
2020-06-01 11:55 ` bugzilla-daemon
2020-06-01 12:01 ` bugzilla-daemon
2020-06-01 12:02 ` bugzilla-daemon
2020-06-01 21:50 ` bugzilla-daemon
2020-06-01 22:04 ` bugzilla-daemon
2020-06-02 23:06 ` bugzilla-daemon
2020-06-06 20:33 ` bugzilla-daemon
2020-06-06 20:53 ` bugzilla-daemon
2020-06-06 21:20 ` bugzilla-daemon
2020-06-06 22:38 ` bugzilla-daemon
2020-06-07 20:35 ` bugzilla-daemon
2020-06-07 22:55 ` bugzilla-daemon
2020-06-08 1:20 ` bugzilla-daemon
2020-06-08 1:28 ` bugzilla-daemon
2020-06-09 12:36 ` bugzilla-daemon
2020-06-09 12:43 ` bugzilla-daemon
2020-06-14 23:21 ` bugzilla-daemon [this message]
2020-06-14 23:42 ` 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-336-13-uXHXs5tRyh@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