资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
Verilog 语言中的任何过程模块都从属于以下 4 中结构的说明语句:(1): initial 说明语句;(2): always 说明语句;(3): task 说明语句;(4): function 说明语句;每个 initial 和 always 说明语句在仿真的一开始同时立即开始执行。 1 initial2 3 begin4 5 areg = 0;/ 初始化寄存器6 7 for (index = 0;index 行为语句;endfunction定义 function 时,要注意以下几点:(1): function 定义结构不能出现在任意一个过程块(always 块或者initial 块)的内部;(2): function 定义不能包括有任何时间控制语句,即任何用#,或wait 来标识的语句;(3): 定义 function 时至少要有一个输入参量;(4): 定义 function 时,在 function 内部隐式地将函数名声明成一个寄存器变量,在函数体中必须有一条赋值语句对该寄存器变量赋以函数的结果值,以便调用 function 时能够得到返回的函数值。如果没有指定的返回值的宽度,function 将缺省返回 1 位二进制数。function 的调用:(,.,) ;输入表达式与函数定义结构中的各个输入端口一一对应,这些输入表达式的排列顺序必须与各个输入端口在函数定义结构中的排列顺序一致。function 的调用既可以出现在过程块中又可以出现在 assign 连续赋值语句之中;另外,function 定义中声明的所有局部变量寄存器都是静态的,即function 中的局部寄存器在 function 的多个调用之间保持他们的值。 任务(task)类似于一般编程语言中的 Process(过程),它可以从描述的不同位置执行共同的代码。通常把需要共用的代码段定义为 task,然后通过 task调用来使用它。在 task 中还可以调用其他的 task 和 function。task 的定义task;端口与类型说明;变量声明;语句 1;。语句 n;endtask在定义一个 task 时,必须注意以下几点:(1): 任务定义结构不能出现在任何一个过程块内;(2): 一个 task 可以没有输入/输出端口,当然也可以有;(3): 一个 task 可以没有返回值,也可以通过输出端口或双向端口返回一个或多个值;(4): 除任务参数外,task 还能够引用说明任务的模块中定义的任何变量;task 的调用:task 调用语句给出传入任务的参数值和接收结果的变量值,(端口 1,端口 2,. ,端口 n);在调用 task 时,必须注意一下几点:(1): task 调用是过程性语句,因此只能出现在 always 过程块和 initial过程块中,调用 task 的输入与输出参数必须是寄存器类型的;(2): task 调用语句中的列表必须与任务定义时的输入、输出和双向端口参数说明的顺序相匹配。(3): 在调用 task 时,参数要按值传递,而不能按地址传递(和其他语言的不同);(4): 在一个 task 中,可也直接访问上一级调用模块中的任何寄存器;(5): 可以使用循环中断控制语句 disable 来中断任务执行,在 task 被中断后,程序流程将返回到调用 task 调用的地方继续向下执行。task 和 function 的不同点:(1): function 只能与主模块共用一个仿真时间单位,而 task 可以定义自己的仿真时间单位;(2): function 不能调用任务,而 task 可以调用函数;(3): function 至少需要一个输入变量,而 task 可以没有或者有很多个任意类型的变量;(4): function 返回一个值,而 task 则不返回值;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号