原创 【博客大赛】RISC CPU设计之指令寄存器

2012-4-4 14:04 1599 10 10 分类: FPGA/CPLD

指令寄存器用于寄存指令,模块图如下

register.jpg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
指令寄存器在clk的正沿触发下,将数据总线送来的指令存入高8位或低8位寄存器中。但并不是每个clk上升沿都将寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。什么时候寄存,什么时候不寄存由CPU状态控制器的load_ir信号控制。load_ir通过ena口输入到指令寄存器。
每个指令为2字节,16位。高3位操作码,低13位是地址(CPU地址总线13位,寻址空间8K字节)。本设计的数据总线8位,所以每条指令取两次。先取高8位,后取低8位。当前取的是高8位还是低8位,由变量state记录。state为0表示存入高8位,为1表示存入低8位。
 
//verilog程序
module register(
    input [7:0] data,
    input ena,
    input clk,
    input reset,
    output reg[15:0] opc_iraddrs
    );
    reg state;
 
  always @ (posedge clk)
  begin
   if(reset)
     begin
     opc_iraddrs <= 16'h0000;
     state <= 0;
     end
   else begin
    if(ena)
     begin
       casex(state)
     1'b0: begin
       opc_iraddrs[15:8] <= data;
       state <= 1;
       end
     1'b1: begin
       opc_iraddrs[7:0] <= data;
       state <= 0;
       end
     default : begin
         opc_iraddrs[15:0] <= 16'hxxxx;
         state <= 1'bx;
        end
     endcase
    end
    else 
       state <= 1'b0;
   end
  end
endmodule
 
//仿真波形
register.jpg
 
 
//参考 夏宇闻· 数字系统设计
 
 
 
 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条