【问题标题】:adding two values task in verilog在verilog中添加两个值任务
【发布时间】:2019-02-12 08:11:58
【问题描述】:

我是一名学生,刚接触 verilog。我理解这些代码的含义,它们似乎对我有用。但是,我在执行任务时遇到了麻烦。

module add_two_values_task(output reg sum,output reg cout, input ain,input bin);

task add_two_values;
    output [3:0] sum;
    output out;
    input [3:0]ain;
    input [3:0]bin;
    reg [3:0] sum;
    reg out;
    {out, sum} = ain + bin;
endtask

always @(ain or bin) begin
    add_two_values(cout,sum,ain,bin);
end

endmodule

但是,当我运行我的模拟时:

当我运行模拟时,我想得到一个 z 的值,但是,我最终得到了字母“z”作为总和。我的代码写错了吗?

【问题讨论】:

    标签: verilog


    【解决方案1】:

    您只是忘记了一些非常重要的语法元素。并弄乱了您任务中的参数顺序。

    module add_two_values_task(output reg [3:0] sum,output reg cout, input [3:0] ain, input [3:0] bin);  // You need to declare signals width
    
    task add_two_values;
        output [3:0] sum;
        output out;
        input [3:0]ain;
        input [3:0]bin;
        reg [3:0] sum;
        reg out;
        {out, sum} = ain + bin;
    endtask
    
    always @(ain or bin) begin
        add_two_values(sum,cout,ain,bin);  // You messed order of arguments here
    end
    
    endmodule
    

    首先在module 声明中,您需要声明输入和输出信号的位宽(否则信号将被假定为 1 位长度)。其次,在您的任务调用中,您的参数顺序混乱。现在应该可以工作了。

    【讨论】:

      猜你喜欢
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多