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

📄 bit_align_machine.vhd

📁 FPGA之间的LVDS传输
💻 VHD
📖 第 1 页 / 共 2 页
字号:
                     IF (RXDATA_PREV /= RXDATA) THEN                        NEXT_STATE <= "01111";                         ELSE                        NEXT_STATE <= "01011";                         END IF;                  END IF;         WHEN "01110" =>                  --DATA IS STABLE AFTER FINDING 1ST TRANS,                   --COUNT 1 TO INCLUDE LAST INC                                    NEXT_STATE <= "01001";             WHEN "01001" =>                  --INC ONCE TO LOOK FOR 2ND TRANS                                    NEXT_STATE <= "00011";             WHEN "00011" =>                  --WAIT 8 CYCLES, COMPARE RXDATA WITH PREVIOUS DATA                                    IF (COUNT_VALUE_SAMPLE < "0000111") THEN                     NEXT_STATE <= "00011";                      ELSE                     IF (RXDATA_PREV /= RXDATA) THEN                        NEXT_STATE <= "10010";                         ELSE                        NEXT_STATE <= "01001";                         END IF;                  END IF;         WHEN "10010" =>                  --IDLE (NEEDED FOR COUNTER RESET BEFORE NEXT STATE)                                    NEXT_STATE <= "01010";             WHEN "01010" =>                  --DECREMENT TO MIDDLE OF DATA EYE                                    IF (COUNT_VALUE_SAMPLE < HALF_DATA_EYE - "0000001")                   THEN                     NEXT_STATE <= "01010";                      ELSE                     NEXT_STATE <= "00101";                      END IF;         WHEN "00101" =>                  --SAMPLE PATTERN 16 TIMES TO SEE IF WORD ALIGNMENT NEEDED                                    IF (USE_BITSLIP = '0') THEN                     NEXT_STATE <= "00111";                      ELSE                     IF (COUNT_VALUE < "0001111") THEN                        NEXT_STATE <= "00101";                         ELSE                        IF (RXDATA = CHECK_PATTERN) THEN                           NEXT_STATE <= "00111";                            ELSE                           --if(COUNT_VALUE == 7'h0F)                                                      NEXT_STATE <= "00110";                            END IF;                     END IF;                  END IF;         WHEN "00110" =>                  --INITIATE 1 BITSLIP                                    NEXT_STATE <= "00101";             WHEN "00111" =>                  IF (SAP = '0') THEN                     --TRAINING COMPLETE FOR THIS CHANNEL                                          NEXT_STATE <= "00111";                      ELSE                     NEXT_STATE <= "00000";                      END IF;         WHEN OTHERS  =>                  NEXT_STATE <= "00000";                   END CASE;   END PROCESS;   --OUTPUT LOGIC      PROCESS (CURRENT_STATE)   BEGIN      CASE CURRENT_STATE IS         WHEN "00000" =>                  --RST STATE                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "00001" =>                  --INITIAL STATE, SAMPLE TRAINING BIT                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "01000" =>                  --CHECK SAMPLE TO SEE IF IT IS ON A TRANSITION                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '1';                      UD_SAMPLE  <= '1';             WHEN "01111" =>                  --IF SAMPLED POINT IS TRANSITION, EDGE IS FOUND, SO INC DELAY TO EXIT TRANSITION                                    INC  <= '1';                      ICE  <= '1';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "01101" =>                  --WAIT 16 CYCLES WHILE APPLYING BITSLIP TO FIND CHECK_PATTERN                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '1';                      COUNT_SAMPLE  <= '1';                      UD_SAMPLE  <= '1';             WHEN "01100" =>                  --IDLE (NEEDED FOR COUNTER RESET BEFORE NEXT STATE)                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "10000" =>                  --IDLE (NEEDED FOR STABILIZATION)                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "00010" =>                  --CHECK SAMPLE AGAIN TO SEE IF WE HAVE EXITED TRANSITION                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '1';                      UD_SAMPLE  <= '1';             WHEN "01011" =>                  --INITIAL STATE WAS STABLE, SO INC ONCE TO SEARCH FOR TRANS                                    INC  <= '1';                      ICE  <= '1';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "00100" =>                  --WAIT 8 CYCLES, COMPARE RXDATA WITH PREVIOUS DATA                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '0';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '1';                      UD_SAMPLE  <= '1';             WHEN "01110" =>                  --DATA IS STABLE AFTER FINDING 1ST TRANS, COUNT 1 TO INCLUDE LAST INC                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '1';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "01001" =>                  --INC ONCE TO LOOK FOR 2ND TRANS                                    INC  <= '1';                      ICE  <= '1';                      COUNT  <= '1';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "00011" =>                  --WAIT 8 CYCLES, COMPARE RXDATA WITH PREVIOUS DATA                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '1';                      STORE  <= '1';                      STORE_DATA_PREV  <= '0';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '1';                      UD_SAMPLE  <= '1';             WHEN "10010" =>                  --IDLE (NEEDED FOR COUNTER RESET BEFORE NEXT STATE)                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "01010" =>                  --DECREMENT TO CENTER OF DATA EYE                                    INC  <= '0';                      ICE  <= '1';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '1';                      UD_SAMPLE  <= '1';             WHEN "00101" =>                  --SAMPLE PATTERN 16 TIMES TO SEE IF WORD ALIGNMENT NEEDED                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '1';                      UD  <= '1';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "00110" =>                  --INITIATE 1 BITSLIP                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '1';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN "00111" =>                  --TRAINING COMPLETE ON THIS CHANNEL                                    INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV  <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';             WHEN OTHERS  =>                  INC  <= '0';                      ICE  <= '0';                      COUNT  <= '0';                      UD  <= '0';                      STORE  <= '0';                      STORE_DATA_PREV <= '1';                      BITSLIP  <= '0';                      COUNT_SAMPLE  <= '0';                      UD_SAMPLE  <= '0';                   END CASE;   END PROCESS;END translated;

⌨️ 快捷键说明

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