Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| tools:v2act [2025/07/25 15:39] – [Standard import mode] rajit | tools:v2act [2025/07/25 16:22] (current) – [Async import mode] rajit | ||
|---|---|---|---|
| Line 15: | Line 15: | ||
| </ | </ | ||
| + | The input Verilog netlist is assumed to be a collection of gate-level instances from a cell library. For error checking, '' | ||
| ===== Standard import mode ===== | ===== Standard import mode ===== | ||
| - | This is the normal usage for '' | + | This is the normal usage for '' |
| - | the Verilog netlist is assumed to be a collection of gate-level instances from a cell library. For error checking, '' | + | |
| - | <code file=test.v> | + | < |
| module testv (in, out); | module testv (in, out); | ||
| input in; | input in; | ||
| Line 26: | Line 26: | ||
| INVX2 i0(.A(in), | INVX2 i0(.A(in), | ||
| endmodule | endmodule | ||
| - | </code> | + | </file> |
| To convert this Verilog netlist into ACT, we need an ACT cell library that defines '' | To convert this Verilog netlist into ACT, we need an ACT cell library that defines '' | ||
| - | <code act> | + | <file act cell.act> |
| namespace cell { | namespace cell { | ||
| Line 39: | Line 39: | ||
| } | } | ||
| } | } | ||
| + | </ | ||
| + | |||
| + | The Verilog netlist can be translated into ACT using: | ||
| + | |||
| + | < | ||
| + | $ v2act -n cell -l cell.act test.v | ||
| </ | </ | ||
| + | This will generate: | ||
| + | <code act> | ||
| + | /* -- declarations -- */ | ||
| + | export defproc testv (bool? in; bool! out); | ||
| + | export defproc testv (bool? in; bool! out) | ||
| + | { | ||
| + | spec { hazard(*) } | ||
| - | ===== Async import mode ===== | + | /*--- types ---*/ |
| + | | ||
| + | /*--- connections ---*/ | ||
| + | i0(.A=in, .Y=out); | ||
| + | } | ||
| + | </ | ||
| - | In this usage, the clocked design in the Verilog | + | A few comments: |
| + | * Note that the instance names remain unchanged, as do port names and other signal names. | ||
| + | * The inverter is qualified by the cell library namespace. | ||
| + | * By default '' | ||
| + | |||
| + | If you don't have a complete cell definition but would still like to convert the Verilog netlist into ACT, just the declaration of each cell will suffice: | ||
| + | <code act> | ||
| + | namespace cell { | ||
| + | defcell INVX2 (bool? A; bool! Y); | ||
| + | } | ||
| + | </ | ||
| + | ('' | ||
| + | |||
| + | The '' | ||
| + | < | ||
| + | $ lib2act.py < osu018_stdcells.lib | ||
| + | </ | ||
| + | where '' | ||
| + | < | ||
| + | export defcell AND2X1 (bool? A, B; bool! Y); | ||
| + | export defcell AND2X2 (bool? A, B; bool! Y); | ||
| + | export defcell AOI21X1 (bool? A, B, C; bool! Y); | ||
| + | export defcell AOI22X1 (bool? A, B, C, D; bool! Y); | ||
| + | export defcell BUFX2 (bool? A; bool! Y); | ||
| + | export defcell BUFX4 (bool? A; bool! Y); | ||
| + | export defcell CLKBUF1 (bool? A; bool! Y); | ||
| + | export defcell CLKBUF2 (bool? A; bool! Y); | ||
| + | export defcell CLKBUF3 (bool? A; bool! Y); | ||
| + | export defcell DFFNEGX1 (bool? CLK, D; bool! Q); | ||
| + | export defcell DFFPOSX1 (bool? CLK, D; bool! Q); | ||
| + | export defcell DFFSR (bool? CLK, D, R, S; bool! Q); | ||
| + | export defcell FAX1 (bool? A, B, C; bool! YC, YS); | ||
| + | export defcell HAX1 (bool? A, B; bool! YC, YS); | ||
| + | export defcell INVX1 (bool? A; bool! Y); | ||
| + | export defcell INVX2 (bool? A; bool! Y); | ||
| + | export defcell INVX4 (bool? A; bool! Y); | ||
| + | export defcell INVX8 (bool? A; bool! Y); | ||
| + | export defcell LATCH (bool? CLK, D; bool! Q); | ||
| + | export defcell MUX2X1 (bool? A, B, S; bool! Y); | ||
| + | export defcell NAND2X1 (bool? A, B; bool! Y); | ||
| + | export defcell NAND3X1 (bool? A, B, C; bool! Y); | ||
| + | export defcell NOR2X1 (bool? A, B; bool! Y); | ||
| + | export defcell NOR3X1 (bool? A, B, C; bool! Y); | ||
| + | export defcell OAI21X1 (bool? A, B, C; bool! Y); | ||
| + | export defcell OAI22X1 (bool? A, B, C, D; bool! Y); | ||
| + | export defcell OR2X1 (bool? A, B; bool! Y); | ||
| + | export defcell OR2X2 (bool? A, B; bool! Y); | ||
| + | export defcell TBUFX1 (bool? A, EN; bool! Y); | ||
| + | export defcell TBUFX2 (bool? A, EN; bool! Y); | ||
| + | export defcell XNOR2X1 (bool? A, B; bool! Y); | ||
| + | export defcell XOR2X1 (bool? A, B; bool! Y); | ||
| + | </ | ||
| + | |||
| + | ===== Async import mode ===== | ||
| + | In this usage, the clocked design in the Verilog netlist is converted to a gate-level pipelined asynchronous implementation. To activate this mode, use the '' | ||
| + | * The '' | ||
| + | * Signal fanout is replaced by an explicit templated channel '' | ||
| + | * The clock signal is eliminated from flip-flops. The assumption is that the asynchronous version of the flip-flop is an initial token buffer, which is in the asynchronous cell library. The name of the clock signal can be specified using the '' | ||
| + | Apart from these changes, the rest of the conversion proceeds in a similar fashion as the normal mode. | ||