2017-05-09 63 views
2

使用簽署的復量,我宣佈在名爲FAT_Lib一個共同的包文件如下:錯誤聲明和使用枚舉指數

type complex_field is (re,im); 
type signed_complex is array(complex_field) of signed; 

然後我在一個實體的端口接口中聲明的信號方式如下:

MF: out signed_complex(9 downto 0); 

Modelsim的產生當實體被編譯以下錯誤:

在陣列約束在DEP第1個數組fat_rtl.FAT_Lib.signed_complex已被約束。

據我所知,編譯器將(9 downto 0)作爲約束數組大小而不是有符號數字字長。有人在我的聲明中看到錯誤嗎?我的目標是能夠訪問MF的實部和虛部,分別爲MF(re)MF(im)

感謝

+1

爲什麼不使用記錄? 'MF.re'和'MF.im' ... – JHBonarius

+2

是@ J.H.Bonarius - 有記錄的,VHDL-2008不是必需的。不過,具有不受限制的字段的記錄的語法可能會有點瘋狂。 –

回答

2

你需要VHDL 2008。你需要的東西是這樣的:

MF: out signed_complex_array(open)(9 downto 0); 

其中(open)用於跳過約束尺寸。

+0

參見Peter Ashenden和Jim Lewis的書* VHDL 2008只是新的東西* 3.1.2子類型指示和約束* ...在早期版本的VHDL中,我們可以應用於複合子類型的唯一約束是一種索引約束指定否則不受約束的數組類型的索引範圍。數組類型的所有數組元素和子元素都必須受到約束。 VHDL-2008的情況不同,因爲我們可以有數組和記錄類型,其中某些元素或子元素的子類型是沒有索引約束的數組子類型。* * – user1155120

0

當我使用複雜數量的記錄時,Altera的Quartus 13.1合成器出現問題。因此,申報復雜數量的方式稍顯複雜。我正在使用VHDL-2008。

我設法解決這個問題,在我的聲明方式如下:

在普通包裝:

type complex_field is (re,im); 
type signed_complex is array(complex_field range <>) of signed; 

在實體端口接口:

MF: out signed_complex(re to im)(9 downto 0); 

我試圖馬修·泰勒的建議下遵循這種方式,並且工作得很好。

type complex_field is (re,im); 
type signed_complex is array(complex_field) of signed; 

MF: out signed_complex(open)(9 downto 0); 

感謝您的意見。