google / google/xls

Insert clock gated flops for pipeline stages inserted for non-taken select/switch branches

Open
#161 3 comments 0 reactions 0 assignees View on GitHub
long-term-enhancement optimizer
Dominant language
C++
Stars
1.9k
Forks
283
Avg merge
2d 10h
Merged PRs (30d)
135

Description

In order to reduce power on non-taken select branches, flops inserted for the non-taken branches can be clock-gated. The idea is that if the select condition is early enough, then additional logic can be put in to gate off the logic. Idea is summarized in the image:

![image](https://user-images.githubusercontent.com/56805586/96080863-e8355c00-0e6c-11eb-8dac-60263c2bedc0.png)

XLS can perform analysis during pipeline insertion to infer the enable pin along with the conditions. Idea of implementation is the following:
* The one_hot_sel operation establishes a relationship between the select bit and a data wire.
* Determine the set of nodes which if the data-wire is not selected, do not impact the output (not observable). One non-exhaustive algorithm is below
* Determine the set of nodes which are on the fan-in of the data wire.
* Determine the subset of those nodes in which the data-wire in which any path through that node also goes through the data-wire.
* Any pipeline stage that is inserted after such a node and before the select, can be gated by the select signal.
* Additional consideration should be given to the select signal so that it is available early enough not impact timing, and so that the signal is available in the same pipeline stage

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.