[英]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.