Verilog task任务使用注意点

本文介绍了Verilog中task的使用,特别关注了task调用时输出到外部寄存器的延迟问题。当task内部有输出时,寄存器更新会有两个时钟周期的延迟;而若task无输出直接操作外部寄存器,则在下一个时钟周期就会更新。同时,强调了不能在task内定义寄存器reg,以免影响其正常工作。
摘要由CSDN通过智能技术生成

有关Verilog 的task用法,在此不再赘述,这此只提需要注意的地方。
一、两种调用task输出情形:
如何在task里面有输出,那么输出到外部寄存器是有两个时钟延时的,但如果task中没有输出,直接调用task外的寄存器的话,寄存器在下个时钟便会更改。下面举例子说明:
1、带有延时
当调用transfer时寄存器的bai、shi和ge存在两个时钟的延时。

//
reg[7:0] bai;
reg[7:0] shi;
reg[7:0] bai;
always @(posedge clk)
begin
		transfer(8'd120,bai,shi,ge);
end

task transfer;
input  [7:0] num;
output [7:0] bit_bai,bit_shi,bit_ge;
begin
      if(num >= 8'd100)
      begin
            bit_bai <= (num[3:0] + num[7:4]*16)/100;
            bit_shi <= ((num[3:0] + num[7:4]*16)/10)%10;
            bit_ge  <= (num[3:0] + num[7:4]*16)%10;
      end
      else if(num < 8'd100 && num >= 8'd10)
      begin
            bit_bai <= 8'h27;
            bit_shi <= (num[3:0] + num[7:4]*16)/10;
            bit_ge  <= (num[3:0] + num[7:4]*16)%10;
      end
      else
      begin
            bit_bai <= 8'h27;
            bit_shi <= 8'h27;
            bit_ge  <= num[3:0] + num[7:4]*16;
      end
end 
endtask

2、不带延时
当调用transfer时寄存器的bit_bai、bit_shi和bit_ge存在一个时钟的延时,即下一个时钟变化。

//
reg[7:0] bit_bai;
reg[7:0] bit_shi;
reg[7:0] bit_ge;
always @(posedge clk)
begin
		transfer(8'd120);
end

task transfer;
input  [7:0] num;
begin
      if(num >= 8'd100)
      begin
            bit_bai <= (num[3:0] + num[7:4]*16)/100;
            bit_shi <= ((num[3:0] + num[7:4]*16)/10)%10;
            bit_ge  <= (num[3:0] + num[7:4]*16)%10;
      end
      else if(num < 8'd100 && num >= 8'd10)
      begin
            bit_bai <= 8'h27;
            bit_shi <= (num[3:0] + num[7:4]*16)/10;
            bit_ge  <= (num[3:0] + num[7:4]*16)%10;
      end
      else
      begin
            bit_bai <= 8'h27;
            bit_shi <= 8'h27;
            bit_ge  <= num[3:0] + num[7:4]*16;
      end
end 
endtask
/

二、不能在task中定义寄存器reg,不然这个寄存器不工作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值