Después de una pausa de un año, volví a aprender VHDL. Estoy trabajando en los ejercicios del libro de Peter Ashenden Beginner's Guide to VHDL y estoy atascado en el ejercicio 11 del capítulo 3.
El objetivo es escribir un módulo, que realizará operaciones aritméticas básicas en dos números real
. Aquí está mi módulo:
-- floating point ALUish thing
entity FPALU is
port ( x, y : in real;
f1, f0 : in bit;
z : out real );
end entity FPALU;
architecture behav of FPALU is
begin
fpalu_behavioral : process(x, y, f1, f0) --is
variable result : real := 0.0;
begin
if f1 = '0' and f0 = '0' then
result := x + y;
elsif f1 = '0' and f0 = '1' then
result := x - y;
elsif f1 = '1' and f0 = '0' then
result := x * y;
elsif f1 = '1' and f0 = '1' then
result := x / y;
-- else null;
end if;
z <= result;
end process fpalu_behavioral;
end architecture behav;
Y su banco de pruebas:
-- test bench for floating point operations
entity FPALU_test_bench is
end entity FPALU_test_bench;
architecture test_FPALU of FPALU_test_bench is
signal x, y, z : real;
signal f0, f1 : bit;
begin
dut : entity work.FPALU(behav)
port map ( x, y, f1, f0, z );
stimulus : process is
begin
x <= 3.4; y <= 5.8; f1 <= '0'; f0 <= '0'; wait for 20 ns;
x <= 3.4; y <= 5.8; f1 <= '0'; f0 <= '1'; wait for 20 ns;
x <= 3.4; y <= 5.8; f1 <= '1'; f0 <= '0'; wait for 20 ns;
x <= 3.4; y <= 5.8; f1 <= '1'; f0 <= '1'; wait for 20 ns;
wait;
end process stimulus;
end architecture test_FPALU;
Este código analizará y elaborará bien, pero una vez que intente ejecutar el banco de pruebas, obtengo este error:
ghdl -r FPALU_test_bench --vcd=FPALU.vcd
./fpalu_test_bench:error: bound check failure at FPALU.vhdl:15
./fpalu_test_bench:error: simulation failed
La línea 15 es result := x + y;
. Esta pregunta parece ser similar, pero dado que los paquetes aún no se han introducido en el libro, asumo que debería ser posible prescindir de ellos. Además, agregué dos números real
de manera similar en otro módulo y funcionó bien. Entonces, ¿por qué no se ejecuta esta simulación? Supongo que es un "problema de desbordamiento" de lo que he encontrado aquí y en Google, pero no hay una respuesta definitiva.