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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Nios II /e vs Nios II /f (проект Ethernet)
Golikov A.
сообщение Mar 12 2014, 14:59
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



потому что фаст наверняка 32 битный, и при сдвиге на 1 - 2 - 3 байта все равно попадает в 0 байт. А этот почему то честно отработал...
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 13 2014, 00:05
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Я тоже так подумал, но вот искать истину пока некогда. Хотя всегда считал, что вне зависимости от типа проца. он всегда 32-хбитный. Надо почитать описание поточнее.
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 13 2014, 06:24
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Посмотрел доку "Implementation Details" на НИОС (n2cpu_nii51015.pdf), не нашел про изменение работы с памятью (32-хбитное обращение или 8-мибитное) для разных версий проца.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 13 2014, 07:18
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 billidean
вставьте в С-код выравнивание, откоментируйте это и забудьте wink.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 13 2014, 07:21
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а шина везде одна и таже?
Потом в дорогом проце считался могла быть железная, а передача 32 битными словами, а в дешевом считалка программная и доступ 8 битный.
В ксалинксе так, дешевый мак считает суммы алгоритмически, а дорогой железом.
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Mar 13 2014, 07:26
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(Golikov A. @ Mar 13 2014, 11:21) *
а шина везде одна и таже?
Потом в дорогом проце считался могла быть железная, а передача 32 битными словами, а в дешевом считалка программная и доступ 8 битный.


Нет, базовая архитектура всех ниосов одинакова.
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 13 2014, 07:29
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Вот моя структура пакета в .h-файле
Код
typedef struct UDP_str
{
    char macDst[6];
    char macSrc[6];
    char type[2];
    char ver_lenIP;
    char all00;
    char len_28plus[2];
    char id_pack[2];
    char fl_4000[2];
    char time_l_80;
    char type_UDP_11;
    char crc16_IPhead[2];
    char ipSrc[4];
    char ipDst[4];
    char portSrc[2];
    char portDst[2];
    char lenUDP_8plus[2];
    char crc16_UDP[2];
    // до этого ... длина равна 42 байта
    char data[UDP_DATA_MAX_SIZE];
} __attribute__((__packed__)) UDP_str;

Вот код в .c-файле
Код
volatile UDP_str udp_send_s __attribute__ ((aligned (1)));
volatile UDP_str udp_take_s __attribute__ ((aligned (1)));

После этого я считаю, что обе структуры выровнено по-байтово и без "дырок" между полями.
Расчет CRC для IP-заголовка должен начинаться с поля ver_lenIP, и просчитывать 20 байт, а я указал (ошибочно), чтобы начинался расчет с поля all00, т.е. сдвинул на один байт вправо. При этом НИОС/Фаст все нормально расчитывал, а вот НИОС/Эконом выдавал кривую CRC, из-за чего я и обнаружил свой косяк в указании начального адреса расчета CRC.
Поэтому и началось обсуждение типов НИОСов и их обращение к памяти.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 13 2014, 08:22
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



тогда битность шины не причем, был бы сдвиг в плюс это можно было бы обосновать выравниванием. А сдвиг в минус, никак не объясним...
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 13 2014, 09:39
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Если шина 32-хбитная, и мы указываем на 2-ой или 3-тий байт ячейки, то эта ячейка будет задействована полностью, начиная с 1-го байта, т.о. будем иметь сдвиг по адресу влево, в сторону уменьшения.
Если посмотреть на шину Авалон, то эта ситуация очень видна, НО в этой шине все (имею в виду побайтовое обращение) разруливается доп.сигналами byteenable.
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Mar 13 2014, 10:14
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(billidean @ Mar 13 2014, 11:29) *
Вот моя структура пакета в .h-файле

У меня структура UDP-пакетов несколько схожая, но отличается служебными словами PACKED, у них тоже была своя роль...
//------------------- UDPFRAME
typedef struct udphdr { //8 bytes
u_short uh_sport PACKED; /*!< \brief Source port */
u_short uh_dport PACKED; /*!< \brief Destination port */
u_short uh_ulen PACKED; /*!< \brief UDP length */
u_short uh_sum PACKED; /*!< \brief UDP checksum */
} UDPHDR;

struct UDPFRAME {
ETHERHDR eth_hdr PACKED; //14 bytes
IPHDR ip_hdr PACKED; //20 bytes
UDPHDR udp_hdr PACKED; // 8 bytes
u_char md[1472] PACKED; // + (22..1476) bytes
};
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 06:02
Рейтинг@Mail.ru


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