定义一个jinja2模板宏macro
(port_with_width(name, msb, lsb)
)来处理verilog端口及位宽的拼接。当msb=0时,位宽是1,省略方括号。当msb>0,显式的加上[msb:lsb]
。
{% macro port_with_width(name, msb=0, lsb=0) -%}
{%- if msb == 0 -%}
{{ name }}
{%- else -%}
{{ name }}[{{ msb }}:{{ lsb }}]
{%- endif -%}
{%- endmacro %}
这个宏定义好后,可以像函数一样用在其他模板里。下面是一个verilog例化脚本的例子。这个模板可以根据位宽来可选的加方括号。用了宏之后,再继续用filter
函数就显得比较清晰。
.{{ port.name | left_align(20) }} ({{ port_with_width(port.name, port.msb, port.lsb) | left_align(20) }})