Data_Out_SDa : process (SCl, IntReset) is
variable IntSDa : std_logic; -- Internal Sda
begin -- process Data_Out_SDa
if IntReset = '0' then -- asynchronous reset (active high)
IntSDa := 'Z';
elsif SCl'event and SCl = '0' then -- falling clock edge
IntSDa := DataBuffer(to_integer(unsigned(AddrReg)));
end if;
SDa <= IntSDa;
end process Data_Out_SDa;
DataBuffer는 121 비트 상수 std_logic_vector입니다. Sda는 출력 포트입니다Synplify는 to_integer를 사용하여 상수 배열에 액세스 할 때 내 레지스터를 정리합니다. (VHDL)
코드가 잘 합성됩니다. 하지만 경고가 발생합니다 (Int16a) 레지스터 IntSda 레지스터 (CL169) 및 경고 레지스터 레지스터 비트 IntSda를 상수 0 (Cl190)으로 변경
어떤 이유인지 합성 도구는 IntSda가 항상 0이 될 것이라고 해석합니다. 참고 IntReset은 입력입니다 . AddrReg는 SC1의 상승 클록 에지에서 값을 변경하는 카운터의 출력입니다. 카운터는 잘 합성되며 FPGA에서 테스트하고 로직 분석기를 사용하여 출력을 보았습니다. 왜 이런 일이 일어나고 있는지에 대한 손실이 있습니다. 나는 보존 물을 둘 수 있었지만 근본 원인을 이해하기위한 간격을 줄이거 나 교체하지 않았다고 생각합니다.
정보가 충분하지 않음을. DataBuffer가 항상 0이면 IntSDa도됩니다. 이 문제의 원인은 코드의 완전히 다른 부분에있을 수 있습니다. – Philippe
DataBuffer는 'Z'와 '0'으로 구성된 상수 121 비트 std_logic_vector입니다. 코드 형식 때문에 거기에 넣지 않았습니다. 상수 DataBuffer : std_logic_vector (0에서 n-1) : = ... 또한 Sda는 출력 포트입니다. – Mayank
'Z'값은 3 가지 상태 로직 (조합)에서만 허용됩니다. 아시다시피, 당신은 등록하려고합니다 : -?. 나는 불가능하다고 생각한다. – Khanh