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

📄 sramtest.v.bak

📁 FPGA的SRAM存储器的控制程序
💻 BAK
字号:
module SRAMtest(
				//Host side
				CLOCK_50,	//	50 MHz
				SW,
				LEDR,LEDG,KEY,
				HEX0,HEX1,HEX2,HEX3,
				//SRAM side
				SRAM_ADDR,
				SRAM_UB_N,
				SRAM_LB_N,
				SRAM_WE_N,
				SRAM_CE_N,
				SRAM_OE_N,
				SRAM_DQ
				);


input [3:0] KEY;	//写数据控制,用KEY[0],低电平有效
input CLOCK_50;		//	50 MHz
input [17:0] SW;	//低八位控制数据输入,高10位控制地址输入
output [6:0] HEX0,HEX1,HEX2,HEX3;//数据用七段数码管显示	
output [17:0] LEDR;	//地址低八位指示灯
output [7:0] LEDG;	//数据低八位指示灯

inout	[15:0]	SRAM_DQ;
output	[17:0]	SRAM_ADDR;
output			SRAM_UB_N,
				SRAM_LB_N,
				SRAM_WE_N,
				SRAM_CE_N,
				SRAM_OE_N;
			
wire	DLY_RST;//复位信号

reg		[15:0]	iDATA;
wire	[15:0]	oDATA;	//本程序中不起作用
reg		[17:0]	iADDR;
reg			iWE_N,iOE_N;
wire			iCE_N,iCLK;
wire	[1:0]	iBE_N;

reg  [15:0] temp_DATA;	//七段数码管显示数据寄存器			
reg  [1:0] ST;			//状态寄存器
reg [1:0] counter;		//分频计数器

assign iCE_N=1'b0;			//选通信号
assign iBE_N=2'd0;			//高字节和低字节数据掩码信号

assign LEDR[17:8]=SW[17:8];		//地址输入
assign LEDG[7:0]=SW[7:0];		//数据输入

always @(posedge CLOCK_50,negedge DLY_RST)
begin
if(!DLY_RST)//初始化
	begin
	iWE_N<=1;
	iOE_N<=0;
	iADDR<=0;
	iDATA<=0;
	ST<=0;
	counter<=0;
	end
else
begin
	case(ST)		//KEY[0]!=0时,状态机处于读数据状态
	2'd0:			//write
		begin
			if(!KEY[0])				//KEY[0]=0时写入
			begin
			iWE_N<=0;
			iADDR<={{8{1'b0}},SW[17:8]};
			iDATA<={{7{1'b0}},SW[7:0]};
			temp_DATA<=SRAM_DQ;
			ST<=1;
			end
			else
			 ST<=2;
		end
	2'd1:		//延时2个周期
		begin
		if(counter<2)
			counter<=counter+1;
		else
			begin
				counter<=0;
				ST<=2;
			end
		end
	2'd2,
	2'd3:	
		begin		//read
			iWE_N<=1;
			iOE_N<=0;
			iADDR<={{8{1'b0}},SW[17:8]};
			temp_DATA<=oDATA;
			ST<=0;
		end
	
	endcase
end
end

Reset_Delay			r0	(	.iCLK(CLOCK_50),.oRESET(DLY_RST)	);	//复位

SRAM_16Bit_512K the_SRAM_16Bit_512K	//SRAM controller
    (
      .SRAM_ADDR (SRAM_ADDR),
      .SRAM_CE_N (SRAM_CE_N),
      .SRAM_DQ   (SRAM_DQ),
      .SRAM_LB_N (SRAM_LB_N),
      .SRAM_OE_N (SRAM_OE_N),
      .SRAM_UB_N (SRAM_UB_N),
      .SRAM_WE_N (SRAM_WE_N),
      .iADDR     (iADDR),
      .iBE_N     (iBE_N),
      .iCE_N     (iCE_N),
      .iCLK      (iCLK),
      .iDATA     (iDATA),
      .iOE_N     (iOE_N),
      .iWE_N     (iWE_N),
      .oDATA     (oDATA)
    );
//数码管显示
SEG7_LUT_4 seg_4 (	.oSEG0(HEX0),.oSEG1(HEX1),.oSEG2(HEX2),.oSEG3(HEX3),
					.iDIG(temp_DATA),.iRESET(DLY_RST),.iCLK(CLOCK_50));
endmodule

⌨️ 快捷键说明

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