2014-12-10 1 views
1

나는 if의 대안을 쓰고 싶다. 다음 if 문이있다.VHDL - IF 대체

if val1(1)&val1(0) < val2(1)&val2(0) then 
      r:="10"; 
    else 
      if val1(1)&val1(0) = val2(1)&val2(0) then 
       r:="00"; 
      else 
       r:="01"; 
      end if; 
    end if; 

그리고 다음과 같이 변경하고 싶습니다.

s:=((data1(9)&data1(8)) < (data2(9)&data2(8)))?"01":(((data1(9)&data1(8)) = (data2(9)&data2(8)))?"00":"01");

그러나 컴파일러는 오류 다음 날 수 있습니다.

"# Error: COMP96_0015: min: (111, 49): ';' expected."

어떻게 해결할 수 있습니까? 감사.

+0

대체 이유는 무엇입니까? 코딩 스타일? 논리 크기? 다른 것? –

+0

내 대답이 귀하의 질문을 해결 했습니까? – Paebbels

답변

2

질문 : val1 및 val2의 유형은 무엇입니까? val1 < val2

  • 사용 슬라이스 대신 단일 비트 concats : val1(1 downto 0) < val2(1 downto 0)
  • 당신이
    이 인 y <= a when (condition) else b; 문을 사용할 수 VAL1과 val2만큼 만 2 비트가있는 경우

    • : 여기

      은 일부 개선된다 C의 삼항 연산자에 해당하는 VHDL y = cond ? val1 : val2;
    • if-then-else 함수를 정의 할 수 있습니다. LL은 ite :

      function ite(cond : boolean; val1 : std_logic_vector; val2 : std_logic_vector) 
      return std_logic_vector is 
      begin 
          if cond then 
          return val1; 
          else 
          return val2; 
          end if; 
      end function; 
      

      사용법 :

      s := ite((val1(1 downto 0) < val2(1 downto 0)), "10", -- less 
          ite((val1(1 downto 0) = val2(1 downto 0)), "00", -- equal 
                     "01")); -- greater 
      
    • 당신이 비교 함수를 정의 할 수의이 comp를 호출하자

      function comp(val1 : std_logic_vector; val2 : std_logic_vector) 
      return std_logic_vector is 
      begin 
          if (val1 < val2) then 
          return "10"; 
          elsif (val1 = val2) then 
          return "00"; 
          else 
          return "01"; 
          end if; 
      end function 
      

      사용법 :

      s := comp(val1(1 downto 0), val2(1 downto 0));