集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1399|回复: 1

Verilog HDL模块化设计

[复制链接]
fpga_feixiang 发表于 2018-8-30 11:22:07 | 显示全部楼层 |阅读模式
在高级编程语言中,为了避免在程序中多次重复编写特定的例行程序,可以使用子程序和函数。Verilog语言也可提供类似的能力,即Verilog的任务和函数。它们可以把大型设计模块化,从而使Verilog代码更加容易理解。

    Verilog任务

    任务用关键字task声明,其中包含若干条语句,最后以endtask结尾。这样的语句模块就称为任务。任务必须包含在调用该任务的模块中。它可以有输入和输出端口。任务的端口并不是调用该任务模块的端口,而是用来将它和调用它的模块连接的端口。任务端口仅仅用来在模块和任务之间传递数据。

    例:下图中,我们列出了16选1多路选择器的Verilog代码,该代码实例引用了五个4选1多路选择器电路,这个4选1多路选择器电路由一个独立的名为mux4to1的模块提供。16选1多路选择器也可以使用任务来描述,如图所示。注意观察关键的不同点。任务mux4to1包含在模块mux16to1中。在always模块中通过case语句来调用任务。任务的输出必须是一个变量,因此g是reg型。



[/v1.png]

    Verilog函数

    函数用关键字function声明,包含若干条语句,最后以关键字endfunction结尾。函数必须至少有一个输入,而且只返回一个值到函数被调用的位置。

    下图说明了如何使用函数来完成上图的代码。Verilog编译器实质上在每一个调用函数的地方插入函数。因此,条件分支语句

0:f=mux4to1(W[0:3], S16[1:0]);

变成

0:case(S16[1:0])

    0: f = W[0];

    1: f = W[1];

    2: f = W[2];

    3: f = W[3];

endcase

函数使mux16to1模块变得紧凑和易读。

[/v2.png]



    Verilog函数可以调用另外一个函数,但不能调用另外一个Verilog任务。而任务可以调用另一额任务也可以调用函数。在调用某任务的always块后,才定义该任务。而在调用某函数的always块之前就已经定义了该任务。对任务和函数来说,这两种情况Verilog标准都是允许的。但是,有些CAD工具要求先定义好函数,才能调用函数。
大鹏 发表于 2022-4-21 13:00:56 | 显示全部楼层
Verilog HDL模块化设计
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-1 13:32 , Processed in 0.057760 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表