我正在開發一個BIST引擎的描述,我的經理已經問過我從Verilog過渡到VHDL。我對VHDL非常生疏,我無法弄清楚我的代碼中的地址寄存器的正確數據類型。大多數情況下,地址用於索引到數組中。我應該使用什麼VHDL數據類型來存儲地址?
data : std_logic_vector (2**W-1 downto 0);
...
output = data(addr);
雖然有時,我需要執行按位操作(例如,這段代碼中找到的最低顯著1中的地址):
least_one(0) <= addr(0);
PRIORITY_ENCODER : for i in 1 to (W-1) generate
least_one(i) <= addr(i) and not or_reduce(addr(i-1 downto 0));
end generate PRIORITY_ENCODER;
least_one(W) <= not or_reduce(addr);
最後,我還要靠地址包裝當它溢出時(即1111 + 1 = 0和0-1 = 1111),沒有問題。
因此,考慮到所有這些不同的用途,我給了什麼數據類型或子類型的地址?當我使用整數和相關類型,我得到的錯誤,當我執行位操作:
ncvhdl_p: *E,APNPFX (filename,17|20): can not make sense of P(...)
當我使用std_logic_vector或similiar,我得到的錯誤嘗試使用的地址作爲數組索引:
ncvhdl_p: *E,INTYMM (filename,52|17): array index type mismatch [6.4]
我似乎在這裏處於一個雙贏局面。我使用哪種數據類型?請注意,解決方案必須是可綜合的。謝謝
不幸的是這並未解決_array索引類型不匹配錯誤。我無法使用無符號索引向量,並且不斷轉換爲整數並不是真正的選項,因爲地址主要用作索引。我真的很喜歡可以避免所有轉換的數據類型。 – DrDean 2013-03-07 21:06:13
'to_integer(地址)'是不是一個可接受的轉換? – Josh 2013-03-07 21:11:52
我的意思是,我不希望數十個'to_integer(address)'語句拋出我的代碼,因爲在大多數地址引用中,我將它用作索引。我可以使它成爲一個int,並在必要時轉換爲無符號,但後來我遇到了信號不會溢出的問題。猜猜我會寫我自己的附加功能,但這一切似乎太麻煩了;應該是一個更簡單的方法。 – DrDean 2013-03-07 21:25:55