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