OpenMIPS VHDL study學習筆記第一天 -- Feb 25

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:

設計步驟:

  1. 寫Verilog以支持新指令
  2. 寫對應的彙編程序
  3. Compile並得到data file
  4. 在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來保存中間值的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章