반응형

TIMING-14#1 Critical Warning

LUT on the clock tree 

The LUT xxx has been found on the clock tree. Run opt_design to optimize the clock trees.

 

아래 구문과 같이 clock_sel신호로 클럭을 선택해서 클럭을 출력하면 TIMING-14의 치명적인 경고가 발생합니다.

signal clock_out : std_logic;
signal clock_sel : std_logic;
signal clock_nsel : std_logic;

clock_sel <= ‘1’;
clock_nsel <= not(clock_sel);
clock_out <= clock_10MHz when(clock_sel = ‘1’) else clock_20MHz;

 

해결방법 : 전용 클럭버퍼를 사용한다. (BUFG, BUFGCE, BUFGCTRL, BUFGMUX )

Artix에서는 BUFGMUX는 지원 안함.

 

<다른 클럭중 하나를 선택하는 경우>

Library UNISIM;
use UNISIM.vcomponents.all;

-----------------------------------
signal clock_out : std_logic;
signal clock_sel : std_logic;
signal clock_nsel : std_logic;
-----------------------------------

-- TIMING-14 Critical Warning
-- clock_out <= clock_20Mhz when(clock_sel = ‘0’) else clock_10Mhz;

clock_sel <= ‘1’;
clock_nsel <= not(clock_sel);

BUFGCTRL_inst : BUFGCTRL
generic map (
   INIT_OUT => 0,                -- Initial value of BUFGCTRL output, 0-1
   PRESELECT_I0 => FALSE,        -- BUFGCTRL output uses I0 input, FALSE, TRUE
   PRESELECT_I1 => FALSE,        -- BUFGCTRL output uses I1 input, FALSE, TRUE
   -- Programmable Inversion Attributes: Specifies built-in programmable inversion on specific pins
   IS_CE0_INVERTED => '0',       -- Optional inversion for CE0
   IS_CE1_INVERTED => '0',       -- Optional inversion for CE1
   IS_I0_INVERTED => '0',        -- Optional inversion for I0
   IS_I1_INVERTED => '0',        -- Optional inversion for I1
   IS_IGNORE0_INVERTED => '0',   -- Optional inversion for IGNORE0
   IS_IGNORE1_INVERTED => '0',   -- Optional inversion for IGNORE1
   IS_S0_INVERTED => '0',        -- Optional inversion for S0
   IS_S1_INVERTED => '0',        -- Optional inversion for S1
   SIM_DEVICE => "VERSAL_PRIME"  -- VERSAL_PRIME, VERSAL_PRIME_ES1
)
port map (
   O => clock_out,             -- 1-bit output: Clock output
   CE0 => ‘1’,         -- 1-bit input: Clock enable input for I0
   CE1 => ‘1’,         -- 1-bit input: Clock enable input for I1
   I0 => clock_10MHz,           -- 1-bit input: Primary clock
   I1 => clock_20MHz,           -- 1-bit input: Secondary clock
   IGNORE0 => ‘0’, -- 1-bit input: Clock ignore input for I0
   IGNORE1 => ‘0’, -- 1-bit input: Clock ignore input for I1
   S0 => clock_sel,           -- 1-bit input: Clock select for I0
   S1 => clock_nsel            -- 1-bit input: Clock select for I1
);

 

<클럭 선택이 ‘0’일 경우 ‘0’을 출력하고 ‘1’일때만 클럭을 출력하는 경우>

Library UNISIM;
use UNISIM.vcomponents.all;

signal clk_sel : std_logic;
signal clk_out : std_logic;

-- TIMING-14 Critical Warning
-- clk_out <= ‘0’ when(clk_out = ‘0’) else clock_10Mhz;

BUFGCE_inst : BUFGCE
generic map (
   CE_TYPE => “SYNC”,            -- ASYNC, HARDSYNC, SYNC
   IS_CE_INVERTED => ‘0’,        -- Programmable inversion on CE
   IS_I_INVERTED => ‘0’,         -- Programmable inversion on I
   SIM_DEVICE => “VERSAL_PRIME”  -- VERSAL_PRIME, VERSAL_PRIME_ES1
)
port map (
   O => clk_out,   -- 1-bit output: Buffer
   CE => clk_sel, -- 1-bit input: Buffer enable
   I => clock_10Mhz    -- 1-bit input: Buffer
);

 

