Перейти к содержанию
    

BF532 асинхронная шина к FPGA Cyclone

Доброго дня.

 

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

 

На плате через асинхронную шину связаны 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 нс после установки сигналов, на шине ещё происходит какойнибудь шорох который портит данные , но выглядит именно так.

 

А выследить момент сбоя нереально. - записывал данные шины сигналтапом - всё нормально.

 

Возможно ктонибудь реализовывал подобные задачи и может есть идеи что это может быть и как такое лечиться ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно ктонибудь реализовывал подобные задачи и может есть идеи что это может быть и как такое лечиться ?

Очень похоже на нарушение целостности сигналов в шине. Сколько слоев в плате, симулировалась ли она как-нибудь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень похоже на нарушение целостности сигналов в шине. Сколько слоев в плате, симулировалась ли она как-нибудь?

 

 

То что раводка не оч продуманная это видно невооруженным глазом

на шине висит ещё езернет контроллер и ещё один плис

ничего не моделировалось - плата 4 слоя.

 

наверняка будет всё переделываться

 

Задача состоит в том чтобы хоть как-то оживить прототип - и написать програмную поддержку

пускай всё будет медленно - чёрт с ним , но надёжно.

 

там по плате такая ситуация

 

разведено всё звездой - согласования нет - рассогласованность по длинне приблизительно 100-110 мм.

сигнал CS небуферизирован в отличие от остальных.

 

понятно всё тут конечно, но возможно ли оценить точно что это целостность сигналов и определить частотный порог где оно начнёт таки работать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал интерфейс для Блэкфина на Спартане3, только интерфейсная часть у меня все же работает на частоте шины (133 МГц). В Вашем случае могу только посоветовать защелкивать данные по восходящему фронту WR (он в этом случае будет использоваться как тактирующий сигнал). Я себе этого позволить не мог, поскольку и так все 8 глобальных буферов были заняты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже на глюки из-за метастабильности. Синхронизаторы в ПЛИС на входные сигналы проца поставили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже на глюки из-за метастабильности. Синхронизаторы в ПЛИС на входные сигналы проца поставили?

 

Ничего не понял из вышесказанного

 

Обьясните что за метастабильность ?

И что вы подразумеваете под синхронизаторами в ПЛИС ?

 

помогите дурню :05:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А выследить момент сбоя нереально. - записывал данные шины сигналтапом - всё нормально.

 

Я бы в подобной ситуации поступил следующим образом:

На процессоре написал тест, который по определенному закону формирует адреса/данные.

В FPGA поставил автомат, который проверяет принятые данные и в случае несовпадения с ожидаемыми выставляет сигнал ошибки.

В сигналтапе поставил защелку по этому сигналу.

Если сигнал ошибки вывести наружу, то можно будет посмотреть поведение шины цифровым осциллографом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обьясните что за метастабильность ?

Вот, по ссылкам посмотрите, там все просто. Еще в доке от альтеры это объясняется с примерами (раньше точно было, посмотрите).

 

И что вы подразумеваете под синхронизаторами в ПЛИС ?

Простейшим способом борьбы с метастабильностью в ПЛИС при синхронизации сигналов из разных клоковых доменов является использовании двух-(и более)триггерного синхронизатора, который представляет собой цепочку из последовательно включенных триггеров. Подробнее смотрите в доке. У меня подобная связка (Blackfin+Циклон, был и первый, сейчас второй) уже долгое время работает без проблем - все сигналы управления пропущены через синхронизаторы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот, по ссылкам посмотрите, там все просто. Еще в доке от альтеры это объясняется с примерами (раньше точно было, посмотрите).

Простейшим способом борьбы с метастабильностью в ПЛИС при синхронизации сигналов из разных клоковых доменов является использовании двух-(и более)триггерного синхронизатора, который представляет собой цепочку из последовательно включенных триггеров. Подробнее смотрите в доке. У меня подобная связка (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

.............

post-20651-1213868122_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если все же попробовать по фронту WR_n данные защелкивать, а к рабочей тактовой переходить при помощи синхронизатора? Попробуйте еще в Вашем варианте задерживать WR на один такт меньше (использовать на 1 триггер меньше).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и чушь получаеться !!!

 

"полечилось" - правда точно ещё неизвестно - тесты гоняются.....

 

в схеме изменений никаких небыло , но баги пропали :)

 

Решил воспользоваться советом VMP сделать гравицапу которая сигнализировала бы на пин ошибки

когда всё сделал - начал их искать - обнаружил что их и нет :))

 

и действительно все тесты стали проходить без ошибок - сигнал тап то требует чтоб конфигурилось с жтага - вот так и обнаружил

 

и разница то только в том что конфигурировал я блекфином раньше , а теперь через актив сериал с флеша

и всего-то :wacko:

 

в замешательстве .....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на лицо неверные констрейны на шину - т.к. работа зависит от температуры и разводки в FPGA. И потом 100MHz требует учета LCRM моделей для PCB - см. например книгу Кечиева "Проектирование печатных плат для цифровой быстродействующей аппаратуры"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...