Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
intro_example:cadence_import [2023/12/11 09:39] ifx_async [Example: FIFO boolean buffer] |
intro_example:cadence_import [2024/03/13 09:50] (current) ifx_async [Example: FIFO boolean buffer] |
||
---|---|---|---|
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> |