《从0开始设计和实现CPU》32寄存器堆_记录篇(1)

声明:代码片段来自于《CPU自制入门》这本书。笔者最近对这方面感兴趣,故想亲自试一试,记录相关笔记

1-1 regfile.h
`ifndef __REGFILE_HEADER__
`define __REGFILE_HEADER__

/*******信号电平******/
`define  HIGH      1'b1
`define  LOW       1'b0

/*******逻辑值******/
`define  ENABLE    1'b0   //有效(负逻辑)
`define  DISABLE   1'b1   //无效(负逻辑)

/*******数据******/

`define  DATA_W      32   //数据宽度
`define  DATA_D      32   //数据深度
`define  DataBus     31:0 //数据总线


/*******地址******/
`define  ADDR_W      5   //数据深度
`define  AddrBus     4:0 //数据总线

`endif
1-2 regfile.c
/***该代码示例来自于《CPU自制入门》P40 
功能:32组位宽32的寄存器堆***/

`include "regfile.h"

/*******模块*******/
module regfile(
	
	input wire  clk,    //时钟
	input wire  reset_, //异步复位
	
/******访问接口******/
	input  wire  [`AddrBus] addr,   //地址 4:0
	input  wire  [`DataBus] d_in,   //输入数据  `DataBus为宏定义31:0 ,查看头文件!
   input  wire             we_,    //写入有效
   output wire  [`DataBus] d_out   //输出数据 31:0
);

/******内部信号******/
	reg  [`DataBus]      ff [`DATA_D-1:0];  //寄存器序列
	integer              i;                 //迭代器
	
/******读取访问******/
assign d_out = ff[addr];

/******写入访问******/
always @(posedge clk or negedge reset_)  begin 
  if(reset_ == `ENABLE)begin 
  /******异步复位******/
   for(i=0 ; i<`DATA_D ; i=i+1)begin  
     ff[i] <= #1 {`DATA_W{1'b0}};
    end 
end else begin 
   if(we_ == `ENABLE)begin
     ff[addr] <= #1 d_in;
	 end 
  end 
end 

endmodule

Verilog HDL语言与C语言的风格很像,VerilogHDL为了区别宏和变量名,每次使用宏时,在宏前面加上后引号(`)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式历练者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值