我打算在VHDL中設計一個類似MIPS的CPU。 CPU將具有經典的五級管道,無需轉發和防止危險。在計算機體系結構課程中,我瞭解到第一個MIPS-CPU用於在時鐘上升沿讀取寄存器文件,並在時鐘下降沿寫入。我使用的FPGA不支持同時使用上升和下降時鐘邊沿(關於讀寫寄存器),所以我不能像原始MIPS那樣完全做到這一點,並且必須在時鐘上升沿完成。同時讀取和寫入寄存器
所以,這裏是我遇到問題的部分。該指令在寫回階段回寫到寄存器。寫回階段將數據直接發送到解碼階段。解碼階段的另一條指令想要讀取同一個寄存器,寫入階段也要寫入。
在這種情況下會發生什麼?解碼階段是否獲取指令的新值或仍然在寄存器文件中的舊值?
「大多數FPGA不支持時鐘下降沿」......多麼奇怪的想法,你在哪裏讀到的?他們不支持的是在兩個時鐘邊沿對同一個寄存器進行時鐘控制(並且例外通常是I/O模塊)......但是,由於讀取和寫入數據是分開的,因此在同一個時鐘邊沿上讀寫是很好的信號。如果將te寄存器移動到BlockRam中,請確保讀取其有關同時讀寫的數據(通常位於不同的端口上)。 –
你說得對。在這一點上,董事會的用戶指南並不十分清楚。 FPGA確實支持下降沿,但不能同時使用兩個邊沿。 – fsasm
我想如果你讀了舊的值,那麼你需要多一個循環的結果轉發(讀取新值提供了通過寄存器文件的轉發)。 –