verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)

1、function中的逻辑被综合成了什么?

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

例如,以下function有2个输入信号和一个控制信号,输出算术运算结果。

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第1张图片

2、Verilog function有哪些重要的注意事项? 

2.1  每次调用function时,局部变量和返回值都被赋值,否则将导致形成锁存器。 例如,以下示例中,if条件语句没有else语句。也就是说,如果sel是false,该function将返回其先前调用的值,就好像结果被锁存住了。

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第2张图片

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

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

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

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

2.6 fucntion内声明的parameters,作用范围仅在本地,并且不能在fucntion之外使用。 在以下示例中,width参数在函数之外声明,double_width参数在函数内声明。

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第3张图片

3、task中的逻辑被综合成了什么? 

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

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

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

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第4张图片

4、使用task和module实现可重用逻辑有什么区别?

下表总结了两种方法之间的差异:

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第5张图片

5、task和fucntion是否可以在module-endmodule之外声明么?

可以。 在SystemVerilog中,可以在module-endmodule外声明task和function。在Verilog-1995或Verilog-2001中是不可以的,会产生编译错误。例如,以下代码中,在module-endmodule范围之外声明了task modify_value。

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第6张图片

同样,在使用SystemVerilog中,function-endfunction也可以在同一文件中的module-endmodule范围之外声明。

往期精彩

Verilog设计与逻辑综合实例解析(含代码)(赋值)

verilog实例_Verilog设计与逻辑综合实例解析(含代码)(Tasks &Functions)_第7张图片

你可能感兴趣的:(verilog实例)