0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

verilog模块的调用、任务和函数

FPGA设计论坛 ? 来源:FPGA设计论坛 ? 2025-05-03 10:29 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

模块的调用(上层模块对底层模块的调用)

在做模块划分时,通常会出现这种情形,某个大的模块中包含了一个或多个功能子模块,verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的

调用模块实例化的一般形式为:

<模块名><参数列表><实例名>(<端口列表>);

其中参数列表是传递到子模块的参数值,参数传递的典型应用是定义门级时延。

信号端口可以通过位置或名称关联,但是关联方式不能够混合使用

名称关联&位置关联

定义模块:module Design(端口1,端口2,端口3...)

位置关联:

引用时,严格按照模块定义的端口顺序来连接,不用标明元模型定义时规定的端口名。

Designu1(u1的端口1,u1的端口2,u1的端口3)

名称关联:

引用时用“.”符号,标明原模型定义时规定的端口名:

Designu2(.端口1(u1的端口1), .端口2(u1的端口2), .端口3(u1的端口3) )

eg:

moduleand(C,A,B)input A,B;output C; 位置相关andA1(T3,A,B)名称相关andA2(   .C(T3),   .A(A),   .B(B))

模块的调用---参数传递

//子模块moduleDecode(A,F);  parameterwidth =1,polarity=1;endmodule//顶层模块moudle top;  wire[3:0] A4;  wire[4:0] A5;  wire[15:0] F16;  wire[31:0] F32;   Decode#(4,0) D1(A4,F16);endmodule

ps:在top模块中引用Decode实例时,可通过参数的传递来改变定义时已规定的参数值,即通过

#(4,0),实例D1实际引用的是参数width和polarity分别为4与0时的Decode模块

传递参数的另一种方法

module_name#(.parametername(para_value),.parametername(para_value))inst_name(port_map) 实际就为: Decode#(.width(4),.polarity(0))D1(A4,F16)

注意事项

位选择,如.C(D[0]),C端口接到了D信号的第0bit位;

部分选择,如.Bus(Din[5:4])

上述类型的合并,如.Addr({A1,A2[1:0]})

悬空端口的处理:

在实例化中,可能有些管脚没用到,可在映射中留白处理

