问题描述
我创建了jinja模块作为示例,
{% from 'snippet.j2' import module with context %}
{% call module() %}
logic [$size(din.data)-1 : 0] res;
assign res = din.data * din.data;
{% if params['half'] %}
assign dout.data = res / 2;
{% else %}
assign dout.data = res;
{% endif %}
assign din.ready = dout.ready;
assign dout.valid = din.valid;
{% endcall %}
我应该如何在PyGears中使用此模块?
解决方法
好的,我认为这应该可行。
如果我正确理解,您正在尝试为将要乘以1/2(换句话说,除以2)的模块创建Jinja模板。首先,确保您的Jinja文件和模块命名相同(这是必须的,因此PyGears会知道要使用哪个Jinja模板)。
牢记所有这些,让我们假设我们的模块名称为 mulh
Python文件将如下所示:
from pygears import gear, Intf, reg
from pygears.typing import Uint
from pygears.hdl import hdlgen
@gear
def mulh(din: Uint,*,half=False)->b'din*din':
pass
mulh(Intf(Uint[8]))
hdlgen('/mulh', outdir='.')
此代码将调用您的Jinja文件,并且HDL输出看起来像这样:
module mulh
(
input logic clk, input logic rst, dti.consumer din, // u8 (8)
dti.producer dout // u16 (16)
);
typedef logic [7:0] din_t; // u8
typedef logic [15:0] dout_t; // u16
din_t din_s;
dout_t dout_s;
assign din_s = din.data;
assign dout.data = dout_s;
logic [$size(din.data)-1 : 0] res;
assign res = din.data * din.data;
assign dout.data = res;
assign din.ready = dout.ready;
assign dout.valid = din.valid;
endmodule