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

📄 memoryside.v

📁 这是arm7处理器的verilog全代码
💻 V
字号:
// Verilog source file for the MemoryASM// Written by Chris Fester 3-28-00// This represents the "memory controller" side of the Memory Interface.  It runs// with the assumption that it is being connected to PC100 SDRAM.  Please see// documentation in regards to other assumptions made about the SDRAM.`define NUM_MEM_STATE_BITS 5`define BEHAVIORAL 1// state defines`define MEM_IDLE_STATE		5'h00`define ST_RAS_STATE		5'h01`define ST_NOP_DELAY_STATE1	5'h02`define ST_NOP_DELAY_STATE2 5'h03`define ST_CAS_STATE		5'h04`define ST_NOP_DELAY_STATE3	5'h05`define ST_WRITE_DATA_STATE	5'h06`define ST_PRECHARGE_STATE	5'h07`define ST_NOP_DELAY_STATE4 5'h08`define LD_RAS_STATE		5'h10`define LD_NOP_DELAY_STATE1	5'h11`define LD_NOP_DELAY_STATE2	5'h12`define LD_CAS_STATE		5'h13`define LD_NOP_DELAY_STATE3	5'h14`define LD_NOP_DELAY_STATE4 5'h15`define LD_DATA_STATE1		5'h16`define LD_DATA_STATE2		5'h17`define LD_DATA_STATE3		5'h18`define LD_DATA_STATE4		5'h19`define LD_PRECHARGE_STATE	5'h1amodule memory_coupler (A, mem_A, mem_D, mem_nRAS, mem_nCAS, mem_nRW, mem_SEQ, mem_nCS, 		       mem_MCLK, mem_BYTE, st_busy, ld_busy, 		       write_buffer_is_byte, write_buffer_D, write_buffer_A, 		       Store_Trigger, Load_Trigger, 		       load_from_mem_req, load_from_mem_data, load_from_mem_offset, clk, reset);   // Address used for loads   input [31:0] A;      // Triggers for the state machine to start   input 	Store_Trigger, Load_Trigger;   // Bus buffers from cache module   input [31:0] write_buffer_D, write_buffer_A;   // byte flag   input 	write_buffer_is_byte;   // Standard self-explanatory signals   input 	clk, reset;   // SDRAM control signals   output 	mem_nRAS, mem_nCAS, mem_nRW, mem_SEQ, mem_nCS, mem_MCLK, mem_BYTE;    // SDRAM busses   output [31:0] mem_A;   inout [31:0]  mem_D;   // busy signals   output 	 st_busy, ld_busy;   // cache load signals   output 	 load_from_mem_req;   output [31:0] load_from_mem_data;   output [1:0]  load_from_mem_offset;   wire [31:0] 	 A;   wire 	 Store_Trigger, Load_Trigger;   wire [31:0] 	 write_buffer_D, write_buffer_A;   wire 	 write_buffer_is_byte;   wire 	 clk, reset;   reg 		 mem_nRAS, mem_nCAS, mem_nRW, mem_SEQ, mem_nCS, mem_BYTE;   wire 	 mem_MCLK;   reg [31:0] 	 mem_A;   wire [31:0] 	 mem_D;   reg 		 st_busy, ld_busy;   reg 		 load_from_mem_req;   reg [31:0] 	 load_from_mem_data;   reg [1:0] 	 load_from_mem_offset;         // internal signals   reg [`NUM_MEM_STATE_BITS -1:0] state;   reg [31:0] 			  mem_Dout;      assign mem_MCLK = clk;   assign mem_D = mem_Dout;   always @(posedge clk or posedge reset)      begin	 if (reset == 1'b1)	    state = `MEM_IDLE_STATE;	 else	    begin	       `ifdef BEHAVIORAL		  #1;	       `endif		  case (state)		    `MEM_IDLE_STATE : begin		       mem_Dout <= @(posedge clk) 32'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;		       mem_nRAS <= @(posedge clk) 1'b1;		       mem_nCAS <= @(posedge clk) 1'b1;		       mem_nRW <= @(posedge clk) 1'b0;		       mem_SEQ <= @(posedge clk) 1'b0;		       mem_nCS <= @(posedge clk) 1'b1;		       st_busy <= @(posedge clk) 1'b0;		       ld_busy <= @(posedge clk) 1'b0;		       mem_BYTE <= @(posedge clk) 1'b0;		       #1;		       if (Store_Trigger == 1'b1)			  begin			     st_busy <= @(posedge clk) 1'b1;			     mem_A <= @(posedge clk) write_buffer_A;			     enter_new_mem_state(`ST_RAS_STATE);			  end		       else if (Load_Trigger == 1'b1)			  begin			     ld_busy <= @(posedge clk) 1'b1;			     mem_A <= @(posedge clk) A;			     enter_new_mem_state(`LD_RAS_STATE);			  end			    end		    // *** Begin store portion ************************ 8 states.		    `ST_RAS_STATE : begin		       mem_nRAS <= @(posedge clk) 1'b0;		       mem_BYTE <= @(posedge clk) write_buffer_is_byte;		       mem_Dout <= @(posedge clk) write_buffer_D;		       mem_nRW <= @(posedge clk) 1'b1;		       mem_nCS <= @(posedge clk) 1'b0;		       enter_new_mem_state(`ST_NOP_DELAY_STATE1);		    end		    `ST_NOP_DELAY_STATE1 : begin		       mem_nCS <= @(posedge clk) 1'b1;		       enter_new_mem_state(`ST_NOP_DELAY_STATE2);			    end		    `ST_NOP_DELAY_STATE2 : begin		       mem_nRAS <= @(posedge clk) 1'b1;		       enter_new_mem_state(`ST_CAS_STATE);		    end		    `ST_CAS_STATE : begin		       mem_nCAS <= @(posedge clk) 1'b0;		       mem_nCS <= @(posedge clk) 1'b0;		       enter_new_mem_state(`ST_NOP_DELAY_STATE3);		    end		    `ST_NOP_DELAY_STATE3 : begin		       mem_nCS <= @(posedge clk) 1'b1;		       enter_new_mem_state(`ST_WRITE_DATA_STATE);		    end		    `ST_WRITE_DATA_STATE : begin		       mem_Dout <= @(posedge clk) 32'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;		       enter_new_mem_state(`ST_PRECHARGE_STATE);		    end		    `ST_PRECHARGE_STATE : begin		       // empty state		       enter_new_mem_state(`ST_NOP_DELAY_STATE4);		    end		    `ST_NOP_DELAY_STATE4 : begin		       // empty state		       enter_new_mem_state(`MEM_IDLE_STATE);		    end		    // *** Begin load portion ***************************** 11 states.		    `LD_RAS_STATE : begin		       mem_nRAS <= @(posedge clk) 1'b0;		       mem_nCS <= @(posedge clk) 1'b0;		       enter_new_mem_state(`LD_NOP_DELAY_STATE1);			    end		    `LD_NOP_DELAY_STATE1 : begin		       mem_nCS <= @(posedge clk) 1'b1;		       enter_new_mem_state(`LD_NOP_DELAY_STATE2);		    end		    `LD_NOP_DELAY_STATE2 : begin		       mem_nRAS <= @(posedge clk) 1'b1;		       enter_new_mem_state(`LD_CAS_STATE);		    end		    `LD_CAS_STATE : begin		       mem_nCAS <= @(posedge clk) 1'b0;		       mem_nCS <= @(posedge clk) 1'b0;		       enter_new_mem_state(`LD_NOP_DELAY_STATE3);		    end		    `LD_NOP_DELAY_STATE3 : begin		       mem_nCS <= @(posedge clk) 1'b1;		       enter_new_mem_state(`LD_NOP_DELAY_STATE4);		    end		    `LD_NOP_DELAY_STATE4 : begin		       enter_new_mem_state(`LD_DATA_STATE1);		    end		    `LD_DATA_STATE1 : begin		       load_cache_line(0, mem_D);		       enter_new_mem_state(`LD_DATA_STATE2);		    end		    `LD_DATA_STATE2 : begin		       load_cache_line(1, mem_D);		       enter_new_mem_state(`LD_DATA_STATE3);		    end		    `LD_DATA_STATE3 : begin		       load_cache_line(2, mem_D);		       enter_new_mem_state(`LD_DATA_STATE4);		    end		    `LD_DATA_STATE4 : begin		       load_cache_line(3, mem_D);		       enter_new_mem_state(`LD_PRECHARGE_STATE);		    end		    `LD_PRECHARGE_STATE : begin		       load_from_mem_req <= @(posedge clk) 1'b0;		       enter_new_mem_state(`MEM_IDLE_STATE);		    end		    default : begin		       enter_new_mem_state(`MEM_IDLE_STATE);		    end		  endcase	    end      end   // task for memory_coupler to enter a new state   task enter_new_mem_state;      input [`NUM_MEM_STATE_BITS-1:0] this_state;      begin	 state <= @(posedge clk) this_state;      end   endtask   // task for memory_coupler to load a cache line   task load_cache_line;      input [1:0] offset;      input [31:0] data_to_move;      begin	 #2;	 load_from_mem_req <= @(posedge clk) 1'b1;	 load_from_mem_offset <= @(posedge clk) offset;	 @(negedge clk); // put here to guarantee that the data will be     // avaliable before the next _positive_ clock edge.	 load_from_mem_data <= @(posedge clk) data_to_move;      end   endtaskendmodule

⌨️ 快捷键说明

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