【发布时间】:2015-04-25 19:22:36
【问题描述】:
我需要在 VHDL 中创建一个 FIFO 缓冲区。我需要使用二维数组来存储(数据数)(n 位数据)之类的数据。
如果我创建一个“大”数组来存储例如 1000 个条目。每个新的数据时钟我都会存储一个插槽。并且每个输出数据时钟我输出一个数据。如果这两个时钟同时出现会怎样?
例如:
if rising_edge(INPUT_DATA) then
Register_Array(Counter_IN) <= DataIN;
Counter_IN <= Counter_IN + 1;
end if;
if rising_edge(OUTPUT_DATA) then
DataOUT <= Register_Array(Counter_OUT);
Counter_OUT <= Counter_OUT + 1;
end if;
如果可以创建这样的进程,如果两个时钟同时靠近会发生什么?
考虑到我不会丢失任何数据。
【问题讨论】:
-
看看我在那里发布的答案:stackoverflow.com/questions/29505213/…
-
这没问题,只要您几乎不会同时在同一个位置读写。您的 fpga 供应商应该有冲突的时间信息,但您的逻辑应该真正防止这种情况发生。我认为 Xilinx 在这种情况下保证写入,但是读取不是。
-
它是您发布的代码,您可以转移您的收银机。但我想使用指针而不是移动寄存器。这可能吗?
-
@Drolet 我试过了,但它没有合成。如果我使用 elsif rise_edge(OUTPUT_DATA) 它只运行写入而不运行输出。
-
移位单个数组好还是创建多个数组好?