Estoy intentando simular un banco de pruebas en ModelSim, pero cuando ejecuto la simulación, nunca avanza en el tiempo. El delta tampoco aumenta.
¿Existen consejos útiles para la depuración en una situación como esta? Sospecho que el problema puede no estar en mi banco de pruebas, sino en la propia entidad maze_solver
. Aquí hay algunos problemas posibles:
-
maze_solver
también contiene una descripción estructural para otra entidad dentro de ella. ¿Está bien simular así? ¿Mientras haya agregado esa otra entidad en el proyecto ModelSim? - ¿Podría ser un problema con mis listas de sensibilidad? Los he comprobado todos y todas las señales del lado derecho se han incluido en las listas de sensibilidad.
- ¿Podría ser un problema con mi banco de pruebas? He incluido el siguiente código de prueba.
Dado que el diseño maze_solver
es largo, no lo he incluido, pero puedo incluirlo si es necesario. Es una máquina de estados finitos (usa solo mayúsculas y minúsculas).
A continuación se muestra mi banco de pruebas:
library IEEE;
use IEEE.std_logic_1164.all;
entity solver_testbench is
end entity solver_testbench;
architecture tb of solver_testbench is
signal clk,reset: STD_LOGIC;
signal cell_data: STD_LOGIC_VECTOR (7 downto 0);
signal data_rdy: STD_LOGIC;
signal rd, wr: STD_LOGIC;
signal row, column: integer;
component maze_solver is
generic(maze_width : in integer);
Port (clk, reset : in STD_LOGIC;
start : in STD_LOGIC;
rd_cell_data : in STD_LOGIC_VECTOR (7 downto 0);
data_rdy: in STD_LOGIC;
rd,wr: out STD_LOGIC;
row, column: out integer
);
end component maze_solver;
begin
aravindans_maze_solver: maze_solver
generic map(maze_width=>2)
port map(clk=>clk, reset=>reset, start=>'1',rd_cell_data=>cell_data, data_rdy=>data_rdy, rd=>rd, wr=>wr,
row=>row, column=>column);
process
begin
clk <= '1';
wait for 10 ns;
clk <= '0';
wait for 10 ns;
end process;
process
begin
cell_data <= (others=>'0');
if rd = '1' then
if row = 0 and column = 0 then
cell_data <= "01000000";
data_rdy <= '1';
wait for 20 ns;
data_rdy <= '0';
elsif row = 0 and column = 1 then
cell_data <= "00010000";
data_rdy <= '1';
wait for 20 ns;
data_rdy <= '0';
elsif row = 1 and column = 0 then
cell_data <= "00000000";
data_rdy <= '1';
wait for 20 ns;
data_rdy <= '0';
elsif row = 1 and column = 1 then
cell_data <= "00000000";
data_rdy <= '1';
wait for 20 ns;
data_rdy <= '0';
end if;
else
cell_data <= (others => '0');
data_rdy <= '0';
end if;
end process;
reset <= '0', '1' after 5 ns;
end architecture tb;