• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

處理器的存儲(chǔ)器設(shè)計(jì)Verilog代碼vivado仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-240104093503132.doc

共1個(gè)文件

名稱:處理器存儲(chǔ)器設(shè)計(jì)Verilog代碼vivado仿真

軟件:vivado

語(yǔ)言:Verilog

代碼功能:

存儲(chǔ)器用于存儲(chǔ)數(shù)據(jù)和指令。

MIPS32處理器的地址總線32位,數(shù)據(jù)總線32位,但是存儲(chǔ)器按字節(jié)編址,因此存儲(chǔ)器容量為232×8位=4GB,地址范圍0x00000000 XFFFF FFFF。

但是MIPS32處理器絕大部分指令對(duì)存儲(chǔ)器的訪問(wèn)尺寸為字(Word,32位),即訪問(wèn)地址必須按照4字節(jié)的邊界嚴(yán)格對(duì)齊(地址最低2位=00)。至于MPS的一個(gè)字的字節(jié)大小端問(wèn)題,選擇小端格式:高字節(jié)(MSB)在高地址,低字節(jié)(LSB)在低地址。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. Testbench

Test1

Test2

5. 仿真圖

Test1仿真

Test2仿真

部分代碼展示:

//存儲(chǔ)器
module?DATA_RAM(
input?clk,//時(shí)鐘
input?rst_n,//復(fù)位
input?enable,//使能信號(hào)
input?write,//寫控制信號(hào)
input?[31:0]?addr_rd,//讀地址(最低2位為00)
input?[31:0]?addr_wr,//寫地址(最低2位為00)
input?[31:0]?data_wr,//寫數(shù)據(jù)
output?reg?[31:0]?data_rd//讀數(shù)據(jù)
);
//大端存儲(chǔ):數(shù)據(jù)的高字節(jié)存儲(chǔ)在內(nèi)存低地址,數(shù)據(jù)的低字節(jié)存儲(chǔ)在內(nèi)存高地址
//例如存儲(chǔ)0x12345678,地址和數(shù)據(jù)對(duì)應(yīng)關(guān)系為:00-12;01-34;02-56;03-78
parameter?N=512;//定義存儲(chǔ)器的深度N
reg?[7:0]?dm_mem?[N-1:0];??//定義一個(gè)深度為N,寬度為8位的內(nèi)存
//寫數(shù)據(jù)
integer?i;
always?@(posedge?clk?or?negedge?rst_n)
????if(!rst_n)//復(fù)位
????????for(i?=?0;?i?<?N;?i?=?i?+?1)??//內(nèi)部先初始化為0
???????????dm_mem[i]?<=?8'h0;
????else?if(write?&&?enable)begin//當(dāng)寫信號(hào)來(lái)且使能信號(hào)有效時(shí),將寫數(shù)據(jù)寫入對(duì)應(yīng)地址的內(nèi)存
????????dm_mem[addr_wr]???<=?data_wr[31:24];?//大端格式,高字節(jié)存儲(chǔ)在內(nèi)存低地址
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]?;?//數(shù)據(jù)的低字節(jié)存儲(chǔ)在內(nèi)存高地址
end
//讀數(shù)據(jù)
always?@(posedge?clk?or?negedge?rst_n)
if(!rst_n)
data_rd<=32'd0;//復(fù)位
else?if(enable)begin//使能信號(hào)有效
data_rd[31:24]<=dm_mem[addr_rd];?//大端格式,高字節(jié)存儲(chǔ)在內(nèi)存低地址,讀addr_rd數(shù)據(jù)
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];?//數(shù)據(jù)的低字節(jié)存儲(chǔ)在內(nèi)存高地址
end
else//使能信號(hào)無(wú)效
data_rd<=32'bZ;//無(wú)效數(shù)據(jù)
endmodule

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=481

  • 2-240104093503132.doc
    下載

相關(guān)推薦