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

📄 mem_phy_init.v

📁 xilinx公司的DDR实现源码
💻 V
📖 第 1 页 / 共 2 页
字号:
       cas_check_count_r <= cas_check_count_r - 1'b1;endalways @ (posedge clk0) begin   if (rst)       rdburst_cnt_r <= 3'd0;   else if ((cas_check_count_r == 4'b0010))      rdburst_cnt_r <= burst_cnt;         else if (rdburst_cnt_r > 3'd0)                        rdburst_cnt_r <= rdburst_cnt_r - 1'b1;end // always @ (posedge clk0)//read enable to data pathalways @ (*) begin   if ((rdburst_cnt_r == 3'd0)) begin      ctrl_read_en <= 1'b0;   end else begin      ctrl_read_en <= 1'b1;   endendalways@(posedge clk0)begin   if(rst)      wdf_rden_r <= 1'd0;   else if ((init_state_r == INIT_FIRST_WRITE) || (init_state_r == INIT_PATTERN_WRITE))      wdf_rden_r <= 1'd1;   else     wdf_rden_r <= 1'd0;end         always@(posedge clk0)begin   if(rst) begin      wdf_rden_r1 <= 1'd0;      wdf_rden_r2 <= 1'd0;      wdf_rden_r3 <= 1'd0;      wdf_rden_r4 <= 1'd0;      wdf_rden_r5 <= 1'd0;      wdf_rden_r6 <= 1'd0;      wdf_rden_r7 <= 1'd0;      wdf_rden_r8 <= 1'd0;      wdf_rden_r9 <= 1'd0;   end   else begin      wdf_rden_r1 <= wdf_rden_r;      wdf_rden_r2 <= wdf_rden_r1;      wdf_rden_r3 <= wdf_rden_r2;      wdf_rden_r4 <= wdf_rden_r3;      wdf_rden_r5 <= wdf_rden_r4;      wdf_rden_r6 <= wdf_rden_r5;      wdf_rden_r7 <= wdf_rden_r6;      wdf_rden_r8 <= wdf_rden_r7;      wdf_rden_r9 <= wdf_rden_r8;   end // else: !if(rst)end // always@ (posedge clk0)   always@(posedge clk0)begin   if(rst) begin      phy_init_wdf_rden<= 1'd0;   end else begin       case(ADDITIVE_LATENCY_VALUE  + CAS_LATENCY_VALUE + REGISTERED_VALUE)	 4'b0011:phy_init_wdf_rden<= wdf_rden_r | wdf_rden_r1 | wdf_rden_r2 | wdf_rden_r3;	 4'b0100:phy_init_wdf_rden<= wdf_rden_r1 | wdf_rden_r2 | wdf_rden_r3 | wdf_rden_r4;         4'b0101:phy_init_wdf_rden<= wdf_rden_r2 | wdf_rden_r3 | wdf_rden_r4 | wdf_rden_r5;	 4'b0110:phy_init_wdf_rden<= wdf_rden_r3 | wdf_rden_r4 | wdf_rden_r5 | wdf_rden_r6;	 4'b0111:phy_init_wdf_rden<= wdf_rden_r4 | wdf_rden_r5 | wdf_rden_r6 | wdf_rden_r7;	 4'b1000:phy_init_wdf_rden<= wdf_rden_r5 | wdf_rden_r6 | wdf_rden_r7 | wdf_rden_r8;	 4'b1001:phy_init_wdf_rden<= wdf_rden_r6 | wdf_rden_r7 | wdf_rden_r8 | wdf_rden_r9;       endcase // case(ADDITIVE_LATENCY_VALUE  + CAS_LATENCY_VALUE + REGISTERED_VALUE)   end // else: !if(rst)end // always@ (posedge clk0)       assign phy_init_rden  = ctrl_read_en;always @ (posedge clk0) begin  if (rst || init_memory_r)     initalization_done_r <= 1'd0;  else if((second_calib_done) && ((init_state_r == INIT_PRECHARGE_WAIT) && (rfc_count_r == 6'd0)))       initalization_done_r <= 1'd1;endalways @ (posedge clk0) begin  if (rst) begin     init_state_r <= INIT_IDLE;     init_state_r1 <= INIT_IDLE;     init_state_r2 <= INIT_IDLE; end else begin     init_state_r <= init_next_state;     init_state_r1 <= init_state_r;     init_state_r2 <= init_state_r1;     endend    	// init state machinealways @ (*) begin	     init_next_state = init_state_r;       case (init_state_r)     INIT_IDLE : begin        if (init_memory_r && done_200us_r == 1'b1) begin           case (init_count_r ) // synthesis parallel_case full_case             4'h0 : init_next_state = INIT_COUNT_200;                         4'h1 : if (count_200cycle_done_r) init_next_state = INIT_PRECHARGE;             4'h2 : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE; //emr(2)             4'h3 : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE; //emr(3);             4'h4 : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE; //emr;                    4'h5 : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE; //lmr;                4'h6 : if (rfc_count_r == 6'b00000) init_next_state = INIT_PRECHARGE;                 4'h7 : if (rfc_count_r == 6'b00000) init_next_state = INIT_AUTO_REFRESH;              4'h8 : if (rfc_count_r == 6'b00000) init_next_state = INIT_AUTO_REFRESH;             4'h9 : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE;             4'hA : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE;             4'hB : if (rfc_count_r == 6'b00000) init_next_state = INIT_LOAD_MODE;             4'hC : if (rfc_count_r == 6'b00000) init_next_state = INIT_COUNT_200;	     4'hD :  begin               	if( (chip_cnt_r < `cs_width-1))                  init_next_state = INIT_DEEP_MEMORY_ST;		else  if (count_200cycle_done_r)                    init_next_state = INIT_DUMMY_ACTIVE; //  init_next_state = INIT_DUMMY_READ_CYCLES;		else		  init_next_state = INIT_IDLE;	     end             4'hE :if (second_calib_done) init_next_state = INIT_PRECHARGE;             4'hF :  begin                    if (second_calib_done)                    init_next_state = INIT_IDLE;                end	     	     default: init_next_state = INIT_IDLE;	                endcase // case(init_count)                          end      end // case: IDLE      INIT_DEEP_MEMORY_ST : init_next_state = INIT_IDLE;           INIT_COUNT_200 : init_next_state = INIT_COUNT_200_WAIT;       INIT_COUNT_200_WAIT : if (count_200cycle_done_r) init_next_state = INIT_IDLE;      INIT_DUMMY_ACTIVE       : init_next_state = INIT_DUMMY_ACTIVE_WAIT;      INIT_DUMMY_ACTIVE_WAIT  : if (rfc_count_r == 6'd0) init_next_state = INIT_FIRST_WRITE;      INIT_FIRST_READ_WAIT : begin        if((first_calib_done)) begin	   if(rfc_count_r == 6'd0)               init_next_state = INIT_PATTERN_WRITE ;       end else          init_next_state = INIT_FIRST_READ;       end     INIT_FIRST_WRITE:  init_next_state = INIT_FIRST_WRITE_READ;     INIT_FIRST_WRITE_READ         : if (rfc_count_r == 6'd0) init_next_state = INIT_FIRST_READ;     INIT_FIRST_READ : init_next_state = INIT_FIRST_READ_WAIT;     INIT_PRECHARGE          : init_next_state = INIT_PRECHARGE_WAIT;     INIT_PRECHARGE_WAIT     : if (rfc_count_r == 6'd0) init_next_state = INIT_IDLE;                     INIT_LOAD_MODE      : init_next_state = INIT_MODE_REGISTER_WAIT;     INIT_MODE_REGISTER_WAIT : if (rfc_count_r == 6'd0) init_next_state = INIT_IDLE;                 INIT_AUTO_REFRESH       : init_next_state = INIT_AUTO_REFRESH_WAIT;     INIT_AUTO_REFRESH_WAIT  :if (rfc_count_r == 6'd0) init_next_state = INIT_IDLE;                      INIT_ACTIVE             : init_next_state = INIT_ACTIVE_WAIT;     INIT_ACTIVE_WAIT        : if (rfc_count_r == 6'd0) init_next_state = INIT_IDLE;     INIT_PATTERN_WRITE        : init_next_state = INIT_PATTERN_WRITE_READ;     INIT_PATTERN_WRITE_READ    :if (rfc_count_r == 6'd0) init_next_state = INIT_PATTERN_READ;     INIT_PATTERN_READ : init_next_state = INIT_PATTERN_READ_WAIT;     INIT_PATTERN_READ_WAIT : begin        if((second_calib_done))begin	   if (rfc_count_r == 6'd0)              init_next_state = INIT_PRECHARGE;       end  else if (rfc_count_r == 6'd0)         init_next_state = INIT_PATTERN_READ;       end                                    endcase // case(state)end // always @ (...// commands to the memoryalways @ (posedge clk0) begin   if (rst)      ddr2_ras_r <= 1'b1; //  else if (init_state_r == INIT_LOAD_MODE || init_state_r == INIT_PRECHARGE || init_state_r == INIT_ACTIVE //                || init_state_r == INIT_AUTO_REFRESH || init_state_r == INIT_DUMMY_ACTIVE )   else if (init_state_r < INIT_FIRST_WRITE)      ddr2_ras_r <= 1'b0; else ddr2_ras_r <= 1'b1;end// commands to the memoryalways @ (posedge clk0) begin   if (rst)       ddr2_cas_r <= 1'b1;  // else if (init_state_r == INIT_LOAD_MODE || init_state_r == INIT_AUTO_REFRESH  //               || init_state_r == INIT_FIRST_WRITE || init_state_r == INIT_FIRST_READ ||   //              init_state_r== INIT_PATTERN_READ || init_state_r == INIT_PATTERN_WRITE )    else if ((init_state_r > INIT_PRECHARGE) && (init_state_r < INIT_COUNT_200))      ddr2_cas_r <= 1'b0;   else      ddr2_cas_r <= 1'b1;end // always @ (posedge clk0)// commands to the memoryalways @ (posedge clk0) begin   if (rst)       ddr2_we_r <= 1'b1;   else if (init_state_r == INIT_PATTERN_WRITE || init_state_r == INIT_FIRST_WRITE                || init_state_r == INIT_LOAD_MODE || init_state_r == INIT_PRECHARGE)       ddr2_we_r <= 1'b0;   else ddr2_we_r <= 1'b1;end//register commands to the memoryalways @ (posedge clk0) begin   if (rst) begin      ddr2_ras_r1 <= 1'b1;      ddr2_cas_r1 <= 1'b1;      ddr2_we_r1 <= 1'b1;   end else begin      ddr2_ras_r1  <= ddr2_ras_r;       ddr2_cas_r1  <= ddr2_cas_r;      ddr2_we_r1   <= ddr2_we_r;  endend   // address during init always @ (posedge clk0) begin   if (rst)        ddr2_address_init_r <= `row_address'h0000;   else begin      if (init_state_r1 == INIT_PRECHARGE) begin         ddr2_address_init_r <= `row_address'h0400; 						//A10 = 1 for precharge all		         end else if ( init_state_r1 == INIT_LOAD_MODE && init_count_r == 4'h5) begin 	 ddr2_address_init_r <= ext_mode_reg; 						// A0 == 0 for DLL enable        end else if ( init_state_r1 == INIT_LOAD_MODE && init_count_r == 4'h6) begin         ddr2_address_init_r <= (`row_address'h0100 | load_mode_reg); 			// A8 == 1 for DLL reset      end else if (init_state_r1 == INIT_LOAD_MODE && init_count_r ==4'hA) begin         ddr2_address_init_r <= load_mode_reg;  				// Write recovery = 4; cas_latency = 4; burst length = 4      end else if (init_state_r1 == INIT_LOAD_MODE && init_count_r ==4'hB) begin         ddr2_address_init_r <= (`row_address'h0380 | ext_mode_reg); // OCD DEFAULT      end else if (init_state_r1 == INIT_LOAD_MODE && init_count_r ==4'hC) begin         ddr2_address_init_r <= (`row_address'h0000 | ext_mode_reg);  // OCD EXIT      end else if(init_state_r1 == INIT_DUMMY_ACTIVE)        ddr2_address_init_r <= `row_address'h0000;      else        ddr2_address_init_r <= `row_address'h0000;   endend // always @ (posedge clk0)always @ (posedge clk0) begin   if (rst) begin      ddr2_ba_r[`bank_address-1:0] <= `bank_address'h0;   end else if (init_memory_r == 1'b1 && init_state_r1 == INIT_LOAD_MODE ) begin      if (init_count_r == 4'h3) begin         ddr2_ba_r[`bank_address-1:0] <= `bank_address'h2; //emr2      end else if (init_count_r == 4'h4) begin         ddr2_ba_r[`bank_address-1:0] <= `bank_address'h3; //emr3      end else if (init_count_r == 4'h5 || init_count_r == 4'hB || init_count_r == 4'hC) begin               ddr2_ba_r[`bank_address-1:0] <= `bank_address'h1; //emr      end else ddr2_ba_r[`bank_address-1:0] <= 2'b00; //  end else if ((init_state_r1 == INIT_DUMMY_ACTIVE) || (  //               (init_state_r1 == INIT_ACTIVE) || (init_state_r1 == INIT_LOAD_MODE) || (init_state_r1 == INIT_PRECHARGE)  )) begin      end else if (init_state_r1 < INIT_AUTO_REFRESH) begin       ddr2_ba_r[`bank_address-1:0] <= 2'b00;    end else ddr2_ba_r[`bank_address-1:0] <= ddr2_ba_r[`bank_address-1:0];end // always @ (posedge clk0)always @ (posedge clk0) begin   if (rst) begin      ddr2_cs_r1[`cs_width-1:0] <= `cs_width'h0;   end else if (init_memory_r == 1'b1 ) begin      if (chip_cnt_r == 2'h0) begin         ddr2_cs_r1[`cs_width-1:0] <= `cs_width'hE;       end else if (chip_cnt_r == 2'h1) begin         ddr2_cs_r1[`cs_width-1:0] <= `cs_width'hD;       end else if (chip_cnt_r == 2'h2) begin         ddr2_cs_r1[`cs_width-1:0] <= `cs_width'hB;       end else if (chip_cnt_r == 2'h3) begin         ddr2_cs_r1[`cs_width-1:0] <= `cs_width'h7;       end else        ddr2_cs_r1[`cs_width-1:0] <= `cs_width'hF;            	   end end // always @ (posedge clk0)//assign ddr2_cke_r = (done_200us == 1'b1) ? `cke_width'hF :  `cke_width'h0 ; always @ (posedge clk0) begin   if (rst) begin       ddr2_cke_r<= `cke_width'h0;   end else begin      if(done_200us_r == 1'b1)	ddr2_cke_r<= `cke_width'hF;   endendassign phy_init_address[`row_address-1:0]  = ddr2_address_init_r[`row_address-1:0];assign phy_init_ba [`bank_address-1:0]     = ddr2_ba_r[`bank_address-1:0];     assign phy_init_ras_n = ddr2_ras_r1;  assign phy_init_cas_n = ddr2_cas_r1;  assign phy_init_we_n  = ddr2_we_r1;   //assign phy_init_cs_n = ddr2_cs_r1;     assign phy_init_cs_n = 2'd0;                             assign phy_init_cke  = ddr2_cke_r;  endmodule // ddr2_controller_0                                                                                                                             

⌨️ 快捷键说明

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