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

 
 
> Разбираюсь с 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 20 2007, 08:02
Сообщение #2


Местный
***

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



Вернул ядро ФИФО в оригинальное состояние.
Скомпиллировал два раза проект, один (работающий), у которого в исходняке написано:
Код
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]};

Начал искать потерянные 10 слайсов во втором варианте.
Сравнил репорты синтезатора, коим у меня сейчас XST (в файлах top.syr).
Никакой принципиальной разницы не увидел. Результаты по использованию ресурсов таковы (у обоих вариантов):
Код
Device utilization summary:
---------------------------

Selected Device : 3s1000lfg320-4

Number of Slices:                    1678  out of   7680    21%  
Number of Slice Flip Flops:          1758  out of  15360    11%  
Number of 4 input LUTs:              3032  out of  15360    19%  
    Number used as logic:             3017
    Number used as Shift registers:     15
Number of IOs:                        106
Number of bonded IOBs:                106  out of    221    47%  
    IOB Flip Flops:                      3
Number of BRAMs:                       13  out of     24    54%  
Number of GCLKs:                        8  out of      8   100%  
Number of DCMs:                         3  out of      4    75%


Есть отличия в таблицах Clock Information и Asynchronous Control Signals Information в названиях связей соответственно Clock buffer(FF name) и Buffer(FF name), однако в графе Load у обоих вариантов одни и те же числа. Так что имхо это не принципиально.

Смотрю дальше отличия в репортах маппера (в файлах top_map.mrp). И тут сразу вижу отличия.
Вот для работающего варианта 1:
Код
Design Summary
--------------
Number of errors:      0
Number of warnings:  438
Logic Utilization:
  Number of Slice Flip Flops:       1,705 out of  15,360   11%
  Number of 4 input LUTs:           2,541 out of  15,360   16%
Logic Distribution:
  Number of occupied Slices:                        1,999 out of   7,680   26%
    Number of Slices containing only related logic:   1,999 out of   1,999  100%
    Number of Slices containing unrelated logic:          0 out of   1,999    0%
      *See NOTES below for an explanation of the effects of unrelated logic
Total Number 4 input LUTs:          2,730 out of  15,360   17%
  Number used as logic:              2,541
  Number used as a route-thru:         176
  Number used as Shift registers:       13
  Number of bonded IOBs:               95 out of     221   42%
    IOB Flip Flops:                    13
    IOB Dual-Data Rate Flops:           6
  Number of Block RAMs:               13 out of      24   54%
  Number of GCLKs:                     8 out of       8  100%
  Number of DCMs:                      3 out of       4   75%

   Number of RPM macros:            1
Total equivalent gate count for design:  906,874
Additional JTAG gate count for IOBs:  4,560

А вот для неработающего варианта 2:
Код
Design Summary
--------------
Number of errors:      0
Number of warnings:  438
Logic Utilization:
  Number of Slice Flip Flops:       1,705 out of  15,360   11%
  Number of 4 input LUTs:           2,541 out of  15,360   16%
Logic Distribution:
  Number of occupied Slices:                        1,989 out of   7,680   25%
    Number of Slices containing only related logic:   1,989 out of   1,989  100%
    Number of Slices containing unrelated logic:          0 out of   1,989    0%
      *See NOTES below for an explanation of the effects of unrelated logic
Total Number 4 input LUTs:          2,730 out of  15,360   17%
  Number used as logic:              2,541
  Number used as a route-thru:         176
  Number used as Shift registers:       13
  Number of bonded IOBs:               95 out of     221   42%
    IOB Flip Flops:                    13
    IOB Dual-Data Rate Flops:           6
  Number of Block RAMs:               13 out of      24   54%
  Number of GCLKs:                     8 out of       8  100%
  Number of DCMs:                      3 out of       4   75%

   Number of RPM macros:            1
Total equivalent gate count for design:  906,874
Additional JTAG gate count for IOBs:  4,560


Как видно, недостача 10 слайсов. Куда они делись? Непонятно.
В остальном файлы репорта маппера отличаются только в секции 11 (Timing Report).
Там разные времена, причём в варианте 1 один констрейнт не выполнен - на клок передачи Эзернета, а во втором два - на клок передачи Эзернета и на клок приёма Эзернета.
Вот тут и вопрос - может из-за этого и не работает?
Правда после PAR-а все констрейнты выполняются.
Короче, не знаю где искать причину неработы нужного мне варианта 2.

Кто подскажет как быть?

Попробовал использовать другой синтезатор. У меня стоял Sinplify 8.2 pro.
Но Translate сразу заругался на неполные имена цепей в ucf-файле типа такого:
Код
Could not find net(s) '*gmac_core/SYNC_TX_RESET_I/RESET_OUT*' in the design.

Я так понял, что * он не переваривает.
Это как-то можно преодолеть?

Пока поставил качать версию 8.8.04. Вдруг там будет с этим нормально.
Пока попытаюсь поправить имена цепей.
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
- - oval   На разницу в 10 слайсов не стоит обращать внимания...   Jun 20 2007, 11:35
- - Dimonira   Я вообще-то проект так в ISE и делаю, т.е. не отде...   Jun 20 2007, 12:02
- - Evil Archer   Во-первых, Oval справедливо заметил, что нужно поп...   Jun 20 2007, 14:16
- - Dimonira   Всё заработало!!! Причём похоже и рань...   Jun 21 2007, 09:50


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:55
Рейтинг@Mail.ru


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