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

 
 
> Разбираюсь с FIFO из Coregen, как его сделать little endian?, Может кто-то уже делал подобное?
Dimonira
сообщение Jun 15 2007, 12:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Пишу софт для Ethernet обмена для своей платы с ядром 1Г-МАК от ксайлинкса (см. тут). Проект матрицы сделан на ISE 8.2.
В матрице на приём у меня стоит два ФИФО байтовой ширины по записи и по чтению, а на передачу стоит 4-байтовое на входе (по записи с процессора), а на выходе байтовое (в ядро 1Г-МАК). Все ФИФО с разным тактом по чтению и записи, сгенерированы coregen-ом.
С приёмом всё пучком, а с передачей выяснилось, что ФИФО передаёт в МАК первым байтом старший байт 32-битного слова. Т.е. по факту можно сказать big-endian.
А мне надо бы little-endian, т.к. процессор тоже little-endian (Tiger Shark 201).
Казалось бы ерунда, чего там, взял в проекте матрицы переконнектил байты с шины процессора на вход передающего ФИФО. Однако не так всё просто - после компилляции проект "поплыл", перестал работать не только в части МАКа, но и ещё кое-что накрылось. И это несмотря на то, что согласно репорту par-а всё вроде бы Ок. Странно только, то что в новом проекте используемых слайсов оказалось на 10 меньше чем в старом проекте (1989 против 1999).
Изменения были всего в одной строчке:
Код
// было:
wire [31:0] tx_fifo_data_in = data_fr_dsp;
// стало:
wire [31:0] tx_fifo_data_in = {data_fr_dsp[7:0], data_fr_dsp[15:8], data_fr_dsp[23:16], data_fr_dsp[31:24]};


Вот теперь не знаю как быть. Ну не в софте же переставлять байты, это ж такой гимор и убивание времени, а оно важно.
Начинаю склоняться к тому, чтобы взять исходняки ФИФО, засунуть их в проект (вместо coregen-а) и поправить там последовательность выдачи байтов на обратную. Но посмотрел, там такая каша этих исходняков...

Может кто-то уже это делал?
Или есть другие идеи?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dimonira
сообщение Jun 21 2007, 09:50
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Всё заработало!!!
Причём похоже и раньше работало, просто я не допёр, что проверяю не так как раньше.
Видимо были странности с loopback режимом (в котором я проверял) в физическом уровне.
А раньше я приём (фазу DCM) настраивал совместно с компом, по той инфе что он мне присылает.

Если по порядку, то я действовал так.
Сначала меня достало уговаривать Sinplify не портить иерархию связей.
Так что я на него плюнул и вернулся к XST. Проект с перестановкой байтов, как и раньше, не заработал (сейчас уже думаю, что я просто недопёр, надо было внимательнее посмотреть).
Тогда я решил добавить в ucf файл строки, которые призывают соблюдать времена по шине процессора. Подумал сначала, что это заставит плакать MAP и PAR горькими слезами. Но нет! Наоборот, проекту полегчало! Вот, например, таблица репорта многопроходной компилляции для старого варианта (без перестановки байт):
Код
Level/      Design      Timing      Number      Run         NCD
Cost [ncd]  Score       Score       Unrouted    Time        Status
----------  ------      --------    --------    -----       ------------
H_H_8   *   302         0           0           01:21       Complete        
H_H_4   *   306         0           0           01:20       Complete        
H_H_2   *   307         0           0           01:23       Complete        
H_H_5   *   311         0           0           01:34       Complete        
H_H_1   *   340         0           0           01:29       Complete        
H_H_3   *   3317        454         0           03:24       Complete        
H_H_7   *   3320        530         0           02:37       Complete        
H_H_6   *   5321        688         0           03:49       Complete

