在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3043|回复: 1

新手问个低级问题--关于流水线中的寄存器模块的

[复制链接]
发表于 2012-4-14 15:02:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 matlinsas 于 2012-4-14 15:06 编辑

在CPU设计中,寄存器模块通常都是用的时序器件,这样的话不是相当于在流水线中间插入了一级吗?
捕获.JPG


如图所示,图中的Regfile就是是时序器件。




补充说明一下:
举个MIPS五级流水线的例子,IF,ID,EX,MEM,WB
时钟1上升沿时,在ID级输出访问的寄存器地址,但是由于寄存器模块是时序的(我的理解是:时钟上升沿输出,如下面代码所示),到时钟2的上升沿,才会输出结果;
而ID/EX寄存器又是时序的;
这样的话。ID级访问寄存器,访问结果不是需要两个时钟才能输出到EX段吗?
而且看到好多代码中都是这样写的(OR1200 、ucore )。。求指导。谢谢。。


  always @(posedge clk_i or posedge rst_i)
  begin
    if(rst_i)
    begin:INITIAL_SECTION
      integer i;
      for(i=0;i<32;i=i+1) mem <= 32'b0;
    end
    else begin
      douta <= ena?mem[porta]:32'b0;
      doutb <= enb?mem[portb]:32'b0;

      if (enc && portc != 0)
      begin

mem[portc] <= dinc;
      end
    end
  end




谢谢。。
发表于 2012-4-16 16:38:41 | 显示全部楼层
这样的效率是低的,应该是一个组合电路比较好:
assign reg_data_0 = registers[read_idx_0_d];
assign reg_data_1 = registers[read_idx_1_d];

其实OR1200的结构不一定是最优的;开源的,不是商业的;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-27 22:53 , Processed in 0.031154 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表