Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Устройство обнаружения пакетов данных заданного формата
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
yulia_plic
Всем здравствуйте! Начинаю с самых азов проектирования на ПЛИС.
Задача такая: нужно разработать на языке VHDL и провести полный цикл моделирования IP-блока устройства обнаружение пакетов данных заданного формата в последовательном цифровом потоке для ПЛИС инструментального модуля Spartan 3E.
Начала я с разработки структурной и функциональной схем. Ниже привела результаты того, что получилось и хочу спросить авторитетного мнения.
Скажите пожалуйста, корректны ли составленные схемы или может что-то стоит добавить-изменить. Просьба с пониманием отнестись к возможным ошибкам.



BackEnd
Цитата(yulia_plic @ Nov 10 2016, 22:39) *
Начала я с разработки структурной и функциональной схем.

Эт хорошо.

Цитата(yulia_plic @ Nov 10 2016, 22:39) *
Ниже привела результаты того, что получилось и хочу спросить авторитетного мнения.

Мое мнение не авторитетно, но результат в первом приближении похож на правду.
Единственное, будут ли это модули в HDL-терминологии? Просто все это счастье помещается в несколько веток конечного автомата из нескольких строк кода каждая. Разве что в учебных целях по модулям тонким слоем размазать...

Цитата(yulia_plic @ Nov 10 2016, 22:39) *
Скажите пожалуйста, корректны ли составленные схемы или может что-то стоит добавить-изменить.

Критерии корректности определяются постановкой задачи. Поскольку задача поставлена в очень общем и абстрактном виде, то сложно судить о "добавить-изменить".
Насколько я помню, на оформление функциональных схем строгих требований нет, поэтому сами смотрите как там у вас требуют это рисовать. Можете, например, по SADT/IDEF0 оформить.
yulia_plic
Цитата(BackEnd @ Nov 11 2016, 03:50) *
Эт хорошо.
Мое мнение не авторитетно, но результат в первом приближении похож на правду.

BackEnd большое спасибо за ответ и за совет. Просто важно было знать вообще в правильном направлении ли двигаюсь.
Цитата(BackEnd @ Nov 11 2016, 03:50) *
Единственное, будут ли это модули в HDL-терминологии? Просто все это счастье помещается в несколько веток конечного автомата из нескольких строк кода каждая. Разве что в учебных целях по модулям тонким слоем размазать...

Ну да, это только в учебных целях придется как-то реализовывать модульность в HDL-терминологии. Ох пока что даже не представляю как это все будет выглядеть, и что будут представлять из себя эти ветки. Для вас это все легко, а вот чтоб мне понять, нужно не одни сутки еще лазить и сидеть за литературой crying.gif
Цитата(BackEnd @ Nov 11 2016, 03:50) *
Критерии корректности определяются постановкой задачи. Поскольку задача поставлена в очень общем и абстрактном виде, то сложно судить о "добавить-изменить".
Насколько я помню, на оформление функциональных схем строгих требований нет, поэтому сами смотрите как там у вас требуют это рисовать. Можете, например, по SADT/IDEF0 оформить.

Я тоже подумала изначально, что какой-то слишком общий вид, какие именно кадры и вообще нужно ли их сохранять куда-то или просто пропускать дальше. Ладно буду уточнять у куратора эти вопросы smile3046.gif
yulia_plic
Снова здравствуйте. Уточнила насчет формата кадра. Это будет ATM-ячейка размером 52 байта. На рисунке она представлена.
Процесс считывания исходя из структуры ячейки будет следующий:

1)считывание 52 байт в память (регистровую например)

2)разбираем заголовок:
2.1 проверяем на совпадение с последовательностью IA
2.2 проверяем четность заголовка по HEC

3)разбираем данные:
3.1 проверяем данные по алгоритму CRC16
3.2 проверяем конец, чтобы там присутствовала последовательность PAD

Очень прошу помощи опять же по поводу структурной и функциональной схем. help.gif Что изменится и как они примерно будут выглядеть для ATM-ячеек. Как я понимаю для начала нужно добавить память?!


iosifk
Цитата(yulia_plic @ Nov 14 2016, 18:09) *
Очень прошу помощи опять же по поводу структурной и функциональной схем. help.gif Что изменится и как они примерно будут выглядеть для ATM-ячеек. Как я понимаю для начала нужно добавить память?!

У Вас есть скайп? Можем поговорить?
Мой адрес - в личной карточке участника форума...
x736C
Ув. yulia_plic

Не знаю точно, как от Вас требуется по условию задачи, но вообще так.

