名稱:處理器的存儲(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