鄰水網(wǎng)站建設友情鏈接檢測659292
task和function主要是有助于代碼的可重用性,都可以在module-endmodule之外聲明。
1.function
? ? ? ? 1.1.function邏輯的綜合
????????????????function:一個只有1個wire型輸出值、全是組合邏輯的函數(shù),且函數(shù)名即輸出信號名,小括號中按順序例化輸入信號。
????????????????由于function中沒有任何時序結構,function只能綜合出組合邏輯。
? ? ? ? 1.2.function的使用
? ? ? ? ? ? ? ? ①因function全為組合邏輯,即if-else、case等分支應定義完全,避免生成latch。
????????????????②fucntion只用于綜合成組合邏輯。但是,fucntion的最終結果可以用作D觸發(fā)器的輸入。
? ? ? ? ? ? ? ? ③fucntion不應包括延遲(#)或事件控制(@,wait)語句。
? ? ? ? ? ? ? ? ④fucntion可以調用其他fucntion,但不能調用task。
? ? ? ? ? ? ? ? ⑤fucntion在調用時會返回一個值。
? ? ? ? ? ? ? ? ⑥fucntion內(nèi)聲明的parameters,作用范圍僅在本地,并且不能在fucntion之外使用。
2.task
? ? ? ? 2.1.task邏輯的綜合
????????????????雖然在task中可以有@等時序控制結構中,它僅適用于仿真。綜合工具會忽略所有task中的時序結構。因此,如果task中存在時序控制結構,可能會存在仿真和綜合不匹配的現(xiàn)象。
????????????????因此,在可綜合verilog中一般只會使用task綜合基本的組合邏輯,在testbench中調用帶有時序控制結構的task具有較好的通用性。
????????????????以下是組合邏輯task的示例,即comb_task,執(zhí)行輸入in1的位或(OR)。 注意int_out1和int_out2的聲明是reg型,因為task的輸出只能通過reg而不是wire接收:
? ? ? ? 2.2.task和module的區(qū)別
? ? ? ? ? ? ? ? ①不能在task中例化module,可以在module中調用task。
? ? ? ? ? ? ? ? ②Task中的邏輯不能夠在floorplan中定義為block進行pre_place布局,只是sea-of-gates;而Module可以在floorplan中定義為block,進行pre_place。