[libre-riscv-dev] [Bug 208] implement CORDIC in a general way sufficient to do transcendentals

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Tue May 5 17:28:32 BST 2020


--- Comment #52 from Michael Nolan <mtnolan2640 at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #50)
> btw 12 stages is too many, because we need a minimum of one FunctionUnit
> "managing" (matching up) source operands and results.
> each extra Function Unit added creates an Order N^2 increase in the overall
> size of the Dependency Matrices.
> so - and i don't mean right now - if this can be either:
> * cut into two separate pipelines (partial data fed back as a micro-op)
> * number of combinatorial blocks increased to 5 or 6
> we stand a chance of keeping the FU count down (8 is ok).
> have to think that through carefully, how to do micro-ops.

Sure. I don't know about splitting it up into multiple uops, but reducing the
number of stages is pretty easy. I added a parameter to the module called
rounds_per_stage which governs how many cordic rounds go in each pipeline
stage. Increasing that number will decrease the number of pipeline stages. 

(In reply to Luke Kenneth Casson Leighton from comment #51)
> the other option:
> keep the long pipeline lengths: we *know* that there's more stages than
> there are FUs, and that's just "tough luck".  we know that with only
> 8 FUs and 12 pipeline stages, 4 of those at any one time will run
> empty, and we just... live with that.

I was going to ask if we could do something like this. Since I don't think the
cordic will be used *that* often, this seems like a reasonable thing to do.

You are receiving this mail because:
You are on the CC list for the bug.

More information about the libre-riscv-dev mailing list