2014-07-22 57 views
0

我一直在Verilog編寫一個16位RISC微處理器,我又遇到了另一個障礙。代碼編寫任務結束後,我試圖綜合它。發現了一些偶然的錯誤,我修復了它們。然後繁榮,大規模的錯誤。Verilog:公共總線實現問題

該設計包含四個16位公共總線。出於某種原因,我從綜合工具中獲得這些總線的多個驅動程序錯誤。

電腦的架構靈感來自於Bill Buzzbee的Magic-1,幾乎完全一樣,不包括Page Table機制。這裏是比爾的原理圖PDF:Click Here。向下滾動到第7頁的架構。

控制矩陣負責處理公共汽車和駕駛時的情況,並且我確信在任何給定情況下每輛公交車只有一個駕駛員。我想知道這是否可能是問題,因爲綜合工具可能不知道這一點。

三態語句允許寫入總線,例如:

assign io [width-1:0] = (re)?rd_out [width-1:0]:0; // Assign IO Port the value of memory at address add if re is true. 

編輯:我忘了提,IO端口是雙向的(INOUT)和被簡單地連接到總線。這段代碼來自RAM,單端口。 RAM以外的其他所有寄存器都有獨立的輸入和輸出端口。

控制矩陣更新30位的狀態每下降沿,例如:

state [29:0] <= 30'b100000000010000000000000100000; // Initiate RAM Read, Read ALU, Write PC, Update Instruction Register (ins_reg). 

控制矩陣是相當小的,因爲我只編碼一個指令來測試設計之前我上所花費的時間編碼其餘的。

不幸的是,在這裏複製粘貼整個代碼是不合邏輯的。

我一直在思考這個問題已經有好幾天了,並且指引我去正確的方向將非常感謝。

回答

2

re爲低時,assign語句應該是浮動的(驅動Zs)。

//     enable ? driving   : floating 
assign io [width-1:0] = (re) ? rd_out [width-1:0] : {width{1'bz}}; 

如果它正在驅動任何其他值,則合成器將視爲多路複用而不是三態。這是衝突的驅動程序消息來自的地方。

+0

我確實嘗試過。但是,也許我沒有做好!我明天再試一次。我不確定是否可以合成浮動。我曾與一位朋友討論過,它可能會以零爲單位同時驅動一切。 –

+0

確保您的FPGA支持三態。有些不需要,有些則需要實例化特定的模塊,而不是使用assign語句。 – Greg

+0

這是斯巴達6 TQG144。 –