2015-10-27 57 views
1

我在VHDL一個初學者,在做與用戶定義類型「距離」的一些操作所申報如下:操作使用用戶定義的物理類型VHDL

entity metric is 
type DISTANCE is range 0 to 1000000000 
units 
nm; 
mm = 10E6 nm; 
cm = 10 mm; 
m = 100 cm; 
km = 10E3 m; 
inch = 25400000 nm; 
foot = 12 inch; 
yard = 3 foot; 
mile = 1760 yard; 
end units; 
end metric; 

在架構,我宣佈距離類型的變量並嘗試了一些整數值的操作。

architecture test of metric is 
begin 
    P1 : process 
    variable res1, res2 : DISTANCE ; 
    begin 
    res1 := 10 * (10 nm); 
    res2 := 10/(10 nm); 
    wait; 
    end process; 
end test; 

代碼編譯爲RES1但RES2發生下列錯誤 -

在變量賦值

「/」

爲右側(綴表達式)否可行條目中綴運算符

任何人都可以解釋爲什麼乘法工作,但在上述情況下分裂失敗? 在此先感謝。

+0

這裏真的沒有什麼可以自動完成的。單位是'1 /距離'會是什麼? –

+0

@jeff:邏輯上,波數!如果OP想要這個工作,他可以​​聲明波數類型並且超載'/'操作符......或者目前,'10 nm/10'應該可以工作......形式上,乘法是可交換的,但是除法不是。 –

回答

1

如果你是IEEE標準1076年至2008年的樣子,9.2.7乘法運算符:

Multiplying Operators

你會比用相同的左操作數等物理類型發現師物理類型不是預定義的。

您需要定義一個「/」函數來爲您的物理類型重載除法運算符,或者您需要將左手錶達式轉換爲物理類型。還要注意結果是一個描述物理類型的兩個操作數之間關係的整數。