DFF d1(.Q(QS),.Qbar(),.Data(D),.Preset(),//该管脚悬空.clock(CK); )

PS:输入管脚悬空,该管脚输入为高阻Z,输出管脚悬空,该管脚废弃不用

任务和函数

task和function语句分别用来由用户定义任务和函数;

任务和函数往往时大的程序模块中在不同地点多次用到的相同的程序段

利用任务和函数可将一个很大的程序模块分解为许多较小的任务和函数,便于理解和调试

任务定义

task<任务名>;   端口及数据类型声明语句;   其他语句;endtask

任务调用

<任务名>(端口1,端口2,......);

task语句

任务的定义与调用必须在一个module模块内

任务被调用时,需列出端口名列表,且必须与任务定义中的I/0变量一一对应

一个任务可以调用其他任务和函数

//任务定义task my_task;   input a,b;  inoutc;//一个三态门,由一个开关控制这个门是输入还是输出  output d,e;   ......   <语句>//执行任务工作相应的语句  .....   c = foo1;   d = foo2;   e = foo3;//对任务变量进行赋值endtask//任务调用my_task(v,w,x,y,z)//为位置关联,v对应a,w对应b,c对应x,y对应d,z对应e

0f532724-218a-11f0-9310-92fbcf53809c.png

函数function(可以综合)

函数的目的是通过返回一个用于某表达式的值,来响应输入信号(适于对不同变量采取同一运算的操作)

函数在模块内部定义,通常在本模块中调用,也能根据按模块层次分级命名的函数名从其他模块调用。而任务只能在同一模块内定义与调用

function<返回值位宽或类型说明>函数名;//如缺少位宽定义,则默认为一 端口声明; 局部变量定义; 其他语句;endfunction

函数的调用 <函数名>(<表达式><表达式>)

注:函数的调用是通过将函数作为调用函数的表达式中的操作数来实现的

函数规则

函数不能包含任何时间控制的语句,如#,@,wait,poesdge,negedege

函数不能调用任务,因为任务可以包含时间控制语句,但是可以调用其他函数

函数应该至少有一个输入

函数不能有非阻塞性的赋值或force....release或assign...deassign

函数不能有任何触发器

函数不能有output或inout

函数的声明:

function[7:0] sum;  input[7:0] a, b;  begin    sum = a + b;  endendfunctionfunction[7:0] sum (input[7:0] a, b);  begin    sum = a + b;  endendfunction———————————————— 版权声明:本文为CSDN博主「李锐博恩」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Reborn_Lee/article/details/107447734

函数的调用:

reg [7:0]result; reg [7:0] a, b;initialbegin  a=4;   b=5;   #10result=sum(a, b);end

利用一个函数对一个8位二进制数中为0的位进行计数

//count the numbers of 0 in rega[7:0]modulecount_0 (numbers,rega);  output[7:0] numbers;  input[7:0] rega;  function[7:0] get_n_of_0;//define a function   input[7:0] x;    reg[7:0] count;    integeri;      begin        count =0;        for(i=0;i<=7;i++) ? ? ? ? ? ? ? ? ? ??if(x[i] ==?1'b0) ? ? ? ? ? ? ? ? ? ? ? ? ?count = count +1; ? ? ? ? ? ? ? ? ? ? get_n_of_0 = count;?//函数名就相当于输出变量;? ? ? ? ? ? ? ??end; ? ??endfunctionassign?number = get_n_of_0(rega);endmodule

ps:函数名就相当于输出变量

函数和任务

0f6a2af0-218a-11f0-9310-92fbcf53809c.png

0f83d504-218a-11f0-9310-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2790

    浏览量

    50679
  • Verilog
    +关注

    关注

    29

    文章

    1367

    浏览量

    112417
  • 函数
    +关注

    关注

    3

    文章

    4384

    浏览量

    65121

原文标题:verilog---模块的调用,任务和函数

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何查看及更改函数/函数块的调用环境

    模块化设计的思想是把一些相似的功能(比如电机控制、阀控制)设计成函数函数块,这样就可以反复调用。其优点是:使程序架构更加清晰,避免重复编写相似功能的代码。不过可能会产生一个疑惑:既然
    的头像 发表于 11-17 09:08 ?1534次阅读
    如何查看及更改<b class='flag-5'>函数</b>/<b class='flag-5'>函数</b>块的<b class='flag-5'>调用</b>环境

    如何从任务内部调用函数调用osDelay?

    调用函数,延迟是 osDelay(),它会工作吗,就像从任务本身调用 osDelay 的正常行为(允许其他任务在延迟期间运行)。
    发表于 02-09 08:49

    verilog实现定时器函数

    使用Verilog描述硬件的基本设计单元是模块(module)。构建复杂的电子电路,主要是通过模块的相互连接调用来实现的。模块被包含在关键字
    发表于 12-08 17:20 ?1w次阅读

    Linux内核模块函数调用正确方法

    模块之间发生调用关系是常有的事情,下面以两个模块A、B,B使用A模块提供的函数为例,讲解正确使用的方法。
    发表于 04-28 17:00 ?2540次阅读

    探讨VHDL和Verilog模块互相调用的问题

    1、 关于如何在VHDL模块调用一个Verilog模块 在VHDL模块声明一个要与调用
    的头像 发表于 04-30 14:06 ?1.1w次阅读
    探讨VHDL和<b class='flag-5'>Verilog</b><b class='flag-5'>模块</b>互相<b class='flag-5'>调用</b>的问题

    Verilog HDL语言中任务函数的比较

    其中,返回值的类型和位宽是可选项,如果缺省会返回一位寄存器类型数据。Verilog HDL认为函数的定义隐式地声明了与函数同名的寄存器。函数的定义把
    的头像 发表于 07-02 10:24 ?2680次阅读

    Verilog数字系统设计——任务函数二(系统任务readmemb或readmemh)

    Verilog数字系统设计十任务函数实验2文章目录Verilog数字系统设计十前言一、Verilog系统
    发表于 12-05 19:06 ?7次下载
    <b class='flag-5'>Verilog</b>数字系统设计——<b class='flag-5'>任务</b>和<b class='flag-5'>函数</b>二(系统<b class='flag-5'>任务</b>readmemb或readmemh)

    Verilog设计中函数任务的作用分析

    任务函数Verilog中用于描述常用的功能行为。与其在不同的地方复制相同的代码,不如根据需求使用函数任务,这是一种良好且常见的做法。为
    的头像 发表于 03-15 11:01 ?2078次阅读

    RTL建模中的函数任务讨论

    函数任务可以在使用它们的模块或接口中定义。定义可以出现在调用函数任务的语句之前或之后完成,
    的头像 发表于 11-09 09:26 ?1486次阅读

    Verilog任务函数的区别

    函数一样,任务(task)可以用来描述共同的代码段,并在模块内任意位置被调用,让代码更加的直观易读。
    的头像 发表于 06-01 16:38 ?1955次阅读
    <b class='flag-5'>Verilog</b><b class='flag-5'>任务</b>与<b class='flag-5'>函数</b>的区别

    FreeRTOS任务通知通用发送函数

    发送任务通知 任务通知通用发送函数 任务任务通知发送函数:xTaskNotify()、xTas
    的头像 发表于 07-30 11:43 ?1240次阅读
    FreeRTOS<b class='flag-5'>任务</b>通知通用发送<b class='flag-5'>函数</b>

    verilog函数任务对比

    verilog中,函数任务均用来描述共同的代码段,并且在模式内任意位置被调用,提高代码效率,让代码更加的直观,提高代码可读性。但是在实际使用的过程中,
    的头像 发表于 02-12 18:43 ?1202次阅读

    verilog function函数的用法

    Verilog 是一种硬件描述语言 (HDL),主要用于描述数字电子电路的行为和结构。在 Verilog 中,函数 (Function) 是一种用于执行特定任务并返回一个值的可重用代码
    的头像 发表于 02-22 15:49 ?7373次阅读

    verilog如何调用其他module

    第一部分:简介 1.1 什么是Verilog模块? 在Verilog中,模块是其设计层次结构的基本单元。模块是一个用于实现特定功能的单独的硬
    的头像 发表于 02-22 15:56 ?7687次阅读

    verilog调用模块端口对应方式

    Verilog中的模块端口对应方式,并提供示例代码和详细解释,以帮助读者更好地理解和应用。 首先,我们来了解一下Verilog中的模块模块
    的头像 发表于 02-23 10:20 ?2555次阅读