Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| intro_example:cadence_import [2023/12/11 14:39] – [Example: FIFO boolean buffer] ifx_async | intro_example:cadence_import [2024/03/13 13:50] (current) – [Example: FIFO boolean buffer] ifx_async | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Introduction ====== | ====== Introduction ====== | ||
| - | This guide is intended to explain how to export asynchronous circuits designed in ACT and import them in Cadence Virtuoso to simulate their functioning. | + | This guide is intended to explain how to export asynchronous circuits designed in ACT and import them in Cadence Virtuoso to simulate their functioning. |
| ===== Example: FIFO boolean buffer ===== | ===== Example: FIFO boolean buffer ===== | ||
| - | Let´s assume that we are starting from a block already designed | + | Consider as a starting point an already designed |
| <code act fifobool.act> | <code act fifobool.act> | ||
| defproc bool_buff (chan? | defproc bool_buff (chan? | ||
| Line 17: | Line 17: | ||
| } | } | ||
| </ | </ | ||
| - | Let´s save it in a file named fifobool.act. | + | |
| - | The first step consists in the synthesis of the process. This is done with the command **chp2prs**. | + | The first step consists in the synthesis of the process. This is done with the command **chp2prs**. |
| - | Then: | + | Thus: |
| < | < | ||
| >chp2prs fifobool.act bool_buff fifobool_chp2prs.act | >chp2prs fifobool.act bool_buff fifobool_chp2prs.act | ||
| </ | </ | ||
| - | We could also add other options to select bundled-data (-b) or to specify a logic optimizator (-o abc). Let´s see the output: | + | Other options |
| < | < | ||
| >cat fifobool_chp2prs.act | >cat fifobool_chp2prs.act | ||
| Line 63: | Line 63: | ||
| } | } | ||
| </ | </ | ||
| - | We can see that the names of the synthesized version are prefixed with sdt_ for syntax-directed translation. | + | The names of the synthesized version are prefixed with sdt_ which stands |
| - | Then we have to do the cell mapping, in order to achieve | + | Then, in order to achieve |
| < | < | ||
| > | > | ||
| </ | </ | ||
| - | Note that we could have specified | + | Note that a technology configuration |
| - | If none is specified as in this case, we get the default configuration located at the following path $ACT_HOME/ | + | If none is specified as in this case, the default configuration located at the following path $ACT_HOME/ |
| The option -ref=1 is used to select the refinement level. | The option -ref=1 is used to select the refinement level. | ||
| Line 96: | Line 96: | ||
| | | ||
| </ | </ | ||
| - | Since we started | + | Since this design |
| < | < | ||
| interact> | interact> | ||
| </ | </ | ||
| - | Finally, | + | Finally, a Verilog netlist |
| < | < | ||
| interact> | interact> | ||
| Line 106: | Line 106: | ||
| [[asic: | [[asic: | ||
| - | In order to make the netlist valid we must erase reg and wire definitions, using regex: | + | In order to make the netlist valid, reg and wire definitions |
| *Replace '^ +reg .+' with ' ' | *Replace '^ +reg .+' with ' ' | ||
| *Replace '^ +wire .+' with ' ' | *Replace '^ +wire .+' with ' ' | ||
| - | We could also make the netlist | + | To also make it more readable: |
| *Replace ' | *Replace ' | ||
| *Replace '^ cell_0_0' | *Replace '^ cell_0_0' | ||
| Line 115: | Line 115: | ||
| *Replace ' | *Replace ' | ||
| *Replace ' | *Replace ' | ||
| + | *Replace ' | ||
| *Replace '([ \t]*\n){3, | *Replace '([ \t]*\n){3, | ||
| - | *Erase all empty modules. | + | *Erase all empty modules |
| Once this is done, the netlist is ready to be imported in Cadence Virtuoso (File -> Import -> Verilog) and should look like this: | Once this is done, the netlist is ready to be imported in Cadence Virtuoso (File -> Import -> Verilog) and should look like this: | ||
| <code verilog fifobool_verilog_netlist.v> | <code verilog fifobool_verilog_netlist.v> | ||