Básicamente, estoy usando una tabla de búsqueda para generar en bcd el cuadrado de un solo dígito bcd.
El problema que tengo es que no está dando la respuesta correcta.
Por ejemplo: el resultado que obtengo por el cuadrado de estos números es:
1 = 1
2 = 4
4 = 10
5 = 19
10 = 64
como pueden ver, tengo que separar MBCD y LBCD y luego concatenarlos.
Aquí está mi código:
module bcdsquarer(input[3:0]bcdin, output[7:4]Mbcd, output[3:0]Lbcd);
parameter msb = 16;
parameter lsb = 8;
reg [lsb-1:0]ROM[0:msb-1];
integer i;
initial
begin
for(i=0; i<16; i = i+1)
begin
ROM[i] = i**2;
end
end
assign {Mbcd,Lbcd} = ROM[bcdin];
endmodule
¿Alguien ve dónde cometí un error?
editar: Bien, entonces sé que tengo que convertir de binario a bcd. Tengo un código que convierte, pero ¿cómo lo implemento con mi bcdsquarer?
aquí está mi código
module B2BCD(B,hundreds,tens,ones);
input [7:0] B;
output [3:0] hundreds;
output [3:0] tens;
output [3:0] ones;
integer x;
reg [3:0] hundreds, tens, ones;
always @(B)
begin
x=B;
hundreds=0; tens=0; ones = 0;
if(x>99)begin hundreds =hundreds +1; x =x-100; end
if(x>99)begin hundreds =hundreds +1; x =x-100; end
repeat(9)
begin
if(x>9)begin tens = tens +1; x =x-10; end
end
ones =x;
end
endmodule
Intenté implementarlo de esta manera: (solo obtengo x para mis resultados ahora)
module bcdsquarer(bcdin,Mbcd,Lbcd,tens,ones);
parameter msb = 16;
parameter lsb = 8;
input[3:0]bcdin;
output[7:4]Mbcd;
output[3:0]Lbcd;
output [3:0] tens;
output [3:0] ones;
integer x;
reg[3:0] tens;
reg[3:0] ones;
always @(bcdin)
begin
x=bcdin;
tens=0; ones = 0;
begin
if(x>9)begin tens = tens +1; x =x-10; end
end
ones =x;
end
assign Mbcd = tens;
assign Lbcd = ones;
reg [lsb-1:0]ROM[0:msb-1];
integer i;
initial
begin
for(i=0; i<16; i = i+1)
begin
ROM[i] = i**2;
end
end
assign {Mbcd,Lbcd} = ROM[bcdin];
endmodule