Verilog 中的函數
Verilog HDL與大多數可編程語言一樣,將使用率很高的代碼,按照軟件工程的思想,寫成函數,這樣,該函數可以被多次調用。
Verilog中函數常用語三種情況:
- 1. 數學算術操作 Mathematical Manipulation
- 2. 組合邏輯 Combinational Logic Sequences
- 3. 數據的轉換 Conversions of Data
Verilog中的函數與C語言中的函數的主要不同之處是:在Verilog中,調用函數時,需要將一個或則多個自變量傳給函數;經過0時間的仿真,將函數的結果返回給調用點。
遵循的規則
函數至少要有一個輸入量和一個輸出量。
函數只能在always或initial塊中調用。
函數不能同時包含always和initial塊,不能含有任何延遲以及時間或事件控制的描述。
函數可以使用本地變量作爲輸入。
函數不能使用wire數據類型。
函數只能用行爲級來描述。
函數中的數據的實際操作限定在begin和end之間。
原文:http://www.see.ed.ac.uk/~gerard/Teach/Verilog/me5cds/me95cab0.html
任務與函數的不同
任務和函數可以按照相同的方式來調用,但是它們之間有很大的不同。
函數 |
任務 |
函數不能調用任務,但是可以調用其他函數。 |
任務既可以調用函數,也可以調用其他任務。 |
執行函數使用的仿真時間爲0。(函數的編譯時間不會增加?) |
執行任務的仿真時間爲0,但是按照需要,仿真時間可能不爲0。 |
函數中,不能含有含有延遲,以及事件和時序控制聲明語句。 |
任務中可以包含任何聲明。 |
調用函數時,必須至少傳遞一個變量。 |
任務可以使用多個或者不使用變量,其變量的數據端口可以是output 、input或 inout。 |
函數只能返回一個值,而且不能使用output和inout描述。 |
任務不能返回任何數值,但是可以通過output、inout傳遞多個值。 |
原文:http://www.see.ed.ac.uk/~gerard/Teach/Verilog/me5cds/me95cab2.html