簡體   English   中英

如何在VHDL中實現鏈接列表?

[英]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.

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