<BUFG>

Primitive: General Clock Buffer

  • PRIMITIVE_GROUP: CLOCK
  • PRIMITIVE_SUBGROUP: BUFFER

 

소개

설계 요소는 신호의 낮은 스큐 분포를 위해 신호를 글로벌 라우팅 리소스에 연결하는 높은 팬아웃 버퍼입니다. BUFG 일반적으로 클럭 네트뿐만 아니라 , 리셋 클럭 인에이블과 같은 팬아웃이 높은 다른 네트에도 사용됩니다.

포트설명

Port Direction Width Function
I Input 1 Clock input.
O Output 1 Clock output.

 

VHDL Instantiation Template

Library UNISIM;
use UNISIM.vcomponents.all;

-- BUFG: General Clock Buffer
--       Versal Prime series
-- Xilinx HDL Language Template, version 2022.2

BUFG_inst : BUFG
port map (
   O => O, -- 1-bit output: Clock output.
   I => I  -- 1-bit input: Clock input.
);

-- End of BUFG_inst instantiation

 

Verilog Instantiation Template

// BUFG: General Clock Buffer
//       Versal Prime series
// Xilinx HDL Language Template, version 2022.2

BUFG BUFG_inst (
   .O(O), // 1-bit output: Clock output.
   .I(I)  // 1-bit input: Clock input.
);

// End of BUFG_inst instantiation

 

<BUFGCE>

Primitive: General Clock Buffer with Clock Enable

  • PRIMITIVE_GROUP: CLOCK
  • PRIMITIVE_SUBGROUP: BUFFER

 

 

소개

설계 요소는 단일 게이트 입력이 있는 일반 클록 버퍼입니다클록 활성화(CE) ‘0’ O 출력은 0입니다. CE ‘1’이면 I 입력이 O 출력으로 전송됩니다.

Logic Table

Inputs Outputs
I CE O
X 0 0
I 1 I

 

Port Descriptions

Port Direction Width Function
CE Input 1 Clock buffer active-High enable.
I Input 1 Buffer input.
O Output 1 Buffer output.

 

Available Attributes

Attribute Type Allowed Values Default Description
CE_TYPE STRING "SYNC", "ASYNC", "HARDSYNC" "SYNC" 활성화가 동기식(결함 없음) 또는 비동기식(입력 클록 전환 필요 없음)인지 여부를 지정합니다. Versal 장치에는 HARDSYNC 설정을 사용하여 활성화할 있는 선택적 강화 동기화 회로가 있습니다.
IS_CE_INVERTED BINARY 1'b0 to 1'b1 1'b0 CE 핀에서 프로그래밍 가능한 반전의 사용을 지정합니다.
IS_I_INVERTED BINARY 1'b0 to 1'b1 1'b0 I 핀에서 프로그래밍 가능한 반전의 사용을 지정합니다.
SIM_DEVICE STRING "VERSAL_PRIME", "VERSAL_PRIME_ES1", "VERSAL_PRIME_ES2" "ULTRASCALE" 버전 설정

 

VHDL Instantiation Template

Library UNISIM;
use UNISIM.vcomponents.all;

-- BUFGCE: General Clock Buffer with Clock Enable
--         Versal Prime series
-- Xilinx HDL Language Template, version 2022.2

BUFGCE_inst : BUFGCE
generic map (
   CE_TYPE => “SYNC”,            -- ASYNC, HARDSYNC, SYNC
   IS_CE_INVERTED => ‘0’,        -- Programmable inversion on CE
   IS_I_INVERTED => ‘0’,         -- Programmable inversion on I
   SIM_DEVICE => “VERSAL_PRIME”  -- VERSAL_PRIME, VERSAL_PRIME_ES1
)
port map (
   O => O,   -- 1-bit output: Buffer
   CE => CE, -- 1-bit input: Buffer enable
   I => I    -- 1-bit input: Buffer
);

-- End of BUFGCE_inst instantiation

Verilog Instantiation Template

// BUFGCE: General Clock Buffer with Clock Enable
//         Versal Prime series
// Xilinx HDL Language Template, version 2022.2

