2013-01-25 4 views
1

나는 다음과 같은 코드를 가지고 :VHDL if 문 구문 오류

process(value_counter, hex5_value) 
    begin 
     if(value_counter <= x"0F") then 
      with value_counter select hex4 <= --error on this line 
      "0111111" when x"00", 
      "0000110" when x"01", 
      "1011011" when x"02", 
      "1001111" when x"03", 
      "1100110" when x"04", 
      "1101101" when x"05", 
      "1111101" when x"06", 
      "0000111" when x"07", 
      "1111111" when x"08", 
      "1101111" when x"09", 
      "1110111" when x"0A", 
      "1111100" when x"0B", 
      "0111001" when x"0C", 
      "1011110" when x"0D", 
      "1111001" when x"0E", 
      "1110001" when x"0F"; 

      hex5<="0111111"; 
     elsif(value_counter > x"0F") then 
      with value_counter mod 10 select hex4 <= 
      "0111111" when x"00", 
      "0000110" when x"01", 
      "1011011" when x"02", 
      "1001111" when x"03", 
      "1100110" when x"04", 
      "1101101" when x"05", 
      "1111101" when x"06", 
      "0000111" when x"07", 
      "1111111" when x"08", 
      "1101111" when x"09", 
      "1110111" when x"0A", 
      "1111100" when x"0B", 
      "0111001" when x"0C", 
      "1011110" when x"0D", 
      "1111001" when x"0E", 
      "1110001" when x"0F"; 

      with hex5_value select hex5 <= 
      "0111111" when x"00", 
      "0000110" when x"01", 
      "1011011" when x"02", 
      "1001111" when x"03", 
      "1100110" when x"04", 
      "1101101" when x"05", 
      "1111101" when x"06", 
      "0000111" when x"07", 
      "1111111" when x"08", 
      "1101111" when x"09", 
      "1110111" when x"0A", 
      "1111100" when x"0B", 
      "0111001" when x"0C", 
      "1011110" when x"0D", 
      "1111001" when x"0E", 
      "1110001" when x"0F"; 
     end if; 
end process; 

그러나 그것을 실행할 때 내가 표시 줄에 다음과 같은 오류가 점점 오전 : Error (10500): VHDL syntax error at xxx near text "with"; expecting "end", or "(", or an identifier ("with" is a reserved keyword), or a sequential statement합니다. 누구나이 문제를 일으키는 원인을 알 수 있으며 합법적으로 어떻게 재 작성 할 수 있습니까?

+0

은 당신이 정말로 "모드 10"와 "모드하지 (16)을하셨습니까을 "? –

답변

2

"올바른"대답은 프로세스 내의 CASE 문이나 조합 영역에서 (즉 프로세스 외부의) "선택 ..."입니다.

하지만 16 7- 세그먼트 디스플레이 값의 일정한 배열을 생성하고, 단순히 배열 색인 경우가 훨씬 좋네요 VHDL있을 것입니다 :

subtype seven_seg is std_logic_vector(6 downto 0); 

constant decode : array 0 to 15 of seven_seg := (
      "0111111", "0000110", "1011011", "1001111", 
      "1100110", "1101101", "1111101", "0000111", 
      "1111111", "1101111", "1110111", "1111100", 
      "0111001", "1011110", "1111001", "1110001"); 

    process(value_counter, hex5_value) 
     begin 
      if value_counter <= x"0F" then 
       hex4 <= decode(to_integer(value_counter(3 downto 0))); 
       hex5 <= decode(0); 
      -- elsif value_counter > x"0F" then 
      -- surely this "elsif" is unnecessary! 
      else 
       hex4 <= decode(to_integer(value_counter(7 downto 4))); 
       hex5 <= decode(to_integer(hex5_value(3 downto 0))); 
      end if; 
    end process; 
0

'with'를 사용한 신호 할당은 동시 진술입니다. 따라서 프로세스 내에서 유효하지 않습니다. '사례'로 해결할 수 있습니다. 그러나 사건이 조용해질 때 타이밍 분석의 결과를 확인하십시오.

자세한 내용은 this link을 참조하십시오.