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

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

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

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

04841aae83109e0ff6cffcd9dfa3477a.png

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

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

6f1e75f3571082d048e552cd31fa8df7.png

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参数在函数内声明。

4d5e9c2ff2a90c0568213035189441f2.png

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

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

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

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

2a26fa82afd9311fe926d6f92da5d589.png

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

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

abdad9dd86145f830e6463e2181e8753.png

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

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

c318d6bb132272ad1ac9d25a2483f12a.png

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

往期精彩

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

21ac523b66aac6ea5d7c4d9456a6f1db.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值