2013-08-17 13 views
2

我試圖模擬一個目的地控制升降控制器n地板和m電梯。因此,從每一層樓,用戶可以進入目的地樓層去獲取電梯號碼作爲回報。所以要模擬這種電梯控制器,我需要有變量in端口(這將等於層數),每個類型的整數。我試圖搜索谷歌,但找不到任何有用的東西。有人可以建議我如何做到以上? 在此先感謝。實體中「in」端口的數量是多少?

回答

0

你總是可以做這樣的事情:

entity controller is generic (
    N : integer; 
    M : integer 
); port (
    Floors : in std_logic_vector(N-1 downto 0); 
    Lifts : in std_logic_vector(M-1 downto 0) 
); 
end controller; 

你可以找到這個here的一些例子。


或許:

package foo is 
    type integer_array is array (integer range <>) of integer; 
end package; 

entity controller is generic (
    N : integer; 
    M : integer 
); port (
    Floors : in foo.integer_array(N-1 downto 0); 
    Lifts : in foo.integer_array(M-1 downto 0) 
); 
end controller; 
+0

如果我想整型數組,而不是std_logic_vector即每個N和M值不是0/1而是整數? – Aryabhatt

+0

好吧,就像往常一樣,你需要在另一個包中創建整數向量。但之後就像以前一樣。查看編輯。 –

+0

我根據你的建議寫了如下程序:'LIBRARY ieee; USE ieee.std_logic_1164.ALL; --USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; 包foo是 類型integer_array是整數的陣列(整數範圍<>); 封裝; use foo.all; 實體控制器是通用的( N:整數; L:整數 );端口( 地面:在foo.integer_array(N-1 DOWNTO 0); 升降機:在foo.integer_array(M-1 DOWNTO 0) ); 結束控制器;'。但是,這給予以下錯誤:'lift.vhdl:11:5:沒有聲明 「foo」 的 lift.vhdl:17:17:沒有聲明 「foo」 的 ghdl:編譯error' – Aryabhatt

2

在VHDL你可以使用不受約束數組作爲港口:

entity myDevice is 
    port (floors : in std_logic_vector; 
      lifts : in std_logic_vector 
    ); 
end entity myDevice; 

在制定過程中的大小來確定端口的大小連接的信號。如果你需要知道你的架構端口的大小,只需使用'length'range或其他任何適當的屬性:

architecture RTL of myDevice is 
begin 
pr_control : process(all) is 
begin 
    -- Code, code, code... 

    for n in lifts'range loop 
     process_lift(n); 
    end loop; 

    -- More code ... 
end process pr_controll; 
end architecture RTL; 
相關問題