是否可以在VHDL中创建链接列表? (例如,在零时间读取文件并将所有值加载到文件中吗?)
答案 0 :(得分:0)
我认为有可能。不仅是注释中提到的静态列表,而且还是动态列表。 我的解决方案是使用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,但这取决于体系结构)。
祝你好运!