Back to posts Edit this post
Copy content

22 May 12:32

gggg
module mytestbenchmodule(); reg CLK; initial CLK = 0; always #5 CLK = ~CLK; // szybszy zegar dla testów reg RST; initial begin RST = 1; #20 RST = 0; end integer fi, fo; integer count; reg error; integer f1, f2, f3, f4; reg [31:0] vec_Are, vec_Aim, vec_Bre, vec_Bim, vec_Cre, vec_Cim; // sygnały handshake reg I_STB; wire I_ACK; wire O_STB; reg O_ACK; wire [31:0] Cre, Cim; initial begin fi = $fopen("input.txt", "r"); fo = $fopen("output.txt", "r"); I_STB = 0; O_ACK = 0; error = 0; @(negedge RST); // czekaj aż reset się skończy forever begin // czytaj dane wejściowe count = $fscanf(fi, "%d %d %d %d\n", f1, f2, f3, f4); if (count != 4) begin $display("Koniec danych wejściowych."); $finish; end vec_Are = f1; vec_Aim = f2; vec_Bre = f3; vec_Bim = f4; // podaj dane do modułu I_STB = 1; wait (I_ACK == 1); I_STB = 0; // czekaj na dane wyjściowe wait (O_STB == 1); O_ACK = 1; // sygnał odbioru #10 O_ACK = 0; // czytaj oczekiwany wynik count = $fscanf(fo, "%d %d\n", vec_Cre, vec_Cim); if (count != 2) begin $display("Koniec danych wyjściowych."); $finish; end // porównaj wynik if ((vec_Cre !== Cre) || (vec_Cim !== Cim)) begin $display("❌ Błąd: %d != %d lub %d != %d", vec_Cre, Cre, vec_Cim, Cim); error = error + 1; end else begin $display("✅ OK: %d == %d, %d == %d", vec_Cre, Cre, vec_Cim, Cim); end #20; // czekaj chwilę między testami end end // instancja modułu complex_mul cmul ( .CLK(CLK), .RST(RST), .I_STB(I_STB), .I_ACK(I_ACK), .I_ARE(vec_Are), .I_AIM(vec_Aim), .I_BRE(vec_Bre), .I_BIM(vec_Bim), .O_STB(O_STB), .O_ACK(O_ACK), .O_CRE(Cre), .O_CIM(Cim) ); endmodule

No files