OpenMIPS VHDL study学习笔记第一天 -- Feb 25

本文探讨了VHDL中variable与signal的区别,特别是在OpenMIPS处理器设计中的应用。通过具体实例展示了如何使用VHDL进行流水线设计,并分享了学习心得与计划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值