task与function

task和function主要是有助于代码的可重用性,都可以在module-endmodule之外声明

1.function

        1.1.function逻辑的综合

                function:一个只有1个wire型输出值、全是组合逻辑的函数,且函数名即输出信号名,小括号中按顺序例化输入信号。

                由于function中没有任何时序结构,function只能综合出组合逻辑。

task与function_第1张图片

        1.2.function的使用

                ①因function全为组合逻辑,即if-else、case等分支应定义完全,避免生成latch。

                ②fucntion只用于综合成组合逻辑。但是,fucntion的最终结果可以用作D触发器的输入。

                ③fucntion不应包括延迟(#)或事件控制(@,wait)语句。

                ④fucntion可以调用其他fucntion,但不能调用task。

                ⑤fucntion在调用时会返回一个值。

                ⑥fucntion内声明的parameters,作用范围仅在本地,并且不能在fucntion之外使用。

2.task

        2.1.task逻辑的综合

                虽然在task中可以有@等时序控制结构中,它仅适用于仿真。综合工具会忽略所有task中的时序结构。因此,如果task中存在时序控制结构,可能会存在仿真和综合不匹配的现象。

                因此,在可综合verilog中一般只会使用task综合基本的组合逻辑,在testbench中调用带有时序控制结构的task具有较好的通用性。

                以下是组合逻辑task的示例,即comb_task,执行输入in1的位或(OR)。 注意int_out1和int_out2的声明是reg型,因为task的输出只能通过reg而不是wire接收:

task与function_第2张图片

        2.2.task和module的区别

                ①不能在task中例化module,可以在module中调用task。

                ②Task中的逻辑不能够在floorplan中定义为block进行pre_place布局,只是sea-of-gates;而Module可以在floorplan中定义为block,进行pre_place。

你可能感兴趣的:(#,Verilog,HDL,task,function)