2016-06-21 9 views
3

아래는 IF 블록을 사용하는 VHDL의 코드입니다. 마지막 "elsif"에는 "my_choice"의 값이 "ch4"에 할당됩니다. 그런 다음 조건이 충족되지 않으므로 "else"블록이 실행됩니다. 그러나 "my_choice"가 높은 임피던스 (또는 다른 것)처럼 (ch1, ch2, ch3, ch4) 이외의 다른 값을 얻는 경우가 있습니까? 그렇다면 어떻게 피할 수 있습니까? 이 할당은 코드 연산을 변경할 수 있기 때문에. my_choice 이후"if"블록이 vhdl에서 주어진 선택 사항을 벗어날 가능성이 있습니까?

entity entity_name 
    port 
     ..... 
     ..... 
    end entity_name; 

    architecture bhvr of entity_name 

    type choices is (ch1, ch2, ch3, ch4); 
    signal my_choice,next_choice : choices; 

    begin 
     process(clk, reset) 
     begin 
      if reset='1' tehn 
       --------reset 
      else 
        my_choice<=next_choice; 
      end if; 
     end process; 

     process(my_choice) 
     begin 
      if my_choice = ch1 then 
       next_choice <= ch2; 
      elsif my_choice = ch2 then 
       next_choice <= ch3; 
      elsif my_choice = ch3 then 
       next_choice <= ch4; 
      else ------------------------------------coming to ch4 
       ---- task for ch4 
     end process;    
    end architecture; 

답변

2

my_choice 항상 적어도 시뮬레이션에서, 이들 4 개 개의 값 중 하나를 가질 것이다 값 'CH1' ', CH2', 'CH3', 'CH4'로 입력 열거 choices을 타입 .

하드웨어에서 사용 가능한 값 공간은 구현에 따라 다릅니다 (예 : 값이 핫 또는 바이너리로 이루어진 경우). 시작 후 리셋은 값이 4 개의 값 중 하나에 잘 정의되어 있는지 확인하는 좋은 방법이며, 회로가 타이밍 요구 사항을 준수하면 값이 해당 값의 정의 된 값 공간에 머물러있게됩니다. 4 값.

+0

도움 주셔서 감사합니다. Morten Zilmer. – Raviteja

+0

@Raviteja :이 답변으로 질문이 해결되면 다른 사용자가 시간의 우선 순위를 지정할 수 있도록 승인 ("V"표시 왼쪽)을 클릭하는 것이 좋습니다. –