VHDL : Inout 포트에서 값을 설정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1510633

  •  19-09-2019
  •  | 
  •  

문제

나는 테스트를 시도하고있다 VHDL 구성 요소이지만,이 포트를 얻을 수는 없습니다. 포트를 '1'에서 '-'로 모든 것으로 설정하려고 시도했지만 여전히 시뮬레이션에서 'u'로 나타납니다. 어떤 문제가있을 수 있습니까?

도움이 되었습니까?

해결책

Inout 포트 (예 : RAM)의 경우 :

....
port(
    data    :inout std_logic_vector (DATA_WIDTH-1 downto 0);
....
-- Memory Write Block
-- Write Operation : When we = 1, cs = 1
  MEM_WRITE: process (address, cs, we, data, address_1, cs_1, we_1, data_1) begin
    if (cs = '1' and we = '1') then
       mem(conv_integer(address)) <= data;
    end if;
  end process;

 -- Tri-State Buffer control
  data <= data_out when (cs = '1' and oe = '1' and we = '0') else (others=>'Z');

 -- Memory Read Block
  MEM_READ: process (address, cs, we, oe, mem) begin
    if (cs = '1' and we = '0' and oe = '1') then
      data_out <= mem(conv_integer(address));
    else
      data_out <= (others=>'0');
    end if;
  end process;

조건으로 데이터 읽기 및 쓰기를 할당합니다. 데이터를 읽으면 다른 모듈에 의해 구동됩니다. 그것이 쓸 때, 그것은 내부에 의해 구동됩니다.

  • 다른 모듈 (신호에서와 같이)에 의해 구동되면 예를 들어 모든 'z'와 벡터 "0101010"사이에서 데이터가 해결됩니다. 데이터는 "0101010"으로 구동됩니다.
  • 다른 경우 : 다른 모듈은 모든 "z"씩 데이터를 구동해야한다면 내부 신호는 그 값을 데이터에 넣을 수 있습니다.

다른 팁

'z'에 명시적인 드라이버가 필요합니다.

포트를 '1'에서 '-'로 모든 것으로 설정하려고 시도했지만 여전히 시뮬레이션에서 'u'로 나타납니다.

Inout 포트를 할당/읽기에 대한 좋은 답변을 따로 따로, 위의 인용 된 텍스트는 두 개의 별도 장소에서 할당되는 포트와 관련 될 수 있으므로 'U'로 해결됩니다.

inout 포트를 사용할 때, 나는 vhdl 문이 iobuf를 추론하기 위해 합성이 너무 복잡 할 때 iobuf 대신 OBUF를 인스턴스화하는 합성 도구에 물렸다. 다음은 나에게 물린 상황의 단순화 된 예 (모든 신호가 STD_Logic이라고 가정)입니다.

data_a <= '1' when assert_a = '1' else '0';
data_b <= 'Z' when float_b = '1' else '0';  
data_inout <= data_a when choose_a = '1' else data_b;

내 실패 사례에서 합성은 data_inout에 대한 OBUF를 생성했습니다. iobuf가 선택 _a = '0'및 float_b = '1'의 경우를 처리 할 것으로 예상했을 것입니다. 왜냐하면 'z'를 data_inout에 할당해야했기 때문입니다. 그러나 그것이 내가 얻은 것은 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top