2013-01-25 161 views
1

我有以下代碼:VHDL如果語句的語法錯誤

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陳述或組合區域(即在過程之外)中的「with ... select」。

但是,如果你創建了16七段顯示值的常量數組,並簡單地索引的數組,你將有更加美好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