【问题标题】:Using Tasks to Blink an LED in Verilog在 Verilog 中使用任务使 LED 闪烁
【发布时间】:2020-06-03 15:15:44
【问题描述】:

我第一次在 Verilog 中使用 Tasks,试图实现代码重用。我有两个任务,led_on 和 led_off。我可以通过这些任务单独点亮或关闭 LED。问题是当我尝试运行结合了 led_on 和 led_off 任务的任务 led_blink 时,输出 led 保持未定义,直到 blink 任务完成,使 led 状态与函数中的最后一次调用匹配(led_off,在下面的示例中)。

这是我的 led_on 和 led_blink 任务,以及我的任务调用:

// LED On
task led_on;
  inout  led;

  begin
    #10000
    led = 1;
  end
endtask

// LED Blink
task led_blink;
  inout led;

  begin
    led_on  (led);
    led_off (led);
    led_on  (led);
    led_off (led);
  end
endtask

// Task Call(s)
initial begin
  led_blink     (led_out);
end

【问题讨论】:

    标签: syntax task verilog led


    【解决方案1】:

    我怀疑您在使用inout 端口时遇到了问题。我使用名为ledreg 简化了您的代码,可以在您的任务中设置和清除它:

    module tb;
    
    reg led;
    
    task led_on;
        #10000 led = 1;
    endtask
    
    task led_off;
        #10000 led = 0;
    endtask
    
    task led_blink;
        begin
            led_on ;
            led_off;
            led_on ;
            led_off;
        end
    endtask
    
    initial begin
        $monitor($time, " ", led);
        led_blink;
    end
    
    endmodule
    

    输出:

               0 x
           10000 1
           20000 0
           30000 1
           40000 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多