arexol 0 18 июня, 2008 Опубликовано 18 июня, 2008 · Жалоба Доброго дня. Столкнулся я с редкостно гнусным багом , как его разруливать ума не приложу. На плате через асинхронную шину связаны BF532 (MASTER) и Altera Cyclone -6-ка (SLAVE). На шине проскакивают ошибки очень редко и причём это не зависит от вейтстейтов даже при полных тормозах на минимальной скорости проблема остаётся. тактовая блекфина для внешней шины 133 , проект в плисе на 100 MHZ. после многих проб наиболее стабильно заработал след алгоритм захвата даннх в циклоне с шины. в каждом такте (100 MHZ ) данные и управляющие сигналы шины пишуться в регистры. rlatch_a,rlatch_d, rCS rWR стейт машина обрабатывает записанные сигналы в соотв с след алгоритмом 1-е состояние если rWR и rCS активны то переходим в сотояние 2 2-е состояние и записываем данные latch_a=rlatch_a latch_d=rlatch_d и переходим в состояние 3 3-е стотояние декодинг адреса и данных (latch_a и latch_d) - генерация управляющих сигналов переход в 4-е сотояние 4-е сотояние если сигналы rWR ещё активен то ожидание в 4-м состоянии иначе переход в 1-е И всё это замечательно работает до поры до времени ... очень хорошо проявляется при постоянном интенсивном потоке данных. на выходе получаем что работает около минуты постоянной записи и начинают проявлятся редкие единичные ошибки , после нескольких минут их становиться явно больше то пропадают совсем то снова появляются. смещение точки захвата особо результатов не даёт такт дальше либо на такт ближе - пофиг вставлял промежуточное стотояние между 1 и 2 где я ещё раз смотрел на сигналы WR и CS и если не активен один из них то возврат в исходное сототяние но характер багов оставался тотже. Честно говоря трудно предположить что после 30 нс после установки сигналов, на шине ещё происходит какойнибудь шорох который портит данные , но выглядит именно так. А выследить момент сбоя нереально. - записывал данные шины сигналтапом - всё нормально. Возможно ктонибудь реализовывал подобные задачи и может есть идеи что это может быть и как такое лечиться ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 18 июня, 2008 Опубликовано 18 июня, 2008 · Жалоба Возможно ктонибудь реализовывал подобные задачи и может есть идеи что это может быть и как такое лечиться ? Очень похоже на нарушение целостности сигналов в шине. Сколько слоев в плате, симулировалась ли она как-нибудь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arexol 0 18 июня, 2008 Опубликовано 18 июня, 2008 · Жалоба Очень похоже на нарушение целостности сигналов в шине. Сколько слоев в плате, симулировалась ли она как-нибудь? То что раводка не оч продуманная это видно невооруженным глазом на шине висит ещё езернет контроллер и ещё один плис ничего не моделировалось - плата 4 слоя. наверняка будет всё переделываться Задача состоит в том чтобы хоть как-то оживить прототип - и написать програмную поддержку пускай всё будет медленно - чёрт с ним , но надёжно. там по плате такая ситуация разведено всё звездой - согласования нет - рассогласованность по длинне приблизительно 100-110 мм. сигнал CS небуферизирован в отличие от остальных. понятно всё тут конечно, но возможно ли оценить точно что это целостность сигналов и определить частотный порог где оно начнёт таки работать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 18 июня, 2008 Опубликовано 18 июня, 2008 · Жалоба Я делал интерфейс для Блэкфина на Спартане3, только интерфейсная часть у меня все же работает на частоте шины (133 МГц). В Вашем случае могу только посоветовать защелкивать данные по восходящему фронту WR (он в этом случае будет использоваться как тактирующий сигнал). Я себе этого позволить не мог, поскольку и так все 8 глобальных буферов были заняты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 50 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба Похоже на глюки из-за метастабильности. Синхронизаторы в ПЛИС на входные сигналы проца поставили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arexol 0 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба Похоже на глюки из-за метастабильности. Синхронизаторы в ПЛИС на входные сигналы проца поставили? Ничего не понял из вышесказанного Обьясните что за метастабильность ? И что вы подразумеваете под синхронизаторами в ПЛИС ? помогите дурню :05: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба А выследить момент сбоя нереально. - записывал данные шины сигналтапом - всё нормально. Я бы в подобной ситуации поступил следующим образом: На процессоре написал тест, который по определенному закону формирует адреса/данные. В FPGA поставил автомат, который проверяет принятые данные и в случае несовпадения с ожидаемыми выставляет сигнал ошибки. В сигналтапе поставил защелку по этому сигналу. Если сигнал ошибки вывести наружу, то можно будет посмотреть поведение шины цифровым осциллографом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackPahan 0 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба поиск по форуму вам в помощь ну и это почитайте http://www.platan.ru/shem/pdf/st13-14.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 50 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба Обьясните что за метастабильность ? Вот, по ссылкам посмотрите, там все просто. Еще в доке от альтеры это объясняется с примерами (раньше точно было, посмотрите). И что вы подразумеваете под синхронизаторами в ПЛИС ? Простейшим способом борьбы с метастабильностью в ПЛИС при синхронизации сигналов из разных клоковых доменов является использовании двух-(и более)триггерного синхронизатора, который представляет собой цепочку из последовательно включенных триггеров. Подробнее смотрите в доке. У меня подобная связка (Blackfin+Циклон, был и первый, сейчас второй) уже долгое время работает без проблем - все сигналы управления пропущены через синхронизаторы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arexol 0 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба Вот, по ссылкам посмотрите, там все просто. Еще в доке от альтеры это объясняется с примерами (раньше точно было, посмотрите). Простейшим способом борьбы с метастабильностью в ПЛИС при синхронизации сигналов из разных клоковых доменов является использовании двух-(и более)триггерного синхронизатора, который представляет собой цепочку из последовательно включенных триггеров. Подробнее смотрите в доке. У меня подобная связка (Blackfin+Циклон, был и первый, сейчас второй) уже долгое время работает без проблем - все сигналы управления пропущены через синхронизаторы. В общем учитывая все вышесказанное модифицировал код до 3-х ступеней по RD и WR и получается 4 а то и 5(так как в стейт машине ещё дальше оно латчит в регистр) проверил всё на симуляции - работает зашил в хардвар - работает записал сигнал тапом шину - картинка прилагается и имеем то что имеем - на холодную при старте платы всё работает минуты 2-3 без ошибок и потом они начинают появлятся иногда очень много иногда вообще нет - как и раньше. мож я не так код написал ? reg [2:0] latch_a/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [15:0] latch_d/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [2:0] rlatch_0a/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [15:0] rlatch_0d/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [2:0] rlatch_1a/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [15:0] rlatch_1d/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [2:0] rlatch_2a/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg [15:0] rlatch_2d/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg rwr_0n/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg rcs_0n/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg rwr_1n/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg rcs_1n/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg rwr_2n/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; reg rcs_2n/* synthesis ALTERA_ATTRIBUTE = "FAST_INPUT_REGISTER=ON" */; always @(posedge clk) begin ....................... ////Metastability synchonizators rlatch_0a<=a; rlatch_0d<=edata; rcs_0n<=cs_n; rwr_0n<=wr_n; rlatch_1a<=rlatch_0a; rlatch_1d<=rlatch_0d; rcs_1n<=rcs_0n; rwr_1n<=rwr_0n; rlatch_2a<=rlatch_1a; rlatch_2d<=rlatch_1d; rcs_2n<=rcs_1n; rwr_2n<=rwr_1n; ................ case(bf_state) 3'b000: begin if (~rwr_2n & ~rcs_2n) bf_state<=3'b100; else bf_state<=3'b000; end 3'b100: begin bf_state<=3'b010; latch_a<=rlatch_2a; latch_d<=rlatch_2d; end 3'b010: begin case(latch_a[2:0]) 3'b000: ad_lo<=latch_d; 3'b001: begin ............. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба А если все же попробовать по фронту WR_n данные защелкивать, а к рабочей тактовой переходить при помощи синхронизатора? Попробуйте еще в Вашем варианте задерживать WR на один такт меньше (использовать на 1 триггер меньше). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arexol 0 19 июня, 2008 Опубликовано 19 июня, 2008 · Жалоба Ну и чушь получаеться !!! "полечилось" - правда точно ещё неизвестно - тесты гоняются..... в схеме изменений никаких небыло , но баги пропали :) Решил воспользоваться советом VMP сделать гравицапу которая сигнализировала бы на пин ошибки когда всё сделал - начал их искать - обнаружил что их и нет :)) и действительно все тесты стали проходить без ошибок - сигнал тап то требует чтоб конфигурилось с жтага - вот так и обнаружил и разница то только в том что конфигурировал я блекфином раньше , а теперь через актив сериал с флеша и всего-то в замешательстве ..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 20 июня, 2008 Опубликовано 20 июня, 2008 · Жалоба на лицо неверные констрейны на шину - т.к. работа зависит от температуры и разводки в FPGA. И потом 100MHz требует учета LCRM моделей для PCB - см. например книгу Кечиева "Проектирование печатных плат для цифровой быстродействующей аппаратуры" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться