Skip to content

Commit

Permalink
Merge pull request #1138 from slaclab/sugoimanagercore
Browse files Browse the repository at this point in the history
adding GEN_TX_DRIVER_G & GEN_CLK_DRIVER_G to SugoiManagerCore.vhd
  • Loading branch information
ruck314 authored Feb 22, 2024
2 parents 98a8769 + 5228e1f commit 3a07f6b
Showing 1 changed file with 64 additions and 44 deletions.
108 changes: 64 additions & 44 deletions protocols/sugoi/rtl/SugoiManagerCore.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,19 @@ use surf.AxiLitePkg.all;

entity SugoiManagerCore is
generic (
TPD_G : time := 1 ns;
SIMULATION_G : boolean := false;
RST_ASYNC_G : boolean := false;
DIFF_PAIR_G : boolean := true;
COMMON_CLK_G : boolean := false; -- Set true if timingClk & axilClk are same signal
NUM_ADDR_BITS_G : positive; -- Number of AXI-Lite address bits in the Subordinate
TX_POLARITY_G : sl := '0';
RX_POLARITY_G : sl := '0';
DEVICE_FAMILY_G : string; -- Either "7SERIES" or "ULTRASCALE" or "ULTRASCALE_PLUS"
IODELAY_GROUP_G : string := "DESER_GROUP"; -- Only used if DEVICE_FAMILY_G="7SERIES"
REF_FREQ_G : real := 300.0); -- Only used if DEVICE_FAMILY_G="7SERIES"
TPD_G : time := 1 ns;
SIMULATION_G : boolean := false;
RST_ASYNC_G : boolean := false;
DIFF_PAIR_G : boolean := true;
GEN_TX_DRIVER_G : boolean := true;
GEN_CLK_DRIVER_G : boolean := true;
COMMON_CLK_G : boolean := false; -- Set true if timingClk & axilClk are same signal
NUM_ADDR_BITS_G : positive; -- Number of AXI-Lite address bits in the Subordinate
TX_POLARITY_G : sl := '0';
RX_POLARITY_G : sl := '0';
DEVICE_FAMILY_G : string; -- Either "7SERIES" or "ULTRASCALE" or "ULTRASCALE_PLUS"
IODELAY_GROUP_G : string := "DESER_GROUP"; -- Only used if DEVICE_FAMILY_G="7SERIES"
REF_FREQ_G : real := 300.0); -- Only used if DEVICE_FAMILY_G="7SERIES"
port (
-- SUGOI Serial Ports
sugoiRxP : in sl; -- DIFF_PAIR_G=false then CMOS, DIFF_PAIR_G=true then LVDS
Expand All @@ -48,7 +50,7 @@ entity SugoiManagerCore is
timingClk : in sl;
timingRst : in sl;
sugoiGlobalRst : in sl;
sugoiOpCode : in slv(7 downto 0); -- 1-bit per Control code
sugoiOpCode : in slv(7 downto 0); -- 1-bit per Control code
sugoiStrobe : out sl; -- 1 strobe every 10 cycles
sugoiLinkup : out sl;
-- AXI-Lite Master Interface (axilClk domain)
Expand Down Expand Up @@ -325,43 +327,61 @@ begin
--------------------------------------
-- TX I/O Register + half cycle deskew
--------------------------------------
U_sugoiTx : entity surf.OutputBufferReg
generic map (
TPD_G => TPD_G,
DIFF_PAIR_G => DIFF_PAIR_G)
port map (
I => tx,
C => timingClk,
SR => disableTx,
inv => polarityTx,
dly => '1', -- deskew the data by half clock cycle
O => sugoiTxP,
OB => sugoiTxN);
GEN_TX_DRIVER : if (GEN_TX_DRIVER_G = true) generate

U_sugoiTx : entity surf.OutputBufferReg
generic map (
TPD_G => TPD_G,
DIFF_PAIR_G => DIFF_PAIR_G)
port map (
I => tx,
C => timingClk,
SR => disableTx,
inv => polarityTx,
dly => '1', -- deskew the data by half clock cycle
O => sugoiTxP,
OB => sugoiTxN);

end generate;
BYPASS_TX_DRIVER : if (GEN_TX_DRIVER_G = false) generate
sugoiTxP <= (tx xor polarityTx) when (disableTx = '0') else '0';
sugoiTxN <= not(tx xor polarityTx) when (disableTx = '0') else '1';
end generate;

-------------------
-- CLK I/O Register
-------------------
GEN_LVDS : if (DIFF_PAIR_G = true) generate
U_sugoiClk : entity surf.ClkOutBufDiff
generic map (
TPD_G => TPD_G,
XIL_DEVICE_G => DEVICE_FAMILY_G)
port map (
clkIn => timingClk,
rstIn => disableClk,
clkOutP => sugoiClkP,
clkOutN => sugoiClkN);
GEN_CLK_DRIVER : if (GEN_CLK_DRIVER_G = true) generate

GEN_LVDS : if (DIFF_PAIR_G = true) generate
U_sugoiClk : entity surf.ClkOutBufDiff
generic map (
TPD_G => TPD_G,
XIL_DEVICE_G => DEVICE_FAMILY_G)
port map (
clkIn => timingClk,
rstIn => disableClk,
clkOutP => sugoiClkP,
clkOutN => sugoiClkN);
end generate;

GEN_CMOS : if (DIFF_PAIR_G = false) generate
U_sugoiClk : entity surf.ClkOutBufSingle
generic map (
TPD_G => TPD_G,
XIL_DEVICE_G => DEVICE_FAMILY_G)
port map (
clkIn => timingClk,
rstIn => disableClk,
clkOut => sugoiClkP);
sugoiClkN <= '0';
end generate;

end generate;
GEN_CMOS : if (DIFF_PAIR_G = false) generate
U_sugoiClk : entity surf.ClkOutBufSingle
generic map (
TPD_G => TPD_G,
XIL_DEVICE_G => DEVICE_FAMILY_G)
port map (
clkIn => timingClk,
rstIn => disableClk,
clkOut => sugoiClkP);
sugoiClkN <= '0';

BYPASS_CLK_DRIVER : if (GEN_CLK_DRIVER_G = false) generate
sugoiClkP <= timingClk when (disableClk = '0') else '0';
sugoiClkN <= not(timingClk) when (disableClk = '0') else '1';
end generate;

end mapping;

0 comments on commit 3a07f6b

Please sign in to comment.