добавление двух значений задачи в Verilog - PullRequest
0 голосов
/ 12 февраля 2019

Я студент и новичок в 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

Однако, когда я запускаю симуляцию:

enter image description here

Когда я запускаю симуляцию, я предполагаю получить значениедля z, однако, я получил букву «z» для суммы.Я написал свой код неправильно?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы только что забыли о нескольких очень важных элементах синтаксиса.И запутал порядок аргументов в вашей задаче.

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 бит).Во-вторых, при вызове задачи вы перепутали порядок аргументов.Должен работать сейчас.

...