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

📄 datacnl_dsp.v

📁 详细介绍SDRAM原理的中文电子书籍
💻 V
📖 第 1 页 / 共 2 页
字号:
module datacnl_dsp(		clk,	rst,	r_ram_rdb_raw,		r_ram_rab_raw,		r_req_in_raw,	r_ack_raw,		r_ram_rdb_mask,		r_ram_rab_mask,		r_req_in_mask,	r_ack_mask,		s_ram_wdb_mask,	s_ram_wab_mask,	s_ram_wen_mask,		s_req_in_mask,	s_ack_mask,		s_ram_wdb_raw,	s_ram_wab_raw,	s_ram_wen_raw,		s_req_in_raw,	s_ack_raw,		cmd,	cmdack,	addr,	datain,	dataout,	start_read,	mode_vga_in,					vsync,	vsync_vga,		raw_demand,	raw_send_int,		mask_demand,	mask_send_ack,	mask_mode,	mask_read_ena,		send_finish,	pal_ntsc_flag,	r_ba_datacnl                );input	clk;input	rst;input	[15:0]	r_ram_rdb_raw;	output	[7:0]	r_ram_rab_raw;	input	r_req_in_raw;output	r_ack_raw;	input	[7:0]	r_ram_rdb_mask;	output	[8:0]	r_ram_rab_mask;	input	r_req_in_mask;output	r_ack_mask;	output	[7:0]	s_ram_wdb_mask;output	[8:0]	s_ram_wab_mask;output	s_ram_wen_mask;	input	s_req_in_mask;output	s_ack_mask;	output	[15:0]	s_ram_wdb_raw;output	[7:0]	s_ram_wab_raw;output	s_ram_wen_raw;	input	s_req_in_raw;output	s_ack_raw;	output	[2:0]	cmd;input	cmdack;output	[20:0]	addr;output	[15:0]	datain;input	[15:0]	dataout;input	start_read;input	mode_vga_in;				input	vsync;input	vsync_vga;	input	raw_demand;output	raw_send_int;	input	mask_demand;output	mask_send_ack;output	mask_mode;output	mask_read_ena;output	send_finish;input	pal_ntsc_flag;input	r_ba_datacnl;//---------port variables declaration-----------//// State parameters used in MAIN  STATE MACHINEparameter 	IDLE		=23'b000_0000_0000_0000_0000_0001,	PRECHARGE	=23'b000_0000_0000_0000_0000_0010,	PRECHARGE_ACK	=23'b000_0000_0000_0000_0000_0100,    	LOAD_MR		=23'b000_0000_0000_0000_0000_1000,	LOAD_MR_ACK	=23'b000_0000_0000_0000_0001_0000,	LOAD_R2		=23'b000_0000_0000_0000_0010_0000,	LOAD_R2_ACK	=23'b000_0000_0000_0000_0100_0000,	LOAD_R1		=23'b000_0000_0000_0000_1000_0000,                          	IDLE_WR		=23'b000_0000_0000_0001_0000_0000,    	PAGE_WRITE	=23'b000_0000_0000_0010_0000_0000,	BURST_WRITE	=23'b000_0000_0000_0100_0000_0000,	BT_W		=23'b000_0000_0000_1000_0000_0000,	WAIT_ACK_W_T	=23'b000_0000_0001_0000_0000_0000,                         	PAGE_READ	=23'b000_0000_0010_0000_0000_0000,	BURST_READ	=23'b000_0000_0100_0000_0000_0000,	BT		=23'b000_0000_1000_0000_0000_0000,	LAST_DATA	=23'b000_0001_0000_0000_0000_0000,	CLOSE_PAGE_W	=23'b000_0010_0000_0000_0000_0000,	REFRESH_W       =23'b000_0100_0000_0000_0000_0000,	CLOSE_PAGE_R    =23'b000_1000_0000_0000_0000_0000,	REFRESH_R       =23'b001_0000_0000_0000_0000_0000,	IDLE_W		=23'b010_0000_0000_0001_0000_0000,	IDLE_R		=23'b100_0000_0000_0001_0000_0000;	parameter RCD='D3,CL='D3,BL='d180;//H_PIXELS>>2;reg	s_enable;reg	[22:0]	STATE;reg	[7:0]	Burst_cnt;reg	[1:0]	RCDCL_CNT;//reg	send_cnl;reg	mode_vga;reg	vsync_reg,vsync_vga_reg,vsync_reg1,vsync_vga_reg1;reg	s_req_mask,r_req_raw,r_req_mask,s_req_raw;reg	s_req_mask1,r_req_raw1,r_req_mask1,s_req_raw1;always @ (posedge clk)begin	mode_vga <= mode_vga_in;	vsync_reg <= vsync_reg1;	vsync_reg1 <= vsync;	vsync_vga_reg1 <= vsync_vga;	vsync_vga_reg <= vsync_vga_reg1;		s_req_mask1 <= s_req_in_mask;	r_req_raw1 <= r_req_in_raw;	r_req_mask1 <= r_req_in_mask;	s_req_raw1 <= s_req_in_raw;		s_req_mask <= s_req_mask1;	r_req_raw <= r_req_raw1;	r_req_mask <= r_req_mask1;	s_req_raw <= s_req_raw1;end	reg	raw_mode;reg	trans_raw_busy; //**********************************************************************************//always @ (posedge clk or negedge rst)if(!rst)	raw_mode <= 0;else if(raw_demand)	raw_mode <= 1;else if(trans_raw_busy)	raw_mode <= 0;//**********************************************************************************////**********************************************************************************//reg	mask_mode;reg	mask_send_ack;always @ (posedge clk or negedge rst)if(!rst)	mask_mode <= 0;else if(mask_demand)	mask_mode <= 1;else if(mask_send_ack)	mask_mode <= 0;	reg	mask_read_ena = (trans_raw_busy|mask_send_ack);//**********************************************************************************////**********************************************************************************////********************transfer the data bus*****************************************//reg	[15:0]	s_ram_wdb_raw;reg	[7:0]	s_ram_wdb_mask;always @ (posedge clk) begin		s_ram_wdb_raw <= dataout;	s_ram_wdb_mask <= dataout[7:0];//s_ram_wdb_mask <= s_ram_wen_mask ? (s_ram_wdb_mask +1) : 'd0;//	endassign	datain = trans_raw_busy ? r_ram_rdb_raw : {8'd0,r_ram_rdb_mask};//**********************************************************************************////**********************************************************************************//reg	STATE12_reg,STATE16_reg,STATE8_reg,STATE19_reg;always @ (posedge clk) begin	STATE12_reg <= STATE[12];	STATE16_reg <= STATE[16];	STATE8_reg  <= STATE[8];	STATE19_reg <= STATE[19];end	//generate the send wen signal assign s_ram_wen_raw = s_enable & trans_raw_busy;assign s_ram_wen_mask = s_enable & !trans_raw_busy;parameter	NOP       ='b000,		READA     ='b001,		WRITEA    ='b010,		ARF       ='b011,		PRECHRG   ='b100,		LOAD_MODE ='b101,		LOAD_REG1 ='b110,		LOAD_REG2 ='b111;		//generate the cmd to the sdr_sdram_controllerreg	[2:0]	cmd;always @ (STATE)case(STATE)    	PRECHARGE:	cmd = PRECHRG;	LOAD_MR:	cmd = LOAD_MODE;	LOAD_R2:	cmd = LOAD_REG2;	LOAD_R1:	cmd = LOAD_REG1;	PAGE_WRITE:	cmd = WRITEA;	BT_W:		cmd = PRECHRG;	CLOSE_PAGE_W:	cmd = PRECHRG;	CLOSE_PAGE_R:	cmd = PRECHRG;	PAGE_READ:	cmd = READA;	BT:		cmd = PRECHRG;	REFRESH_W:	cmd = ARF;	REFRESH_R:	cmd = ARF;	default:	cmd = NOP;endcase//*****************************************************************************////**************************w_ba & w_page**************************************////*****************************************************************************//wire	[10:0]	PAGE_MAX =  'd1152;wire	[9:0]	PAGE_MAX_H =  'd576;reg	[10:0]	w_page_raw,w_page_mask;always @ (posedge clk or negedge rst)if(!rst) begin	w_page_raw <= 0;	w_page_mask <= 0;	endelse if(STATE12_reg) begin	if(trans_raw_busy)		w_page_raw <= w_page_raw + 1;	else		w_page_mask <= w_page_mask + 1;	endelse begin	if(w_page_raw == PAGE_MAX)//'d960		w_page_raw <= 0;	else if(w_page_mask == PAGE_MAX_H )//'d480		w_page_mask <= 0;	endwire	[10:0]	w_page = trans_raw_busy ? w_page_raw : w_page_mask;reg	w_ba_mask,w_ba_raw;always @ (posedge clk or negedge rst)if(!rst) begin	w_ba_mask <= 0;	w_ba_raw <= 0;	endelse if(STATE[18] & cmdack) begin	if(w_page_raw == 0 && trans_raw_busy)//'d959		w_ba_raw <= ~w_ba_raw;	else if(w_page_mask == 0 && mask_send_ack)//d479		w_ba_mask <= ~w_ba_mask;	end	wire	[1:0]	w_ba = trans_raw_busy ? {1'b0,w_ba_raw} : {1'b1,w_ba_mask};//****************************************************************************////***********************  r_ba & r_page *************************************////****************************************************************************//reg	[10:0]	r_page_raw;always @ (posedge clk or negedge rst)if(!rst) 	r_page_raw <= 0;else if(trans_raw_busy) begin	if(STATE16_reg)		r_page_raw <= r_page_raw + 1;	else if(r_page_raw == PAGE_MAX)//'d960		r_page_raw <= 0;	end	reg	r_ba_raw;always @ (posedge clk or negedge rst)if(!rst) 	r_ba_raw <= 0;else if(trans_raw_busy && STATE[20] && cmdack) begin	if( r_page_raw == 'd0)		r_ba_raw <= ~r_ba_raw;	end	reg	[10:0]	r_page_video;reg	r_ba_video;	always @ (posedge clk or negedge rst)if(!rst) 	r_page_video <= 0;else if(!mode_vga & !trans_raw_busy) begin	if(STATE16_reg) begin		if(r_page_video >= PAGE_MAX_H-1)			r_page_video <= PAGE_MAX_H-1;		else			r_page_video <= r_page_video + 1;		end	else if(STATE8_reg & (!vsync_reg))		r_page_video <= 0;	end	reg	r_ba_datacnl_dsp;always @ (posedge clk)r_ba_datacnl_dsp <= r_ba_datacnl;//p制是正的wire	[1:0]	r_ba_mask =  {1'b1,r_ba_datacnl_dsp} ;  wire	r_ba0_vga = r_ba_datacnl_dsp;wire	[1:0]	r_ba = trans_raw_busy ? {1'b0,r_ba_raw} : r_ba_mask;reg	[10:0]	r_page_vga_odd,r_page_vga_even;always @ (posedge clk or negedge rst)if(!rst) begin	r_page_vga_odd <= 0;	r_page_vga_even <= 0;	endelse if(STATE16_reg & mode_vga & !trans_raw_busy) begin	if(!r_ba0_vga)		r_page_vga_odd <= r_page_vga_odd + 1;	else		r_page_vga_even <= r_page_vga_even + 1;	endelse if(STATE8_reg & (!vsync_vga_reg)) begin	r_page_vga_odd <= 0;	r_page_vga_even <= 0;	end	wire	[10:0]	r_page_vga = r_ba0_vga ? r_page_vga_even : r_page_vga_odd;wire	[10:0]	r_page_mask = mode_vga ? r_page_vga : r_page_video;wire	[10:0]	r_page = trans_raw_busy ? r_page_raw : r_page_mask;reg	raw_send_int;always @ (posedge clk or negedge rst)if(!rst)

⌨️ 快捷键说明

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