我有一個通過函數創建的接口記錄,但是當我嘗試編譯時,我得到一個關於接口不受約束的錯誤。VHDL記錄沒有完全約束
記錄:
type t_my_if is record
wdata : std_logic_vector;
wen : std_logic;
end record;
函數聲明:
function init_my_if_signals(data_width : natural) return t_my_if;
函數體:
function init_my_if_signals(data_width : natural) return t_my_if is
variable init_if : t_my_if(wdata(data_width - 1 downto 0));
begin
init_if.wdata := (others => '0');
init_if.wen := '0';
return init_if;
end function;
注ŧ儘管其中一個記錄參數是std_logic_vector
,但它的大小在通過初始化函數創建時被定義。所以我不知道爲什麼我收到以下錯誤:
(vcom-1361) Subtype of "my_if" is not fully constrained.
的接口是實體的inout
端口上,所以它看起來是這樣的:
my_if : inout t_my_if := init_my_if_signals(8)
編輯:
下面的代碼有效,但我希望能夠動態定義數據寬度,所以這個解決方案對我來說並不是最優的。
新紀錄:
type t_my_if is record
wdata : std_logic_vector(7 downto 0;
wen : std_logic;
end record;
新功能:
function init_my_if_signals(data_width : natural) return t_my_if is
variable init_if : t_my_if;
begin
--same as above
可以記錄時instantiatied我沒有定義呢?
我在2008年編譯模式。像您在編輯中一樣添加約束條件解決了我的問題。謝謝! – Aaron