Hola, esta es mi primera publicación aquí, tengo un código que escribí con el que tengo problemas. Esperaba poder conseguir ayuda.
Tengo algunos problemas con mi código VHDL para un multiplicador 4x4.
El esquema que estoy usando es el siguiente:
Laejecucióndeunacomprobacióndesintaxispasamuybienperomesaleelsiguienteerror:
ERROR:HDLCompiler:1029-"T:/Multiplier/mult.vhd" Line 26: No index value can belong to null index range
ERROR:Simulator:777 - Static elaboration of top level VHDL design unit mult in library work failed
Pude encontrar algo similar al primer error: enlace
y pudo corregir su error cambiando el tamaño de su std_logic_vector
Pero he agotado todas mis asignaciones de vectores y todas mis señales están definidas para mis resúmenes y cargas. Los códigos fuente de medio sumador y de sumador completo adjuntos al proyecto se probaron y funcionaron.
¿Alguna idea? El código está abajo. ¡Por favor y gracias! Soy nuevo aquí, aunque he investigado y no he tenido éxito.
--4x4 Multiplier
library ieee;
use ieee.std_logic_1164.all;
entity mult is
port (x,y:IN std_logic_vector (3 downto 0);
p:OUT std_logic_vector (7 downto 0));
end mult;
architecture mult_beh of mult is
component ha
port(a,b: IN std_logic;
c,s: OUT std_logic);
end component;
component fa
port(a,b,cin: IN std_logic;
cout,sum: OUT std_logic);
end component;
signal andgate: std_logic_vector(15 downto 0);
signal sumout: std_logic_vector(11 downto 0);
signal carry: std_logic_vector(11 downto 0);
begin
andgate(0) <= x(0) and y(0);
andgate(1) <= x(1) and y(0);
andgate(2) <= x(2) and y(0);
andgate(3) <= x(3) and y(0);
andgate(4) <= x(0) and y(1);
andgate(5) <= x(1) and y(1);
andgate(6) <= x(2) and y(1);
andgate(7) <= x(3) and y(1);
andgate(8) <= x(0) and y(2);
andgate(9) <= x(1) and y(2);
andgate(10) <= x(2) and y(2);
andgate(11) <= x(3) and y(2);
andgate(12) <= x(0) and y(3);
andgate(13) <= x(1) and y(3);
andgate(14) <= x(2) and y(3);
andgate(15) <= x(3) and y(3);
--Gates
ha0: ha port map(s => sumout(0), a => andgate(1), b => andgate(4), c => carry(0));
fa0: fa port map(sum => sumout(1), a => andgate(2), b => andgate(5), cout => carry(1), cin => carry(0));
fa1: fa port map(sum => sumout(2), a => andgate(3), b => andgate(6), cout => carry(2), cin => carry(1));
ha1: ha port map(s => sumout(3), a => carry(2), b => andgate(7), c => carry(3));
ha2: ha port map(s =>sumout(4), a => sumout(1), b => andgate(8), c => carry(4));
fa2: fa port map(sum => sumout(5), a => sumout(2), b => andgate(9), cout => carry(5), cin => carry(4));
fa3: fa port map(sum => sumout(6), a => sumout(3), b => andgate(10), cout => carry(6), cin => carry(5));
fa4: fa port map(sum => sumout(7), a => carry(3), b => andgate(11), cout => carry(7), cin => carry(6));
ha3: ha port map(s => sumout(8), a => sumout(5), b => andgate(12), c => carry(8));
fa5: fa port map(sum => sumout(9), a => sumout(6), b => andgate(13), cout => carry(9), cin => carry(8));
fa6: fa port map(sum => sumout(10), a => sumout(7), b => andgate(14), cout => carry(10), cin => carry(9));
fa7: fa port map(sum => sumout(11), a => carry(7), b => andgate(15), cout => carry(11), cin => carry(10));
--Assigning p values
p(0) <= andgate(0);
p(1) <= sumout(0);
p(2) <= sumout(4);
p(3) <= sumout(8);
p(4) <= sumout(9);
p(5) <= sumout(10);
p(6) <= sumout(11);
p(7) <= carry(11);
end mult_beh;