亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? altera_up_ps2_command_out.v

?? 花了半個月才改好的Atera DE1/DE2 ps2 IP 驅動核。放在FPGA工程目錄下可以直接使用。本IP能夠驅動PS/2鍵盤和鼠標。使用時只要調用HAL目錄下的文件即可以直接使用!
?? V
字號:
/*****************************************************************************
 *                                                                           *
 * Module:       Altera_UP_PS2_Command_Out                                   *
 * Description:                                                              *
 *      This module sends commands out to the PS2 core.                      *
 *                                                                           *
 *****************************************************************************/


module Altera_UP_PS2_Command_Out (
	// Inputs
	clk,
	reset,

	the_command,
	send_command,

	ps2_clk_posedge,
	ps2_clk_negedge,

	// Bidirectionals
	PS2_CLK,
 	PS2_DAT,

	// Outputs
	command_was_sent,
	error_communication_timed_out
);

/*****************************************************************************
 *                           Parameter Declarations                          *
 *****************************************************************************/

// Timing info for initiating Host-to-Device communication 
//   when using a 50MHz system clock
parameter	CLOCK_CYCLES_FOR_101US		= 5050;
parameter	NUMBER_OF_BITS_FOR_101US	= 13;
parameter	COUNTER_INCREMENT_FOR_101US	= 13'h0001;

//parameter	CLOCK_CYCLES_FOR_101US		= 50;
//parameter	NUMBER_OF_BITS_FOR_101US	= 6;
//parameter	COUNTER_INCREMENT_FOR_101US	= 6'h01;

// Timing info for start of transmission error 
//   when using a 50MHz system clock
parameter	CLOCK_CYCLES_FOR_15MS		= 750000;
parameter	NUMBER_OF_BITS_FOR_15MS		= 20;
parameter	COUNTER_INCREMENT_FOR_15MS	= 20'h00001;

// Timing info for sending data error 
//   when using a 50MHz system clock
parameter	CLOCK_CYCLES_FOR_2MS		= 100000;
parameter	NUMBER_OF_BITS_FOR_2MS		= 17;
parameter	COUNTER_INCREMENT_FOR_2MS	= 17'h00001;

/*****************************************************************************
 *                             Port Declarations                             *
 *****************************************************************************/
// Inputs
input				clk;
input				reset;

input		[7:0]	the_command;
input				send_command;

input				ps2_clk_posedge;
input				ps2_clk_negedge;

// Bidirectionals
inout				PS2_CLK;
inout			 	PS2_DAT;

// Outputs
output	reg			command_was_sent;
output	reg		 	error_communication_timed_out;

/*****************************************************************************
 *                           Constant Declarations                           *
 *****************************************************************************/
// states
parameter	PS2_STATE_0_IDLE					= 3'h0,
			PS2_STATE_1_INITIATE_COMMUNICATION	= 3'h1,
			PS2_STATE_2_WAIT_FOR_CLOCK			= 3'h2,
			PS2_STATE_3_TRANSMIT_DATA			= 3'h3,
			PS2_STATE_4_TRANSMIT_STOP_BIT		= 3'h4,
			PS2_STATE_5_RECEIVE_ACK_BIT			= 3'h5,
			PS2_STATE_6_COMMAND_WAS_SENT		= 3'h6,
			PS2_STATE_7_TRANSMISSION_ERROR		= 3'h7;

/*****************************************************************************
 *                 Internal wires and registers Declarations                 *
 *****************************************************************************/
// Internal Wires

// Internal Registers
reg			[3:0]	cur_bit;
reg			[8:0]	ps2_command;

reg			[NUMBER_OF_BITS_FOR_101US:1]	command_initiate_counter;

reg			[NUMBER_OF_BITS_FOR_15MS:1]		waiting_counter;
reg			[NUMBER_OF_BITS_FOR_2MS:1]		transfer_counter;

// State Machine Registers
reg			[2:0]	ns_ps2_transmitter;
reg			[2:0]	s_ps2_transmitter;

/*****************************************************************************
 *                         Finite State Machine(s)                           *
 *****************************************************************************/

