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