繁体   English   中英

如何在VHDL中实现链接列表?

How can I implement the linked list in VHDL?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

是否可以在VHDL中创建链接列表? (例如,在零时读取文件并将所有值加载到文件中?)

1 个回复

我认为有可能。 不仅是注释中提到的静态列表,而且还是动态列表。 我的解决方案是使用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,但这取决于体系结构)。

祝好运!

1 如何在VHDL中实现数据监控?

我不知道如何准确地描述它,但是也许是这样的? 对我来说,我将在VHDL中这样实现: 但是在quartus II中编译时会引起警告。 我认为这不是执行此操作的正确方法。 有什么建议么? 警告: ...

2 如何在VHDL中实现时钟使能?

因此,基本上我想做的是在一定时间后激活和停用时钟。 这是我正在寻找的一个小例子: `因此,在此示例中,我们有两个时钟,其中clk1的频率比clk2大。 当clk_enable1为'1'时,我们正在处理第一个进程,而当clk_enable2为'1'时,我们正在处理第二个进程。 这 ...

3 如何在 VHDL 中实现字节可寻址内存?

我想制作 4kb 字节的可寻址内存。 抱歉,我是 VHDL 新手 我希望我的代码首先在地址 8 中写入 4byte 数字(rdwr=1,addr=1000,size=10(2^2byte),idata=10001100) 然后等待8个周期实现写入时间(ivalid=0) 从地址 8 (rdwr= ...

2020-04-21 07:38:12 0 240   vhdl
5 如何在Java中实现链接列表? [重复]

这个问题已经在这里有了答案: 如何在Java中创建链接列表数据结构? [已关闭] 6个答案 我正在尝试用Java实现一个简单的HashTable,该哈希表使用链接列表来解决冲突,这在C语言中很容易实现,但是我不知道如何在Java中实现它,因为您不能使用指针。 。 ...

7 在VHDL中实现FSM

我有一个需要在vhdl中实现的fsm。 在尝试在vhdl中实现fsm之前,有必要先创建一个真值表,kmap和一个数字电路吗? ...

8 在 VHDL 中实现 FSM

只是想知道我是否在 VHDL 中实现了一个有限状态机,是否需要说明所有输出处于每种可能的状态? 即使我知道某些输出不会从一种状态更改为另一种状态并且我知道状态的顺序也将是相同的顺序? 例如,在这个(强制)示例中: 根据我的理解,如果我不这样做,那么会创建闩锁吗? 在那个例子中这没什么大不了的 ...

2011-05-14 09:47:40 6 15302   vhdl/ fsm
9 如何在VHDL中实现堆栈/队列等数据结构?

如何在VHDL中模拟堆栈或队列的行为? 有什么指针吗? 我曾经想过使用像bit的逻辑移位操作这样的东西,但是如何检查堆栈的约束是空的还是堆栈溢出的情况? ...

2009-02-28 06:19:00 4 4649   vhdl
10 如何在Xilinx中实现最大公约数? [VHDL]

我正在尝试使用VHDL语言实现一个简单的GCD算法,但出现此错误“ ERROR:HDLCompiler:981:超出了非静态循环限制”。 那么,while语句如何在没有上述错误的情况下工作? 如果它不能与xilinx 14.7配合使用,我可以用什么语句替换它? 谢谢, ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM