Replies: 3 comments 1 reply
-
I don't think this is possible (even theoretically) |
Beta Was this translation helpful? Give feedback.
-
In a general case, I don't think this is possible (or at least practical). For some extremely targeted use cases I could see this being possible. I think you are working at the wrong level of abstraction to accomplish this. It sounds kind of similar to loop unrolling in high-level synthesis tools which allow manipulating the RTL before implementing into a netlist.
This does not seem like the right approach to this problem. Also I am unsure what definition of "logic depth" you are using here. |
Beta Was this translation helpful? Give feedback.
-
By logic depth I mean the maximum number of logic gates going from any input to a logic gate. The inverse, starting from the outputs, is also possible. When you say I am working on the wrong level of abstraction you mean representing the circuit as a graph? Indeed, I wish I was able to solve this during the logic synthesis, not after the flow has run already. I was thinking about removing the clock from the RTL description, although I am not sure if the openroad flow would work without it. Also I have a question, during logic synthesis, will the tool synthesize sequential elements using simple combinational cells? |
Beta Was this translation helpful? Give feedback.
-
TL;DR - Does anyone know how to transform a sequential circuit into a combinational one? Perhaps there is a way to remove the clock entirely during synthesis in OpenROAD?
Hello everyone. I am using OpenROAD to generate a dataset. In this dataset, I would like to include the logic depth of each logic gate. However, I'm facing an issue with the sequential parts of the circuit, as they introduce loops when represented as a graph. If there was a way to remove all sequential elements from the circuit, the logic depth calculation would be straightforward.
To generate the data, I am using the final Verilog file (6_final.v) located in the results directory. I made modifications to Yosys to transform the circuits into CSV representations and then represent them as graphs. I reached out to the Yosys developers on their Slack channel, and they informed me about built-in functions that can identify sequential cells. However, these functions only work if the built-in sequential cells from Yosys are used. They don't work when the flow utilizes sequential cells from the PDK library of cells, making it impossible to identify sequential cells within Yosys.
I attempted a naive approach of removing logic gates based on their names after the flow. I used regex name matching based on the sequential elements I found in the NanGate library of cells. However, this approach did not work, and I still ended up with graphs containing loops.
My ultimate goal is to calculate the logic depth of each logic gate. This would be straightforward if the graph representation of the circuit had no loops.
Does anyone know how to transform a sequential circuit into a combinational one? Perhaps there is a way to remove the clock entirely during synthesis?
Beta Was this translation helpful? Give feedback.
All reactions