vhdl - CPU 设计中如何考虑 ROM 延迟

标签 vhdl fpga latency rom

我正在尝试用 VHDL 为 Altera FPGA 设计一个简单的 CPU。然而,我正在尝试了解如何解决 ROM block 引起的延迟。 ROM block 本身可以同时对输入地址和输出数据进行计时,或者仅对输入地址进行计时,从而在数据请求(设置地址)和获取数据之间提供 1 或 2 个时钟周期的延迟。

我可以理解,如果ROM本质上是一个海量数据多路复用器,那么做诸如跳转之类的事情是微不足道的,因为你只需设置地址,到下一个时钟周期,正确的指令就会在那里!我只是不太明白如何管理 ROM 和 CPU 之间的延迟。据我所知,每条指令都需要知道是否要获取新指令、修改 PC - 程序计数器(跳转)或停止(保持 PC 相同),但如果有 2 个周期的延迟,该指令将需要提前知道 2 个周期?

如何为这种系统编写一台 PC?

仅供引用,内存数据宽度与指令大小相同,因此每个内存位置存储一条指令。

最佳答案

在 FPGA 上,仅输入地址寄存器提供 1 个时钟周期的延迟就几乎足够了。然后,您可以仅使用 PC 寄存器的下一个值而不是当前值来寻址 ROM。

下一个值是将在下一个上升(或下降)时钟沿加载到寄存器中的值。下一个值也将在同一时钟沿加载到 ROM 地址寄存器中。因此,两个寄存器将具有相同的内容,并且 ROM 实际上在时钟沿之后将数据传送到(新)PC。

如果您有 2 个以上的流水线级,则 ROM 输出存储在指令寄存器中。在这种情况下,您将自动拥有一个 ROM 输出寄存器。

关于vhdl - CPU 设计中如何考虑 ROM 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35941578/

相关文章:

vhdl - 我如何解决这个增量周期时钟延迟问题

fpga - 通过 Xilinx FPGA 的 MGT 传输信号的最简单方法是什么?

performance - linux中收发tcp/udp数据包延迟的来源

python - numpy array - 从磁盘逐行加载 - 内存效率高但速度快

syntax - 来自 vhdl 程序员的 verilog 中的泛型

vhdl - 用 VHDL 编写寄存器文件

vhdl - Lattice Diamond 项目中的多个 VHDL 文件

python - 测量服务器的 ping 延迟 - Python

caching - 使用 MESI 协议(protocol),写入命中也会使处理器停止运行,对吗?

vhdl - 状态到 std_logic