DRC check CDC-50001 does not work if the given bit is part of a vector?
Summary:
If the bit that is missing a synchronizer is part of a vector, the DRC check CDC-50001 FAILS.
VHDL code:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity cdc is
port (
clk1 : in std_logic;
clk2 : in std_logic;
Input : in std_logic;
Output_A : out std_logic;
Output_B : out std_logic
);
end entity;
architecture rtl of cdc is
signal datai : std_logic;
signal datao : std_logic_vector(0 to 1);
begin
process (clk1) is
begin
if rising_edge(clk1) then
datai <= Input;
end if;
end process;
process (clk2) is
begin
if rising_edge(clk2) then
datao <= datai & '1';
Output_A <= datao(0);
Output_B <= datai;
end if;
end process;
end architecture;
SDC constraints:
#**************************************************************
# Create Clock
#**************************************************************
create_clock -name {clk2} -period 10.000 -waveform { 0.000 5.000 } [get_ports {clk2}]
create_clock -name {clk1} -period 10.000 -waveform { 0.000 5.000 } [get_ports {clk1}]
#**************************************************************
# Set Clock Groups
#**************************************************************
set_clock_groups -asynchronous \
-group [get_clocks {clk1}] \
-group [get_clocks {clk2}]
Problem observed:
A 1-bit synchronizer is needed in each of the paths driving outputs A and B. However, only the missing 1-bit synchronizer in output B is detected.