2013-03-07 27 views
0

我面對像定義設計理念的問題,設計視覺誤差OPT-1206是:後VHDL

「寄存器閾值是恆定的,都將被刪除」

自從我宣佈一個信號,我初始化以一定的價值使其保持不變。我想要這些常數值進行比較......接下來要做什麼?

begin 
P : PROCESS(CLK,RST) 
VARIABLE THRESHOLD: signed(10 DOWNTO 0); 
BEGIN 
IF(RST='1')THEN -- RESET CONDITION 
THRESHOLD:="00011111111"; 
ELSIF(RISING_EDGE(CLK))THEN 

H1<=(SIGNED("000"&P2)+SIGNED("00"&P3(7 DOWNTO 0)&'0')+SIGNED("000"&P6))-(SIGNED("000"&P4)+SIGNED("00"&P7(7 DOWNTO 0)&'0')+SIGNED("000"&P8)); 
IF(H1>=THRESHOLD) THEN 
MAG_DL<="11111111"; 
ELSE 

IF H1(10)='0' THEN 
    MAG_DL<=H1(7)&H1(6)&H1(5)&H1(4)&H1(3)&H1(2)&H1(1)&H1(0); 
    ELSE 
    H2<=NOT (H1(10)&H1(9)&H1(8)&H1(7)&H1(6)&H1(5)&H1(4)&H1(3)&H1(2)&H1(1)&H1(0)); 
    H2<=H2+("00000000001"); 
    IF(H2 >="11111111") THEN 
    MAG_DL<="11111111"; 
    ELSE 
    MAG_DL<=H2(7)&H2(6)&H2(5)&H2(4)&H2(3)&H2(2)&H2(1)&H2(0); 
    END IF; 
    END IF; 
+0

如果你想要一個常量,不要聲明一個信號或變量:聲明一個常量! – 2013-03-07 16:13:03

+0

在這個程序的「門檻」;我希望它是恆定的......並且它也是一個有符號的數字......但是h1> =「00011111111」它在模擬中創造出錯... – NjN 2013-03-08 05:10:47

+1

'常量THRESHOLD:signed(10 DOWNTO 0):=「00011111111」;' – 2013-03-08 10:15:30

回答

0

變量應該有所不同。你的並沒有改變,所以編譯器注意到了這一點,並且很好地爲你優化了它 - 並讓你知道。

常量不會變化 - 編譯器甚至不會讓您嘗試更改它們。所以如果你想要一個恆定的值,告訴編譯器這是你的意圖:

constant THRESHOLD : signed (10 downto 0) := "some value";