📄 bit_align_machine.vhd
字号:
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 + -