BUFGCE #(
   .CE_TYPE("SYNC"),            // ASYNC, HARDSYNC, SYNC
   .IS_CE_INVERTED(1'b0),       // Programmable inversion on CE
   .IS_I_INVERTED(1'b0),        // Programmable inversion on I
   .SIM_DEVICE("VERSAL_PRIME")  // VERSAL_PRIME, VERSAL_PRIME_ES1
)
BUFGCE_inst (
   .O(O),   // 1-bit output: Buffer
   .CE(CE), // 1-bit input: Buffer enable
   .I(I)    // 1-bit input: Buffer
);

// End of BUFGCE_inst instantiation

 

<BUFGCTRL>

Primitive: General Clock Control Buffer

  • PRIMITIVE_GROUP: CLOCK
  • PRIMITIVE_SUBGROUP: MUX

 

소개

BUFGCTRL 프리미티브는 2개의 클록 입력이 있는 동기/비동기 "glitch-free" 2:1 멀티플렉서로 설계된 일반 클록 버퍼입니다클록 멀티플렉싱이 필요하지 않은 경우 BUFG 또는 BUFGCE 구성 요소를 사용해야 합니다.

Port Descriptions

Port Direction Width Function
CE0 Input 1 I0 클록 입력에 대한 클록 활성화 입력 입력을 활성화하기 위해 CE0 핀을 사용할 설정/유지 시간이 보장되어야 합니다 요구 사항을 충족하지 못하면 클럭 글리치가 발생할 있습니다.
CE1 Input 1 I1 클록 입력을 위한 클록 활성화 입력 입력을 활성화하기 위해 CE1 핀을 사용할 설정/유지 시간이 보장되어야 합니다 요구 사항을 충족하지 못하면 클럭 글리치가 발생할 있습니다.
IGNORE0 Input 1 I0 입력에 대한 클럭 무시 입력. IGNORE 핀을 어설션하면 BUFGCTRL 클록 입력 전환 조건을 감지하지 못합니다, IGNORE 어설션하면 선택 핀이 변경되는 순간 MUX 입력을 전환하게 됩니다. IGNORE0 선택 핀이 변경될 즉시 출력이 I0 입력에서 전환되도록 하는 반면, IGNORE1 선택 핀이 변경될 즉시 출력이 I1 입력에서 전환되도록 합니다.
IGNORE1 Input 1 클럭은 I1 입력에 대한 입력을 무시합니다. IGNORE 핀을 어설션하면 BUFGCTRL 클록 입력 전환 조건을 감지하지 못합니다, IGNORE 어설션하면 선택 핀이 변경되는 순간 MUX 입력을 전환하게 됩니다. IGNORE0 선택 핀이 변경될 즉시 출력이 I0 입력에서 전환되도록 하는 반면, IGNORE1 선택 핀이 변경될 즉시 출력이 I1 입력에서 전환되도록 합니다.
I0 Input 1 CE0 입력에 의해 활성화되고 S0 입력에 의해 선택되는 BUFGCTRL 대한 기본 클록 입력.
I1 Input 1 CE1 입력에 의해 활성화되고 S1 입력에 의해 선택된 BUFGCTRL로의 보조 클록 입력.
O Output 1 클럭 출력
S0 Input 1 I0 대한 클록 선택 입력. S 핀은 클럭 입력에 대한 클럭 선택 핀을 나타냅니다. S 핀을 입력 선택으로 사용하는 경우 설정/유지 시간 요구 사항이 있습니다. CE 핀과 달리 요구 사항을 충족하지 못해도 클록 글리치가 발생하지 않습니다그러나 출력 클럭이 클럭 주기 후에 나타날 있습니다.
S1 Input 1 I1 대한 클록 선택 입력. S 핀은 클럭 입력에 대한 클럭 선택 핀을 나타냅니다. S 핀을 입력 선택으로 사용하는 경우 설정/유지 시간 요구 사항이 있습니다. CE 핀과 달리 요구 사항을 충족하지 못해도 클록 글리치가 발생하지 않습니다그러나 출력 클럭이 클럭 주기 후에 나타날 있습니다.

 

Available Attributes

Attribute Type Allowed Values Default Description
INIT_OUT DECIMAL 0, 1 0 구성 BUFGCTRL 출력을 지정된 값으로 초기화합니다.
PRESELECT_I0 BOOLEAN FALSE, TRUE FALSE TRUE 경우 BUFGCTRL 출력은 구성 I0 입력을 사용합니다.
PRESELECT_I1 BOOLEAN FALSE, TRUE FALSE TRUE 경우 BUFGCTRL 출력은 구성 I1 입력을 사용합니다.
SIM_DEVICE STRING "VERSAL_PRIME", "VERSAL_PRIME_ES1", "VERSAL_PRIME_ES2" "ULTRASCALE"  버전 설정
IS_CE0_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 CE0 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_CE1_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 CE1 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_IGNORE0_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 IGNORE0 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_IGNORE1_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 IGNORE1 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_I0_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 I0 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_I1_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 I1 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_S0_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 S0 핀에서 선택적 반전을 사용할지 여부를 지정합니다.
IS_S1_INVERTED BINARY 1'b0 to 1'b1 1'b0 구성 요소의 S1 핀에서 선택적 반전을 사용할지 여부를 지정합니다.

 

VHDL Instantiation Template

Library UNISIM;
use UNISIM.vcomponents.all;

-- BUFGCTRL: General Clock Control Buffer
--           Versal Prime series
-- Xilinx HDL Language Template, version 2022.2

BUFGCTRL_inst : BUFGCTRL
generic map (
   INIT_OUT => 0,                -- Initial value of BUFGCTRL output, 0-1
   PRESELECT_I0 => FALSE,        -- BUFGCTRL output uses I0 input, FALSE, TRUE
   PRESELECT_I1 => FALSE,        -- BUFGCTRL output uses I1 input, FALSE, TRUE
   -- Programmable Inversion Attributes: Specifies built-in programmable inversion on specific pins
   IS_CE0_INVERTED => '0',       -- Optional inversion for CE0
   IS_CE1_INVERTED => '0',       -- Optional inversion for CE1
   IS_I0_INVERTED => '0',        -- Optional inversion for I0
   IS_I1_INVERTED => '0',        -- Optional inversion for I1
   IS_IGNORE0_INVERTED => '0',   -- Optional inversion for IGNORE0
   IS_IGNORE1_INVERTED => '0',   -- Optional inversion for IGNORE1
   IS_S0_INVERTED => '0',        -- Optional inversion for S0
   IS_S1_INVERTED => '0',        -- Optional inversion for S1
   SIM_DEVICE => "VERSAL_PRIME"  -- VERSAL_PRIME, VERSAL_PRIME_ES1
)
port map (
   O => O,             -- 1-bit output: Clock output
   CE0 => CE0,         -- 1-bit input: Clock enable input for I0
   CE1 => CE1,         -- 1-bit input: Clock enable input for I1
   I0 => I0,           -- 1-bit input: Primary clock
   I1 => I1,           -- 1-bit input: Secondary clock
   IGNORE0 => IGNORE0, -- 1-bit input: Clock ignore input for I0
   IGNORE1 => IGNORE1, -- 1-bit input: Clock ignore input for I1
   S0 => S0,           -- 1-bit input: Clock select for I0
   S1 => S1            -- 1-bit input: Clock select for I1
);

-- End of BUFGCTRL_inst instantiation

 

Verilog Instantiation Template

// BUFGCTRL: General Clock Control Buffer
//           Versal Prime series
// Xilinx HDL Language Template, version 2022.2

BUFGCTRL #(
   .INIT_OUT(0),                // Initial value of BUFGCTRL output, 0-1
   .PRESELECT_I0("FALSE"),      // BUFGCTRL output uses I0 input, FALSE, TRUE
   .PRESELECT_I1("FALSE"),      // BUFGCTRL output uses I1 input, FALSE, TRUE
   // Programmable Inversion Attributes: Specifies built-in programmable inversion on specific pins
   .IS_CE0_INVERTED(1'b0),      // Optional inversion for CE0
   .IS_CE1_INVERTED(1'b0),      // Optional inversion for CE1
   .IS_I0_INVERTED(1'b0),       // Optional inversion for I0
   .IS_I1_INVERTED(1'b0),       // Optional inversion for I1
   .IS_IGNORE0_INVERTED(1'b0),  // Optional inversion for IGNORE0
   .IS_IGNORE1_INVERTED(1'b0),  // Optional inversion for IGNORE1
   .IS_S0_INVERTED(1'b0),       // Optional inversion for S0
   .IS_S1_INVERTED(1'b0),       // Optional inversion for S1
   .SIM_DEVICE("VERSAL_PRIME")  // VERSAL_PRIME, VERSAL_PRIME_ES1
)
BUFGCTRL_inst (
   .O(O),             // 1-bit output: Clock output
   .CE0(CE0),         // 1-bit input: Clock enable input for I0
   .CE1(CE1),         // 1-bit input: Clock enable input for I1
   .I0(I0),           // 1-bit input: Primary clock
   .I1(I1),           // 1-bit input: Secondary clock
   .IGNORE0(IGNORE0), // 1-bit input: Clock ignore input for I0
   .IGNORE1(IGNORE1), // 1-bit input: Clock ignore input for I1
   .S0(S0),           // 1-bit input: Clock select for I0
   .S1(S1)            // 1-bit input: Clock select for I1
);

// End of BUFGCTRL_inst instantiation

 

<BUFGMUX>

Primitive: General Clock Mux Buffer

  • PRIMITIVE_GROUP: CLOCK
  • PRIMITIVE_SUBGROUP: MUX

 

 

소개

설계 요소는 BUFGCTRL 기반으로 하는 일반 클록 버퍼로, I0 I1 입력 클록 중에서 선택할 있습니다선택 입력(S) ‘0’이면 I0 신호가 출력(O)으로 선택됩니다선택 입력(S) ‘1’이면 I1 신호가 출력용으로 선택됩니다. BUFGMUX BUFGMUX_1 선택 입력의 변경에 따라 출력이 클록 간에 전환될 출력이 가정하는 상태로 구별됩니다. BUFGMUX 출력 상태 0 가정하고 BUFGMUX_1 출력 상태 1 가정합니다.

Logic Table

Inputs Outputs
I0 I1 S O
I0 X 0 I0
X I1 1 I1
X X 0
X X 0

 

Port Descriptions

Port Direction Width Function
I0 Input 1 클록 버퍼 입력 입력은 S 입력이 0 출력 O 반영됩니다.
I1 Input 1 클록 버퍼 입력 입력은 S 입력이 1 출력 O 반영됩니다.
O Output 1 클록 버퍼 출력.
S Input 1 클록 버퍼 선택 입력. Low I0 입력을 선택하고 High I1 입력을 선택합니다.

 

Available Attributes

Attribute Type Allowed Values Default Description
CLK_SEL_TYPE STRING "SYNC", "ASYNC" "SYNC" 동기(glitch-free) 또는 비동기 클록 전환을 지정합니다.

 

VHDL Instantiation Template

Library UNISIM;
use UNISIM.vcomponents.all;

-- BUFGMUX: General Clock Mux Buffer
--          Versal Prime series
-- Xilinx HDL Language Template, version 2022.2

BUFGMUX_inst : BUFGMUX
generic map (
   CLK_SEL_TYPE => "SYNC"  -- ASYNC, SYNC
)
port map (
   O => O,   -- 1-bit output: Clock output
   I0 => I0, -- 1-bit input: Clock input (S=0)
   I1 => I1, -- 1-bit input: Clock input (S=1)
   S => S    -- 1-bit input: Clock select
);

-- End of BUFGMUX_inst instantiation

 

Verilog Instantiation Template

// BUFGMUX: General Clock Mux Buffer
//          Versal Prime series
// Xilinx HDL Language Template, version 2022.2

BUFGMUX #(
   .CLK_SEL_TYPE("SYNC")  // ASYNC, SYNC
)
BUFGMUX_inst (
   .O(O),   // 1-bit output: Clock output
   .I0(I0), // 1-bit input: Clock input (S=0)
   .I1(I1), // 1-bit input: Clock input (S=1)
   .S(S)    // 1-bit input: Clock select
);

// End of BUFGMUX_inst instantiation
반응형

+ Recent posts