zhaihongguang内容摘要:
可以用来禁止任务的执行。 语法详细讲解 Verilog 任务 [注意 ]: 不要在程序的不同部分同时调用同一个任务。 这是因为任务只有一组本地变量 , 同一时刻调用两次相同的任务将会导致错误。 这种情况常发生在使用定时控制的任务中。 在任务或函数中 , 引用父模块中声明的变量时要特别注意 ( 即注意变量的层次命名规则 )。 若想在其它模块中调用任务或函数 , 该任务和函数中所使用的变量必须全都包含在输入 /输出口列表中。 语法详细讲解 Verilog 任务 下面模块中的任务只含有一个双向总线 ( inout) 端口和一个内部变量, 没有其它输入端口 、 输出端口和定时控制 , 没有引用模块变量 , 不显示任何内容。 在任务调用时 , 任务的输入变量 ( 端口 ) 在任务内部被当作寄存器类型变量处理。 parameter MAX_BITS=8。 reg [MAX_BITS:1] D。 task reverse_bits。 inout [7:0] data。 //双向总线端口被当作寄存器类型。 integer K。 for (k=0。 kMAX_BITS。 K=K+1) reverse_bits [MAXBITS – (K+1)] = data[K]。 endtask always @ (posedge clk) reverse_bits (D)。 …… 语法详细讲解 Verilog 任务 下面模块中定义的任务含有输入、输出、时间控制和一个内部变量,并且引用了一个本模块的变量,但是没有输出,不显示任何内容。 任务调用时变量顺序应与任务定义中声明的顺序相同。 module mult(clk, a, b, out, en_mult)。 input clk, en_mult。 input [3:0] a, b。 output [7:0] out。 reg [15:0] out。 always @ (posedge clk) multme(a, b, out)。 //任务调用 语法详细讲解 Verilog 任务 task multme。 //任务定义 input [3:0] xme, tome。 output [7:0] result。 wait (en_mult) result=xme*tome。 endtask endmodule 语法详细讲解 Verilog 任务 module orand (a, b, c, d, e, out)。 input [7:0] a, b, c, d, e。 output [7:0] out。 reg [7:0] out。 always @ (a or b or c or d or e) out = f_or_and (a, b, c, d, e)。 //函数调用 function [7:0] f_or_and。 input [7:0] a, b, c, d, e。 if (e= =1) f_or_and = (a|b) amp。 (c|d)。 else f_or_and=0。 endfunction endmodule 语法详细讲解 Verilog 函数 虽然函数不能包含定时控制 , 但是可以在包含定时控制的过程块中调用函数。 在模块中 , 使用名为 f_or_and的函数时 , 是把它作为名为f_or_and 的寄存器类型变量来处理的。 要点 函数定义不能包含任何定时控制语句。 函数必须至少有一个输入 , 但绝不能含有任何输出和总线口; 一个函数只能返回一个值 , 该值的变量名与函数同名 , 数据类型默认为 reg类型。 传递给函数的变量顺序与函数输入口声明的顺序相同。 函数定义必须包含在模块定义之内。 函数不能调用任务 , 但任务可以调用函数。 函数使 Verilog有更广阔的适用范围。 语法详细讲解 Verilog 函数 虽然函数只能返回一个值 , 但是它的返回值可以直接赋给一个由多个子信号拼接构成的信号变量 , 使其实际等效于产生了多个输出。 {o1, o2, o3, o4}=f_or_and(a, b, c, d, e)。 语法详细讲解 Verilog 函数 在函数定义时 , 如果在函数名前面定义了位宽 , 该函数就可以返回由多位构成的矢量。 如果定义函数的语句比较多时 , 可以用 begin 和 end 把它们组合起来。 在函数内 , 无论以函数名命名的变量被赋了多少次值 , 函数只有一个返回值。 下例中的函数 , 声明了一个内部整型变量。 举例说明如下: module foo。 input [7:0] loo。 //也可以用连续赋值语句调用函数 wire [7:0] goo = zero_count (loo)。 function [3:0] zero_count。 input [7:0] in_bus。 integer I。 begin zero_count = 0。 for (I=0。 I8。 I= I+1) if (!in_bus[I]) zero_count = zero_count +1。 end endfunction endmodule 语法详细讲解 Verilog 函数 若把函数定义为整型 、 实型或时间类型 , 就可以返回相应类型的数据。 我们可以在任何类型的表达式中调用函数。 module checksub(neg,in_a,in_b)。 output neg。 input a, b。 reg neg。 function integer subtr。 input [7:0] in_a, in_b。 subtr = in_a – in_b。 //运算结果可以为负数 endfunction always @ (a or b) begin if ( subtr (a,b) 0) neg = 1。 else neg = 0。 end endmodule 语法详细讲解 Verilog 函数 函数类型 、 端口和行为定义时也可以使用参数 , 这样就可以构成参数化函数使其返回的数据类型 、 输入端口的位宽等很容易做修改。 所以参数化函数就有更广泛的适用范围。 … . parameter MAX_BITS =8。 reg [MAX_BITS:1] D。 function [MAX_BIT:1] reverse_bits。 input [7:0] data。 for(K=0。 K MAX_BITS。 K=K+1) reverse_bits[ MAX_BITS – (K+1)] = data [K]。 endfunction always @ (posedge clk) begin … . D= reverse_bits(D)。 … .. end ……… 语法详细讲解 Verilog 函数 语法详细讲解 命名块 可以通过在关键字 begin或 fork后加上: 〈 块名 〉 来给块命名。 module named_blk。 …… begin :seq_blk …… end …… fork : par_blk …… join …… endmodule 可以在命名块中声明本地变量。 可以使用 disable禁止命名块。 注意: 命名块使 Verilog有更广阔的适用范围。 命名块的使用缩短了仿真的时间。 语法详细讲解 命名块 语法详细讲解 禁止命名块和任务 module do_arith(out, a, b, c, d, e, clk, en_mult)。 input clk, en_mult。 input [7:0] a, b, c, d, e。 output [15:0] out。 reg [14:0] out。 always @(posedge clk) begin : arith_block //***命名名为 arith_block的块 *** reg [3:0] tmp1, tmp2。 //***本地变量 *** {tmp, tmp2}=f_or_and(a, b, c, d, e)。 // 函数调用 if(en_mult) multme(tmp1, tmp2, out)。 //任务调用 end always @(negedge en_mult) begin //停止计算 disable multme。 //***禁止任务的执行 *** diable arith_block。 //***禁止命名块的执行 *** end //在此定义任务和函数 ………… .. endmodle 注意: disable语句用来终止命名块或任务的执行。 这是指在尚未执行该命名块或任务任何一条语句前 , 就从该命名块 /任务执行中返回。 语法: disable 〈 块名 〉 或 disable 〈 任务名 〉 禁止执行命名块或任务后 , 所有在事件队列中由该命名块 /任务安排的事件都将被删除。 一般 情况下 disable语句是不可综合的。 在上页的例子中 , 只禁止命名块也可以得到预期的结果:命名块中所有的事件 , 包括任务和函数的执行都将被取消。 语法详细讲解 禁止命名块和任务 语法详细讲解 有限状态机( FSM) 隐式 FSM: 不需要状态寄存器 仿真更加有效 只能很好地处理线性的状态改变 大部分综合工具不支持隐式 FSM state 1 state 2 state 3 state 4 语法详细讲解 有限状态机( FSM) 显式 FSM: 结构比较复杂 。zhaihongguang
本资源仅提供20页预览,下载后可查看全文
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。
相关推荐
zhēngdu243b224zhǔzhēngf225争夺霸主征伐dānr232njūnw232il224xi224
• ◎ 把束缚着、系着的东西打开:~开。 ~甲归田。 ~囊相助。 • ◎ 除去,除,废除,停止:~放~除。 ~饿。 ~乏。 ~惑。 ~疑。 ~围。 ~脱。 ~雇。 ~聘。 ~散。 ~毒。 • ◎ 溶化:溶~。 ~冻。 • ◎ 讲明白,分析说明:~释。 ~析。 ~说。 劝~。 ~嘲。 • ◎ 懂,明白:理~。 见~。 • ◎ 调和,处理:~决。 和~。 调( ti225。 o )~。 排~。 •
young年轻的funny滑稽可笑的tall高的strong强壮的kind和蔼
青豆 • tofu 豆腐 • potato 土豆 • tomato 西红柿 • lunch 午餐 • we 我们 • tasty 好吃的;可口的 • sweet 甜的 • sour 酸的 • fresh 新鲜的 • salty 咸的 • favourite 最喜爱的 • they’re=they are • fruit 水果 • don’t=do not • grape 葡萄 Unit3 •