Estoy trabajando en un extensor de señal simple en Verilog para un procesador que estoy creando para Arquitectura de Computadora.Cómo firmar y extender un número en Verilog
Esto es lo que tengo hasta ahora: [EDIT: Se ha cambiado la declaración de selección poco]
`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
he añadido el (== 1 CLK), mientras que el pensamiento que solucionaría mi problema, que creo que es un bucle infinito Cuando trato de probar esto en iSim, el circuito nunca se inicializa.
También intenté eliminar la sintaxis de copiado y simplemente extendí [8] = extender [7] etc. para [8] - [15], pero ocurre el mismo resultado, así que estoy bastante seguro de que la sintaxis más interna es correcto.
Aquí está el archivo de prueba:
`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
Alguna idea de cómo puedo hacer esto con éxito?
Mire sus '' begin's y end's ... – Marty