Mar 8:
variable只存在於定義他的process裏面。但是signal則是所有process公用,因爲他是真實存在的。
(有待考證:感覺不對)
因爲iu.vhd裏面有個v的變量,而在rtl結構圖裏面是有v.e.reg之類的值。
這也使得iu.vhd裏面的reg process:
comb: process(dmem_rdata, imem_data, rf_i, r, rst){
variable v:= r; --將當前的r保存到v裏面。
/*
** 在comb 邏輯裏面:1. 通過procedures對當前的r做出迴應
** 2. 更改流水線下一步的r (通過v來傳值)
**--下一條指令是當前讀取指令地址加4
** v.f.pc := r.f.pc( 31 downto 2 )
+ 1 ;
*/
--output
rin<= v; --流水線下一步的r的定義的傳出
}
seq: process(clk){
r <= rin; -- 流水線前進一步
}
來進行pipeline!仔細想想爲什麼已經有了Signal r和rin,還要設計一個Variable: v呢?
Feb 25:
今天開博客向oldbegineer學習leishangwen大哥的openMIPS VHDL版本,爭取在Verilog版本出來前學通,port到DE2板子和mount RTOS。
同時可以以此學習VHDL,這樣可以把mc8051的VHDL翻譯成公司用的Verilog版本,一邊日後增加features。
再者,也是能夠給我學習OpenRISC打好基礎,千里之行始於足下,還是要打好基礎,不誤砍柴工。
首先了解一下OpenMIPS是32位5級pipeline的處理器,兼容Wishbone b2,支持MIPS32素有ISA,同時包含協處理器CP0(在MIPS32 Privilege Resources Architecture文檔裏面說了MIPS有4個Coprocessor,有3個可選,但是CP0是必須的,它是用來full control of the MIPS state and modes.)
開始:
Day 1:
設計步驟:
- 寫Verilog以支持新指令
- 寫對應的彙編程序
- Compile並得到data file
- 在modelsim裏用data初始化ICache並仿真來驗證指令實現正確
Day 2:
認真學習VHDL:
代碼結構:
entity
Architecture
configuration
雖然modelsim在load wave.do的時候有很多error(這個要分析明白到底是什麼地方有問題),不過run all的時候總算得到的值是正確的。
學到了record type 感覺就是C裏面的structure。然後可以像C裏面一樣改變一個對象的元素:比如r.d.inst
還有就是process is到begin之間是用來declare signal,這些是作爲temp來保存中間值的。