Перейти к содержанию

    

Тестбенч в МоделСим не работает.

есть тестбенч

begin  --начало архитектуры

clk_process :process
begin
	s_clk <= '0';
	wait for clk_period/2;
	s_clk <= '1';
	wait for clk_period/2;
end process;


stim_proc: process

begin	
	
    s_mspi_cs <= '0'; --chip select low
	
    s_mspi1_wr_done_clr <= '0';

    s_mspi1_wr_data <= X"0010";     --WORD_READ
    s_mspi1_wr_start_trig <= '1'; --send a byte
	
    while (s_mspi1_wr_done = '1') loop
    s_mspi1_wr_start_trig <= '0';
    s_mspi1_wr_done_clr <= '0';
    end loop;
    s_mspi1_wr_done_clr <= '1';
	
    s_mspi1_wr_data <= X"0000";     --ADDR_MSB
    s_mspi1_wr_start_trig <= '1'; --send a byte
	
    while (s_mspi1_wr_done = '1') loop
    s_mspi1_wr_start_trig <= '0';
    s_mspi1_wr_done_clr <= '0';
    end loop;
   s_mspi1_wr_done_clr <= '1';
	
    s_mspi1_wr_data <= X"0002";     --ADDR_LSB
    s_mspi1_wr_start_trig <= '1'; --send a byte
	
    while (s_mspi1_wr_done = '1') loop
    s_mspi1_wr_start_trig <= '0';
    s_mspi1_wr_done_clr <= '0';
    end loop;
    s_mspi1_wr_done_clr <= '1';
	
    s_mspi1_wr_data <= X"0000";     --DUMMY
    s_mspi1_wr_start_trig <= '1'; --send a byte
	
    while (s_mspi1_wr_done = '1') loop
    s_mspi1_wr_start_trig <= '0';
    s_mspi1_wr_done_clr <= '0';
    end loop;
    s_mspi1_wr_done_clr <= '1';
	
    s_mspi1_wr_data <= X"0000";     --DUMMY
    s_mspi1_wr_start_trig <= '1'; --send a byte
	
    while (s_mspi1_wr_done = '1') loop
    s_mspi1_wr_start_trig <= '0';
    s_mspi1_wr_done_clr <= '0';
    end loop;
    s_mspi1_wr_done_clr <= '1';
	
	
    s_mspi_cs <= '1'; --chip select high

    wait; 
	
end process stim_proc;
	 
end;  --конец архитектуры

но если посмотреть на результат симуляции - полная фигня.

делитель клока = 1 а s_mspi_clk не равен s_clk. ну и другие сигналы никак не отражают написанного в тестбенче.

wave.png

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, jenya7 сказал:

делитель клока = 1 а s_mspi_clk не равен s_clk.

Что-то не заметил я в вашем тестбенче сигнала s_mspi_clk...

Как Вы его формируете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 hours ago, Stewart Little said:

Что-то не заметил я в вашем тестбенче сигнала s_mspi_clk...

Как Вы его формируете?

его формирует модуль СПИ мастер. это клок для СПИ слейв.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
46 minutes ago, jenya7 said:

его формирует модуль СПИ мастер. это клок для СПИ слейв.

Я правильно понял, что в результате симуляции Вы ходите увидеть s_mspi_clk  равный s_clk ?

Но тогда при чем тут тестбенч, который Вы здесь выложили. ?

Если s_mspi_clk  неправильны, значит модуль, который формирует этот сигнал делает это неправильно...

И ещё один вопрос. Как у Вас используется в дальнейшем s_mspi_clk ? Как клок для тактирования триггров ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, Flip-fl0p said:

Я правильно понял, что в результате симуляции Вы ходите увидеть s_mspi_clk  равный s_clk ?

Но тогда при чем тут тестбенч, который Вы здесь выложили. ?

Если s_mspi_clk  неправильны, значит модуль, который формирует этот сигнал делает это неправильно...

И ещё один вопрос. Как у Вас используется в дальнейшем s_mspi_clk ? Как клок для тактирования триггров ?

так другие сигналы тоже не отражают написанное в тестбенче

testbench.vhd

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Quote

ьак другие сигналы тоже не отражают написанное в тестбенче

Так и как мы можем помочь Вам ответить на поставленный вопрос ? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, Flip-fl0p said:

Так и как мы можем помочь Вам ответить на поставленный вопрос ? 

где косяк? скорее всего тестбенч написан неправильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 minutes ago, jenya7 said:

где косяк? скорее всего тестбенч написан неправильно.

А при чем тут тест, если сигнал s_mspi_clk формируется в компоненте U_MASTER_SPI ?

Если этот сигнал формируется неправильно логично предположить, что проблема в этом компоненте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, Flip-fl0p said:

А при чем тут тест, если сигнал s_mspi_clk формируется в компоненте U_MASTER_SPI ?

Если этот сигнал формируется неправильно логично предположить, что проблема в этом компоненте.

я работаю с этим компонентом. в реальном проекте он ведет себя нормально а в тестбенче нет. как так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
25 minutes ago, jenya7 said:

я работаю с этим компонентом. в реальном проекте он ведет себя нормально а в тестбенче нет. как так?

Значит этот компонент написан так, что он синтезируется правильно. Но в его описании есть ошибка, которая приводит к неправильному моделированию. Может где в списке чувствительности в компоненте U_MASTER_SPI ошибка.

А вообще странно, что Вы применяете компонент который неправильно моделируется. Обычно "в железе" идет тестирование тогда, когда моделирование прошло удачно. Во всяком случае у меня всегда идет тестирование в железе только тогда, когда моделирование работает как надо.

P.S. А вообще я уже могу назвать одну неприятную ошибку. У вас есть в проекте gated clock. Т.к Ваш модуль формирует клок либо системный, если делитель равен одному, либо деленный клок. И по этому "некрасивому" клоку у вас тактируются триггеры. Я бы так не делал.

UPD. Хотя тут не совсем gated clock. Тут клок сформированный на делителе. Он будет Gated если в процессе работы будут меняться коэфициенты делителя.

Я бы сформировал необходимый  деленный клок. Затем выделил бы фронт этого клока детектором фронта. И весь проект бы тактировал от одного системного клока. А сформированный клок применял в качестве сигнала разрешения. Результат тот-же. Но Вы не уродуете тактовое дерево клоком, сформированным на делителе. И у вас нет никаких пересечений клоковых доменов, т.к все работает на едином клоке. Да и без особых причин лучше не заводить в тактовое дерево клок полученный делителем на логике. Н а крайний случай лучше уж PLL переконфигурирвоать в процессе работы и получать необходимый деленный клок,

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация