[英]How to make MyHDL generate variable with arbitrary width in process?
我想对列表中的信号求和,自然地,我使用了变量for和(就像在VHDL中一样):
@always_comb
def sum():
sum = 0
for i in range(len(summands)):
sum = sum + summands[i]
product.next = sum
问题在于,这将对sum变量使用整数(在VHDL中),当sum的宽度大于32位时,它的用处不大。
所以我试图做这样的事情:
@always_comb
def sum():
sum = intbv(0, min=vmin, max=vmax)
for i in range(len(summands)):
sum = sum + summands[i]
product.next = sum
我收到以下错误(在转换过程中):
Type mismatch with earlier assignment: sum
我不知道该如何解决。 我猜它以整数形式获取intbv的值,因此是另一种类型。
感谢您的任何建议
我设法做出了非常丑陋的解决方法:
@always_comb
def sum():
sum = intbv(0, min=vmin, max=vmax)
for i in range(len(summands)):
sum = intbv(sum + summands[i], min=vmin, max=vmax)
product.next = sum
这样,它将生成正确的VHDL:
IIR_SOS_INST_0_PRODUCTS_1_SUM: process (sos_inst_0_products_1_summands) is
variable sum: signed(44 downto 0);
begin
sum := to_signed(0, 45);
for i in 0 to 21-1 loop
sum := to_signed((sum + sos_inst_0_products_1_summands(i)), 45);
end loop;
sos_inst_0_b1p <= sum;
end process IIR_SOS_INST_0_PRODUCTS_1_SUM;
但是,在对每个求和的分配上创建一个新的intbv对象时,仿真的性能会受到很大影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.