簡體   English   中英

從 VHDL 中的二進制文件初始化 std_logic_vector 的常量數組

[英]Initialize a constant array of std_logic_vector from binary file in VHDL

我已經打包了一個 IP 並且在它的頂部模塊中我有一個常量數組 std_logic_vector 出於某種目的。 如果我只需要在設計中使用這個 IP 的一個實例,我可以根據需要編輯這個常量數組,瞧,但是如果我需要這個 IP 的多個實例(這個常量數組對於每個實例都應該不同)我必須找到另一種方法來做到這一點,因為當我更改其中一個 IP 實例的常量數組時,其他實例也會更改,因為它們顯然使用相同的 VHDL 源文件。 我怎樣才能克服這個問題? 我考慮的一種方法是為我的 IP 的頂部包裝器引入一個輸入端口,以便它從外部獲取這個數組,當我在設計頂層實例化它時,我可以創建多個常量 arrays 並將它們相應地連接到 IP 實例. 您對完成此任務還有其他建議嗎?

這是我的代碼,X = 4,Y = 32(在實際情況下它們要大得多)。 到目前為止,我一直在使用 python 來查找我的評論-- DO NOT CHANGE BETWEEN COMMENTS ---- COMMENT END HERE -- ,並根據另一個文本文件自動更改其中的內容。

type myarray_t is array (X - 1 downto 0) of std_logic_vector(Y - 1 downto 0);

-- DO NOT CHANGE BETWEEN COMMENTS --
constant myarray : myarray_t := (x"01234567",
                                 x"89abcdef",
                                 x"01234567",
                                 x"89abcdef");
-- COMMENT END HERE --

將常量打包到 VHDL package 中並從那里使用它們。 創建幾個文件,它們都包含相同的 VHDL 包。 然后您可以在這些文件中的每一個中擁有不同版本的常量。 您在設計中通過“使用 work.package_name.all”來包含常量。 在編譯時,您將設計和其中一個包編譯到一個庫中,但會創建與 package 文件的不同版本一樣多的不同編譯庫。 當您實例化您的設計時,您必須定義必須從哪個庫中獲取實例。 您可以通過頂層架構聲明區域中的嵌入式配置來定義它,例如:

for instance1: use entity library1.your_design;
for instance2: use entity library2.your_design;

或者您可以在頂層設計的實例化中定義它:

instance1: entity library1.your_design port map ...
instance2: entity library2.your_design port map ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM