Мне поручено построить ALU. Однако я не должен понимать, как должен работать тестовый стенд. Я отлично запускал другие простые тестовые стенды.
- код компилируется (используя quartus)
- сделал текстовый файл и превратил его в файл test.tv
- открыл modelsim и добавил файл
- когда я запускаю его, возникает проблема с портами
y
иzero
.
Вот мой код:
module ALU(input [31:0] a,b,
input [2:0] f,
output reg [31:0] y ,
output reg zero);
always @(*) begin
case(f)
3'b000: y = a & b;
3'b001: y = a | b;
3'b010: y = a + b;
3'b011: y = 32'b0;
3'b100: y = a & ~b;
3'b101: y = a | ~b;
3'b110: y = a - b;
3'b111: y = a < b;
default: y = 32'b0;
endcase
if(y==0)
zero=1'b1;
else
zero=1'b0;
end
endmodule
//**********************
module testALU();
reg clk;
reg [31:0]a, b, yexpected;
reg [2:0]f;
reg [31:0]y;
reg zeroexpected;
reg zero;
reg[31:0] vectornum, errors;
reg [100:0] testvectors[10000:0];
ALU dut(a,b,f,yexpected,zeroexpected);
always
begin
clk = 1; #5; clk = 0; #5;
end
initial
begin
$readmemb("test.tv", testvectors);
vectornum = 0; errors = 0;
end
always @(posedge clk)
begin
#1; {a,b,f,yexpected,zeroexpected} = testvectors[vectornum];
end
always @(negedge clk)
begin
if (y !== yexpected) begin
$display("Error: inputs = %b", {a,b,f});
$display(" outputs = %b (%b expected)", y, yexpected);
errors = errors + 1;
end
vectornum = vectornum + 1;
if (testvectors[vectornum] === 100'bx) begin
$display("%d tests completed with %d errors", vectorum, errors);
$stop;
end
end
endmodule
//*************************************
ОШИБКА:
** Ошибка: **(vsim-3043) Неразрешенная ссылка на векторум. Время: 0 пс Итерация: 0 Экземпляр: /testALU Файл: C:/Users/prest/Desktop/Hardware Design/ALU/testALU.v Строка: 40
** Ошибка ** (подавляемая): (vsim-3053) Недопустимое соединение выходного или входящего порта для порта «y». Время: 0 пс Итерация: 0 Экземпляр: /testALU/dut Файл: C:/Users/prest/Desktop/Hardware Design/ALU/testALU.v Строка: 11
** Ошибка ** (подавляемая): (vsim-3053) Недопустимое соединение выходного или входящего порта для порта «ноль». Время: 0 пс Итерация: 0 Экземпляр: /testALU/dut Файл: C:/Users/prest/Desktop/Hardware Design/ALU/testALU.v Строка: 11
Вот как мой файл test.tv выглядит в двоичном формате
> 00000000000000000000000000000000_00000000000000000000000000000000_010_00000000000000000000000000000000_1
> 00000000000000000000000000000000_11111111111111111111111111111111_010_11111111111111111111111111111111_0
> 00000000000000000000000000000000_01010101010101010101010101010101_010_01010101010101010101010101010101_0
Я знаю, что это может показаться глупым и простым, но я действительно пытаюсь этому научиться и явно чего-то не понимаю. Может кто-нибудь помочь?