task 可以像function一樣有input/output,也能放會消耗simulation的時間的statement,例如 @, posedge 等等
下面是一些task放在local/global的範例,還有一些不同格式的寫法
Example:
1 | // global task |
Output:
# run 10000
# time:1, a:1, b:2, sum:3
# time:1, sum1 output:3
# time:2, a:3, b:4, sum:7
# time:2, sum2 output:7
# time:3, a:5, b:6, sum:11
# time:3, sum3 output:11
# time:4, a:7, b:8, sum:15
# time:4, sum4 output:15
# quit -f
Static Task 和 Automatic Task
Task預設就是static task,但如果task裡面有宣告變數的話,那task前面就要加Automatic,這樣在每次使用這個task的時候,simulation就會重新allocate一塊memory來跑這個新的task。
或者是要把變數宣告成Automatic,這樣每次initial這個變數的時候simulation就會重新allocate一塊memory給這個變數使用。
Example:
1 | module tb(); |
Output
# run 10000
# time:0, i:1
# time:0, i:1
# time:0, i:1
# time:0, i:1
# time:0, i:1
# time:0, i:1
# quit -f
Disable Task/ Disable Block in a Task
Task還可以用 disable 來disable這個task執行,也可以取消掉一個task的某個block
Example:
1 | module tb; |
Output
# t:0 Start disable task block
# t:0 BLOCK_1 start
# t:5 End disable task block
# t:5 Start disable task
# t:15 BLOCK_2 start
# t:20 End disable task
# quit -f
#5的時候用disable display.BLOCK_1把這個block的task disable掉
#20的時候用disable display把整個task disable掉