在Verilog中添加两个值任务

时间:2019-02-12 08:11:58

标签: verilog

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

strsql = "SELECT QSYS.DOKUMENTE.SDATEINAME 
          FROM QSYS.DOKUMENTE 
          INNER JOIN QSYS.RQMS_STAMM 
              ON QSYS.DOKUMENTE.NLFD = QSYS.RQMS_STAMM.NRQNR"
& _      "WHERE QSYS.DOKUMENTE.NLFD = QSYS.RQMS_STAMM.NRQNR
              AND QSYS.RMQS_STAMM.SRQNR = '"& Me.lstReklamenummern.Value &"'" 
objrcrd.Open strsql

但是,当我运行仿真时:

enter image description here

运行模拟时,我想得到z的值,但是最后得到的字母为“ z”。我写的代码错了吗?

1 个答案:

答案 0 :(得分:0)

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

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位)。其次,在任务调用中,您弄乱了参数顺序。现在应该可以工作。