簡體   English   中英

如何使MyHDL在過程中生成具有任意寬度的變量?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM