реклама на сайте
подробности

 
 
> Отладка проектов
D-Luxe
сообщение Feb 6 2011, 20:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Ребят я новичок в FPGA программировании. Немного не понимаю как происходит процесс проектирования устройств. Допустим я написал кусок на VHDL. Моделирую схему в Aldec'e. Моделирование проходит успешно. Отлаживаю на железе, проект падает при работе на высокой частоте(на низкой работает нормально). Приходится выводить контрольные точки схемы на логический анализатор и разбираться в чем причина.

Как вы проектируете, отлаживаете схемы?


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 18)
zombi
сообщение Feb 6 2011, 21:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(D-Luxe @ Feb 7 2011, 00:01) *
Отлаживаю на железе, проект падает при работе на высокой частоте(на низкой работает нормально).

Я в квартусе сразу моделирую на частоте железа! И в устройсве все работает даже на большей частоте.
Go to the top of the page
 
+Quote Post
_VM
сообщение Feb 6 2011, 23:12
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 23-03-05
Из: Москва
Пользователь №: 3 625



C каким ПЛИСом работаете?
Схема синхронная?

Обычно в средах проектирования после компиляции выдается отчет с "частотными" характеристиками полученной прошивки.
Еще можно указывать, что синтезировать прошивку надо с учетом ограничений (см. Timing-Driven Synthesis).
Еще можно анализатору задавать характеристики быстродействия и после компиляции будут выводится сообщения одовлетворены они или нет.
Я не встречал, что если анализ прошел успешно, то в железе не работает (разве только когда используются preliminary библиотеки).
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 6 2011, 23:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(D-Luxe @ Feb 7 2011, 02:01) *
Отлаживаю на железе

зря. смотрите отчеты по таймингам (критические пути и пр.), а моделируйте в Aldec. ошибку все равно исправлять в коде.
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Feb 7 2011, 08:29
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Схемы синхронные, работаю с Virtex4FX. Вообще проект занимает половину кристалла. К нему дописываю дополнительный компонент, моделирую его в Aldec'e, потом вставляю в EDK. Такая методика вобщем. Где в aldec'е можно задать ограничение на частоту?


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 7 2011, 16:38
Сообщение #6


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(D-Luxe @ Feb 7 2011, 11:29) *
Схемы синхронные, работаю с Virtex4FX. Вообще проект занимает половину кристалла. К нему дописываю дополнительный компонент, моделирую его в Aldec'e, потом вставляю в EDK. Такая методика вобщем. Где в aldec'е можно задать ограничение на частоту?

Именно про EDK не скажу (работаю с голым ISE), но методика, в общем, одна и та же.
Есть *.ucf файл, он содержит User Constraint'ы (различные ограничения, наложенные на проект, в т.ч. и на частоту для clock'ов). Данные в этом файле можно править как руками, так и рядом программ: Constarint Editor (преимущественно для временных ограничений), PACE/Plan Ahead (для ограничений на размещение, например расположение ножек) и пр.
Описание User Constraint’ов находятся в файле cgd.pdf.

Вам необходимо задать частоту всех входных clock'ов ПЛИС. Если Вы получаете при помощи DLL/PLL дочерние clock'и, то ISE сама рассчитает их параметры из заданных входных частот через параметры DLL/PLL.

При Place&Route ISE старается выполнить все ограничения, если что-то не может быть выполнено возникают соответствующие предупреждения. Временной отчёт (*.twx) обычно просматривается при помощи Timing Analiser.

Также, в файле xst.pdf можно найти описание synthesis constarint'ов, используемых при синтезе языкового описания.
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Feb 7 2011, 17:44
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Цитата(Boris_TS @ Feb 7 2011, 19:38) *
Именно про EDK не скажу (работаю с голым ISE), но методика, в общем, одна и та же.
Есть *.ucf файл, он содержит User Constraint'ы (различные ограничения, наложенные на проект, в т.ч. и на частоту для clock'ов). Данные в этом файле можно править как руками, так и рядом программ: Constarint Editor (преимущественно для временных ограничений), PACE/Plan Ahead (для ограничений на размещение, например расположение ножек) и пр.
Описание User Constraint’ов находятся в файле cgd.pdf.

Вам необходимо задать частоту всех входных clock'ов ПЛИС. Если Вы получаете при помощи DLL/PLL дочерние clock'и, то ISE сама рассчитает их параметры из заданных входных частот через параметры DLL/PLL.

При Place&Route ISE старается выполнить все ограничения, если что-то не может быть выполнено возникают соответствующие предупреждения. Временной отчёт (*.twx) обычно просматривается при помощи Timing Analiser.

Также, в файле xst.pdf можно найти описание synthesis constarint'ов, используемых при синтезе языкового описания.


То есть констрейны надо писать только на входные частоты? Например у мя в ПЛИС входят 5 частот: 2 для тактирования MGT блока, 2 для тактирования EMAC'а и 5 частота подается на clock generator. А на дочерние от clock generator'а не надо писать?


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
DW0
сообщение Feb 7 2011, 21:38
Сообщение #8


Участник
*

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



