簡體   English   中英

VHDL /如何初始化我的信號?

[英]VHDL / How to initialize my signal?

我是VHDL的初學者,我有一個基本的問題。

讓我們考慮以下輸入:

A  : in std_logic_vector(22 downto 0);

這個信號:

signal dummyA : std_logic_vector(47 downto 0);

我想用A初始化dummyA所以我做的是:

dummyA <= A;

它是否正確 ? 我的意思是它相當於:

dummyA <= "0000000000000000000000000" & A; 或者我應該像這樣明確地添加0。

你不能使用dummyA <= A; 因為存在類型不匹配,任何好的VHDL編譯器都會拒絕它。

你可以使用類似的東西

dummyA <= (A'RANGE => A, OTHERS => '0');

或(僅在順序上下文中)

dummyA <= (OTHERS => '0');
dummyA(A'RANGE) <= A;

要么

FOR i IN dummyA'RANGE LOOP
    IF i >= A'LOW AND i <= A'HIGH THEN
        dummyA(i) <= A(i);
    ELSE
        dummyA(i) <= '0';
    END IF;
END LOOP;

在並發上下文中,您可以使用

FOR i IN dummyA'RANGE GENERATE
    IF i >= A'LOW AND i <= A'HIGH GENERATE
        dummyA(i) <= A(i);
    END GENERATE;
    -- ELSE
    IF i < A'LOW OR i > A'HIGH GENERATE
        dummyA(i) <= '0';
    END GENERATE;
END GENERATE;

所有上述保證dummyA(i)加載A(i) 但是"00000" & A可能導致錯配,如果他們的范圍不同意低端。

使用ieee.numeric_std的標准函數,您可以執行以下操作來填充MSB:

dummyA <= std_logic_vector(resize(unsigned(A), dummyA'length));

雖然你沒有要求這個,但也可以像這樣簽名擴展:

dummyA <= std_logic_vector(resize(signed(A), dummyA'length));

雖然我認為在這種情況下用戶應該為A和dummyA使用簽名數據類型,如果他們給出算術解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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