Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нестабильная зарузку NIOS из onchip mem при герерации тактовой на PLL на Cyclone III
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
KIM
Народ помогите плиз. Есть девайс. На нем- cyclone III и USB котроллер cy7c68013 (очень распрастраненный Cypress, может выдавать на Cyclone тактовую в 12, 24 или 48 мегагерц) На циклоне реализован NIOS, программа небольшая и я решил обойтись без бутлоалера - грузить всю прогу сразу в onchip mem. Все работало при заведении тактовой с USB, однако хотелось бы ее увеличить, тем более что тайминг аналайзер сказал что тактовая до 110 Мг подойдет. Как начал использовать PLL - начали появляться странности - нестабильная прогрузка NIOSa. То есть в 90% случаев он загружается нормально, а в остальных то ли виснет толи непойму что. Но явно не корректно заружается. Тактовую на PLL увеличиваю в два раза - получается 96 Мгц. Тайминг аналайзер не выдает ничего плохого -тактовая нормальная, задержек нигде нет. Если NIOS грузиться девайс может работать по несколько суток без единой ошибки - проверял. В чем может быть проблема с загрузкой? Ногу PLL "locked" анализирую - приостанавливаю подачу тактовой на NIOS (мегафукнция ALTCLKCTRL), Жду пока стабилизируется, потом снова подаю. Процессор при этом не ресетю, но пробовал и ресетить, не помогало.
vadimuzzz
я с PLL делал так: ALTCLKCTRL не ставил, PLL "locked" заводил на reset процессора (полярность только правильную сделать). на 120МГц заводил, без сбоев.
KIM
Цитата(vadimuzzz @ Mar 31 2010, 10:54) *
я с PLL делал так: ALTCLKCTRL не ставил, PLL "locked" заводил на reset процессора (полярность только правильную сделать). на 120МГц заводил, без сбоев.


Сейчас попробуем, хотя я так тоже пробовал, не сразу я до ALTCLKCTRL дошел, но для чистоты эксперимента, еще разок.

Цитата(KIM @ Mar 31 2010, 11:01) *
Сейчас попробуем, хотя я так тоже пробовал, не сразу я до ALTCLKCTRL дошел, но для чистоты эксперимента, еще разок.


Неполучается. Не всегда проходит инициализация. А вы как PLL генерировали? у меня In normal mode, поставил флаг Self reset on lose lock.
Вообще я в первый раз pll использую. Может в этом дело?
vadimuzzz
Цитата(KIM @ Mar 31 2010, 13:16) *
Неполучается. Не всегда проходит инициализация. А вы как PLL генерировали? у меня In normal mode, поставил флаг Self reset on lose lock.
Вообще я в первый раз pll использую. Может в этом дело?

Self reset я не ставил, у меня кварцевый опорник. а что значит - инициализация не проходит? если прога в on-chip слинкована и вектор сброса на on-chip нацелен, она вместе с sof загружается. вообще сильно на тайминги смахивает, точно все законстрейнили?
KIM
Цитата(vadimuzzz @ Mar 31 2010, 11:39) *
Self reset я не ставил, у меня кварцевый опорник. а что значит - инициализация не проходит? если прога в on-chip слинкована и вектор сброса на on-chip нацелен, она вместе с sof загружается.



Все правильно, прога слинкована в onchip.я для проверки загрузки прилепил к процессору PIO на выход,первой командой в функции main стоит установление этого PIO в единицу (по умолчанию он в 0), так вот он не устанавливается, то есть на этапе загрузки что то по-видимому происходит с процессором, он не доходит до этого места. программа в Onchip слинкована правильно, поскольку он все-таки загружается правильно в большинстве случаев и норм работает.
vadimuzzz
но сама ПЛИС сконфигурилась? если flash-programmer`ом в ниос потыкать - проц ему виден?
Stewart Little
Тайминги, тайминги и еще раз тайминги.

Цитата(KIM @ Mar 31 2010, 10:25) *
Тайминг аналайзер не выдает ничего плохого -тактовая нормальная, задержек нигде нет.

Это еще не означает, что проект будет функционировать правильно. Зато это может означать, что у Вас не заданы необходимые констрейны.
Как в законах Мерфи - "Если Вам кажется, что Ваш проект работает - значит Вы чего-то не заметили" smile.gif

Второе, на что нужно обратить внимание - используете ли Вы начальные состояния триггеров по умолчанию? При этом можно нарваться на неприятности, когда проект будет работать корректно сразу после загрузки ПЛИС, а вот после сброса ниоса вдруг поведет себя непредсказуемо.
Нужно все триггеры приводить в начальное состояние принудительно.

Еще вопрос как Вы используете PLL - как компонент в SOPC Builder'е или "снаружи" ниосовской системы?
KIM
Цитата
вообще сильно на тайминги смахивает, точно все законстрейнили


Тайминг аналайзер квартуса ни выдает ничего плохого. после PLL у меня тактовая получается 96, максимальная по тайминг аналайзеру - 108, в разделе multiconer timing alalyser summary все норм. Кроме того, если процессора все таки загрузиться, я его гонял больше суток по два раза - ни одной ошибки в рассчетах (там криптографию он считает, ошибки бы сразу вылезли если что)

Цитата(vadimuzzz @ Mar 31 2010, 11:46) *
но сама ПЛИС сконфигурилась? если flash-programmer`ом в ниос потыкать - проц ему виден?

