jenya7 0 17 октября, 2018 Опубликовано 17 октября, 2018 (изменено) · Жалоба есть тестбенч 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. ну и другие сигналы никак не отражают написанного в тестбенче. Изменено 17 октября, 2018 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 41 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 1 час назад, jenya7 сказал: делитель клока = 1 а s_mspi_clk не равен s_clk. Что-то не заметил я в вашем тестбенче сигнала s_mspi_clk... Как Вы его формируете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 15 hours ago, Stewart Little said: Что-то не заметил я в вашем тестбенче сигнала s_mspi_clk... Как Вы его формируете? его формирует модуль СПИ мастер. это клок для СПИ слейв. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 46 minutes ago, jenya7 said: его формирует модуль СПИ мастер. это клок для СПИ слейв. Я правильно понял, что в результате симуляции Вы ходите увидеть s_mspi_clk равный s_clk ? Но тогда при чем тут тестбенч, который Вы здесь выложили. ? Если s_mspi_clk неправильны, значит модуль, который формирует этот сигнал делает это неправильно... И ещё один вопрос. Как у Вас используется в дальнейшем s_mspi_clk ? Как клок для тактирования триггров ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 октября, 2018 Опубликовано 18 октября, 2018 (изменено) · Жалоба 1 hour ago, Flip-fl0p said: Я правильно понял, что в результате симуляции Вы ходите увидеть s_mspi_clk равный s_clk ? Но тогда при чем тут тестбенч, который Вы здесь выложили. ? Если s_mspi_clk неправильны, значит модуль, который формирует этот сигнал делает это неправильно... И ещё один вопрос. Как у Вас используется в дальнейшем s_mspi_clk ? Как клок для тактирования триггров ? так другие сигналы тоже не отражают написанное в тестбенче testbench.vhd Изменено 18 октября, 2018 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба Quote ьак другие сигналы тоже не отражают написанное в тестбенче Так и как мы можем помочь Вам ответить на поставленный вопрос ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 1 hour ago, Flip-fl0p said: Так и как мы можем помочь Вам ответить на поставленный вопрос ? где косяк? скорее всего тестбенч написан неправильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 5 minutes ago, jenya7 said: где косяк? скорее всего тестбенч написан неправильно. А при чем тут тест, если сигнал s_mspi_clk формируется в компоненте U_MASTER_SPI ? Если этот сигнал формируется неправильно логично предположить, что проблема в этом компоненте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 1 hour ago, Flip-fl0p said: А при чем тут тест, если сигнал s_mspi_clk формируется в компоненте U_MASTER_SPI ? Если этот сигнал формируется неправильно логично предположить, что проблема в этом компоненте. я работаю с этим компонентом. в реальном проекте он ведет себя нормально а в тестбенче нет. как так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 25 minutes ago, jenya7 said: я работаю с этим компонентом. в реальном проекте он ведет себя нормально а в тестбенче нет. как так? Значит этот компонент написан так, что он синтезируется правильно. Но в его описании есть ошибка, которая приводит к неправильному моделированию. Может где в списке чувствительности в компоненте U_MASTER_SPI ошибка. А вообще странно, что Вы применяете компонент который неправильно моделируется. Обычно "в железе" идет тестирование тогда, когда моделирование прошло удачно. Во всяком случае у меня всегда идет тестирование в железе только тогда, когда моделирование работает как надо. P.S. А вообще я уже могу назвать одну неприятную ошибку. У вас есть в проекте gated clock. Т.к Ваш модуль формирует клок либо системный, если делитель равен одному, либо деленный клок. И по этому "некрасивому" клоку у вас тактируются триггеры. Я бы так не делал. UPD. Хотя тут не совсем gated clock. Тут клок сформированный на делителе. Он будет Gated если в процессе работы будут меняться коэфициенты делителя. Я бы сформировал необходимый деленный клок. Затем выделил бы фронт этого клока детектором фронта. И весь проект бы тактировал от одного системного клока. А сформированный клок применял в качестве сигнала разрешения. Результат тот-же. Но Вы не уродуете тактовое дерево клоком, сформированным на делителе. И у вас нет никаких пересечений клоковых доменов, т.к все работает на едином клоке. Да и без особых причин лучше не заводить в тактовое дерево клок полученный делителем на логике. Н а крайний случай лучше уж PLL переконфигурирвоать в процессе работы и получать необходимый деленный клок, Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться