您当前的位置: 首页 > 

刘颜儿

暂无认证

  • 4浏览

    0关注

    99博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

03-SDRAM:写操作(突发)

刘颜儿 发布时间:2022-07-30 16:07:57 ,浏览量:4

SDRAM 数据写操作(页突发)

  1. state:
  2. cnt_cmd: 指令执行时长
  3. cnt_cmd_reset:上一个计数器的清零信号 (依赖计满信号:trp_end、trfc_end、tmrd_end)
  4. trcd_end、twrite_end、trp_end: 自家延时结束的信号(依赖 状态)
  5. wr_ack: 写数据期间的状态,整个过程都拉高
  6. wr_end: 状态终止
  7. wr_sdram_en:
设计文件
// SDRAM 数据写操作(页突发)
// 1. state:		
// 2. cnt_cmd:		指令执行时长
// 3. cnt_cmd_reset:上一个计数器的清零信号			 (依赖计满信号:trp_end、trfc_end、tmrd_end)
// 4. trcd_end、twrite_end、trp_end: 自家延时结束的信号(依赖 状态)
// 5. wr_ack:		写数据期间的状态,整个过程都拉高
// 6. wr_end:		状态终止
// 7. wr_sdram_en:	

module sdram_write(
	input 				    clk,
	input 				    rst_n,
	input 				    init_end,
	input 	   	  			wr_en,
	input 		[23:0]		wr_addr,
	input 		[15:0]		wr_data,
	input 		[9:0]		wr_burst_len,
	
	output wire 			wr_ack,
	output wire 			wr_end,
	output reg 	[3:0] 		write_cmd,
	output reg 	[1:0] 		write_bank,
	output reg 	[12:0] 		write_addr,
	output reg 				wr_sdram_en, 
	output wire [15:0] 		wr_sdram_data
);

//==========================================parameter===========================================================
//状态机
localparam	WR_IDLE = 3'b000,				//写操作初始状态
			WR_ACT  = 3'b001,				//行激活状态
			WR_TRCD = 3'b011,				//行激活等待状态
			WR_WR 	= 3'b010,				//写操作状态
			WR_DATA = 3'b100,				//突发写操作状态,突发写入多个数据,直到突发终止
			WR_PRE 	= 3'b101,             	//预充电状态
			WR_TRP 	= 3'b111,             	//预充电状态等待状态
			WR_END 	= 3'b110;             	//结束状态
			
//等待时间参数定义	
localparam	TRP  = 3'd2	,					//预充电等待周期
			TRCD = 3'd2	;					//激活等待周期
			
//命令指令参数				
localparam 	NOP		  	= 4'b0111 ,			//空操作指令
			PRECHARGE 	= 4'b0010 ,			//预充电指令
			ACTIVE    	= 4'b0011 ,			//激活指令
			WRITE     	= 4'b0100 ,			//写指令
			BURST_STOP  = 4'b0110 ;			//突发终止指令
// 突发长度——从外部传入
//parameter MAX_WR = 4'd10;
//==========================================reg=================================================================			
reg [7:0]   state;
reg [7:0]   next_state;
reg [9:0]   cnt_cmd;//2、9

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

wire trcd_end;
wire twrite_end;
wire trp_end;
wire cnt_cmd_reset;
//==========================================assign=================================================================

assign trcd_end   	 = ((state == WR_TRCD)  && (cnt_cmd == TRCD    -1))?1'd1:1'd0;
assign twrite_end 	 = ((state == WR_DATA) && (cnt_cmd == wr_burst_len -1))?1'd1:1'd0;
assign trp_end    	 = ((state == WR_TRP)  && (cnt_cmd == TRP   -1))?1'd1:1'd0;
assign cnt_cmd_reset = ((state == WR_IDLE)||(state == WR_WR) || (state == WR_END) || trcd_end || twrite_end || trp_end)?1'd1:1'd0;
assign wr_ack		 = ((state == WR_WR)  || (state == WR_DATA) && (cnt_cmd             
关注
打赏
1659364566
查看更多评论
0.1237s