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

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

?? mouse.vhd

?? 基于spartan3火龍刀系列FPGA開發板制作的VGA實驗例程
?? VHD
字號:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity mouse is
    Port (
	       clk : in std_logic;
          reset : in std_logic;
          ps2_clk : inout std_logic;
          ps2_data : inout std_logic;
          left_button : out std_logic;
          right_button : out std_logic;
			 mov_x : out std_logic_vector(9 downto 0);
          mousex: buffer std_logic_vector(9 downto 0);
          mousey: buffer std_logic_vector(9 downto 0);
          data_ready : out std_logic;-- rx_read_o
          error_no_ack : out std_logic
			 );
end mouse;

architecture Behavioral of mouse is

constant TOTAL_BITS : integer :=33;  -- Number of bits in one full packet
-- The timer value can be up to (2^bits) inclusive.
constant WATCHDOG : integer :=320;-- Number of sys_clks for 400usec.160

type m2statetype is (m2_reset, m2_wait, m2_gather, m2_verify, m2_use, m2_hold_clk_l,
         m2_data_low_1, m2_data_high_1, m2_data_low_2, m2_data_high_2, m2_data_low_3,
		   m2_data_high_3, m2_error_no_ack, m2_await_response);

signal m2_state,m2_next_state : m2statetype;
--signal m3_state,m3_next_state : std_logic;

signal watchdog_timer_done : std_logic;--signals of commanding out to mouse 
signal q : std_logic_vector(TOTAL_BITS-1 downto 0);--bit sequence
signal bitcount : std_logic_vector(5 downto 0);--bit count

signal watchdog_timer_count : std_logic_vector(8 downto 0); --wait time

signal ps2_clk_hi_z : std_logic;     -- Without keyboard, high Z equals 1 due to pullups.
signal ps2_data_hi_z : std_logic;    -- Without keyboard, high Z equals 1 due to pullups.

signal fallsig,risesig : std_logic_vector(2 downto 0);
signal clean_clk : std_logic;       -- Debounced output from m1, follows ps2_clk.
signal rise,n_rise : std_logic;      -- Output from m1 state machine.
signal fall,n_fall : std_logic;     -- Output from m1 state machine.
signal output_strobe : std_logic;    -- Latches data data into the output registers
signal packet_good : std_logic;--check the whether the data is valid 
--signal x_increment : std_logic_vector(8 downto 0);
--signal y_increment : std_logic_vector(7 downto 0);
signal mouseyy,mousexx : std_logic_vector(9 downto 0);

begin
 
ps2_clk <= '0' when ps2_clk_hi_z='0' else 'Z';
ps2_data <= '0' when ps2_data_hi_z='0' else 'Z';

  ------------------------------------
  --detect ps2clk falling and rising edge
  ------------------------------------

  detect_ps2clkfall : process(clk,reset,ps2_clk)
  begin
    if reset='0' then
      fallsig <= "000";
    elsif clk'event and clk='1' then
      fallsig(0) <= ps2_clk;
	   fallsig(1) <= fallsig(0);
	   fallsig(2) <= fallsig(1);
    end if;
  end process;

  fall <= '1' when fallsig="110" else '0';

  detect_ps2clkrise : process(clk,reset,ps2_clk)
  begin
    if reset='0' then
      risesig <= "000";
    elsif clk'event and clk='1' then
      risesig(0) <= ps2_clk;
	   risesig(1) <= risesig(0);
	   risesig(2) <= risesig(1);
    end if;
  end process;

  rise <= '1' when risesig="001" else '0';

  --------------------------------------

