2015-06-11 52 views
2

這行代碼讓我感到困惑。我不知道它是如何工作的,我知道=><=正在分配符號,但爲什麼2個分配給同一個東西?這是什麼意思,當你有:案件狀態是什麼時候vale1 =>國家<= value2在vhdl?

+0

不,'=>'不是「分配符號'(賦值由信號對象的<='表示,而變量賦值或初始值由':='表示)。 – user1155120

+0

哦:)。 Thnx,那麼=>是什麼意思? – CosnotraLF

+0

我怎麼喜歡你的評論,因爲那是一個很好的答案 – CosnotraLF

回答

3

正如David所指出的,=>不是一個賦值符號。

這是一個映射符號或關聯。它在整個VHDL中的使用是一致的 - 它總是用於將某些東西(通常是一個名稱)與其他東西(通常是一個值)相關聯。

這裏,在case語句中,它用於將case選項when vale1與該狀態的正確操作相關聯,該操作可以是任何有效的語句順序。在這種情況下,state <= value2;

您可能會發現它更清晰的寫

case state is 
    when vale1 => 
     state <= value2; 
    when ... 
     ... 
    when others => 
     state <= idle; 
end case; 

這使得邏輯結構不是試圖做太多的線條更清晰。

你會看到它的其他地方是在參數列表中。鑑於有幾個參數(其中一些是可選的),你可能會看到錯誤蔓延到在價值得到了錯誤的參數相關聯的其他語言程序的功能...

setPixelColour (100, 50, 17, 0.5); -- not obvious, prone to mistakes 

你可以更清楚這是怎麼回事,並避免錯誤的每個參數與它的名字相關聯:

setPixelColour (x => 100, 
       y => 50, 
       alpha => 17, 
       opacity => 0.5); -- obvious what you're trying to do 

同樣是端口映射,你在哪裏信號連接到一個組件的端口也是如此。

正如David所說,另一個用途是創建聚合,例如記錄或數組。

如果你定義員工的記錄,你可能會再宣佈

Boss : Employee := (Name => "Richard Branson", Job => CEO, Salary => 999000); 

或者你可以使用聚合創建磁盤陣列:

type Month is (Jan, Feb, Mar, ... Dec); -- we'll index the array with an enumeration 
Days : array (Month range Jan to Dec) of Natural := (
    Feb => 28, 
    Apr => 30, 
    Jun => 30, 
    Sep => 30, 
    Nov => 30, 
    others => 31); 
+0

也在聚合表達式。 '=>'用於*正式*關聯(而不是*位置*關聯。 – user1155120

+0

謝謝你們。而且因爲我是這個網站的noob,我甚至不知道如何將它標記爲最佳,而我不能投票,因爲我需要15個聲望。但感謝,高真的回答了我的問題! – CosnotraLF