問題
我正在寫一個函數轉換爲測試臺的一些值的包。我想檢查輸出是否超過最大值,如果是,我想將其設置爲最大值。我累了以下內容:VHDL:使用WHEN - ELSE語句與變量
-- vec_in: 0...1023, returns -14...23.5 dB
function conv_dac602_scale (
vec_in : std_logic_vector)
return real is
variable val_in, dB : real := 0.0;
constant lower : real := -14.0;
constant upper : real := 23.5;
begin -- function conv_dac602_scale
val_in := real(to_integer(unsigned(vec_in)));
dB := (lower+(val_in*((upper-lower)/1024.0)));
return dB when dB <= upper else upper; -- this is the important line! (129)
end function conv_dac602_scale;
當我嘗試編譯此我得到了以下錯誤:
** Error: myfile.vhd(129): near "when": expecting ';'
** Error: myfile.vhd(260): VHDL Compiler exiting
然後我第一次嘗試將其分配給一個變量r:
...
r := dB when dB <= upper else upper; -- this is the important line! (129)
return r;
end function conv_dac602_scale;
這並沒有改變結果。我知道我可以使用簡單的if/else
子句,但我的問題是爲什麼我不能使用when
子句。
系統
的ModelSim SE 10.0b,VHDL 2008
採用VHDL-2008,併發任務的順序過程中不允許。問題可能是ModelSim 10.0b不支持這種構造(我沒有10.0b方便,但10.1編譯它就好了)。 – fru1tbat
不知道。我必須查找它,聽起來很整齊,以便用於某些情況:) – MatthiasB
@ fru1tbat我必須用aldec來嘗試它。 –