------------------m2 State 
m2statech: process (reset, clk)
begin 
  if (reset='0') then
     m2_state <= m2_reset;
  elsif (clk'event and clk='1') then 
     m2_state <= m2_next_state;
  end if;
end process;

--m2 State transition logic
m2statetr: process (m2_state, fall,watchdog_timer_done,bitcount,ps2_data,packet_good)
begin
  -- Output signals default to this value, unless changed in a state condition.
  ps2_clk_hi_z <= '1';
  ps2_data_hi_z <= '1';
  error_no_ack <= '0';
  output_strobe <= '0';
  --data_out <= '0';

  case m2_state is
    when m2_reset =>    -- After reset, sends command to mouse.
      m2_next_state <= m2_hold_clk_l;
    when m2_wait =>
      if (fall='1') then
		   m2_next_state <= m2_gather;
      else 
		   m2_next_state <= m2_wait;
      end if;
    when m2_gather =>
      if (watchdog_timer_done='1') then  -- and (bitcount=TOTAL_BITS)
          m2_next_state <= m2_verify;
      else 
		    m2_next_state <= m2_gather;
      end if;
    when m2_verify =>
      --if (bitcount < TOTAL_BITS) then  --replace " packet_good='1' "
		   --m2_next_state <= m2_wait;
      --else 
		   m2_next_state <= m2_use;
      --end if;
    when m2_use =>
      output_strobe <= '1';
      m2_next_state <= m2_wait;

    -- The following sequence of 9 states is designed to transmit the
    -- "enable streaming mode" command to the mouse, and then await the
    -- response from the mouse.  
   when m2_hold_clk_l =>
      ps2_clk_hi_z <= '0';   -- This starts the watchdog timer!
      if (watchdog_timer_done='1') then  -- cut "and (clean_clk='0')"
		   m2_next_state <= m2_data_low_1;
      else 
		   m2_next_state <= m2_hold_clk_l;
      end if;
    when m2_data_low_1 =>
      ps2_data_hi_z <= '0';  -- Forms start bit, d[0] and d[1]
		--data_out <= '0';
      if (fall='1' and (bitcount = 2)) then
          m2_next_state <= m2_data_high_1;
      else 
		   m2_next_state <= m2_data_low_1;
      end if;
    when m2_data_high_1 =>
      ps2_data_hi_z <= '1';  -- Forms d[2]
		--data_out <= '1';
      if (fall='1' and (bitcount = 3)) then
          m2_next_state <= m2_data_low_2;
      else 
		   m2_next_state <= m2_data_high_1;
      end if;
    when m2_data_low_2 =>
      ps2_data_hi_z <= '0';  -- Forms d[3]
		--data_out <= '0';
      if (fall='1' and (bitcount = 4)) then
          m2_next_state <= m2_data_high_2;
      else 
		    m2_next_state <= m2_data_low_2;
      end if;
    when m2_data_high_2 =>
      ps2_data_hi_z <= '1';  -- Forms d[4],d[5],d[6],d[7]
		--data_out <= '1';
      if (fall='1' and (bitcount = 8)) then
          m2_next_state <= m2_data_low_3;
      else 
		    m2_next_state <= m2_data_high_2;
      end if;
    when m2_data_low_3 =>
      ps2_data_hi_z <= '0';  -- Forms parity bit
		--data_out <= '0';
      if (fall='1') then
		   m2_next_state <= m2_data_high_3;
      else 
		   m2_next_state <= m2_data_low_3;
      end if;
    when m2_data_high_3 =>
        ps2_data_hi_z <= '1';  -- Allow mouse to pull low (ack pulse)
      if (fall='1' and (ps2_data='1')) then
		    m2_next_state <= m2_error_no_ack;
      elsif (fall='1' and (ps2_data='0')) then
          m2_next_state <= m2_await_response;
      else 
		    m2_next_state <= m2_data_high_3;
      end if;
    when m2_error_no_ack =>
      error_no_ack <= '1';
      m2_next_state <= m2_error_no_ack;
    
    -- In order to "cleanly" exit the setting of the mouse into "streaming"
    -- data mode, the state machine should wait for a long enough time to
    -- ensure the FA response is done being sent by the mouse. 
    when m2_await_response =>
      --if (bitcount = 22) then
		    m2_next_state <= m2_verify;
      --else 
		   -- m2_next_state <= m2_await_response;
      --end if;
    when others => m2_next_state <= m2_wait;
  end case;
end process;
-----------------------------end m2 state

--This is the bit counter
bitcoun: process (reset, clk)
begin
  if (reset='0') then
     bitcount <= (others=>'0');  -- normal reset
  elsif (clk'event and clk='1') then
    if (fall='1') then
      bitcount <= bitcount + 1;
    elsif (watchdog_timer_done='1') then
       bitcount <= (others=>'0');  -- rx watchdog timer reset
	 end if;
  end if;
end process;

-- This is the shift data register
dataseq: process (reset, clk)
begin
  if (reset='0') then
     q <= (others=>'0');
  elsif (clk'event and clk='1') then
    if (fall='1') then
       q <= ps2_data & q(TOTAL_BITS-1 downto 1);
	 end if;
  end if;
end process;

-- This is the watchdog timer counter
-- The watchdog timer is always "enabled" to operate.
watchcount: process (reset,rise,fall, clk)
begin
  if ((reset='0') or (rise='1') or (fall='1')) then
    watchdog_timer_count <= (others=>'0');
  elsif (clk'event and clk='1') then
    if (watchdog_timer_done='0') then
      watchdog_timer_count <= watchdog_timer_count + 1;
	 end if;
  end if;
end process;

watchdog_timer_done <= '1' when (watchdog_timer_count=WATCHDOG-1) else '0';

--This is the logic to verify that a received data packet is "valid" or good.
packet_good <= '1';

-- Output the special scan code flags, the scan code and the ascii
outdata: process (reset, clk)
begin
  if (reset='0') then
    left_button <= '0';
    right_button <= '0';
    --x_increment <= (others=>'0');
    --y_increment <= (others=>'0');
  elsif (clk'event and clk='1') then
    if (output_strobe='1') then
      left_button <= q(1);
      right_button <= q(2);
      --x_increment <= '0' & q(19 downto 12);
      mouseyy <= not (q(6) & q(6) & q(30 downto 23)) + "1";
		mousexx <= q(5) & q(5) & q(19 downto 12);
	 end if;
  end if;						
end process;

cordinatex: process (reset, clk)
begin
  if (reset='0') then
 	 mousex <= "0110010000";  -- 400
  elsif (clk'event and clk='1') then
    if (output_strobe='1') then
	   if (mousex >= 599 and q(5)='0') then 
 	     mousex <= "1001010111";
		elsif (mousex <= 40 and q(5)='1') then
		  mousex <= "0000101000";
		else
		  mousex <= mousex + (q(5) & q(5) & q(19 downto 12));--q(5):xsign q(6):ysign
		end if;
	 end if;
  end if;						
end process;

cordinatey: process (reset, clk)
begin
  if (reset='0') then
	 mousey <= "0100101100";  -- 300
  elsif (clk'event and clk='1') then
    if (output_strobe='1') then
	   if (mousey >= 449 and q(6)='1') then  
 	     mousey <= "0111000001";  
		elsif (mousey <= 30 and q(6)='0') then
        mousey <= "0000011110";
		else
   	  mousey <= mousey + mouseyy; --(q(6) & q(6) & q(30 downto 23));
		end if;
	 end if;
  end if;						
end process;

mov_x <= mousexx;
data_ready <= output_strobe;

end Behavioral;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费高清视频| 亚洲精品五月天| 日韩午夜激情免费电影| 欧美人牲a欧美精品| 欧美色老头old∨ideo| 日本精品一区二区三区四区的功能| 成人性色生活片| 国产v日产∨综合v精品视频| 国产91富婆露脸刺激对白| 国产91对白在线观看九色| 成人av高清在线| 色欧美片视频在线观看| 91女神在线视频| 欧美视频完全免费看| 欧美日韩一级片在线观看| 91精品综合久久久久久| 日韩免费看的电影| 欧美国产欧美亚州国产日韩mv天天看完整| 久久久久免费观看| 中文字幕一区二区三区不卡| 一区二区三区在线免费播放| 亚洲第一激情av| 老司机免费视频一区二区三区| 精品一区二区在线视频| 国产99久久久久久免费看农村| bt欧美亚洲午夜电影天堂| 色就色 综合激情| 91麻豆精品91久久久久同性| 久久综合资源网| 亚洲人精品一区| 免费在线观看成人| 成人av高清在线| 欧美精品 国产精品| 久久精品人人做人人爽人人| 亚洲欧美在线视频观看| 蜜桃一区二区三区在线观看| 成人毛片老司机大片| 欧美日韩国产精品自在自线| 国产亚洲欧美在线| 香蕉成人啪国产精品视频综合网 | 337p日本欧洲亚洲大胆精品| 国产精品三级av| 午夜激情久久久| 国产成人精品aa毛片| 国产欧美一区二区三区鸳鸯浴| 国模一区二区三区白浆| 国产精品不卡一区| 天天综合日日夜夜精品| 成人午夜激情视频| 日韩免费看网站| 依依成人精品视频| 国产乱码精品一品二品| 欧美剧情片在线观看| 国产精品嫩草影院av蜜臀| 美女免费视频一区二区| 色天天综合色天天久久| 欧美国产日本视频| 免费av网站大全久久| 欧美亚洲动漫另类| 国产精品久久久久久久久晋中| 美国毛片一区二区| 欧美精品亚洲一区二区在线播放| 18欧美亚洲精品| 国产91精品入口| 欧美精品一区二区三区蜜臀| 毛片基地黄久久久久久天堂| 欧美影院午夜播放| 综合网在线视频| 成人少妇影院yyyy| 久久久久久久av麻豆果冻| 蜜桃视频一区二区三区在线观看| 欧美一a一片一级一片| 亚洲欧美日韩成人高清在线一区| 国产91富婆露脸刺激对白| 久久久久久久国产精品影院| 国产综合久久久久久久久久久久| 日韩一区二区三区免费观看| 首页欧美精品中文字幕| 欧美日韩一区二区在线视频| 亚洲福利一二三区| 欧美色区777第一页| 午夜精品成人在线视频| 精品视频在线看| 图片区小说区区亚洲影院| 欧美色图在线观看| 日本在线不卡一区| 日韩午夜三级在线| 国产精品夜夜嗨| 欧美国产激情二区三区| 波多野结衣亚洲| 日韩理论片中文av| 欧美在线啊v一区| 日韩福利视频网| 精品久久久久久最新网址| 国产一区二区三区免费播放| 久久久蜜桃精品| jizzjizzjizz欧美| 亚洲丰满少妇videoshd| 日韩一区二区电影在线| 国产激情精品久久久第一区二区| 中文字幕一区二区三区四区 | 成人免费av在线| 亚洲男帅同性gay1069| 欧美日韩精品是欧美日韩精品| 日韩电影在线看| 久久久久久久网| 欧美亚洲动漫精品| 国产资源在线一区| 《视频一区视频二区| 欧美视频在线一区二区三区| 久久久久久一级片| 亚洲午夜久久久久久久久电影网 | 91精品国产综合久久小美女 | 国产精品拍天天在线| 国产91富婆露脸刺激对白| 国产精品盗摄一区二区三区| 91黄视频在线观看| 国产一区二区网址| 亚洲国产欧美另类丝袜| 国产亚洲成aⅴ人片在线观看 | 欧美日韩mp4| 国产精品原创巨作av| 一二三区精品视频| 久久精品无码一区二区三区| 欧美日精品一区视频| 大尺度一区二区| 日韩av午夜在线观看| 综合色中文字幕| 91麻豆国产自产在线观看| 国产成人精品三级| 一区二区三区高清不卡| 精品乱人伦一区二区三区| 一本高清dvd不卡在线观看| 国产精品影视天天线| 奇米777欧美一区二区| 国产精品高清亚洲| 国产无一区二区| 精品少妇一区二区三区在线播放 | 成人午夜精品在线| 激情综合网最新| 视频一区二区欧美| 一区二区三区91| 亚洲人成精品久久久久久| 国产欧美在线观看一区| 精品国产乱码久久久久久闺蜜| 欧美日韩黄视频| 欧美在线观看一区二区| 在线看日韩精品电影| 色婷婷精品大在线视频| av影院午夜一区| 成人爱爱电影网址| 成人精品鲁一区一区二区| 国产精品一二三区在线| 国产精品自在欧美一区| 国内久久精品视频| 国产伦精品一区二区三区视频青涩| 日韩av一二三| 麻豆传媒一区二区三区| 麻豆国产精品一区二区三区| 久久精品久久99精品久久| 开心九九激情九九欧美日韩精美视频电影 | 欧美日韩国产色站一区二区三区| 欧美亚洲动漫精品| 欧美人妖巨大在线| 欧美大片拔萝卜| 久久婷婷色综合| 国产精品美女久久久久久| 国产精品成人免费在线| 亚洲女爱视频在线| 亚洲成人免费在线观看| 日韩电影免费在线看| 美国欧美日韩国产在线播放| 国产麻豆9l精品三级站| eeuss鲁片一区二区三区在线看| 91麻豆.com| 欧美久久免费观看| 久久五月婷婷丁香社区| 亚洲欧洲在线观看av| 亚洲成人久久影院| 久久电影国产免费久久电影| 国产福利精品一区二区| 色综合久久中文综合久久牛| 欧美日韩黄视频| 国产婷婷一区二区| 玉米视频成人免费看| 日本女人一区二区三区| 国产成人精品网址| 欧美日韩国产精选| 国产无一区二区| 亚洲一区二区高清| 国产一区二区三区综合 | 亚洲一二三区在线观看| 久久精品国产网站| 色婷婷亚洲婷婷| 精品国产乱码久久久久久图片| 亚洲欧美电影院| 狠狠色狠狠色合久久伊人| 99免费精品在线| 精品理论电影在线| 夜夜精品视频一区二区|