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

📄 epp_and_sram.v

📁 并口epp模式下与fpga通信例子
💻 V
字号:
module EPP_and_SRAM(EPP_Write0,EPP_Data,EPP_Interrupt,EPP_Wait,EPP_DataStrobe0,EPP_Reset0,EPP_AddressStrobe0,
	SRAM_CE,SRAM_OE,SRAM_WE,SRAM_IO,SRAM_Addr,clk24,rst,led);

	//EPP interface signals
	input EPP_Write0;
	inout [7:0] EPP_Data;
	output EPP_Interrupt;
	output EPP_Wait;
	input EPP_DataStrobe0;
	input EPP_Reset0;
	input EPP_AddressStrobe0;
	//SRAM interface signals
	output SRAM_CE;
	output SRAM_OE;
	output SRAM_WE;
	inout [7:0] SRAM_IO;
	output [19:0] SRAM_Addr;
	//
	input clk24;
	input rst;
	output led;

/******************** module regs define ***********************************/
	//regs related to EPP
	reg EPP_Interrupt,EPP_Wait;
	reg EPP_Write,EPP_DataStrobe,EPP_AddressStrobe,EPP_Reset;
	reg [7:0] epp_dataout,epp_datain;
	//regs related to SRAM
	reg SRAM_CE/*,SRAM_OE,SRAM_WE*/;
	reg [19:0] /*SRAM_Addr,*/sram_raddr,sram_waddr;//sram read write address reg
	reg [7:0] sram_dataout;
	//reg sram_readorwrite;//1->read 0->write
	//internal regs
	reg led;
	reg [2:0] epp_state;
	reg [7:0] cmd;//from epp address write

/**********************  module constant define  *******************************/
	//parameters EPP state
	parameter EPP_IDLE=3'b000,EPP_WAIT_ADDRREAD=3'b001,EPP_WAIT_ADDRWRITE=3'b010,
		EPP_WAIT_DATAREAD=3'b011,EPP_WAIT_DATAWRITE=3'b100;


/*********************  module internal logic  *********************************/

//并口输入进来的信号,需要同步。加入锁存器
always @ (posedge clk24)
begin
	if(!rst)
		EPP_Write<=1;
	else
		EPP_Write<=EPP_Write0;
end

always @ (posedge clk24)
begin
	if(!rst)
		EPP_DataStrobe<=1;
	else
		EPP_DataStrobe<=EPP_DataStrobe0;
end

always @ (posedge clk24)
begin
	if(!rst)
		EPP_AddressStrobe<=1;
	else
		EPP_AddressStrobe<=EPP_AddressStrobe0;
end

always @ (posedge clk24)
begin
	if(!rst)
		EPP_Reset<=1;
	else
		EPP_Reset<=EPP_Reset0;
end



//EPP state machine
always @ (posedge clk24)
begin
	if(!rst )
	begin
		epp_state<=EPP_IDLE;
		EPP_Interrupt<=0;
		EPP_Wait<=0;
		epp_dataout<=8'b0;
		epp_datain<=8'b0;
		cmd<=8'b0;
		//SRAM_Addr<=20'b0;
		sram_raddr<=20'b0;
		sram_waddr<=20'd0;
	end
	else
		case(epp_state)
			EPP_IDLE:
			begin
				epp_state<=EPP_IDLE;
				EPP_Wait<=0;
				if(!EPP_AddressStrobe)
				begin
					if(EPP_Write)
					begin//EPP address read
						epp_dataout<=cmd[0]?sram_waddr[7:0]:sram_raddr[7:0];  //8'b0000_1111;
						EPP_Wait<=1;
						epp_state<=EPP_WAIT_ADDRREAD;
					end
					else
					begin//EPP address write    cmd come from EPP address write
						cmd<=EPP_Data;
						EPP_Wait<=1;
						epp_state<=EPP_WAIT_ADDRWRITE;
					end
				end
				else if(!EPP_DataStrobe)
				begin
					if(EPP_Write)
					begin//EPP data read
						epp_dataout<=SRAM_IO;//sram_waddr;
						EPP_Wait<=1;
						epp_state<=EPP_WAIT_DATAREAD;
					end
					else
					begin//EPP data write
						epp_datain<=EPP_Data;
						EPP_Wait<=1;
						epp_state<=EPP_WAIT_DATAWRITE;
					end
				end
			end
			EPP_WAIT_ADDRREAD:
			begin
				if(EPP_AddressStrobe)
				begin
					EPP_Wait<=0;
					//led<=~led;
					epp_state<=EPP_IDLE;
				end
			end
			EPP_WAIT_ADDRWRITE:
			begin
				if(EPP_AddressStrobe)
				begin
					EPP_Wait<=0;
					epp_state<=EPP_IDLE;
				end
			end
			EPP_WAIT_DATAREAD:
			begin
				if(EPP_DataStrobe)
				begin
					EPP_Wait<=0;
					//led<=~led;
					epp_state<=EPP_IDLE;
					sram_raddr<=sram_raddr+1;
				end
			end
			EPP_WAIT_DATAWRITE:
			begin
				if(EPP_DataStrobe)
				begin
					EPP_Wait<=0;
					//led<=~led;
					epp_state<=EPP_IDLE;
					sram_waddr<=sram_waddr+1;
				end
			end
			default: epp_state<=EPP_IDLE;
		endcase
	end

assign EPP_Data=((epp_state==EPP_WAIT_DATAREAD)||(epp_state==EPP_WAIT_ADDRREAD))?epp_dataout:8'bz;



//cmd resolve


//SRAM 
always @ (posedge clk24)
begin
	if(!rst )
	begin
		led<=1;		
		SRAM_CE<=1;
	end
	else
	begin
		led<=cmd[0];//write to switch led on
		SRAM_CE<=0;//select SRAM all the time
	end
end



assign SRAM_OE=cmd[0];//cmd's LSM 1->write  0->read
assign SRAM_WE=~cmd[0];

assign SRAM_Addr=(cmd[0])?sram_waddr:sram_raddr;
assign SRAM_IO=(cmd[0])?epp_datain:8'bz;

endmodule		
			
		
		

⌨️ 快捷键说明

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