Подсчет контрольной суммы осуществляется на лету. Согласно стандарту необходимо иметь автомат конечных состояний с тремя состояниями:
HUNT, PRE-SYNC и SYNC.

После вхождения в синхронизм по синхрозаголовку (HEC 8) данные готовы к разбору и подсчету контрольной суммы CRC16 (тоже считаем на лету).
Не уверен, что PAD 16 вообще стоит учитывать при наличии контрольных сумм.

Подробнее смотрите в книге М. Вернер «Основы кодирования», стр. 213.

На Verilog это может выглядеть так:
Код
parameter     //atmBytes            = 53,
                ValidCounterInit    = 9'd423, // [{atmBytes * 8) - 1]
                ValidCounterWidth   = 9,
                LockUpCause         = 5,
                LockDownCause       = 5;

parameter       DemuxHunt           = 2'b01,
                DemuxPreSync        = 2'd10,
                DemuxSync           = 2'd11;

Код
always @ (posedge clk)
begin
    if (~rst) begin
        crc_       <=  8'd0;
        atm        <= 40'd0; end
    else if (demuxFlowClk) begin
//     crc_[7:0] <= {crc_[7:6], crc_[5]^atm[39], crc_[4]^atm[39], ...
//     crc_[3:2], crc_[1]^crc_[7], crc_[0]^crc_[7]^atm[39], crc_[7]^demuxFlow};
        crc_[0]    <=    crc_[7]^demuxFlow;
        crc_[1]    <=    crc_[0]^crc_[7]^atm[39];
        crc_[2]    <=    crc_[1]^crc_[7];
        crc_[3]    <=    crc_[2];
        crc_[4]    <=    crc_[3];
        crc_[5]    <=    crc_[4]^atm[39];
        crc_[6]    <=    crc_[5]^atm[39];
        crc_[7]    <=    crc_[6];
        
        atm[39:0] <= {atm[39:0], demuxFlow};
    end
end

assign  crcValid    = ~|crc_ & (flowCtrlReg0 == 8'h73);

always @ (posedge clk)
begin
    if (~rst) begin validCounter    <= ValidCounterInit;
                    demuxStatus     <= 0;
                    upCounter       <= 0;
                    downCounter     <= 0;    end

    else if (demuxFlowClk) begin
        if (|validCounter & (~crcValid | demuxSync)) validCounter <= validCounter - 1;
        else validCounter <= ValidCounterInit;


        if (demuxHunt) begin            // HUNT
            if (crcValid & demuxCycleEvent) demuxStatus <= DemuxPreSync;
                upCounter   <= 0;
                downCounter <= 0;
         end
        
        else if (demuxPreSync) begin    // PRESYNC
            if (crcValid & demuxCycleEvent) begin
                    if (~lockUp)    upCounter   <= upCounter + 1;
                    else            demuxStatus <= DemuxSync; end
            else if (crcValid ^ demuxCycleEvent)
                                    demuxStatus <= DemuxHunt;
         end
        
        else if (demuxSync) begin       // SYNC
            if (crcValid ^ demuxCycleEvent) begin
                    if (~lockDown)  downCounter <= downCounter + 1;
                    else            demuxStatus <= DemuxHunt; end
            else if (crcValid & demuxCycleEvent)
                                    downCounter <= 0;

         end
        
        else    demuxStatus <= DemuxHunt;
    end
end

assign demuxCycleEvent  = (~|validCounter);
assign lockUp           = (upCounter   == LockUpCause);
assign lockDown         = (downCounter == LockDownCause);
assign demuxHunt        = (demuxStatus == DemuxHunt);
assign demuxPreSync     = (demuxStatus == DemuxPreSync);
assign demuxSync        = (demuxStatus == DemuxSync);

assign demuxLock        = crcValid & demuxSync;

wire    [7:0]    flowCtrlReg0   = atm[39:32];
wire    [7:0]    flowCtrlReg1   = atm[31:24];
wire    [7:0]    flowCtrlReg2   = atm[23:16];
wire    [7:0]    flowCtrlReg3   = atm[15:8];
wire    [7:0]    crcDataReg     = atm[7:0];
yulia_plic
Цитата(iosifk @ Nov 14 2016, 17:18) *
У Вас есть скайп? Можем поговорить?
Мой адрес - в личной карточке участника форума...


Здравствуйте. Есть да, но сейчас я нахожусь в командировке, на практике, где мне и поставили такую задачу, и, к сожалению, не имею возможности выйти на связь, но могу свободно общаться через личные сообщения. Если вам не трудно, пожалуйста, подскажите какие блоки стоит добавить или что изменить в моих схемах? В любом случае по приезду обязательно с удовольствием свяжусь с вами, потому что буду иметь дело еще со множеством задач в этой области и буду признательна в любой помощи.

Цитата(x736C @ Nov 14 2016, 18:10) *
Ув. yulia_plic
Не знаю точно, как от Вас требуется по условию задачи, но вообще так.

Здравствуйте. Спасибо огромное вам, даже с литературой помогли и с кодом, спасибо большое rolleyes.gif .
Скажите пожалуйста, что именно точно вам нужно сказать?
Мне нужно разработать на VHDL и провести полный цикл моделирования IP-блока в САПР Xilinx ISE устройства обнаружения пакетов данных заданного формата в последовательном цифровом потоке. Форматом пакета является ATM-ячейка вида, представленного на рисунке.
Цитата(x736C @ Nov 14 2016, 18:10) *
Подсчет контрольной суммы осуществляется на лету. Согласно стандарту необходимо иметь автомат конечных состояний с тремя состояниями:
HUNT, PRE-SYNC и SYNC.

После вхождения в синхронизм по синхрозаголовку (HEC 8) данные готовы к разбору и подсчету контрольной суммы CRC16 (тоже считаем на лету).
Не уверен, что PAD 16 вообще стоит учитывать при наличии контрольных сумм.

Подробнее смотрите в книге [link=http://caxapa.ru/thumbs/409009/Osnovy_kodirovaniya__M._VERNER_.pdf]М. Вернер «Основы кодирования»[/link], стр. 213.

Последовательность действий должна быть такого вида, который я писала в предыдущем сообщении, и по заданию PAD также нужно учитывать в самом конце (хотя я с вами согласна).

Еще плюс ко всему мне упростили задачу, определив поле HEC 8 как поле контроля четности. На самом деле ,по стандарту, HEC должен являться результатом деления по модулю 2, четырех байтов заголовка на полином x^8+x^2+x+1. Вот.
Еще раз хотела поблагодарить вас за такой подробный ответ, спасибо большое)
iosifk
Цитата(yulia_plic @ Nov 14 2016, 20:10) *
Здравствуйте. Есть да, но сейчас я нахожусь в командировке, на практике, где мне и поставили такую задачу, и, к сожалению, не имею возможности выйти на связь, но могу свободно общаться через личные сообщения. Если вам не трудно, пожалуйста, подскажите какие блоки стоит добавить или что изменить в моих схемах? В любом случае по приезду обязательно с удовольствием свяжусь с вами, потому что буду иметь дело еще со множеством задач в этой области и буду признательна в любой помощи.

Расклад такой. Вы нарисовали некую блок-схему...
А до этого надо нарисовать две картинки.
Первая называется "алгоритм вычислений" вот по такой методике: Блок-схема процесса http://club.shelek.ru/viewart.php?id=178
А вторая картинка должна называться "блок-схема вычислителя" и она следует из первой.
А чтобы было понятней - у меня на сайте есть файл о гайке М3...
Кстати, обычно в гостинице или в кафе есть бесплатный WiFi....
Удачи.
yulia_plic
Цитата(iosifk @ Nov 14 2016, 21:27) *
Расклад такой. Вы нарисовали некую блок-схему...
А до этого надо нарисовать две картинки.
Первая называется "алгоритм вычислений" вот по такой методике: Блок-схема процесса http://club.shelek.ru/viewart.php?id=178
А вторая картинка должна называться "блок-схема вычислителя" и она следует из первой.
А чтобы было понятней - у меня на сайте есть файл о гайке М3...
Кстати, обычно в гостинице или в кафе есть бесплатный WiFi....
Удачи.


Спасибо за ответ. Буду изучать ваши материалы. Сайт сразу заметила, про гайку М3 тоже успела прочитать.
Да ясное дело есть, проблема в том, что живу не одна. Но я постараюсь все равно выйти на связь в ближайшее время.
GAYVER
у одного меня возникает стойкое очучение что даже 4 байта в заголовке не является 100%-й гарантией того, что среди 40 байт данных не попадется такой же последовательности? сталкивался с некорректно написанной моделью флэшки, в которой не стояло доп.защиты от этого дела. и получалось что после подачи команды в 2 байта, стартовал поток данных на 1М. в котором таки попадалась последовательность из 2 байт, которая воспринималась моделью как очередная команда. соответственно текущая операция прерывалась и стартовала новая.

даже с учетом того что стартовая последовательность у вас 4 байта а не 2, и поле данных не 1М, а всего 40 байт - все же предусмотрите механизм, блокирующий работу "модуля распознавания заголовка" в процессе вычитывания данных
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.