• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

06/19 14:36
824
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240104093503132.doc

共1个文件

名称:处理器存储器设计Verilog代码vivado仿真

软件:vivado

语言:Verilog

代码功能:

存储器用于存储数据和指令。

MIPS32处理器的地址总线32位,数据总线32位,但是存储器按字节编址,因此存储器容量为232×8位=4GB,地址范围0x00000000 XFFFF FFFF。

但是MIPS32处理器绝大部分指令对存储器的访问尺寸为字(Word,32位),即访问地址必须按照4字节的边界严格对齐(地址最低2位=00)。至于MPS的一个字的字节大小端问题,选择小端格式:高字节(MSB)在高地址,低字节(LSB)在低地址。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

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

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=481

  • 2-240104093503132.doc
    下载

相关推荐