а Вы клоки на специальные входы ПЛИС задаете или куда придется???
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Feb 8 2011, 10:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Цитата(DW0 @ Feb 8 2011, 00:38) *
а Вы клоки на специальные входы ПЛИС задаете или куда придется???

Частоты жестко поданы на спец входы. Не я же плату проектировал.


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 8 2011, 11:22
Сообщение #10


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(D-Luxe @ Feb 7 2011, 20:44) *
То есть констрейны надо писать только на входные частоты?

Да, именно частоты (или периоды) необходимо задать только у входных clock'ов (лучше назначать на связь, относящуюся к положительной половинке входной ножки). И стараться ни в коем случае не задавать их на внутренние линии.

Цитата(D-Luxe @ Feb 7 2011, 20:44) *
Например у мя в ПЛИС входят 5 частот: 2 для тактирования MGT блока, 2 для тактирования EMAC'а и 5 частота подается на clock generator. А на дочерние от clock generator'а не надо писать?

Да в этом случае Вам необходимо описать 5 разных constraint для входных частот (я так понял clock generator - это нечто (PLL/DLL и пр.) внутри ПЛИС).

Однако, коли частот пять, то должны появиться и cross clock domain переходы - вот для этих переходов понадобится еще наложить некоторое количество дополнительных constraint - по одному на каждый переход на каждое направление перехода.
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Feb 8 2011, 14:45
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Спасибо за совет!

Clock Generator это действительно PLL и DCM блоки. Насчет входных частот сомнений нет.

То есть нужно 2 констрейна на каждый cross clock domain переход?

Вообще, как я понимаю после задания констрейнов, timing analyzer будет выдавать ошибку если проект не проходит по частоте? Среда сама может какнить соптимизировать проект чтобы проект прошел по частоте или он тупо выкинет ошибку?


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 8 2011, 16:35
Сообщение #12


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(D-Luxe @ Feb 8 2011, 17:45) *
То есть нужно 2 констрейна на каждый cross clock domain переход?

Максимум - 2, но ведь не всегда надо переходить в обе стороны, иногда используются и односторонние переходы - всё зависит от конкретной схемотехники.

Цитата(D-Luxe @ Feb 8 2011, 17:45) *
Вообще, как я понимаю после задания констрейнов, timing analyzer будет выдавать ошибку если проект не проходит по частоте? Среда сама может какнить соптимизировать проект чтобы проект прошел по частоте или он тупо выкинет ошибку?

Если быть более точным, то timing analyzer в ISE c 9.1 по 11.5 (в остальных не помню) выдаёт только warning: some constraints are not met. При компиляции среда как-то раскладывает элементы и пытается это развести, затем оценивает, с какими constraints проблемы и старается итерационно эти проблемы устранить.

В параметрах генерации Post-P&R Static Timing Report есть поле Report Unconstrained Paths, впишите туда 250 - и увидите 250 путей не имеющих constraint'ов. Так Вы увидите, на что именно Вы забыли наложить ограничения; далеко не на всё, что там указано, имеет смысл накладывать ограничения... но ознакомиться с этим списком просто необходимо.
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Feb 8 2011, 17:19
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Спасибо за ценную информацию, буду рад если подскажите где еще можно почитать что-нибудь по этой теме.


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Feb 23 2011, 13:40
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Еще вопрос. Что такое Chipscope и в каких случаях им надо пользоваться?


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
o-henry
сообщение Feb 23 2011, 13:56
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069



Цитата(D-Luxe @ Feb 23 2011, 15:40) *
Еще вопрос. Что такое Chipscope и в каких случаях им надо пользоваться?

Его придумали чтобы не надо было
Цитата
выводить контрольные точки схемы на логический анализатор

Как пользоваться - см. оригинальную документацию или гугл.
На русском есть немного здесь.
Go to the top of the page
 
+Quote Post
zomg
сообщение Feb 26 2011, 07:48
Сообщение #16


Участник
*

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



Цитата
То есть нужно 2 констрейна на каждый cross clock domain переход?

Чтобы ISE анализировал cross clock domain переходы, то в .ucf необходимо определить связь между клоками, например clk0 и clk1, таким образом:
Код
NET "clk0" TNM_NET = "SYS_clk0";
TIMESPEC "TS_SYS_clk0" = PERIOD "SYS_clk0" 5 ns HIGH 50 %;
NET "clk1" TNM_NET = "SYS_clk1";
TIMESPEC "TS_SYS_clk1" = PERIOD "SYS_clk1" "TS_SYS_clk0"*2 HIGH 50 %;

Здесь clk0 и clk1 приходят с внешних ножек. Констрейнты для клоков с выхода PLL и DCM будут прописаны ISE автоматически, за них беспокоиться не надо.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 26 2011, 08:57
Сообщение #17


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(zomg @ Feb 26 2011, 10:48) *
Чтобы ISE анализировал cross clock domain переходы, то в .ucf необходимо определить связь между клоками, например clk0 и clk1, таким образом:
Код
NET "clk0" TNM_NET = "SYS_clk0";
TIMESPEC "TS_SYS_clk0" = PERIOD "SYS_clk0" 5 ns HIGH 50 %;
NET "clk1" TNM_NET = "SYS_clk1";
TIMESPEC "TS_SYS_clk1" = PERIOD "SYS_clk1" "TS_SYS_clk0"*2 HIGH 50 %;

