Je travaille sur un simple sign-extendeur dans Verilog pour un processeur que je crée pour Computer Architecture.Comment signer-prolonger un numéro dans Verilog
Voici ce que j'ai à ce jour: [EDIT: Modification de la déclaration de sélection légèrement]
`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
J'ai ajouté la pensée while (CLK == 1) qui résoudrait mon problème, que je crois une boucle infinie. Lorsque j'essaie de tester cela dans iSim, le circuit ne s'initialise jamais. J'ai également essayé de supprimer la syntaxe de copie et de faire simplement extended [8] = extend [7] etc. pour [8] - [15], mais le même résultat se produit, donc je suis à peu près sûr que la syntaxe la plus interne est correct.
Voici le fichier de test:
`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
Toute idée comment je peux le faire avec succès?
Regardez vos '' begin's et end's ... – Marty