处理器的存储器设计Verilog代码vivado仿真

本文详细介绍了一款MIPS32处理器的存储器设计,使用Verilog语言编码,并通过Vivado工具进行编译和仿真。内容涵盖了地址对齐、字节编址、大端与小端存储格式以及测试用例的实现。
摘要由CSDN通过智能技术生成

名称:处理器的存储器设计Verilog代码vivado仿真(文末获取)

软件:vivado

语言:Verilog

代码功能:

存储器用于存储数据和指令。MIPS32处理器的地址总线32位,数据总线32位,但是

存储器按字节编址,因此存储器容量为232×8位=4GB,地址范围0x00000000 XFFFF FFFF。但是MIPS32处理器绝大部分指令对存储器的访问尺寸为字(Word,32位),即访问地址必

须按照4字节的边界严格对齐(地址最低2位=00)。至于MPS的一个字的字节大小端问

题,选择小端格式:高字节(MSB)在高地址,低字节(LSB)在低地址。

1. 工程文件

2. 程序文件

3. 程序编译

4. Testbench

Test1

Test2

5. 仿真图

Test1仿真

Test2仿真

部分代码展示:

//存储器
module DATA_RAM(
input clk,//时钟
input rst_n,//复位
input enable,//使能信号
input write,//写控制信号
input [31:0] addr_rd,//读地址(最低2位为00)
input [31:0] addr_wr,//写地址(最低2位为00)
input [31:0] data_wr,//写数据
output reg [31:0] data_rd//读数据
);
//大端存储:数据的高字节存储在内存低地址,数据的低字节存储在内存高地址
//例如存储0x12345678,地址和数据对应关系为:00-12;01-34;02-56;03-78
parameter N=512;//定义存储器的深度N
reg [7:0] dm_mem [N-1:0];  //定义一个深度为N,宽度为8位的内存
//写数据
integer i;
always @(posedge clk or negedge rst_n)
    if(!rst_n)//复位
        for(i = 0; i < N; i = i + 1)  //内部先初始化为0
           dm_mem[i] <= 8'h0;
    else if(write && enable)begin//当写信号来且使能信号有效时,将写数据写入对应地址的内存
        dm_mem[addr_wr]   <= data_wr[31:24]; //大端格式,高字节存储在内存低地址
dm_mem[addr_wr+1] <= data_wr[23:16]; 
dm_mem[addr_wr+2] <= data_wr[15:8] ; 
dm_mem[addr_wr+3] <= data_wr[7 :0] ; //数据的低字节存储在内存高地址
end
//读数据
always @(posedge clk or negedge rst_n)
if(!rst_n)
data_rd<=32'd0;//复位
else if(enable)begin//使能信号有效
data_rd[31:24]<=dm_mem[addr_rd]; //大端格式,高字节存储在内存低地址,读addr_rd数据
data_rd[23:16]<=dm_mem[addr_rd+1];
data_rd[15:8] <=dm_mem[addr_rd+2];
data_rd[7 :0] <=dm_mem[addr_rd+3]; //数据的低字节存储在内存高地址
end
else//使能信号无效
data_rd<=32'bZ;//无效数据
endmodule
源代码

 扫描文章末尾的公众号二维码

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值