Здесь clk0 и clk1 приходят с внешних ножек. Констрейнты для клоков с выхода PLL и DCM будут прописаны ISE автоматически, за них беспокоиться не надо.

1. При такой записи SYS_clk0 и SYS_clk1 будут для Timing Analyzer'а связаны по фазе, а в реальности этого может и не быть - не зря же они на разные входы подаются...
2. Для особоневерующих есть более интересный случай, если взять соотношение частот не 2, а, например, 1.01 - вот потеха начнётся...

Для тех, кому лень код писать, а покрутить гаечки хочется:
VHDL:
Код
library IEEE;
use IEEE.Std_Logic_1164.all;

Library UNISIM;
use UNISIM.vcomponents.all;

entity CLK is port (
    IN_D:    in    std_logic;
    IN_CLK:    in    std_logic_vector(1 downto 0);
    OUT_Q:    out    std_logic_vector(1 downto 0) );
end entity;


architecture Arc of CLK is
    signal    CLK_UB:    std_logic_vector(OUT_Q'Range);
    signal    CLK:    std_logic_vector(OUT_Q'Range);
    signal    D:        std_logic;
    signal    Q:        std_logic_vector(OUT_Q'Range) := (others => '0');
    
    attribute iob: string;
    attribute iob of Q: signal is "false";
begin
    D_IBUF: component IBUF port map ( I => IN_D, O => D );
    
    IO: for i in CLK'Reverse_Range generate
        CLK_IBUF: component IBUFG port map ( I => IN_CLK(I), O => CLK_UB(i) );
        CLK_BUFG: component BUFG  port map ( I => CLK_UB(I), O => CLK   (i) );
        Q_OBUF:   component OBUF  port map ( I => Q(I),      O => OUT_Q (i) );
    end generate;
    
    Q(0) <= D    when rising_edge(CLK(0));
    Q(1) <= Q(0) when rising_edge(CLK(1));
end architecture;

UCF:
Код
NET "IN_CLK<0>" TNM_NET = CLK0;
NET "IN_CLK<1>" TNM_NET = CLK1;
TIMESPEC TS_CLK_0 = PERIOD "CLK0" 5 ns          HIGH 50%;
TIMESPEC TS_CLK_1 = PERIOD "CLK1" TS_CLK_0*1.01 HIGH 50%;

Для ленивых результат от P&R:
Код
------------------------------------------------------------------------------------------------------
  Constraint                                |  Check  | Worst Case |  Best Case | Timing |   Timing  
                                            |         |    Slack   | Achievable | Errors |    Score  
------------------------------------------------------------------------------------------------------
* TS_CLK_1 = PERIOD TIMEGRP "CLK1" TS_CLK_0 | SETUP   |    -1.706ns|   177.356ns|       1|        1706
   * 1.01 HIGH 50%                          | HOLD    |     0.678ns|            |       0|           0
------------------------------------------------------------------------------------------------------
  TS_CLK_0 = PERIOD TIMEGRP "CLK0" 5 ns HIG | N/A     |         N/A|         N/A|     N/A|         N/A
  H 50%                                     |         |            |            |        |            
------------------------------------------------------------------------------------------------------

P.S. Вот с этим (метастабильностью) и развлекаются при cross clock domain переходах.
Go to the top of the page
 
+Quote Post
zomg
сообщение Feb 26 2011, 09:44
Сообщение #18


Участник
*

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



Цитата
1. При такой записи SYS_clk0 и SYS_clk1 будут для Timing Analyzer'а связаны по фазе, а в реальности этого может и не быть - не зря же они на разные входы подаются...

А если в этом случае разность фаз случайная, то что же делать?

Если схемы с такими клоками пересечь, то такая абра-кадабра получится...
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 26 2011, 12:20
Сообщение #19


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(zomg @ Feb 26 2011, 12:44) *
А если в этом случае разность фаз случайная, то что же делать?
Как что делать ?? - cross clock domain переход делать... для управляющих сигналов синхронизаторы делать, а для данных обычно надобно FIFO прилаживать.

Цитата(zomg @ Feb 26 2011, 12:44) *
Если схемы с такими клоками пересечь, то такая абра-кадабра получится...
Вот над этим и ломают головы люди умные... как бы оно так половчее сделать, чтобы безотказно работало, да еще и с меньшей задержкой данные передавало, и места бы чтобы поменьше занимало.

Вот и приходится ставить синхронизаторы для перехода с ClkX на ClkY, а чтобы MAP/P&R голову долго не ломали по дополнительному constaint'у накладывать приходится на каждое направления перехода (как я и писал ранее)... Да и в самих синхронизаторах constaint’ов разных по пачке, чтобы подавлялась метастабильность получше.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 20:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01628 секунд с 7
ELECTRONIX ©2004-2016