2015-01-29 3 views
0

포트 맵에서 ... else statment를 사용할 때 어떤 것도 찾을 수 없습니다. 그것은 올바른 양식이 될 것 같지만 컴파일 할 때 다음과 같은 오류가 표시됩니다.when using else ... 포트 맵에있는 statment

오류 (10500) : "when"에 가까운 Device.vhd (68)에서 VHDL 구문 오류가 발생했습니다. expecting ")"또는 ","

아마 어리석은 실수 일 테니까요. 나는 아직도 VHDL에있어서 신선합니다. 이것에 대한 힌트를 좀 주시겠습니까? 나는 어떤 도움에 대해서도 매우 감사 할 것입니다. 다음은 코드와 SDA 포트는 입출력 유형 : 하나

com : I2C_com port map (

      reset_en => reset_en, 
      I2C_clock_port => SCL, 
      clk => clk, 
      sda_read_data <= SDA when RD ='1' else 'Z', 
      sda_write_data => SDA 
     ); 
+1

중간 신호를 사용하십시오. –

+0

@Brian Drummond 감사합니다! –

답변

2

, 잘못된 방향에 화살표가. 포트 연결의 경우 입력 또는 출력 포트에 관계없이 항상 =>을 사용하십시오.

둘째, 당신은 중간 신호를 사용하거나 어댑터를 사용하거나 필요 http://www.sigasi.com/content/signal-assignments-vhdl-withselect-whenelse-and-case

다음 때/다른 구조가 a?x:y 같은 표현 그것은 때/다른 신호 할당에 특정 C로되어 있지 않습니다 기능 :

com : I2C_com port map(
     reset_en  => reset_en, 
     I2C_clock_port => SCL, 
     clk   => clk, 
     sda_read_data => SDA_or_z, 
     sda_write_data => SDA 
    ); 
SDA_or_z <= SDA when RD = '1' else 'Z'; 
또는

:

com : I2C_com port map(
     reset_en  => reset_en, 
     I2C_clock_port => SCL, 
     clk   => clk, 
     sda_read_data => myFunction(SDA,RD), 
     sda_write_data => SDA 
    ); 
+0

당신의 도움에 감사드립니다! –

0

하나 개의 신호를 임시 < = SDA RD = '1'그렇지 않으면 'Z'가지고; 그런 다음 sda_read_data를 지정하십시오. < = 임시;