您当前的位置: 首页 > 

刘颜儿

暂无认证

  • 4浏览

    0关注

    99博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

05-SDRAM:仲裁

刘颜儿 发布时间:2022-07-31 13:42:53 ,浏览量:4

SDRAM 仲裁

  1. state
  2. sdram_cmd_reg: 初始化、写操作、读操作、自刷新模块传来的指令,需要内部用sdram_cmd接收, 然后分别输出为sdram_cs_n、sdram_ras_n、sdram_cas_n、sdram_we_n
  3. aref_en: 当前状态为仲裁状态ARBIT,且aref_req=1 (依赖ARBIT、aref_req)
  4. wr_en: 当前状态为仲裁状态ARBIT,且wr_req=1 (依赖ARBIT、wr_req)
  5. rd_en: 当前状态为仲裁状态ARBIT,且rd_req=1 (依赖ARBIT、rd_req)
设计文件
// SDRAM 仲裁
// 1. state
// 2. sdram_cmd_reg:		初始化、写操作、读操作、自刷新模块传来的指令,需要内部用sdram_cmd接收,
//						然后分别输出为sdram_cs_n、sdram_ras_n、sdram_cas_n、sdram_we_n
// 3. aref_en:			当前状态为仲裁状态ARBIT,且aref_req=1 (依赖ARBIT、aref_req)
// 4. wr_en:			当前状态为仲裁状态ARBIT,且wr_req=1 (依赖ARBIT、wr_req)
// 5. rd_en:			当前状态为仲裁状态ARBIT,且rd_req=1 (依赖ARBIT、rd_req)


module sdram_arbit(
	input 				    clk,
	input 				    rst_n,
	
	input 				    init_end,
	input   	[3:0]		init_cmd,//SDRAM命令,组成{CS#,RAS#,CAS#,WE#}
	input   	[1:0] 		init_bank,//BANK地址,共4个BANK
	input   	[12:0]		init_addr,//SDRAM地址总线	
	
	input 	   	  			auto_ref_req,
	input 	   	  			auto_ref_end,	
	input   	[3:0]		auto_ref_cmd,//SDRAM命令,组成{CS#,RAS#,CAS#,WE#}
	input   	[1:0] 		auto_ref_bank,//BANK地址,共4个BANK
	input   	[12:0]		auto_ref_addr,//SDRAM地址总线

	
	input 	   	  			wr_req,
	input 	   	  			wr_end,	
	input   	[3:0] 		write_cmd,
	input   	[1:0] 		write_bank,
	input   	[12:0] 		write_addr,	
	input   				wr_sdram_en,//三态门的判断条件 
	input       [15:0] 		wr_sdram_data,//如果wr_sdram_en=1,那么sdram_dq为输出端口,将写操作的数据wr_sdram_data输出给SDRAM
	
	input 	   	  			rd_req,
	input 	   	  			rd_end,
	input   	[3:0] 		read_cmd,
	input   	[1:0] 		read_bank,
	input   	[12:0] 		read_addr,	

	
	output   	 			aref_en,
	output   	 			wr_en,
	output  		 		rd_en,
	output    		 		sdram_cke,
	
	output    		 		sdram_cs_n,
	output    		 		sdram_ras_n,
	output    		 		sdram_cas_n,
	output    		 		sdram_we_n,
	
	output reg 	[1:0] 		sdram_bank,
	output reg 	[12:0] 		sdram_addr,
	output reg 	[15:0] 		sdram_dq
);
 

//==========================================parameter===========================================================

//状态机
localparam	IDLE	= 5'b0_0001   ,   	//初始状态
            ARBIT	= 5'b0_0010   ,   	//仲裁状态
            ATREF	= 5'b0_0100   ,   	//自动刷新状态
            WRITE	= 5'b0_1000   ,   	//写状态
            READ	= 5'b1_0000   ;   	//读状态
			
//命令指令参数			
localparam	NOP		= 4'b0111     ;   	//空操作指令

//==========================================reg=================================================================
			
reg [2:0] state;
reg [2:0] next_state;
reg [3:0] sdram_cmd_reg;

//==========================================wire=================================================================


//==========================================assign=================================================================
assign sdram_cke   = 1'd1;
assign sdram_cs_n  = sdram_cmd_reg[3];
assign sdram_ras_n = sdram_cmd_reg[2];
assign sdram_cas_n = sdram_cmd_reg[1];
assign sdram_we_n  = sdram_cmd_reg[0];
//assign  {sdram_cs_n, sdram_ras_n, sdram_cas_n, sdram_we_n} = sdram_cmd; 还可以这样写

assign sdram_dq = (wr_sdram_en) ? wr_sdram_data:16'bz;
//==========================================always=================================================================
always@(posedge clk or negedge rst_n)begin
	if(!rst_n )
		aref_en             
关注
打赏
1659364566
查看更多评论
0.0422s