[英]How can I implement the linked list in VHDL?
是否可以在VHDL中創建鏈接列表? (例如,在零時讀取文件並將所有值加載到文件中?)
我認為有可能。 不僅是注釋中提到的靜態列表,而且還是動態列表。 我的解決方案是使用RAM(很可能是Block RAM,但這實際上取決於體系結構),然后在其中存儲所需數據以及指向下一項的指針以及有效位(可選)和“ last”標志。 它看起來像:
RAM
Addr0 -> | Valid0 & Last0 & Data0 & Pointer0 |
Addr1 -> | Valid1 & Last1 & Data1 & Pointer1 |
...
AddrN -> | ValidN & LastN & DataN & PointerN |
因此,例如,在初始化之后,假設有一些隨機數據,並且鏈表已按順序加載了N個值(以及非循環列表),則它可能類似於:
RAM
V L Data Pointer
Addr0(0000000) -> | 1 & 0 & XXXXXX & 0000001 |
Addr1(0000001) -> | 1 & 0 & YYYYYY & 0000010 |
...
AddrN(xxxxxx0) -> | 1 & 1 & ZZZZZZ & 0000000 |
此后,可以根據需要更改RAM的內容。 例如,要“刪除”元素1(在addr = Addr1中),應更改Pointer0和Valid1:
RAM
V L Data Pointer
Addr0(0000000) -> | 1 & 0 & XXXXXX & 0000010 |
Addr1(0000001) -> | 0 & 0 & YYYYYY & 0000010 |
Addr1(0000010) -> | 1 & 0 & MMMMMM & 0000011 |
...
AddrN(xxxxxx0) -> | 1 & 1 & ZZZZZZ & 0000000 |
或在element0和element1之間添加一個元素:
RAM
V L Data Pointer
Addr0(0000000) -> | 1 & 0 & XXXXXX & xxxxxx1 |
Addr1(0000001) -> | 1 & 0 & YYYYYY & 0000010 |
Addr1(0000010) -> | 1 & 0 & MMMMMM & 0000011 |
...
AddrN(xxxxxx0) -> | 1 & 1 & ZZZZZZ & 0000000 |
AddrN(xxxxxx1) -> | 1 & 0 & ZZZZZZ & 0000001 |
同樣,這只是一個想法,可以進行一些改進。 其中一種方法是使用記錄類型,而不是串聯以便使用(如果您使用的是塊Ram,則必須將其轉換為普通的std_logic_vector,但這取決於體系結構)。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.