设计一个4选1的数据选择器,输入信号为A, B, C, D , 输出信号为F, 地址选择信号为SEL。

任务与函数结构

verilog HDL语言引入任务与函数两种模块化程序的描述方式,使之便于理解和调试另外简化了程序的结构,增强了代码的易读性。任务和函数一般用于行为建模,编写验证程序(Test Bench)

1.任务

  任务(task)类似于一般的编程语言中的过程(process),它可以从程序的不同位置执行共同的代码,通常把需要共用的代码段定义为任务,然后通过调用任务来使用它。在任务中可以包含时序控制等,还可以调用其他的任务和函数。任务的使用包括任务定义

和任务调用。

  在进行任务定义时,必须注意以下几点:

 (1)任务定义结构不能出现在任何一个过程块的内部;

 (2)和模块定义不一样,在第一行"task"语句中不能列出端口名列表;

  (3)一个任务可以没有输入输出端口;

  (4)一个任务可以没有返回值,也可以通过输出端口或双向端口返回一个或多个值;

  (5)除任务参数外,任务还能够引用说明任务所在的模块中定义的任何变量。

任务调用:

  一个任务由任务调用语句调用,任务调用语句给出传入任务的参数值和接收结果的变量值,其语法为

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

  在进行任务调用时,必须注意下面几点:

(1)任务调用语句是过程性语句,因此只能出现在always过程块和initial过程块;

(2)任务调用语句中参数列表必须与任务定义时的输入、输出和双向端口参数说明的顺序相匹配;

(3)进行任务调用时,参数要按值传递,而不能按地址传递(这一点与其他高级语言不同);

(4)由于任务调用语句是过程性语句,因此任务调用的输入与输出参数必须是寄存器类型;

(5)一个任务中可以直接访问上一级调用模块中的任何寄存器;

(6)可以使用disable语句来中断任务的执行,在任务被中断后,程序流程将返回到调用任务的地方继续往下执行。

2.函数

  函数(function)同任务一样,也可以在模块的不同位置执行共同的代码。函数与任务的差别在于

(1)函数只能返回一个值,而任务却可以有多个或者没有返回值;

(2)一个任务块可以包含时间控制结构,而函数块则没有,也就是说函数块从零仿真时刻开始执行,结束后立即返回(相当于组合逻辑);

(3)一个任务块就可以有也可以没有输入和输出,而函数必须有一个输入,而没有任何输出:

(4)任务块的触发是通过一条语句来实现,而函数块只有当它在一个表达式中被引用时才会生效

(5)在一个函数内可以调用其他的函数,但是不可以调用其他任务,而在任务中则可以调用其他的函数和任务。

posted @ 2014-02-14 19:35  Only-Love  阅读(7427)  评论(0编辑  收藏  举报