From: bugzilla-daemon@libre-soc.org
To: libre-riscv-dev@lists.libre-riscv.org
Subject: [libre-riscv-dev] [Bug 305] Create Pipelined ALU similar to alu_hier.py
Date: Mon, 11 May 2020 18:15:26 +0000
Message-ID: <bug-305-13-V0s7zy7OGH@https.bugs.libre-soc.org/> (raw)
In-Reply-To: <bug-305-13@https.bugs.libre-soc.org/>
https://bugs.libre-soc.org/show_bug.cgi?id=305
--- Comment #43 from Luke Kenneth Casson Leighton <lkcl@lkcl.net> ---
(In reply to Michael Nolan from comment #42)
> I went through the tables and double checked, the *only* ALU instructions
> that have 3 inputs are 2 registers and an immediate. It does not *need* 3
> register inputs.
yehyeh. ok.
really... normally, what would happen is that anything that's significantly
different like this would get put into its own Function Unit (into its own
ALU Pipeline).
then, there's no "switching about at the ALU side"
> However, some piece of hardware needs to order the inputs, I guess the trade
> off is whether to do it in the alu or somewhere else.
i think one of the reasons why processors go with a convention "B is
reg or immediate" is to save wires. you've got 64 bits worth of wires for
B, B is not used all the time, so when it's not, use it to farm in
the "immediate" data.
so i think we'll find... 1 sec let's look at the original decode2.vhdl...
ah yes:
https://github.com/antonblanchard/microwatt/blob/master/decode2.vhdl#L89
ok so that's definitely putting the *actual* immediate data into reg b.
decode_input_reg_b() is where the decision is made to either put the
regfile data into the return result or put the immediate in it.
so given that we're using microwatt's "decoder" we really need to
follow the same conventions. and here's where the execution has
*three* inputs:
https://github.com/antonblanchard/microwatt/blob/master/execute1.vhdl#L61
a_in, b_in, c_in.
so my feeling is we:
* have the ALU with the same 3 inputs (even though we know only 2 of them
are used), and keep the same order
* where the immediate is availabe assume it is always dropped into the b_in
64-bit wires
thus:
* remove the MUX from ALUInputStage (that means in the unit tests
it has to be done there)
with m.If(self.i.ctx.op.imm_data.imm_ok)
comb += self.o.b.eq(self.i.ctx.op.imm_data.imm)
with m.Else():
comb += self.o.b.eq(self.i.b)
so, in set_alu_inputs it would be:
inputs = []
# C (or A?)
reg3_ok = yield dec2.e.read_reg3.ok
reg3_sel = 0
if reg3_ok:
reg3_sel = yield dec2.e.read_reg3.data
reg3_sel = (sim.gpr(reg3_sel).value
inputs.append(reg3_sel, reg3_ok)
# B (or imm)
with m.If(self.i.ctx.op.imm_data.imm_ok)
reg2_sel = yield self.i.ctx.op.imm_data.imm)
with m.Else():
reg2_ok = yield dec2.e.read_reg2.ok
reg2_sel = 0
if reg2_ok:
reg2_sel = yield dec2.e.read_reg2.data
reg2_sel = (sim.gpr(reg2_sel).value
inputs.append(reg2_sel, reg2_ok)
# A (or C?)
and then still have 3 inputs, and in this way we save 64 bits
worth of wires because B is used to input the immediate.
one other key reason for doing it this way is because the FunctionUnit
front-end is where the decisions are made about reading from the
regfile (and acknowleding them). so it has to decode the Operand, there,
anyway, because it must not even send a *request* for Register B if
it does not actually need it.
--
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: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-08 15:17 [libre-riscv-dev] [Bug 305] New: " bugzilla-daemon
2020-05-08 15:17 ` [libre-riscv-dev] [Bug 305] " bugzilla-daemon
2020-05-08 15:28 ` bugzilla-daemon
2020-05-08 15:28 ` bugzilla-daemon
2020-05-08 15:29 ` bugzilla-daemon
2020-05-08 15:29 ` bugzilla-daemon
2020-05-08 15:32 ` bugzilla-daemon
2020-05-08 15:35 ` bugzilla-daemon
2020-05-08 15:40 ` bugzilla-daemon
2020-05-08 16:48 ` bugzilla-daemon
2020-05-08 16:54 ` bugzilla-daemon
2020-05-08 17:04 ` bugzilla-daemon
2020-05-08 17:10 ` bugzilla-daemon
2020-05-08 18:38 ` bugzilla-daemon
2020-05-08 23:08 ` bugzilla-daemon
2020-05-09 13:13 ` bugzilla-daemon
2020-05-09 13:37 ` bugzilla-daemon
2020-05-09 13:41 ` bugzilla-daemon
2020-05-09 13:45 ` bugzilla-daemon
2020-05-09 13:48 ` bugzilla-daemon
2020-05-09 14:04 ` bugzilla-daemon
2020-05-09 14:06 ` bugzilla-daemon
2020-05-09 18:23 ` bugzilla-daemon
2020-05-09 19:08 ` bugzilla-daemon
2020-05-09 19:12 ` bugzilla-daemon
2020-05-09 21:18 ` bugzilla-daemon
2020-05-09 21:35 ` bugzilla-daemon
2020-05-09 21:42 ` bugzilla-daemon
2020-05-10 4:25 ` bugzilla-daemon
2020-05-10 4:30 ` bugzilla-daemon
2020-05-10 23:03 ` bugzilla-daemon
2020-05-10 23:06 ` bugzilla-daemon
2020-05-10 23:11 ` bugzilla-daemon
2020-05-10 23:15 ` bugzilla-daemon
2020-05-10 23:42 ` bugzilla-daemon
2020-05-11 0:04 ` bugzilla-daemon
2020-05-11 1:11 ` bugzilla-daemon
2020-05-11 10:30 ` bugzilla-daemon
2020-05-11 13:23 ` bugzilla-daemon
2020-05-11 14:31 ` bugzilla-daemon
2020-05-11 15:51 ` bugzilla-daemon
2020-05-11 16:03 ` bugzilla-daemon
2020-05-11 16:13 ` bugzilla-daemon
2020-05-11 16:13 ` bugzilla-daemon
2020-05-11 18:15 ` bugzilla-daemon [this message]
2020-05-11 18:23 ` bugzilla-daemon
2020-05-12 9:24 ` bugzilla-daemon
2020-05-12 10:03 ` bugzilla-daemon
2020-05-12 21:33 ` bugzilla-daemon
2020-05-12 22:02 ` bugzilla-daemon
2020-05-13 1:05 ` bugzilla-daemon
2020-05-13 16:46 ` bugzilla-daemon
2020-05-13 17:22 ` bugzilla-daemon
2020-05-13 17:29 ` bugzilla-daemon
2020-05-13 18:46 ` bugzilla-daemon
2020-05-13 18:48 ` bugzilla-daemon
2020-05-13 18:57 ` bugzilla-daemon
2020-05-13 21:54 ` bugzilla-daemon
2020-05-14 0:20 ` bugzilla-daemon
2020-05-14 14:37 ` bugzilla-daemon
2020-05-14 14:48 ` bugzilla-daemon
2020-05-14 15:34 ` bugzilla-daemon
2020-05-14 16:17 ` bugzilla-daemon
2020-05-14 16:21 ` bugzilla-daemon
2020-05-14 16:35 ` bugzilla-daemon
2020-05-14 16:54 ` bugzilla-daemon
2020-05-14 17:14 ` bugzilla-daemon
2020-05-14 17:29 ` bugzilla-daemon
2020-05-14 18:42 ` bugzilla-daemon
2020-05-14 19:06 ` bugzilla-daemon
2020-05-14 19:10 ` bugzilla-daemon
2020-05-14 19:21 ` bugzilla-daemon
2020-05-14 19:27 ` bugzilla-daemon
2020-05-14 19:48 ` bugzilla-daemon
2020-05-15 14:00 ` bugzilla-daemon
2020-05-15 14:13 ` bugzilla-daemon
2020-05-15 14:19 ` bugzilla-daemon
2020-05-15 14:23 ` bugzilla-daemon
2020-05-15 15:07 ` bugzilla-daemon
2020-05-15 15:29 ` bugzilla-daemon
2020-05-15 15:30 ` bugzilla-daemon
2020-05-15 15:33 ` bugzilla-daemon
2020-05-15 15:41 ` bugzilla-daemon
2020-05-18 1:40 ` bugzilla-daemon
2020-05-18 4:07 ` bugzilla-daemon
2020-05-18 5:19 ` bugzilla-daemon
2020-05-19 12:02 ` bugzilla-daemon
2020-05-19 12:04 ` bugzilla-daemon
2020-05-19 12:29 ` bugzilla-daemon
2020-05-20 6:06 ` bugzilla-daemon
2020-05-20 14:01 ` bugzilla-daemon
2020-05-20 15:19 ` bugzilla-daemon
2020-05-20 19:28 ` bugzilla-daemon
2020-05-21 10:31 ` bugzilla-daemon
2020-05-22 16:17 ` bugzilla-daemon
2020-05-22 17:27 ` bugzilla-daemon
2020-05-27 16:06 ` bugzilla-daemon
2020-05-27 17:46 ` bugzilla-daemon
2020-05-27 17:56 ` bugzilla-daemon
2020-05-27 18:24 ` bugzilla-daemon
2020-05-27 18:33 ` bugzilla-daemon
2020-05-27 18:38 ` bugzilla-daemon
2020-06-01 23:24 ` bugzilla-daemon
2020-06-08 18:37 ` 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-305-13-V0s7zy7OGH@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