名称:处理器的存储器设计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
源代码
扫描文章末尾的公众号二维码