Я пытаюсь создать простой 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
, поэтому я предполагаю, что я делаю это неправильно?
Что касается второй ошибки, я где-то здесь прочитал, что это может быть связано с отсутствующим объявлением, но я объявил все из них ... поэтому я не уверен, что делает это неправильно.