|
|
  |
глюк в Signal Tap, переменным присваеивается непонятный сигнал |
|
|
|
Sep 18 2013, 06:43
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Подключил через Qsys SDRAM к проекту, написал машину состояний для управления памятью и передачей данных через FTDI на компьютер. Стал смотреть, что происходит в проекте через Signal Tap, а там такой глюк скрин прилагаю ниже.
Вопрос, почему переменной counter_wr, в некоторые разряды проникла клоковая частота, в данном случае counter_wr[5] ? Как с этим бороться? Прилагаю и кусок кода, чтобы было понятно, что такое counter_wr. Код signal counter_rd : integer range low_level to 33554431 :=low_level; signal counter_wr : integer range low_level to 33554431 :=low_level; signal read_or_write : integer range low_level to 33554431 :=low_level; signal rg_read_or_write : integer range low_level to 33554431 :=low_level;
signal count : std_logic; -- сигнал, разрешающий считать счетчику counter_wr signal rg_write_on_FTDI : std_logic; begin
-------------------------------------------------------------- ---======= смена текущего состояния с.машины -------------------------------------------------------------- process(clk, clk_en, sclr, next_state, N_valid, cur_state, rg_valid, count) begin if rising_edge(clk) then if sclr = '1' then ---------- cur_state <= st_check_counter; --------------- rg_valid <= '0'; --------------- rg_read_from_m <= '1'; rg_write_to_m <= '1'; --------------- rg_address <= (others => '0'); --------------- counter_wr <= low_level; counter_rd <= low_level; --------------- rg_read_or_write <= low_level; rg_write_on_FTDI <= '0'; ---------- elsif clk_en = '1' then ---------- cur_state <= next_state; --------------- rg_valid <= N_valid; --------------- rg_address <= N_address; --------------- if N_write_to_m = '0' then counter_wr <= counter_wr+1; else counter_wr <= counter_wr; end if; --------------- if count = '1' then counter_rd <= counter_rd+1; rg_write_on_FTDI <= '1'; else counter_rd <= counter_rd; rg_write_on_FTDI <= rg_write_on_FTDI; end if; --------------- rg_read_from_m <= N_read_from_m; rg_write_to_m <= N_write_to_m; --------------- rg_read_or_write <= read_or_write; ---------- else ---------- cur_state <= cur_state; --------------- rg_valid <= rg_valid; --------------- rg_read_from_m <= rg_read_from_m; rg_write_to_m <= rg_write_to_m; --------------- counter_wr <= counter_wr; counter_rd <= counter_rd; --------------- rg_address <= rg_address; --------------- rg_read_or_write <= rg_read_or_write; rg_write_on_FTDI <= rg_write_on_FTDI; ---------- end if; end if; end process; --============================================================ --============================================================
|
|
|
|
|
Sep 18 2013, 07:35
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890

|
Я думаю, что при добавлении SignalTap'а к проекту имеют место нарушения задания временных ограничений. Возможно Вами выбрана слишком высокая частота дискретизации. SignalTap не успевает класть в выделяемое для него ОЗУ часть данных. Проверьте во временном анализаторе. Из-за этого такая картина закономерна. И рекомендую использовать инкрементальную компиляцию, а сигналы в сигнал тап добавлять для подпроектов со статусом нетлиста PostFit. Это позволит компилятору не трогать разводку.
|
|
|
|
|
Sep 18 2013, 07:45
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(DENth @ Sep 18 2013, 11:35)  Я думаю, что при добавлении SignalTap'а к проекту имеют место нарушения задания временных ограничений. Возможно Вами выбрана слишком высокая частота дискретизации. SignalTap не успевает класть в выделяемое для него ОЗУ часть данных. Проверьте во временном анализаторе. Из-за этого такая картина закономерна. И рекомендую использовать инкрементальную компиляцию, а сигналы в сигнал тап добавлять для подпроектов со статусом нетлиста PostFit. Это позволит компилятору не трогать разводку. Спасибо, попробую. А для SignalTaP реально выбрана частота в 200 МГц, т.к. память на 100 МГц работает.
|
|
|
|
|
Sep 18 2013, 07:48
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890

|
А какая ПЛИС Вами используется? Вы проверяли в документации, что внутреннее ОЗУ ПЛИС может работать на частоте 200 МГц?
|
|
|
|
|
Sep 18 2013, 09:48
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(DENth @ Sep 18 2013, 11:48)  А какая ПЛИС Вами используется? Вы проверяли в документации, что внутреннее ОЗУ ПЛИС может работать на частоте 200 МГц? Используется Cyclone EP4CE115F29C7, тактовая частота в 200 МГц нигде не используется, она везде делится и в таком виде подается на модули, чаще всего 100 МГц, 50 и 25. А для SignalTap указал максимальную, т.к. тогда частоты в 100 МГц он отображает некорректно. Цитата Что касается тайминга и ругани Квартуса
Однако, время от времени, он все компилит нормально и никаких глюков не возникает, а меняю я всего лишь константу
|
|
|
|
|
Sep 18 2013, 10:26
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890

|
Вы противоречите сами себе. 200 МГц как раз-таки очень даже используется. На весь сигнал тап. А он оперирует теми же блоками памяти, что и остальной проект. А имел я ввиду следующее:  Отсюда видно, что предел - 274 МГц в вашем случае. Но это в теории. А из приведенного Вами отчета видно, что Вы не используете временной анализ. Компилятору неизвестно ничего о каких-либо ограничениях и о том, как должен работать проект. О чем он и пишет в первой приведенной строке. Задайте констрейны на указанные в варнингах клоки и посмотрите на отчет анализатора. Без использования временных ограничений проект будет жить своей жизнью =)
|
|
|
|
|
Sep 18 2013, 10:30
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(DENth @ Sep 18 2013, 14:26)  А из приведенного Вами отчета видно, что Вы не используете временной анализ. Компилятору неизвестно ничего о каких-либо ограничениях и о том, как должен работать проект. О чем он и пишет в первой приведенной строке. Задайте констрейны на указанные в варнингах клоки и посмотрите на отчет анализатора.
Без использования временных ограничений проект будет жить своей жизнью =) Вот и пришло время вплотную заняться констрейнами, до этого все как-то обходился без них) порекомендуете литературу или ссылке, где можно это дело изучить и с чего начать? Спасибо)
|
|
|
|
|
Sep 18 2013, 10:42
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890

|
Русскоязычной литературы не много. Стандарт по этой теме - вот эти статьи: http://www.kit-e.ru/articles/plis/2010_9_51.php
|
|
|
|
|
Sep 19 2013, 04:21
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(DENth @ Sep 18 2013, 14:42)  Русскоязычной литературы не много. Стандарт по этой теме - вот эти статьи: http://www.kit-e.ru/articles/plis/2010_9_51.phpСпасибо, буду изучать)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|