Ich arbeite an einem einfachen Sign-Extender in Verilog für einen Prozessor, den ich für Computer Architecture erstelle.Wie zeichne ich eine Zahl in Verilog aus?
Hier ist, was ich habe, so weit: [EDIT: Changed die Auswahl Aussage leicht]
`timescale 1ns/1ps
module SignExtender(CLK, extend, extended);
input[7:0] extend;
input CLK;
output[15:0] extended;
reg[15:0] extended;
wire[7:0] extend;
always
begin
while (CLK == 1)
extended[7:0] = extend[7:0];
extended[15:8] = {8{extend[7]}};
end
endmodule
ich während (CLK == 1) Denken hinzugefügt, die mein Problem lösen würde, was ich glaube, ist eine Endlosschleife. Wenn ich versuche, dies in iSim zu testen, wird die Schaltung niemals initialisiert.
Ich habe auch versucht, die Kopiersyntax zu entfernen und nur extended [8] = extend [7] usw. für [8] - [15], aber das gleiche Ergebnis auftritt, so bin ich mir ziemlich sicher, dass die innerste Syntax ist richtig.
Hier ist die Testdatei:
`timescale 1ns/1ps
module SignExtender_testbench0;
// Inputs
reg [7:0] extend;
reg CLK;
// Outputs
wire [15:0] extended;
// Instantiate the Unit Under Test (UUT)
SignExtender uut (
.extend(extend),
.extended(extended)
);
initial begin
// Initialize Inputs
extend = 0;
#100; // Wait 100 ns for global reset to finish
extend = -30;
CLK = 1;
#10;
CLK = 0;
if (extended == -30)
$display("okay 1");
else
$display("fail 1");
extend = 40;
#10;
if (extended == 40)
$display("okay 2");
else
$display("fail 2");
end
endmodule
Irgendwelche Ideen, wie ich dies erfolgreich tun kann?
Passen Sie Ihre 'begin's und' end's ... – Marty