正在加载图片...
92wmD硬件述语言 Chia°bu6eM 下载 Rotate By: Mac3= Mac3+ 1) begin Fill Value= In Arr[stop Bit for (Macl= Stop Bit: Macl > Start Bit +l In Arr [Macl]= In Arr [Macl -1 In Arr[Start Bit]= Fill Value; endtask Fill value是任务的局部寄存器,只能在任务中直接可见。任务的第1个参数是输入输出数 组InAr,随后是3个输入, Start bit、 Stop Bit和 Rotate By 除任务参数外,任务还能够引用说明任务的模块中定义的任何变量。在下一节将举例说 明这种情况 10.12任务调用 个任务由任务调用语句调用。任务调用语句给出传入任务的参数值和接收结果的变量 值。任务调用语句是过程性语句,可以在 always语句或 initial语句中使用。形式如下 xpr2,.,exprN) 任务调用语句中参数列表必须与任务定义中的输入、输出和输入输出参数说明的顺序匹 配。此外,参数要按值传递,不能按地址传递。在其它高级编程语言中,例如 Pascal,任务与 过程的一个重要区别是任务能够被并发地调用多次,并且每次调用能带有自己的控制,最重 要的一点是在任务中声明的变量是静态的,即它决不会消失或重新被初始化。因此一个任务 调用能够修改被其他任务调用读取的局部变量的值 下面是调用任务 Reverse Bits的实例,该任务定义已在前面章节中给出, //寄存器说明部分: reg [MAXBITS-1: 0] Reg x, New Reg Reverse Bits(Reg x, New Reg) /狂务调用。 Reg_X的值作为输入值传递,即传递给Din。任务的输出Dot返回到New_Reg。注意因为 任务能够包含定时控制,任务可在被调用后再经过一定时延才返回值 因为任务调用语句是过程性语句,所以任务调用中的输出和输入输出参数必须是寄存器 类型的。在上面的例子中, New Reg必须被声明为寄存器类型 下面的例子不通过参数表向任务调用传入变量。尽管引用全局变量被认为是不良的编程 风格,它有时却非常有用。 module Global var RamQ[0:63] reg CheckB⊥t; task GetParityi output paritybitf o r (M a c 3 = 1; Mac3 <= R o t a t e _ B y; M a c 3 = M a c 3 + 1) b e g i n F i l l _ V a l u e = I n _ A r r[S t o p _ B i t] ; f o r (M a c 1 = S t o p _ B i t; M a c 1 >= S t a r t _ B i t + 1; M a c 1 = M a c 1 - 1 ) I n _ A r r[M a c 1] = I n _ A r r [M a c 1 - 1]; I n _ A r r[S t a r t _ B i t] = F i l l _ V a l u e; e n d e n d e n d t a s k F i l l _ Va l u e是任务的局部寄存器,只能在任务中直接可见。任务的第 1个参数是输入输出数 组I n _ A rr,随后是3个输入,S t a rt _ B i t、S t o p _ B i t和R o t a t e _ B y。 除任务参数外,任务还能够引用说明任务的模块中定义的任何变量。在下一节将举例说 明这种情况。 10.1.2 任务调用 一个任务由任务调用语句调用。任务调用语句给出传入任务的参数值和接收结果的变量 值。任务调用语句是过程性语句,可以在 always 语句或initial 语句中使用。形式如下: t a s k _ i d [ (e x p r 1 , e x p r 2 , . . . , e x p r N) ] ; 任务调用语句中参数列表必须与任务定义中的输入、输出和输入输出参数说明的顺序匹 配。此外,参数要按值传递,不能按地址传递。在其它高级编程语言中,例如 P a s c a l,任务与 过程的一个重要区别是任务能够被并发地调用多次,并且每次调用能带有自己的控制,最重 要的一点是在任务中声明的变量是静态的,即它决不会消失或重新被初始化。因此一个任务 调用能够修改被其他任务调用读取的局部变量的值。 下面是调用任务R e v e r s e _ B i t s的实例,该任务定义已在前面章节中给出, / /寄存器说明部分: r e g [M A X B I T S-1:0] R e g _ X , N e w _ R e g; R e v e r s e _ B i t s(R e g _ X , N e w _ R e g); //任务调用。 R e g _ X的值作为输入值传递,即传递给 D i n。任务的输出D o u t返回到N e w _ R e g。注意因为 任务能够包含定时控制,任务可在被调用后再经过一定时延才返回值。 因为任务调用语句是过程性语句,所以任务调用中的输出和输入输出参数必须是寄存器 类型的。在上面的例子中, N e w _ R e g必须被声明为寄存器类型。 下面的例子不通过参数表向任务调用传入变量。尽管引用全局变量被认为是不良的编程 风格,它有时却非常有用。 m o d u l e G l o b a l _ V a r; reg [0:7] R a m Q [ 0 : 6 3 ] ; i n t e g e r I n d e x; r e g C h e c k B i t; t a s k G e t P a r i t y; i n p u t A d d r e s s; o u t p u t P a r i t y B i t; 92 Verilog HDL 硬件描述语言 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有