Да. проц видет, system_id получает

Цитата(Stewart Little @ Mar 31 2010, 11:53) *
Тайминги, тайминги и еще раз тайминги.

Это еще не означает, что проект будет функционировать правильно. Зато это может означать, что у Вас не заданы необходимые констрейны.
Как в законах Мерфи - "Если Вам кажется, что Ваш проект работает - значит Вы чего-то не заметили" smile.gif


Мой файл SDC:

Код
create_clock -name input_clk -period 15.151 [get_ports board_clk]
create_clock -name usb_clk -period 20833 [get_ports usb_clk]

create_generated_clock -source usb_clk \
-multiply_by 2 \
-divide_by 1 \
-name pll_clk  pll:GLOBAL_PLL|altpll:altpll_component|pll_altpll:auto_generated|wire_pll1_clk[0]


Цитата(Stewart Little @ Mar 31 2010, 11:53) *
Еще вопрос как Вы используете PLL - как компонент в SOPC Builder'е или "снаружи" ниосовской системы?

"Снаружи" nios системы

Цитата(vadimuzzz @ Mar 31 2010, 10:54) *
я с PLL делал так: ALTCLKCTRL не ставил, PLL "locked" заводил на reset процессора (полярность только правильную сделать). на 120МГц заводил, без сбоев.



вопрос про полярность выходв PLL "locked" и NIOS_CPU "reset": для того чтобы ввести процессор в Reset : Reset <= '0'; чтобы вывести из ресета - Reset <= '1';
если PLL залочена то locked в '0' Если разлочена - то в '1'.
Соответствено чтобы ресетнуть процессор когда pll теряет lock надо: reset <= not lock. Все правильно?
vadimuzzz
Цитата
Тайминг аналайзер квартуса ни выдает ничего плохого

warnings есть?

Цитата
вопрос про полярность выходв PLL "locked" и NIOS_CPU "reset": для того чтобы ввести процессор в Reset : Reset <= '0'; чтобы вывести из ресета - Reset <= '1';
если PLL залочена то locked в '0' Если разлочена - то в '1'.

locked - active high (1 в захвате)
reset_n у проца - active low (нулем сбрасывается)
инвертор не нужен, напрямую.
KIM
vadimuzzz
Ясно,у меня так и было
vadimuzzz
ну, кроме таймингов на ум ничего не приходит. выкладывайте репорт. картинку в SOPC тоже давайте
KIM
Цитата(KIM @ Mar 31 2010, 12:22) *
warnings есть?


Есть варнинги, щас отпишу, проект пересобиру

картика из SOPC:

Цитата(vadimuzzz @ Mar 31 2010, 12:50) *
ну, кроме таймингов на ум ничего не приходит. выкладывайте репорт. картинку в SOPC тоже давайте



отчет тайминг аналайзера:



Я не указывал раньше - тут два процессора. Оба инитсятся из Onchip mem. То что указывал раньше про один проц - справедливо для обоих процов. Бывает что оба не инитятся, бывает что только один. Еще раз повторюсь что в Onchip все правильно слинковано поскольку частенько при включении все нормально инитится и работает. В общем - нет стабильности
vadimuzzz
так, чтобы последние варнинги убрать добавьте derive_clock_uncertainty:
Код
create_clock -name usb_clk -period 20833 [get_ports usb_clk]

create_generated_clock -source usb_clk \
-multiply_by 2 \
-divide_by 1 \
-name pll_clk pll:GLOBAL_PLL|altpll:altpll_component|pll_altpll:auto_generated|wire_pll1_clk[0
]
derive_clock_uncertainty

