⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data_memory.v

📁 Use the verilog language write a MIPS CPU code, and have additional instruction, for example: select
💻 V
字号:
//=============================================================================
//Data memory Module: Memory size is 64 words of 8 bits ( 1 bite ) each
//		      Swap line is control swap or not swap
//	input CLK, MemRead, MemWrite, swap;
//	input [31:0] Address1, Address2, Write_data;
//	output [31:0] Read_data1, Read_data2;
//=============================================================================

module Data_memory( CLK, MemRead, MemWrite, swap, Address1, Address2, Write_data, Read_data1, Read_data2 );
	input CLK, MemRead, MemWrite, swap;	//clock, enable read, enable write, enable write data2
	input [31:0] Address1, Address2, Write_data;	//target address, write data
	output [31:0] Read_data1, Read_data2;	//read data
	reg [31:0] Read_data1, Read_data2;
	reg [7:0] Mem [0:80];	//64 * 8 memory

	always @( Address1 or Address2 or MemRead )	
		begin
			if( MemRead )
				begin
					Read_data1 = { Mem[Address1+3], Mem[Address1+2], Mem[Address1+1], Mem[Address1] };	//read data1
					Read_data2 = { Mem[Address2+3], Mem[Address2+2], Mem[Address2+1], Mem[Address2] };	//read data2
				end
			else
				begin
					Read_data1 = 4'bz;	//High impedance state
					Read_data2 = 4'bz;	//High impedance state
				end
		end	//read data


	always @( posedge CLK )	
		begin
			if( MemWrite )	
				begin
					{ Mem[Address1+3], Mem[Address1+2], Mem[Address1+1], Mem[Address1] } = Write_data;
				end
			if( swap )	
				begin			
					{ Mem[Address2+3], Mem[Address2+2], Mem[Address2+1], Mem[Address2] } = Read_data1;			
					{ Mem[Address1+3], Mem[Address1+2], Mem[Address1+1], Mem[Address1] } = Read_data2;
				end	//swap two data into Mem
		end	//write data

endmodule	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -