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

📄 rt_window_monitor.vhd

📁 FPGA之间的LVDS传输
💻 VHD
📖 第 1 页 / 共 3 页
字号:
                     IF (COUNT_VALUE1 < "1111110") THEN
                        NEXT_STATE <= COMPARE_MINUS2;    
                     ELSE
                        IF (DATA_MASTER = (NOT DATA_MONITOR)) THEN
                           NEXT_STATE <= RECORD_1_2;    
                        ELSE
                           NEXT_STATE <= RECORD_0_2;    
                        END IF;
                     END IF;
                  END IF;
         WHEN RECORD_0_2 =>
                  NEXT_STATE <= INC_3;    --  -2 POSITION HAD ERRORS    
         WHEN RECORD_1_2 =>
                  NEXT_STATE <= INC_3;    --  -2 POSITION WAS ERROR FREE
         WHEN INC_3 =>
                  --INCREMENT THE MONITOR TO THREE IDELAY TAPS MORE (+1)
                  
                  IF (COUNT_VALUE1 = "0000010") THEN
                     NEXT_STATE <= WAIT7_2;    
                  ELSE
                     NEXT_STATE <= INC_3;    
                  END IF;
         WHEN WAIT7_2 =>
                  --WAIT FOR LATENCY TO SETTLE 
                  
                  IF (COUNT_VALUE0 > "0000111") THEN
                     NEXT_STATE <= COMPARE_PLUS1;    
                  ELSE
                     NEXT_STATE <= WAIT7_2;    
                  END IF;
         WHEN COMPARE_PLUS1 =>
                  --COMPARE THE +1 POSITION
                  
                  IF (DATA_MASTER /= (NOT DATA_MONITOR)) THEN
                     NEXT_STATE <= RECORD_0_3;    
                  ELSE
                     IF (COUNT_VALUE1 < "1111110") THEN
                        NEXT_STATE <= COMPARE_PLUS1;    
                     ELSE
                        IF (DATA_MASTER = (NOT DATA_MONITOR)) THEN
                           NEXT_STATE <= RECORD_1_3;    
                        ELSE
                           NEXT_STATE <= RECORD_0_3;    
                        END IF;
                     END IF;
                  END IF;
         WHEN RECORD_0_3 =>
                  NEXT_STATE <= INC_1;    --  +1 POSITION HAD ERRORS    
         WHEN RECORD_1_3 =>
                  NEXT_STATE <= INC_1;    --  +1 POSITION WAS ERROR FREE
         WHEN INC_1 =>
                  NEXT_STATE <= WAIT7_3;    -- INCREMENT THE MONITOR TO 1 IDELAY TAP MORE (+2)
         WHEN WAIT7_3 =>
                  --WAIT FOR LATENCY TO SETTLE
                  
                  IF (COUNT_VALUE0 > "0000111") THEN
                     NEXT_STATE <= COMPARE_PLUS2;    
                  ELSE
                     NEXT_STATE <= WAIT7_3;    
                  END IF;
         WHEN COMPARE_PLUS2 =>
                  --COMPARE THE +2 POSITION
                  
                  IF (DATA_MASTER /= (NOT DATA_MONITOR)) THEN
                     NEXT_STATE <= RECORD_0_4;    
                  ELSE
                     IF (COUNT_VALUE1 < "1111110") THEN
                        NEXT_STATE <= COMPARE_PLUS2;    
                     ELSE
                        IF (DATA_MASTER = (NOT DATA_MONITOR)) THEN
                           NEXT_STATE <= RECORD_1_4;    
                        ELSE
                           NEXT_STATE <= RECORD_0_4;    
                        END IF;
                     END IF;
                  END IF;
         WHEN RECORD_0_4 =>
                  NEXT_STATE <= IDLE;    --  +2 POSITION HAD ERRORS    
         WHEN RECORD_1_4 =>
                  NEXT_STATE <= IDLE;    --  +2 POSITION WAS ERROR FREE
         WHEN IDLE =>
                  NEXT_STATE <= BEGIN_ADJUST;    
         WHEN BEGIN_ADJUST =>
                  --BASED ON THE 5 POSITION SAMPLING WINDOW, ADJUST DATA CHANNEL
                  
                CASE SAMPLE_WINDOW IS
                   WHEN "00001" =>
                     NEXT_STATE <= INC_ALL;    -- INCREMENT ENTIRE DATA BUS BY 1
                   WHEN "00011" =>
                     NEXT_STATE <= INC_ALL;    -- INCREMENT ENTIRE DATA BUS BY 1
                   WHEN "00111" =>
                     NEXT_STATE <= INC_ALL;    -- INCREMENT ENTIRE DATA BUS BY 1
                   WHEN "01111" =>
                     NEXT_STATE <= INC_ALL;    -- INCREMENT ENTIRE DATA BUS BY 1
                   WHEN "10000" =>
                     NEXT_STATE <= DEC_ALL;    -- DECREMENT ENTIRE DATA BUS BY 1
                   WHEN "11000" =>
                     NEXT_STATE <= DEC_ALL;    -- DECREMENT ENTIRE DATA BUS BY 1
                   WHEN "11100" =>
                     NEXT_STATE <= DEC_ALL;    -- DECREMENT ENTIRE DATA BUS BY 1
                   WHEN "11110" =>
                     NEXT_STATE <= DEC_ALL;    -- DECREMENT ENTIRE DATA BUS BY 1
                   WHEN OTHERS  =>
                     NEXT_STATE <= DEC_2;    
                      -- DO NOT ADJUST DATA BUS AT ALL; RETURN MONITOR TO CENTER
                     
                END CASE;
         WHEN INC_ALL =>
                NEXT_STATE <= DEC_2;    -- DATA AND MONITOR GET INCREMENTED BY 1
         WHEN DEC_ALL =>
                NEXT_STATE <= DEC_2;    -- DATA AND MONITOR GET DECREMENTED BY 1	
         WHEN DEC_2 =>
                  --MONITOR DECREMENTED BY 2 TO RETURN TO INITIAL STATE
                  
                  IF (COUNT_VALUE1 = "0000001") THEN
                     NEXT_STATE <= DONE;    
                  ELSE
                     NEXT_STATE <= DEC_2;    
                  END IF;
         WHEN DONE =>
                  --WAIT IN THIS STATE UNTIL NEXT CHANNEL CAN START
                  
                  IF (START = '0') THEN
                     NEXT_STATE <= DONE;    
                  ELSE
                     NEXT_STATE <= INIT;    
                  END IF;
         WHEN OTHERS  =>
                  NEXT_STATE <= INIT;    
         
      END CASE;
   END PROCESS;

   --OUTPUT LOGIC
   
   PROCESS (CURRENT_STATE)
   BEGIN
      CASE CURRENT_STATE IS
         WHEN INIT =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '1';    -- +2
                  STORE_STATUS(1) <= '1';    -- +1
                  STORE_STATUS(2) <= '1';    -- 0
                  STORE_STATUS(3) <= '1';    -- -1
                  STORE_STATUS(4) <= '1';    -- -2
                  STATUS <= '0';    
         WHEN WAIT128 =>
                  COUNT0 <= '1';    
                  UD0 <= '1';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    
         WHEN COMPARE_0 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '1';    
                  UD1 <= '1';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    
         WHEN RECORD_0_0 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '1';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    -- ERRORS
         WHEN RECORD_1_0 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '1';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '1';    -- ERROR FREE
         WHEN DEC_1_0 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '1';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    
         WHEN WAIT7_0 =>
                  COUNT0 <= '1';    
                  UD0 <= '1';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    
         WHEN COMPARE_MINUS1 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '1';    
                  UD1 <= '1';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    
         WHEN RECORD_0_1 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '1';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    -- ERRORS
         WHEN RECORD_1_1 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '1';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '1';    -- ERROR FREE
         WHEN DEC_1_1 =>
                  COUNT0 <= '0';    
                  UD0 <= '0';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '1';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    
                  STORE_STATUS(0) <= '0';    -- +2
                  STORE_STATUS(1) <= '0';    -- +1
                  STORE_STATUS(2) <= '0';    -- 0
                  STORE_STATUS(3) <= '0';    -- -1
                  STORE_STATUS(4) <= '0';    -- -2
                  STATUS <= '0';    
         WHEN WAIT7_1 =>
                  COUNT0 <= '1';    
                  UD0 <= '1';    
                  COUNT1 <= '0';    
                  UD1 <= '0';    
                  INC_MONITOR  <= '0';    
                  ICE_MONITOR  <= '0';    
                  INC_DATABUS  <= '0';    
                  ICE_DATABUS  <= '0';    

⌨️ 快捷键说明

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