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来保存中间值的。


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