always @(posedge clk)
begin
	if (reset == 1'b1)
		s_ps2_transmitter <= PS2_STATE_0_IDLE;
	else
		s_ps2_transmitter <= ns_ps2_transmitter;
end

always @(*)
begin
	// Defaults
	ns_ps2_transmitter = PS2_STATE_0_IDLE;

    case (s_ps2_transmitter)
	PS2_STATE_0_IDLE:
		begin
			if (send_command == 1'b1)
				ns_ps2_transmitter = PS2_STATE_1_INITIATE_COMMUNICATION;
			else
				ns_ps2_transmitter = PS2_STATE_0_IDLE;
		end
	PS2_STATE_1_INITIATE_COMMUNICATION:
		begin
			if (command_initiate_counter == CLOCK_CYCLES_FOR_101US)
				ns_ps2_transmitter = PS2_STATE_2_WAIT_FOR_CLOCK;
			else
				ns_ps2_transmitter = PS2_STATE_1_INITIATE_COMMUNICATION;
		end
	PS2_STATE_2_WAIT_FOR_CLOCK:
		begin
			if (ps2_clk_negedge == 1'b1)
				ns_ps2_transmitter = PS2_STATE_3_TRANSMIT_DATA;
			else if (waiting_counter == CLOCK_CYCLES_FOR_15MS)
				ns_ps2_transmitter = PS2_STATE_7_TRANSMISSION_ERROR;
			else
				ns_ps2_transmitter = PS2_STATE_2_WAIT_FOR_CLOCK;
		end
	PS2_STATE_3_TRANSMIT_DATA:
		begin
			if ((cur_bit == 4'd8) && (ps2_clk_negedge == 1'b1))
				ns_ps2_transmitter = PS2_STATE_4_TRANSMIT_STOP_BIT;
			else if (transfer_counter == CLOCK_CYCLES_FOR_2MS)
				ns_ps2_transmitter = PS2_STATE_7_TRANSMISSION_ERROR;
			else
				ns_ps2_transmitter = PS2_STATE_3_TRANSMIT_DATA;
		end
	PS2_STATE_4_TRANSMIT_STOP_BIT:
		begin
			if (ps2_clk_negedge == 1'b1)
				ns_ps2_transmitter = PS2_STATE_5_RECEIVE_ACK_BIT;
			else if (transfer_counter == CLOCK_CYCLES_FOR_2MS)
				ns_ps2_transmitter = PS2_STATE_7_TRANSMISSION_ERROR;
			else
				ns_ps2_transmitter = PS2_STATE_4_TRANSMIT_STOP_BIT;
		end
	PS2_STATE_5_RECEIVE_ACK_BIT:
		begin
			if (ps2_clk_posedge == 1'b1)
				ns_ps2_transmitter = PS2_STATE_6_COMMAND_WAS_SENT;
			else if (transfer_counter == CLOCK_CYCLES_FOR_2MS)
				ns_ps2_transmitter = PS2_STATE_7_TRANSMISSION_ERROR;
			else
				ns_ps2_transmitter = PS2_STATE_5_RECEIVE_ACK_BIT;
		end
	PS2_STATE_6_COMMAND_WAS_SENT:
		begin
			if (send_command == 1'b0)
				ns_ps2_transmitter = PS2_STATE_0_IDLE;
			else
				ns_ps2_transmitter = PS2_STATE_6_COMMAND_WAS_SENT;
		end
	PS2_STATE_7_TRANSMISSION_ERROR:
		begin
			if (send_command == 1'b0)
				ns_ps2_transmitter = PS2_STATE_0_IDLE;
			else
				ns_ps2_transmitter = PS2_STATE_7_TRANSMISSION_ERROR;
		end
	default:
		begin
			ns_ps2_transmitter = PS2_STATE_0_IDLE;
		end
	endcase
end

/*****************************************************************************
 *                             Sequential logic                              *
 *****************************************************************************/

always @(posedge clk)
begin
	if (reset == 1'b1)
		ps2_command <= 9'h000;
	else if (s_ps2_transmitter == PS2_STATE_0_IDLE)
		ps2_command <= {(^the_command) ^ 1'b1, the_command};
end

always @(posedge clk)
begin
	if (reset == 1'b1)
		command_initiate_counter <= {NUMBER_OF_BITS_FOR_101US{1'b0}};
	else if ((s_ps2_transmitter == PS2_STATE_1_INITIATE_COMMUNICATION) &&
			(command_initiate_counter != CLOCK_CYCLES_FOR_101US))
		command_initiate_counter <= 
			command_initiate_counter + COUNTER_INCREMENT_FOR_101US;
	else if (s_ps2_transmitter != PS2_STATE_1_INITIATE_COMMUNICATION)
		command_initiate_counter <= {NUMBER_OF_BITS_FOR_101US{1'b0}};
end

always @(posedge clk)
begin
	if (reset == 1'b1)
		waiting_counter <= {NUMBER_OF_BITS_FOR_15MS{1'b0}};
	else if ((s_ps2_transmitter == PS2_STATE_2_WAIT_FOR_CLOCK) &&
			(waiting_counter != CLOCK_CYCLES_FOR_15MS))
		waiting_counter <= waiting_counter + COUNTER_INCREMENT_FOR_15MS;
	else if (s_ps2_transmitter != PS2_STATE_2_WAIT_FOR_CLOCK)
		waiting_counter <= {NUMBER_OF_BITS_FOR_15MS{1'b0}};
end

always @(posedge clk)
begin
	if (reset == 1'b1)
		transfer_counter <= {NUMBER_OF_BITS_FOR_2MS{1'b0}};
	else
	begin
		if ((s_ps2_transmitter == PS2_STATE_3_TRANSMIT_DATA) ||
			(s_ps2_transmitter == PS2_STATE_4_TRANSMIT_STOP_BIT) ||
			(s_ps2_transmitter == PS2_STATE_5_RECEIVE_ACK_BIT))
		begin
			if (transfer_counter != CLOCK_CYCLES_FOR_2MS)
				transfer_counter <= transfer_counter + COUNTER_INCREMENT_FOR_2MS;
		end
		else
			transfer_counter <= {NUMBER_OF_BITS_FOR_2MS{1'b0}};
	end
end

always @(posedge clk)
begin
	if (reset == 1'b1)
		cur_bit <= 4'h0;
	else if ((s_ps2_transmitter == PS2_STATE_3_TRANSMIT_DATA) &&
			(ps2_clk_negedge == 1'b1))
		cur_bit <= cur_bit + 4'h1;
	else if (s_ps2_transmitter != PS2_STATE_3_TRANSMIT_DATA)
		cur_bit <= 4'h0;
end

always @(posedge clk)
begin
	if (reset == 1'b1)
		command_was_sent <= 1'b0;
	else if (s_ps2_transmitter == PS2_STATE_6_COMMAND_WAS_SENT)
		command_was_sent <= 1'b1;
	else if (send_command == 1'b0)
			command_was_sent <= 1'b0;
end

always @(posedge clk)
begin
	if (reset == 1'b1)
		error_communication_timed_out <= 1'b0;
	else if (s_ps2_transmitter == PS2_STATE_7_TRANSMISSION_ERROR)
		error_communication_timed_out <= 1'b1;
	else if (send_command == 1'b0)
		error_communication_timed_out <= 1'b0;
end

/*****************************************************************************
 *                            Combinational logic                            *
 *****************************************************************************/

assign PS2_CLK	= 
	(s_ps2_transmitter == PS2_STATE_1_INITIATE_COMMUNICATION) ? 
		1'b0 :
		1'bz;

assign PS2_DAT	= 
	(s_ps2_transmitter == PS2_STATE_3_TRANSMIT_DATA) ? ps2_command[cur_bit] :
	(s_ps2_transmitter == PS2_STATE_2_WAIT_FOR_CLOCK) ? 1'b0 :
	((s_ps2_transmitter == PS2_STATE_1_INITIATE_COMMUNICATION) && 
		(command_initiate_counter[NUMBER_OF_BITS_FOR_101US] == 1'b1)) ? 1'b0 : 
			1'bz;

/*****************************************************************************
 *                              Internal Modules                             *
 *****************************************************************************/


endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区导航在线播放| 国产一区二区不卡| 男女男精品视频网| 一区二区三区在线播放| 国产精品无圣光一区二区| 精品国产亚洲一区二区三区在线观看| 色综合天天综合网国产成人综合天| 国产精品伊人色| 丰满岳乱妇一区二区三区| 久久成人免费网| 久久99精品久久久久久| 国产高清一区日本| 91浏览器在线视频| 欧美探花视频资源| 欧美一区二区视频在线观看| 欧美一个色资源| 久久久久免费观看| 国产三级欧美三级日产三级99| 欧美日韩黄色影视| 日韩精品资源二区在线| 国产精品国产三级国产普通话99 | 91精品国产综合久久精品性色| 91精品中文字幕一区二区三区| 亚洲视频一区二区在线| 日韩电影在线观看电影| 国产专区欧美精品| 色香蕉久久蜜桃| 精品国产百合女同互慰| 久久99精品一区二区三区| 欧美一区二区精品在线| 日韩国产高清影视| 欧美一区二区三区免费观看视频| 日韩和欧美一区二区三区| 国产不卡在线播放| 国产精品麻豆一区二区 | 中文字幕欧美国产| 性久久久久久久久| 国产乱妇无码大片在线观看| 精品国产免费视频| 国产精品一级在线| 国产精品视频你懂的| 9i在线看片成人免费| 日韩欧美专区在线| 老鸭窝一区二区久久精品| 日韩欧美国产系列| 国产精品一二三区| 中文字幕免费不卡| 一本大道av伊人久久综合| 亚洲一区二区美女| 99精品视频在线播放观看| 日韩欧美中文字幕公布| 国产麻豆日韩欧美久久| 国产精品美女一区二区三区| 色国产综合视频| 中文字幕一区日韩精品欧美| 激情六月婷婷综合| 最好看的中文字幕久久| 欧美色国产精品| 樱花草国产18久久久久| 99在线精品视频| 亚洲成人av一区二区| 欧美精品一区二区久久婷婷| 国产v日产∨综合v精品视频| 亚洲综合色噜噜狠狠| 日韩欧美中文字幕精品| av网站一区二区三区| 亚洲国产精品久久久男人的天堂| 99这里都是精品| 青青草精品视频| 亚洲天堂2016| 精品国产1区2区3区| 91欧美一区二区| 精品一区二区三区久久久| 亚洲女同ⅹxx女同tv| 99久久精品国产麻豆演员表| 五月天欧美精品| 在线不卡中文字幕| 日本在线不卡一区| 自拍偷拍亚洲综合| 日韩精品专区在线影院观看 | 91麻豆精品国产自产在线观看一区| 黄色小说综合网站| 亚洲自拍都市欧美小说| 欧美激情一区三区| 亚洲精品一区二区三区四区高清 | 亚洲妇熟xx妇色黄| 亚洲欧洲成人精品av97| 精品欧美久久久| 成人午夜在线免费| 亚洲欧美一区二区三区极速播放 | 欧美在线观看你懂的| 香蕉av福利精品导航| 国产精品国产三级国产普通话99 | 久久精品男人的天堂| 欧美一级视频精品观看| 色哟哟欧美精品| 成人午夜在线视频| 国产精品一区二区久激情瑜伽 | 日韩午夜激情av| 欧美日韩国产综合久久| 91丨porny丨户外露出| 国产丶欧美丶日本不卡视频| 人人爽香蕉精品| 天堂va蜜桃一区二区三区漫画版| 国产精品麻豆视频| 中文字幕av一区二区三区高| 亚洲精品一区二区三区在线观看 | 91精品国产欧美日韩| 欧美日韩成人综合| 欧美日韩在线三区| 欧美日韩一区二区三区不卡| av电影在线不卡| 91在线高清观看| 91麻豆swag| 色噜噜狠狠成人网p站| 日本韩国欧美在线| 欧美婷婷六月丁香综合色| 一本色道亚洲精品aⅴ| 91色综合久久久久婷婷| 91小视频免费看| 色噜噜狠狠成人网p站| 在线精品视频一区二区| 欧美日韩一级视频| 欧美一区中文字幕| 久久在线观看免费| 欧美日韩一二三区| 欧美精品日韩一本| 日韩精品一区二区三区swag | 日韩欧美aaaaaa| 久久精品视频免费| ㊣最新国产の精品bt伙计久久| 亚洲三级小视频| 五月天一区二区| 激情小说亚洲一区| 成人免费视频一区| 欧美午夜精品理论片a级按摩| 欧美日韩成人综合| 久久你懂得1024| 亚洲欧美偷拍三级| 美脚の诱脚舐め脚责91| 一区二区三区av电影| 免费在线观看不卡| 国产v日产∨综合v精品视频| 在线观看视频91| 欧美成人一区二区| 中文字幕一区二区三区色视频| 曰韩精品一区二区| 国产在线精品一区二区三区不卡 | 国产精品欧美极品| 午夜精品福利久久久| 国产伦精一区二区三区| 色爱区综合激月婷婷| 欧美成人性战久久| 亚洲欧美另类小说视频| 美女视频一区二区| 色素色在线综合| 国产亚洲一区二区三区四区| 亚洲一二三四久久| 成人a区在线观看| 成人免费精品视频| 666欧美在线视频| 最新成人av在线| 狠狠色丁香久久婷婷综| 在线亚洲一区二区| 国产欧美一区二区精品久导航| 亚洲在线成人精品| 国产99精品国产| 日韩丝袜美女视频| 午夜国产不卡在线观看视频| 成人av网站大全| 久久一区二区三区四区| 日本va欧美va瓶| 欧美天堂一区二区三区| 自拍偷拍亚洲欧美日韩| 国产福利一区二区| 久久一区二区三区国产精品| 日韩精品一级二级| 欧美日韩三级一区| 一级女性全黄久久生活片免费| 粉嫩高潮美女一区二区三区| 精品国产人成亚洲区| 亚洲va韩国va欧美va| 欧美系列日韩一区| 亚洲精品久久7777| 一本色道亚洲精品aⅴ| 国产精品蜜臀av| 不卡av免费在线观看| 日本一区二区三区四区在线视频 | 欧美日韩在线电影| 亚洲一区二区三区四区在线| av在线这里只有精品| 国产精品色噜噜| 成人午夜短视频| 国产精品久久久久一区二区三区共| 国产美女av一区二区三区| 久久中文娱乐网| 国产精品77777| 欧美国产国产综合| 成人动漫视频在线| 亚洲女厕所小便bbb|