А вот она же для нового проекта (с перестановками байт) с добавлением констрейнтов по шине процессора:
Код
Level/      Design      Timing      Number      Run         NCD
Cost [ncd]  Score       Score       Unrouted    Time        Status
----------  ------      --------    --------    -----       ------------
H_H_8   *   271         0           0           02:49       Complete        
H_H_3   *   274         0           0           04:41       Complete        
H_H_1   *   294         0           0           01:31       Complete        
H_H_7   *   295         0           0           02:57       Complete        
H_H_4   *   298         0           0           01:41       Complete        
H_H_6   *   1283        308         0           02:08       Complete        
H_H_2   *   1292        306         0           03:19       Complete        
H_H_5   *   1308        306         0           02:31       Complete

Я было думал, что меня ждёт всё тот же неработающий результат, но что-то меня толкнуло включить плату по обмену с компом вместо loopback. Смотрю, приём-то есть! Проверил передачу - и она есть! И остальное работает. Настроил фазу приёма, после чего и loopback заработал почему-то. Опечалило только то, что в программе МАК-адрес записывался в регистр ГМАК-а нулевой, а д.б. быть заданным (он у меня в платформ-флеше лежит сразу за проектом матрицы после сигнатуры для поиска). Думаю - опять что-то не работает, но теперь уже стал не на проект кидаться, а стал выяснять в чём дело. Оказалось, что вкралась ошибка в функцию поиска МАК-адреса в платформ-флеше - она была настроена на меньший размер проекта, а он, как выяснилось, чуть увеличился. Я всё исправил (сделал с запасом) и эта чать заработала. Вот и всё! УРА!
Запустил стек протоколов (портированный OpenTCP), смотрю - работает, ARP-шками меняется.
Буду программить дальше.
Всем спасибо!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dimonira   Разбираюсь с FIFO из Coregen, как его сделать little endian?   Jun 15 2007, 12:17
- - reddot   вообще стандартным для всех сетевых протоколов (по...   Jun 15 2007, 12:30
- - Dimonira   Зачем же мне время терять на софтовых перестановка...   Jun 15 2007, 12:41
- - reddot   Ну еще такой вопрос, вы собираетесь по эзернет пер...   Jun 15 2007, 12:53
- - Dimonira   Перестановка байт мне нужна только потому, что я п...   Jun 15 2007, 15:21
- - Evil Archer   Я извиняюсь, но я так и не понял из ваших постов, ...   Jun 16 2007, 23:04
- - Dimonira   Проверял итоговый проект - он перестал нормально р...   Jun 17 2007, 16:34
- - Evil Archer   Если не очень критично, попробуйте вставить регист...   Jun 17 2007, 16:56
- - Dimonira   Конечно критично, ведь регистр - это задержка на т...   Jun 18 2007, 06:04
- - Dimonira   Порылся в исходняках. Нашёл нужное место в файле a...   Jun 18 2007, 10:47
|- - andrew_b   Цитата(Dimonira @ Jun 18 2007, 13:47) Пор...   Jun 18 2007, 12:27
- - Dimonira   Ну как чем?! Вы же тут на форуме бываете, а та...   Jun 18 2007, 17:24
- - Dimonira   Пока не удалось собрать все исходняки и скомпиллит...   Jun 19 2007, 06:07
- - Dimonira   Начал рассматривать другой вариант выхода из полож...   Jun 19 2007, 08:20
- - oval   Изначально, столкнувшись с проблемой последователь...   Jun 19 2007, 12:05
- - Dimonira   oval Жаль что раньше не написали. Написали бы, что...   Jun 19 2007, 12:37
- - Dimonira   Вернул ядро ФИФО в оригинальное состояние. Скомпил...   Jun 20 2007, 08:02
- - oval   На разницу в 10 слайсов не стоит обращать внимания...   Jun 20 2007, 11:35
- - Dimonira   Я вообще-то проект так в ISE и делаю, т.е. не отде...   Jun 20 2007, 12:02
- - Evil Archer   Во-первых, Oval справедливо заметил, что нужно поп...   Jun 20 2007, 14:16


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

 


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


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