это даст более точную оценку Fmax.
про board_clk не понял, он имеет какое-то отношение к системе? да, еще он про jtag-овский клок ругается(altera_reserved_tck), у него наверное констрейн уже есть, посмотрите в папке проекта
KIM
Цитата(vadimuzzz @ Mar 31 2010, 15:47) *
про board_clk не понял, он имеет какое-то отношение к системе?


В данный момент не имеет, это у меня генератор на 66 МГц стоит на плате, его я пока не использую, раньше использовал, видимо упоминания остались
KIM
в общем ситауция не поменялась, все так же то рузится то не грузится. С altera_reserved_tck не разобрался, перевернул все *.sdc в проекте, нигде не указывается, варнинг так и есть. Остальные варнинги пропали, Fmax для pll_clk - 108 Мгц.
vadimuzzz
еще такой вариант: поиграть выходной частотой PLL, когда начинаются сбои. это в дополнение к вышеупомянутым поправкам. а что в i/o не законстрейнено?
KIM
Цитата(vadimuzzz @ Mar 31 2010, 18:05) *
еще такой вариант: поиграть выходной частотой PLL, когда начинаются сбои. это в дополнение к вышеупомянутым поправкам.


С частотой поиграл: результат примерно следующий - гдето до 70 МГц все вроде нормально, после 70 начинаются нестабильность с загрузкой. Повторяюсь - только с загрузкой, если ниосы прогружаются они работают отлично. Вот щас всю ночь стояло работало - ниодной ошибки. Работало на 96 МГц.

Цитата(vadimuzzz @ Mar 31 2010, 18:05) *
а что в i/o не законстрейнено?


Там ничего что моголо бы повлиять на загрузку. Только выходы на JTAG (altera_reserved_tms, altera_reserved_tdi) и мой вовоод вывод на USB, который отлично работает
dvladim
Цитата(KIM @ Apr 1 2010, 09:59) *
С частотой поиграл: результат примерно следующий - гдето до 70 МГц все вроде нормально, после 70 начинаются нестабильность с загрузкой. Повторяюсь - только с загрузкой, если ниосы прогружаются они работают отлично.

Если вся программа в on-chip памяти, то о какой загрузке ниоса может идти речь? Или у вас прошивка на этой же частоте грузится?
KIM
Цитата(dvladim @ Apr 1 2010, 11:16) *
Если вся программа в on-chip памяти, то о какой загрузке ниоса может идти речь? Или у вас прошивка на этой же частоте грузится?


