?? cy22395.vhd
字號:
END IF; END PROCESS MULT2; ----------------------------------------------------------------------- -- Multiplier Process -- The "Multiplier" actually divides the PLL_OUT signal ----------------------------------------------------------------------- MULT3 : PROCESS (PLL3_OUT) VARIABLE mult_in : natural; VARIABLE mult_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN mult_in := 2 * (to_nat(PLL3_P98) * 16#100# + to_nat(PLL3_P70) + 3) + to_nat(PLL3_P0); IF PLL3_OUT /= 'Z' THEN IF PLL3_OUT'event THEN IF first THEN MULT3_OUT <= PLL3_OUT; first := false; mult_cnt := mult_cnt + 1; ELSIF mult_cnt < mult_in THEN mult_cnt := mult_cnt + 1; ELSE mult_cnt := 1; MULT3_OUT <= NOT1(MULT3_OUT); END IF; END IF; ELSE first := true; mult_cnt := 0; MULT3_OUT <= 'Z'; END IF; END PROCESS MULT3; ----------------------------------------------------------------------- -- Divider Process ----------------------------------------------------------------------- DIV1 : PROCESS (PLL1_OUT) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN div_in := to_nat(PLL1_Q) + 2; IF PLL1_OUT /= 'Z' THEN IF PLL1_OUT'event THEN IF first THEN DIV1_OUT <= PLL1_OUT; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; DIV1_OUT <= NOT1(DIV1_OUT); END IF; END IF; ELSE first := true; div_cnt := 0; DIV1_OUT <= 'Z'; END IF; END PROCESS DIV1; ----------------------------------------------------------------------- -- Divider Process ----------------------------------------------------------------------- DIV2 : PROCESS (PLL2_OUT) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN div_in := to_nat(PLL2_Q) + 2; IF PLL2_OUT /= 'Z' THEN IF PLL2_OUT'event THEN IF first THEN DIV2_OUT <= PLL2_OUT; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; DIV2_OUT <= NOT1(DIV2_OUT); END IF; END IF; ELSE first := true; div_cnt := 0; DIV2_OUT <= 'Z'; END IF; END PROCESS DIV2; ----------------------------------------------------------------------- -- Divider Process ----------------------------------------------------------------------- DIV3 : PROCESS (PLL3_OUT) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN div_in := to_nat(PLL3_Q) + 2; IF PLL3_OUT /= 'Z' THEN IF PLL3_OUT'event THEN IF first THEN DIV3_OUT <= PLL3_OUT; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; DIV3_OUT <= NOT1(DIV3_OUT); END IF; END IF; ELSE first := true; div_cnt := 0; DIV3_OUT <= 'Z'; END IF; END PROCESS DIV3; ----------------------------------------------------------------------- -- 4x4 Crosspoint Switch - Process ----------------------------------------------------------------------- CrosspointSwitch : PROCESS (XTALIN, DIV1_OUT, DIV2_OUT, DIV3_OUT) VARIABLE crossA : natural range 0 to 7; VARIABLE crossB : natural range 0 to 7; VARIABLE crossC : natural range 0 to 7; VARIABLE crossD : natural range 0 to 7; BEGIN IF PLL1_DivSel = '0' THEN crossA := to_nat((ClkA_FS21(1),ClkA_FS21(0),ClkA0_FS0)); crossB := to_nat((ClkB_FS21(1),ClkB_FS21(0),ClkB0_FS0)); ELSE crossA := to_nat((ClkA_FS21(1),ClkA_FS21(0),ClkA1_FS0)); crossB := to_nat((ClkB_FS21(1),ClkB_FS21(0),ClkB1_FS0)); END IF; crossC := to_nat((ClkC_FS21(1),ClkC_FS21(0),ClkC_FS0)); crossD := to_nat((ClkD_FS21(1),ClkD_FS21(0),ClkD_FS0)); CASE crossA IS WHEN 0 => PostDivA_in <= XTALIN; WHEN 1 => PostDivA_in <= NOTz(XTALIN); WHEN 2 => PostDivA_in <= DIV1_OUT; WHEN 3 => PostDivA_in <= NOTz(DIV1_OUT); WHEN 4 => PostDivA_in <= DIV2_OUT; WHEN 5 => PostDivA_in <= NOTz(DIV2_OUT); WHEN 6 => PostDivA_in <= DIV3_OUT; WHEN 7 => PostDivA_in <= NOTz(DIV3_OUT); WHEN OTHERS => NULL; END CASE; CASE crossB IS WHEN 0 => PostDivB_in <= XTALIN; WHEN 1 => PostDivB_in <= NOTz(XTALIN); WHEN 2 => PostDivB_in <= DIV1_OUT; WHEN 3 => PostDivB_in <= NOTz(DIV1_OUT); WHEN 4 => PostDivB_in <= DIV2_OUT; WHEN 5 => PostDivB_in <= NOTz(DIV2_OUT); WHEN 6 => PostDivB_in <= DIV3_OUT; WHEN 7 => PostDivB_in <= NOTz(DIV3_OUT); WHEN OTHERS => NULL; END CASE; CASE crossC IS WHEN 0 => PostDivC_in <= XTALIN; WHEN 1 => PostDivC_in <= NOTz(XTALIN); WHEN 2 => PostDivC_in <= DIV1_OUT; WHEN 3 => PostDivC_in <= NOTz(DIV1_OUT); WHEN 4 => PostDivC_in <= DIV2_OUT; WHEN 5 => PostDivC_in <= NOTz(DIV2_OUT); WHEN 6 => PostDivC_in <= DIV3_OUT; WHEN 7 => PostDivC_in <= NOTz(DIV3_OUT); WHEN OTHERS => NULL; END CASE; CASE crossD IS WHEN 0 => PostDivD_in <= XTALIN; WHEN 1 => PostDivD_in <= NOTz(XTALIN); WHEN 2 => PostDivD_in <= DIV1_OUT; WHEN 3 => PostDivD_in <= NOTz(DIV1_OUT); WHEN 4 => PostDivD_in <= DIV2_OUT; WHEN 5 => PostDivD_in <= NOTz(DIV2_OUT); WHEN 6 => PostDivD_in <= DIV3_OUT; WHEN 7 => PostDivD_in <= NOTz(DIV3_OUT); WHEN OTHERS => NULL; END CASE; END PROCESS CrosspointSwitch; PostDivE_in <= DIV1_OUT; ----------------------------------------------------------------------- -- Post Divider Process ----------------------------------------------------------------------- POST_DIV_A : PROCESS (PostDivA_in) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN IF PLL1_DivSel = '0' THEN div_in := to_nat(ClkA0_Div); ELSE div_in := to_nat(ClkA1_Div); END IF; IF div_in > 0 AND PostDivA_in /= 'Z' THEN IF PostDivA_in'event THEN IF first THEN PostDivA_out <= PostDivA_in; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; PostDivA_out <= NOT1(PostDivA_out); END IF; END IF; ELSE first := true; div_cnt := 0; PostDivA_out <= 'Z'; END IF; END PROCESS POST_DIV_A; ----------------------------------------------------------------------- -- Post Divider Process ----------------------------------------------------------------------- POST_DIV_B : PROCESS (PostDivB_in) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN IF PLL1_DivSel = '0' THEN div_in := to_nat(ClkB0_Div); ELSE div_in := to_nat(ClkB1_Div); END IF; IF div_in > 0 AND PostDivB_in /= 'Z' THEN IF PostDivB_in'event THEN IF first THEN PostDivB_out <= PostDivB_in; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; PostDivB_out <= NOT1(PostDivB_out); END IF; END IF; ELSE first := true; div_cnt := 0; PostDivB_out <= 'Z'; END IF; END PROCESS POST_DIV_B; ----------------------------------------------------------------------- -- Post Divider Process ----------------------------------------------------------------------- POST_DIV_C : PROCESS (PostDivC_in) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN div_in := to_nat(ClkC_Div); IF div_in > 0 AND PostDivC_in /= 'Z' THEN IF PostDivC_in'event THEN IF first THEN PostDivC_out <= PostDivC_in; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; PostDivC_out <= NOT1(PostDivC_out); END IF; END IF; ELSE first := true; div_cnt := 0; PostDivC_out <= 'Z'; END IF; END PROCESS POST_DIV_C; ----------------------------------------------------------------------- -- Post Divider Process ----------------------------------------------------------------------- POST_DIV_D : PROCESS (PostDivD_in) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; BEGIN div_in := to_nat(ClkD_Div); IF div_in > 0 AND PostDivD_in /= 'Z' THEN IF PostDivD_in'event THEN IF first THEN PostDivD_out <= PostDivD_in; first := false; div_cnt := div_cnt + 1; ELSIF div_cnt < div_in THEN div_cnt := div_cnt + 1; ELSE div_cnt := 1; PostDivD_out <= NOT1(PostDivD_out); END IF; END IF; ELSE first := true; div_cnt := 0; PostDivD_out <= 'Z'; END IF; END PROCESS POST_DIV_D; ----------------------------------------------------------------------- -- Post Divider Process ----------------------------------------------------------------------- POST_DIV_E : PROCESS (PostDivE_in) VARIABLE div_in : natural; VARIABLE div_cnt : natural; VARIABLE first : BOOLEAN := true; VARIABLE div_help: NATURAL; BEGIN div_help := to_nat(ClkE_Div); CASE div_help IS WHEN 0 => div_in := 0; WHEN 1 => div_in := 4;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -