Bug 391 - Investigate the use of the Pipeline API on the implementation of MultiCompUnit
Summary: Investigate the use of the Pipeline API on the implementation of MultiCompUnit
Status: DEFERRED
Alias: None
Product: Libre-SOC's first SoC
Classification: Unclassified
Component: Source Code (show other bugs)
Version: unspecified
Hardware: PC Linux
: --- enhancement
Assignee: Cesar Strauss
URL:
Depends on:
Blocks:
 
Reported: 2020-06-17 23:07 BST by Cesar Strauss
Modified: 2020-06-17 23:38 BST (History)
2 users (show)

See Also:
NLnet milestone: ---
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
Suggested pipeline design for MultiCompUnit (13.86 KB, application/pdf)
2020-06-17 23:07 BST, Cesar Strauss
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Cesar Strauss 2020-06-17 23:07:50 BST
Created attachment 65 [details]
Suggested pipeline design for MultiCompUnit

MultiCompUnit is sequential by contract, and allowing multiple operations in flight is a violation of that protocol.

However, it can still benefit from the use of the Pipeline API, for implementing sequential operation (eliminating all complex FSMs), and at the same time enforcing the ready/valid and rel/go protocols for free.

It started when I suspected that the rel/go protocol of the src and dest ports are likely compatible with the valid/ready protocol of the ALU.

It was then that I conceived of the src and dest ports being joined to the ALU using the pipeline API. See the attached diagram.

In the idle state, the switches will be set as shown, disconnecting the pipeline from the input and output 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 takes care to inform the ALU that all its operands input are valid.

The ALU outputs directly to the dest port.

The only thing, is making sure that only one operation is in flight in the pipeline at a any time. A simple FSM would take care of that, I think.

Given the time invested into MultiCompUnits, and the timescales, we really should prioritise, and come back to this idea later.
Comment 1 Luke Kenneth Casson Leighton 2020-06-17 23:37:29 BST
super idea, love it.  anything that helps make the CompUnits clear.  can you put the link to the comment# from where it was initially discussed, and add to "See also" above? (found it)