Вся программа в Onchip памяти, под загрузкой я понимаю инициализацию процессора, передачу управления в функцию main, где первым делом устанавливается в '1' PIO, по которомы снаружи SOPC системы я понимаю, успешно ли иниуиировался процесоор или нет. Так вотесли схема работает на 96 МГц это происходит невсегда. Хотя по таймингам все должно быть нормально. Но если всетаки в main управление попадет, все работает отлично и очень долго
vadimuzzz
добавьте SignalTap( http://www.altera.com/literature/an/an446.pdf ) и посмотрите, чем занимается проц во время сбоя. правда я не знаю, как оно в двухпроцессорной конфигурации выглядит.
KIM
vadimuzzz
Буду пробовать разбираться, спасибо
KIM
Цитата(KIM @ Apr 1 2010, 12:16) *
Буду пробовать разбираться, спасибо


Вот что происходит если проц не инитится:

CODE


Signal Legend:

Key Signal Name

0 = cpu_system:CPU|cpu:the_cpu|Nios II Inst Address
1 = cpu_system:CPU|cpu:the_cpu|Nios II Disassembly

Data Table:

Signals-> 0 1

sample

0 <empty> <empty>
1 <empty> <empty>
2 0x80824 flushi bt
3 <empty> <empty>
4 <empty> <empty>
5 <empty> <empty>
6 0x80828 br 0x8082c
7 <empty> <empty>
8 <empty> <empty>
9 <empty> <empty>
10 <empty> <empty>
11 <empty> <empty>
12 <empty> <empty>
13 <empty> <empty>
14 0x8082c br 0x80820
15 <empty> <empty>
16 <empty> <empty>
17 <empty> <empty>
18 <empty> <empty>
19 <empty> <empty>
20 <empty> <empty>
21 <empty> <empty>
22 <empty> <empty>
23 <empty> <empty>
24 0x80820 nextpc bt
25 <empty> <empty>
26 <empty> <empty>
27 0x80824 flushi bt
28 <empty> <empty>
29 <empty> <empty>
30 <empty> <empty>
31 0x80828 br 0x8082c
32 <empty> <empty>
33 <empty> <empty>
34 <empty> <empty>
35 <empty> <empty>
36 <empty> <empty>
37 <empty> <empty>
38 <empty> <empty>
39 0x8082c br 0x80820
40 <empty> <empty>
41 <empty> <empty>
42 <empty> <empty>
43 <empty> <empty>
44 <empty> <empty>
45 <empty> <empty>
46 <empty> <empty>
47 <empty> <empty>
48 <empty> <empty>
49 0x80820 nextpc bt
50 <empty> <empty>
51 <empty> <empty>
52 0x80824 flushi bt
53 <empty> <empty>
54 <empty> <empty>
55 <empty> <empty>
56 0x80828 br 0x8082c
57 <empty> <empty>
58 <empty> <empty>
59 <empty> <empty>
60 <empty> <empty>
61 <empty> <empty>
62 <empty> <empty>
63 <empty> <empty>
64 0x8082c br 0x80820
65 <empty> <empty>
66 <empty> <empty>
67 <empty> <empty>
68 <empty> <empty>
69 <empty> <empty>
70 <empty> <empty>
71 <empty> <empty>
72 <empty> <empty>
73 <empty> <empty>
74 0x80820 nextpc bt
75 <empty> <empty>
76 <empty> <empty>
77 0x80824 flushi bt
78 <empty> <empty>
79 <empty> <empty>
80 <empty> <empty>
81 0x80828 br 0x8082c
82 <empty> <empty>
83 <empty> <empty>
84 <empty> <empty>
85 <empty> <empty>
86 <empty> <empty>
87 <empty> <empty>
88 <empty> <empty>
89 0x8082c br 0x80820
90 <empty> <empty>
91 <empty> <empty>
92 <empty> <empty>
93 <empty> <empty>
94 <empty> <empty>
95 <empty> <empty>
96 <empty> <empty>
97 <empty> <empty>
98 <empty> <empty>
99 0x80820 nextpc bt
100 <empty> <empty>
101 <empty> <empty>
102 0x80824 flushi bt
103 <empty> <empty>
104 <empty> <empty>
105 <empty> <empty>
106 0x80828 br 0x8082c
107 <empty> <empty>
108 <empty> <empty>
109 <empty> <empty>
110 <empty> <empty>
111 <empty> <empty>
112 <empty> <empty>
113 <empty> <empty>
114 0x8082c br 0x80820
115 <empty> <empty>
116 <empty> <empty>
117 <empty> <empty>
118 <empty> <empty>
119 <empty> <empty>
120 <empty> <empty>
121 <empty> <empty>
122 <empty> <empty>
123 <empty> <empty>
124 0x80820 nextpc bt
125 <empty> <empty>
126 <empty> <empty>
127 0x80824 flushi bt
128 <empty> <empty>
129 <empty> <empty>
130 <empty> <empty>
131 0x80828 br 0x8082c
132 <empty> <empty>
133 <empty> <empty>
134 <empty> <empty>
135 <empty> <empty>
136 <empty> <empty>
137 <empty> <empty>
138 <empty> <empty>
139 0x8082c br 0x80820
140 <empty> <empty>
141 <empty> <empty>
142 <empty> <empty>
143 <empty> <empty>
144 <empty> <empty>
145 <empty> <empty>
146 <empty> <empty>
147 <empty> <empty>
148 <empty> <empty>
149 0x80820 nextpc bt
150 <empty> <empty>
151 <empty> <empty>
152 0x80824 flushi bt
153 <empty> <empty>
154 <empty> <empty>
155 <empty> <empty>
156 0x80828 br 0x8082c
157 <empty> <empty>
158 <empty> <empty>
159 <empty> <empty>
160 <empty> <empty>
161 <empty> <empty>
162 <empty> <empty>
163 <empty> <empty>
164 0x8082c br 0x80820
165 <empty> <empty>
166 <empty> <empty>
167 <empty> <empty>
168 <empty> <empty>
169 <empty> <empty>
170 <empty> <empty>
171 <empty> <empty>
172 <empty> <empty>
173 <empty> <empty>
174 0x80820 nextpc bt
175 <empty> <empty>
176 <empty> <empty>
177 0x80824 flushi bt
178 <empty> <empty>
179 <empty> <empty>
180 <empty> <empty>
181 0x80828 br 0x8082c
182 <empty> <empty>
183 <empty> <empty>
184 <empty> <empty>
185 <empty> <empty>
186 <empty> <empty>
187 <empty> <empty>
188 <empty> <empty>
189 0x8082c br 0x80820
190 <empty> <empty>
191 <empty> <empty>
192 <empty> <empty>
193 <empty> <empty>
194 <empty> <empty>
195 <empty> <empty>
196 <empty> <empty>
197 <empty> <empty>
198 <empty> <empty>
199 0x80820 nextpc bt
200 <empty> <empty>
201 <empty> <empty>
202 0x80824 flushi bt
203 <empty> <empty>
204 <empty> <empty>
205 <empty> <empty>
206 0x80828 br 0x8082c
207 <empty> <empty>
208 <empty> <empty>
209 <empty> <empty>
210 <empty> <empty>
211 <empty> <empty>
212 <empty> <empty>
213 <empty> <empty>
214 0x8082c br 0x80820
215 <empty> <empty>
216 <empty> <empty>
217 <empty> <empty>
218 <empty> <empty>
219 <empty> <empty>
220 <empty> <empty>
221 <empty> <empty>
222 <empty> <empty>
223 <empty> <empty>
224 0x80820 nextpc bt
225 <empty> <empty>
226 <empty> <empty>
227 0x80824 flushi bt
228 <empty> <empty>
229 <empty> <empty>
230 <empty> <empty>
231 0x80828 br 0x8082c
232 <empty> <empty>
233 <empty> <empty>
234 <empty> <empty>
235 <empty> <empty>
236 <empty> <empty>
237 <empty> <empty>
238 <empty> <empty>
239 0x8082c br 0x80820
240 <empty> <empty>
241 <empty> <empty>
242 <empty> <empty>
243 <empty> <empty>
244 <empty> <empty>
245 <empty> <empty>
246 <empty> <empty>
247 <empty> <empty>
248 <empty> <empty>
249 0x80820 nextpc bt
250 <empty> <empty>
251 <empty> <empty>
252 0x80824 flushi bt
253 <empty> <empty>
254 <empty> <empty>
255 040412h 0C408301C40412h




чтонибудь говорит кроме того что налицо зацикливание?

Сейча поставил триггер на ресет вектор (0x00000000), выкладываю два файла - запись того что происходит в начале инициализации вслучае, если она в дальнейшем прошла успешно, и в случае, если проц завис. Мне кажется тут причина в том что из Onchip mem в каких то случаях происходит некорректное считывание команд. Как такое может быть?
vadimuzzz
Цитата(KIM @ Apr 1 2010, 17:08) *
Мне кажется тут причина в том что из Onchip mem в каких то случаях происходит некорректное считывание команд. Как такое может быть?

потому что изначально была некорректная запись (при инициализации)? сделайте objdump программ(в настойках ниос-иде есть галка), чтобы идентифицировать куски кода в районе ресета. потом нужно как-то ухитриться сделать дамп памяти on-chip во время сбоя. тут, возможно, придется сделать контроллер памяти с доступом извне SOPC-системы, чтобы была доступна в момент зависания. или дать одному из ядер доступ к памяти второго(наверное, лучше ее 2-портовой сделать) и ждать пока оно (второе) зависнет. пока неясно, то ли содержимое памяти - лажа, то ли ядро неправильно читает. а, еще надо добавить data master port зависшего ядра в диаграмму signaltap, добавит определенности с памятью.
dim99
Есть один вариант:
когда делал двухъядерную систему в каком-то талмуде говорилось про адреса ядер Nios II и соответствующей on-chip памяти.

Так вот у меня все заработало только тогда, когда вставил одинаковые адреса у ядер и памяти.

Попробуйте сделать, возможно поможет.
Аматер
Я запускал ниос самый навороченный из внутренней памяти. Частоту на него подавал с PLL, 100 MHz. PLL запускал от внешнего генератора 50 MHz. Все было нормально.
Кстати попытался в том же проекте использовать ALTCLKCTRL но эта функция у меня почему то по частоте не проходила на 200 MHz. Пробовал ниос вообще не сбрасывать, он все равно работал, но сейчас сбрасываю для надежности. В проекте ставил простейший класический анализ времени.
Пытался использовать SignalTap, но он почему то глючил по черному на 100 MHz.
KIM
Цитата(vadimuzzz @ Apr 1 2010, 15:54) *
потому что изначально была некорректная запись (при инициализации)? сделайте objdump программ(в настойках ниос-иде есть галка), чтобы идентифицировать куски кода в районе ресета. потом нужно как-то ухитриться сделать дамп памяти on-chip во время сбоя. тут, возможно, придется сделать контроллер памяти с доступом извне SOPC-системы, чтобы была доступна в момент зависания. или дать одному из ядер доступ к памяти второго(наверное, лучше ее 2-портовой сделать) и ждать пока оно (второе) зависнет. пока неясно, то ли содержимое памяти - лажа, то ли ядро неправильно читает. а, еще надо добавить data master port зависшего ядра в диаграмму signaltap, добавит определенности с памятью.


Для начала я существенно упростил проект, точнее сделал новый, чтобы попытаться понять причину подобных глюков (тот проект был большой, у меня минут 5-6 компилися обычно на core i7). Теперь в проекте присутствует только проц, ончип память, таймер, один PIO на светодиод.(см. картинку) Прога магиет светодиодом. Глюки полцчились абсолютно такие же. Если частота идет с генератора, все норм, если с PLL - то периодически проц не инициируется. Может у меня плата как нить неправильно разведена, мож какие наводки, питание где нить барахлит или что нить в этом роде? Сделал дампы памяти в случае если проц проинитился успешно и в случае, если завис (делал при помощи Quartus In-System Memory Content Editor) - они одинаковые, то есть память инитися нормально. В чем может быть дело? В ошибках при чтении из памяти? Еще заметил одну особенность - если FPGA прогрелась (постояла с включенным питанием подольше - 1-2 минуты), заметно чаще происходит успешная инициализация проца.

Цитата(dim99 @ Apr 2 2010, 22:24) *
Есть один вариант:
когда делал двухъядерную систему в каком-то талмуде говорилось про адреса ядер Nios II и соответствующей on-chip памяти.

Так вот у меня все заработало только тогда, когда вставил одинаковые адреса у ядер и памяти.

Попробуйте сделать, возможно поможет.


Не совсем понятно что значит адреса ядер и памяти? Ядро ниос - он же мастер, у него нет адреса, у памяти есть. Или выимеете ввиду что в утилите elf2hex нужно правильный диапазон указывать при генерации заливки для Onchip памяти? Или имеете ввиду разрядность памяти?
vadimuzzz
Цитата(KIM @ Apr 3 2010, 17:17) *
Теперь в проекте присутствует только проц, ончип память, таймер, один PIO на светодиод.(см. картинку) Прога магиет светодиодом. Глюки полцчились абсолютно такие же. Если частота идет с генератора, все норм, если с PLL - то периодически проц не инициируется. Может у меня плата как нить неправильно разведена, мож какие наводки, питание где нить барахлит или что нить в этом роде?

как питание делали, особенно PLL? осциллографом/анализатором выходной сигнал смотрели?
Цитата
Сделал дампы памяти в случае если проц проинитился успешно и в случае, если завис (делал при помощи Quartus In-System Memory Content Editor) - они одинаковые, то есть память инитися нормально. В чем может быть дело? В ошибках при чтении из памяти?

в сигналтап добавьте к дизассемблеру еще и сигналы data master, поглядеть как он читает.
Цитата
Еще заметил одну особенность - если FPGA прогрелась (постояла с включенным питанием подольше - 1-2 минуты), заметно чаще происходит успешная инициализация проца.

правда, на питание похоже. а если клок дать с внешнего генератора, мегагерц 100?
KIM
Цитата(vadimuzzz @ Apr 3 2010, 14:42) *
как питание делали, особенно PLL? осциллографом/анализатором выходной сигнал смотрели?


Не я делал, я только всего лишь программист (

Цитата(vadimuzzz @ Apr 3 2010, 14:42) *
как питание делали, особенно PLL? осциллографом/анализатором выходной сигнал смотрели?

в сигналтап добавьте к дизассемблеру еще и сигналы data master, поглядеть как он читает.

правда, на питание похоже. а если клок дать с внешнего генератора, мегагерц 100?

У меня питание идет от USB. может ему элементарно не хватает?

Всмысле для FPGA (ep3c55) нехватает
vadimuzzz
Цитата
У меня питание идет от USB. может ему элементарно не хватает?
Всмысле для FPGA (ep3c55) нехватает

это может быть совсем не элементарно, пусковой ток у такого кристалла м.б. большим, а обнаружить - довольно сложно за короткий промежуток времени на старте. но таки да, последние сведения внушают сомнения. постарайтесь выяснить у того, кто делал плату, как выполнена схема питания: блокировочные кондеры, стабилизаторы, бусины, не превышен ли лимит шины USB(питание все оттуда берется?). не исключено, что проблема именно с питанием PLL, поэтому я и предложил подать клок высокой частоты с внешнего генератора, а также посмотреть целостность выходного сигнала PLL (можно путем сравнения в рабочем режиме и в случае сбоя).
KIM
Цитата(vadimuzzz @ Apr 3 2010, 15:56) *
поэтому я и предложил подать клок высокой частоты с внешнего генератора


подаю клок 66 Мг с генератора, та же фигня с инициализацией


Цитата(KIM @ Apr 3 2010, 21:09) *
не превышен ли лимит шины USB(питание все оттуда берется?).



ДА,полностью оттуда
KIM
посмотрел внимательно разводку платы и обнаружил 15 ножек питания (3.3V) заведенных на ноги ввода, вывода. Может нестабильность идти от этого? В квартусе стояло необозначенные ноги ставить в As input tri-stated with weak pull-up resistor
vadimuzzz
Цитата(KIM @ Apr 5 2010, 04:29) *
посмотрел внимательно разводку платы и обнаружил 15 ножек питания (3.3V) заведенных на ноги ввода, вывода. Может нестабильность идти от этого? В квартусе стояло необозначенные ноги ставить в As input tri-stated with weak pull-up resistor

че-то не понял, прямо с шины 3.3В заходит на i/o пины? зачем это? "As input tri-stated with weak pull-up resistor" - это не страшно, туда можно что угодно подавать. просто вход, подтянутый к плюсу через большой резистор. если проблема с питанием, это должны быть неудачно расположенные конденсаторы, а может стабилизаторы хиленькие, ток не тянут. я правильно понял, что система нестабильно работает и от внешнего генератора на 66 МГц?
KIM
Цитата(vadimuzzz @ Apr 5 2010, 02:32) *
че-то не понял, прямо с шины 3.3В заходит на i/o пины? зачем это? "As input tri-stated with weak pull-up resistor" - это не страшно, туда можно что угодно подавать. просто вход, подтянутый к плюсу через большой резистор. если проблема с питанием, это должны быть неудачно расположенные конденсаторы, а может стабилизаторы хиленькие, ток не тянут. я правильно понял, что система нестабильно работает и от внешнего генератора на 66 МГц?



Незнаю зачем, нор это так. Да, от 66 МГц тоже самое проявляется. Я щас попробовал - обозначил те IO ноги на которые питание заведено как выходные, подал на них питание, а остальные - то есть все необозначенные - принудительно поставил в GND. И вроде стабильно стало, только USB контроллер работать перестал (видимо что то необозначенное опустилось в GND и подвесило его както) ЩАсс ним разбирус и буду теститровать дальше. Но по светодиодам видно что процы инитятся норм. Уже раз 30 попробовал
vadimuzzz
Цитата(KIM @ Apr 5 2010, 05:39) *
Я щас попробовал - обозначил те IO ноги на которые питание заведено как выходные, подал на них питание

так нельзя делать, вы два низкоимпедансных источника друг на друга врубили, пожжете буфера.
KIM
Цитата(vadimuzzz @ Apr 5 2010, 03:50) *
так нельзя делать, вы два низкоимпедансных источника друг на друга врубили, пожжете буфера.


ясно, спасибо за информацию
KIM
Посмтотрел внимательнее, оказывается ноги вводла вывода, на которые заведено питание 3.3В - это ногиVREFB1N0 - VREFB8N1 (всего 16 ног).
Так и должно быть? В даташите на циклон указано

Цитата
If you use a VREF group for voltage-referenced I/O standards, connect the
VREF pin for that group to the appropriate voltage level. If you do not use all the VREF
groups in the I/O bank for voltage referenced I/O standards, you can use the VREF
pin in the unused voltage referenced groups as regular I/O pins.


То есть правильно что они на питание заведены. А в квартусе получется их просто надо не обозначать?

И еще обнарудилось что все выходы тактовой из pll - PLL#_CLKOUTn и PLL#_CLKOUTp (всего 8 пинов) заведены на землю. Может это как то влиять на корректную работу PLL?
vadimuzzz
Цитата(KIM @ Apr 7 2010, 15:10) *
Посмтотрел внимательнее, оказывается ноги вводла вывода, на которые заведено питание 3.3В - это ногиVREFB1N0 - VREFB8N1 (всего 16 ног).
Так и должно быть?
То есть правильно что они на питание заведены. А в квартусе получется их просто надо не обозначать?

нет, это значит, что они могут быть использованы как VREF, если другие пины в этом банке используют соотв. стандарт i/o. применяется в интерфейсах памяти. м.б. использованы как обычные i/o пины. 3,3В - в любом случае лажа, т.к. даже если они и задуманы как VREF, там другие напряжения.
Цитата
И еще обнарудилось что все выходы тактовой из pll - PLL#_CLKOUTn и PLL#_CLKOUTp (всего 8 пинов) заведены на землю. Может это как то влиять на корректную работу PLL?

опять же эти пины могут быть задействованы как PLL#_CLKOUT, а могут - как обычные i/o. сделаете PLL#_CLKOUTn - будет нехорошо, выходы закорочены на землю. если "As input tri-stated with weak pull-up resistor" - то не опасно, хотя смысл такой схемы стремится к 0. смотрите в первую очередь как сделано питание, судя по тому, что вы описали, там можно ждать ляпов.
KIM
Цитата(vadimuzzz @ Apr 7 2010, 15:34) *
нет, это значит, что они могут быть использованы как VREF, если другие пины в этом банке используют соотв. стандарт i/o. применяется в интерфейсах памяти. м.б. использованы как обычные i/o пины. 3,3В - в любом случае лажа, т.к. даже если они и задуманы как VREF, там другие напряжения.

опять же эти пины могут быть задействованы как PLL#_CLKOUT, а могут - как обычные i/o. сделаете PLL#_CLKOUTn - будет нехорошо, выходы закорочены на землю. если "As input tri-stated with weak pull-up resistor" - то не опасно, хотя смысл такой схемы стремится к 0. смотрите в первую очередь как сделано питание, судя по тому, что вы описали, там можно ждать ляпов.


Спасибо огромное вам за помощь.
dvladim
Цитата(vadimuzzz @ Apr 5 2010, 03:05) *
так нельзя делать, вы два низкоимпедансных источника друг на друга врубили, пожжете буфера.

Нет, не пожжет. У Альтеры такое решение было описано для уменьшения помех по питанию, но делать так, конечно, не стоит.
vadimuzzz
Цитата(dvladim @ Apr 11 2010, 02:38) *
Нет, не пожжет. У Альтеры такое решение было описано для уменьшения помех по питанию, но делать так, конечно, не стоит.

можно ссылку? я видел только, что на незадействованные пины подается уровень (подключаются к земле). при этом физически пины на плате никуда не подключены, только внутри кристалла. при этом речь идет не об уменьшении помех по питанию (это мне совсем непонятно, с чего это они уменьшатся?), а об уменьшении ЭМИ при активной работе i/o.
dvladim
Цитата(vadimuzzz @ Apr 11 2010, 05:03) *
можно ссылку? я видел только, что на незадействованные пины подается уровень (подключаются к земле). при этом физически пины на плате никуда не подключены, только внутри кристалла. при этом речь идет не об уменьшении помех по питанию (это мне совсем непонятно, с чего это они уменьшатся?), а об уменьшении ЭМИ при активной работе i/o.

Одинаковый уровень с обеих сторон: т.е. на землю в проекте и на плате. Такие ноги работают как дополнительная земля. Ссылку искать не буду.
KIM
Проблема дейсвтительно оказалась в цепи питания, народ, что разводил плату все поправил, теперь все отлично работает. Всем спасибо за участие.
vadimuzzz
Цитата(KIM @ Apr 27 2010, 18:41) *
Проблема дейсвтительно оказалась в цепи питания

можете поподробнее рассказать как не надо делать? для будущих поколений, так сказать smile.gif
KIM
Цитата(vadimuzzz @ Apr 27 2010, 16:31) *
можете поподробнее рассказать как не надо делать? для будущих поколений, так сказать smile.gif

Я врядли внятно смогу объяснить, я же программист только ) Я сописал "симптомы", наштамповал тестовых прошивок - Nios на разных частотах, с PLL и без PLL и отправил это все дело народу, через две недели привезли рабочие платы. Говорили что то о том что с usb шло 4.7 вольты и присуствови в цепипитания колебания частотой где-то 200 килогец. вот собственно и все
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.