Jump to content

    

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

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

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

Edited by jenya7

Share this post


Link to post
Share on other sites
1 час назад, jenya7 сказал:

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

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

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

Share this post


Link to post
Share on other sites
15 hours ago, Stewart Little said:

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

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

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

Share this post


Link to post
Share on other sites
46 minutes ago, jenya7 said:

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

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

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, Flip-fl0p said:

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

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

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

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

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

testbench.vhd

Edited by jenya7

Share this post


Link to post
Share on other sites
Quote

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

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

Share this post


Link to post
Share on other sites
1 hour ago, Flip-fl0p said:

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

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

Share this post


Link to post
Share on other sites
5 minutes ago, jenya7 said:

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, Flip-fl0p said:

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

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

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

Share this post


Link to post
Share on other sites
25 minutes ago, jenya7 said:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this