ALU в Verilog: «Невозможно связать провод / рег / память» - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь создать простой 32-битный ALU с флагом переполнения, а затем вывести на экран входные данные и результаты ALU, но я столкнулся с некоторыми проблемами при подключении элементов для испытательного стенда. Я получил эту ошибку:

test_32bALU.v: 15: ошибка: неверное количество портов. Ожидая 4, получил 5. test_32bALU.v: 33: ошибка: невозможно связать провод / регистр / память test_unit.overflow' in alu_test '

2 ошибки при разработке.

Я только начинаю с Verilog, и у меня есть общее представление о синтаксисе. Я знаю, что не должен задавать вопросы по отладке, но это моя единственная надежда. Мой профессор или ТА не отвечали на мои просьбы о помощи. Буду признателен, если кто-нибудь здесь поможет мне указать на мои ошибки.

Это мой файл 32bALU.v:

module alu(
    input signed[31:0] a,b,
    input[3:0] opcode;
    output signed[31:0] c;
    output overflow;
    );

reg signed[31:0] result;
assign c = result;

reg tmp;

parameter
add = 4'b0000,
sub = 4'b0110,
sla = 4'b0001,
srai = 4'b0011;

always @(a,b,opcode)
begin

    case(opcode)
        add:
        begin
            c = a + b;
        end 

  endcase
end

always @(c)
begin

    if (c[32:31] == (2'b11 | 2'b10)) // Overflow
    begin
        tmp = 1'b1;
        assign overflow = tmp;
    end
    else begin
        tmp = 1'b0;
        assign overflow = tmp;
    end 
end

assign result = c[31:0];

endmodule

test_32bALU.v

`timescale 1ns/1ps

module alu_test;

// Inputs
reg[31:0] a,b;
reg[2:0] opcode;

// Outputs
wire[31:0] c;
//wire [1:0] zero;
wire [1:0] overflow;
//wire [1:0] neg;

alu test_unit(
    a,b, // Inputs
    opcode,
    c,
    overflow
);

parameter
add = 4'b0000,
sub = 4'b0110,
sla = 4'b0001,
srai = 4'b0011;

initial begin

$display("op: a      : b      : c      : reg_A  : reg_B  : reg_C");
$monitor(" %h:%h:%h:%h:%h:%h:%h",
opcode, a, b, c, test_unit.a, test_unit.b, test_unit.c);
$monitor("%h", test_unit.overflow);

//// add
#10 a=32'b0000_0000_0000_0000_0000_0000_0000_0001;
#10 b=32'b0000_0000_0000_0000_0000_0000_0000_0001;
opcode= add;//3'b000

#10 $finish;

end
endmodule

Я не понимаю, почему написано "неправильное количество портов"? Я предполагаю, что это число параметров в module alu и alu test_unit? У них одинаковое количество параметров (a, b, c, код операции и переполнение), так что именно мне не хватает? Как именно я получу значение overflow? Он прекрасно работает до того, как я добавил параметр overflow, поэтому я предполагаю, что я делаю это неправильно?

Что касается второй ошибки, я где-то здесь прочитал, что это может быть связано с отсутствующим объявлением, но я объявил все из них ... поэтому я не уверен, что делает это неправильно.

1 Ответ

2 голосов
/ 02 апреля 2019

Я не уверен, что это проблема, но определение вашего модуля неверно.Это должно быть следующим образом:

module alu(
    input signed[31:0] a,b,
    input[3:0] opcode,
    output signed[31:0] c,
    output overflow
    );

Возможно, это может помочь с вашей проблемой.

...