Пишу софт для 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-а) и поправить там последовательность выдачи байтов на обратную. Но посмотрел, там такая каша этих исходняков...
Может кто-то уже это делал?
Или есть другие идеи?