VHDL有一種機制將備用名稱與命名對象關聯起來。
見IEEE標準1076至2008年6.6別名聲明,通用6.6.1條第1款:
別名聲明聲明一個別名爲現有的命名實體。
對象別名的規則可以在6.6.2對象別名中找到。這裏的想法是爲生成語句賦值語句目標提供一個可索引的名稱(8.4索引名稱)。
問題是A0_i是一個標識符(15.4)和不可分割的詞法元素(15.3)。
entity fff is
port (
a: in bit_vector(0 to 3);
b: in bit_vector(0 to 3)
);
end entity;
architecture sss of fff is
-- signal A0_0 : bit ; -- REPLACED
-- signal A0_1 : bit ;
-- signal A0_2 : bit ;
-- signal A0_3 : bit ;
signal A0: bit_vector (0 to 3); -- ADDED
-- IEEE Std 1076-2008 6.6 Alias declarations
-- 6.6.1 General
-- An alias declaration declares an alternate name for an existing named entity.
alias A0_0: bit is A0(0);
alias A0_1: bit is A0(1);
alias A0_2: bit is A0(2);
alias A0_3: bit is A0(3);
begin
U0:
for i in 0 to 3 generate
U1: A0(i) <= a(i) and b(i);
end generate;
end architecture sss;
由於對象別名不能對由命名的信號上面顯示聲明一個信號陣列和別名爲陣列的元素的原始名稱的未命名聚合來創建。
這個修改後的實例添加了一個實體,分析和闡述並允許同時使用索引名和別名(例如A0(0)和A0_0)。
只需使A0覆蓋範圍0到3的位數組並寫入Generate以覆蓋該範圍:'U0:for i in A0'left to A0'right generate U1:A0(i)<= a( i)和b(i);' –
謝謝。但我不允許更改信號名稱。有什麼辦法可以解決這個問題嗎? –
爲信號提供備用名稱 - * IEEE Std 1076-2008 6.6別名聲明,6.6.1別名聲明聲明現有命名實體的備用名稱。*'signal A0:bit_vector(0 to 3);別名A0_0:位是A0(0);別名A0_1:位是A0(1);別名A0_2:位是A0(2);別名A0_3:位是A0(3);'和'U1:A0(i)<= a(i)和b(i);'問題是A0_i是一個標識符,一個不可分割的詞法元素(15.3)而您想在此處使用索引名稱(8.4)。 – user1155120