Перейти к содержанию
    

des00

Модератор
  • Постов

    9 579
  • Зарегистрирован

  • Победитель дней

    4

Сообщения, опубликованные des00


  1. Вопрос: как доказать заводу изготовителю что в изделии использовано данное изобретение?

     

    Никак, надо было заходить с другой стороны

     

     

    хотя тоже можно перехватить осциллом что плисина ему шлет и что он ей возвращает.

     

    сгенерить рандом с периодом 2^60 и ключик на 16к , пусть гадают :))

  2. Один раз за символьный интервал коэффициенты обновляются.

     

    я так и думал, спасибо

     

    Про разбежку не понял

     

    я к тому что при аппаратной реализации, есть временная задержка между моментом вычисления отчета на выходе FIR эквалайзера и вычисления ошибки созвездия этого отчета на некоторое кол-во тактов(в зависимости от схемы recovery).

     

    Я правильно понимаю, что контекст V вычисления отчета на выходе FIR должен относиться к ошибке вычисленной по этому выходу, что требует логики временной привязки V на выходе эквалайзера к ошибке на выходе recovery ?

  3. 2 petrov alex_os

     

    Для усвоения сделал слепой LMS TSE с ограничителями все работает, теперь хочу сделать слепой LMS FSE есть пара вопросов.

     

    2 petrov

     

    смотрю вашу модель qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_eq_2007_07_21

     

    я правильно понимаю что для работы LMS алгоритма (Ck+1 = Ck + error*V, где V - отчеты сигнала), вы переносите отчеты в домен половинной частоты и они участвуют в обновлении коэффициентов.

     

    Не могли бы вы сказать сколько раз за символьный такт в блоке one_sps_clock_domain/coeff_update запускается процедура обновления коэффициентов ? Как я понимаю коэффициенты должны пересчитываться 1 раз на ошибку.

     

    Если следовать вашей схеме то в реальном модеме возможна разбежка отчетов и сигнала ошибки по времени, как я понимаю нужна схема их синхронизации ?

     

    Спасибо!!

  4. то что я пытаюсь понять это как эти библиотеки физически привязывать к директориям.

     

    никак они к ним не привязываются. исходники компилируются в библиотеку с именем отличным от work.

    для поделок от ментора это будет

    vlog -work my_lib_pipa my_lib_pipa_file.v

     

    затем эта либа цепляется как внешняя при запуске моделирования/компиляции

     

    vcom -L my_lib_pipa my_lib_work_file.vhd

    vsim -L my_lib_pipa work.tb

     

    Это позволяет использовать уже скомпилированную готовую библиотеку. Точно также вы поступаете когда используете библиотеку готовых примитивов (например unisim/Xilinx, altera_mf/Altera и т.д.).

  5. не обжайтесь, но по моему связывать то как пишу с тем что я стебаюсь на своими работами - по детски смешно... :)

     

    да какие обиды, просто интересно было что послужило источником буквы Э в этом слове %) ладно проехали

     

    Я просто пытаюсь понять что физически означает:

    library work

    я думал это указание где искать библиотеку (или package указанный в use work.xxxx.all)

     

    это означает что все пакеты нужно искать в текущей рабочей либе. по умолчанию это либа носит название work, но никто не мешает вам назвать ее например pipa и подключить еще уже скомпилированную библиотеку popa;

     

    тогда вам нужно будет писать так

     

    library pipa; 
    library popa; 
    
    use pipa.const_pkg.all; 
    use popa.func_pkg.all;

  6. Все генерированые файлы проэкта находятся в основной директории (Проэкт), там-же и сорсы.

    Это значит что Проэкт есть рабочий каталог ?

     

    :bb-offtopic:

     

    давно интересно почему вы всегда пишете проЭкт, а не проЕкт ? Вы стебетесь над своими проектами и не воспринимаете их всерьез ? : )

     

    Если библиотека расположена в под-директории относительно рабочей, как описывать относительный путь в library, use ?

     

    понятие библиотеки относиться не к исходникам, а с компилятору. поэтому пути до библиотек прописывать в коде не нужно, надо задавать их в настройках компилятора.

  7. Потребовалось тут для коллеги сделать обвязку автоматического теста на основе логов от голд модели. Сделал вот такой набросок в моделсиме

     

    module tb;
    
      parameter int pDATA_W   = 32 ;
      parameter int pFFT_SIZE = 256;
      //------------------------------------------------------------------------------------------------------
      // used types
      //------------------------------------------------------------------------------------------------------
      typedef bit [pDATA_W-1:0] data_t;
    
      typedef struct {
        data_t  re, im;
      } cmplx_data_t;
    
      typedef cmplx_data_t  cmplx_data_array_t [pFFT_SIZE];
      //------------------------------------------------------------------------------------------------------
      // used constants
      //------------------------------------------------------------------------------------------------------
      const string cIN_FILE_NAME  = "input.txt";
      const string cOUT_FILE_NAME = "output.txt";
      const string cSET_FILE_NAME = "settings.txt";
    
      int NUM = 0;
      //------------------------------------------------------------------------------------------------------
      //
      //------------------------------------------------------------------------------------------------------
      int ifp;
      int ofp;
    
      cmplx_data_array_t  iram;
      cmplx_data_array_t  oram;
    
      initial begin : main
        get_config();
        $display("settings %0d", NUM);
        open_files();
        for (int i = 0; i < NUM; i++) begin
          read_infile();
          $display("read done");
          read_outfile();
          $display("read done");
        end
        close_files();
      end
      //------------------------------------------------------------------------------------------------------
      // file I/O config functions
      //------------------------------------------------------------------------------------------------------
      function void get_config();
        int     fp;
        string str;
      begin
        fp = $fopen(cSET_FILE_NAME, "r");
        if (fp == 0) begin
          $display("config file open error, use default settings");
        end
        if ($fscanf(fp, "num = %d", NUM) == 0) begin
          $display("parse config string error");
        end
        $fclose(fp);
      end
      endfunction
      //------------------------------------------------------------------------------------------------------
      // file I/O data functions
      //------------------------------------------------------------------------------------------------------
      function void open_files ();
        ifp = $fopen(cIN_FILE_NAME, "r");
        ofp = $fopen(cOUT_FILE_NAME, "r");
        if (ifp == 0 || ofp == 0) begin
          $display("can not open files");
          $stop;
        end
      endfunction
    
      function void close_files();
        $fclose(ifp);
        $fclose(ofp);
      endfunction
    
      function void read_infile();
        read_file(ifp, iram);
      endfunction
    
      function void read_outfile();
        read_file(ofp, oram);
      endfunction
    
      function automatic void read_file(int fp, ref cmplx_data_array_t ram);
        for (int i = 0; i < $size(ram); i++) begin
          ram[i] = read_cmplx_sample(fp);
        end
      endfunction
    
      function automatic cmplx_data_t read_cmplx_sample (int fp);
        string        str;
        cmplx_data_t  sample;
      begin
        if ($fgets(str, fp) == 0) begin
          $display("EOF occured");
          $stop;
        end
        sample.re = 0;
        sample.im = 0;
        if (str.len != 1) begin // read complex data
          if ($sscanf(str, "%d%di", sample.re, sample.im) == 0) begin
            $display("parse string failed");
            $stop;
          end
        end
        return sample;
      end
      endfunction
    
    endmodule

     

    все работает, но вот попытка запустить сие в альдеке 8.1 провалилось. Ладно бы он не знает что такое константные строки и что такое ссылка на массив, но ведь он даже не может сделать $fgets/привести массив чаров к строке/вернуть строку из функции/распарсить строку/массив чаров.

     

    И неужели на этом кто то работает ???? :)

  8. 1. Распределенного ОЗУ в FPGA Altera нет

     

    Ну я бы не был столь категоричен.

     

    The LAB of Stratix IV has a new derivative called Memory LAB (MLAB),

    which adds look-up table (LUT)-based SRAM capability to the LAB as

    shown in Figure 2–2. The MLAB supports a maximum of 640 bits of

    simple dual-port static random access memory (SRAM). You can

    configure each ALM in an MLAB as either a 64 × 1 or 32 × 2 block,

    resulting in a configuration of 64 × 10 or 32 × 20 simple dual port SRAM

    block.

  9. С другой стороны с МАС на FPGA конструкция получается попроще. Но МАС by Altera, что-то весит больно много. Скорее всего надо будет переходить на старшие циклоны. МАС на opencores тоже прилично место занимает и написан на Veriloge :( . Может кто-нибудь подскажет ещё какой-нибудь МАС на VHDL?

     

    дык они же все полностью конфигурируемые и с процессорным интерфейсом %) Если вколотить настройки фиксированные, обрезать всякие таблицы дескрипторов, хешей, расширенную логику диагностики, дополнительное буферирование, флоу-контрол и прочее, то получиться много компактнее. Ну а пакеты можно чем угодно набивать, хоть КА, хоть своим CISC/RISC.

     

    ЗЫ либо дождитесь USB3.0 и переход не потребуется ;)

  10. Судя по требованиям к модему, с OFDM надо было вообще _начинать_ ;)

     

    Это следующая итерация %)

     

    Господа прошу помощи вот в таком вопросе.

     

    Положим есть линейный адаптивный эквалайзер с 8 мю тапами. Коэффициент тапа изменяется в пределах -2.000 ... 1.999. Т.е. максимальное усиление данного фильтра 2*8 == + 4 бита разрядности что бы фильтр всегда работал без переполнений. При разрядности данных/коэффициентов 16 бит требуемая разрядность фильтра 36 бит. Положим что на выходе требуется те же 16 бит.

     

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

     

    Мне не понятно вот что : у эквалайзера работающего в режиме захвата, совокупное усиление фильтра порядка 1, по этому отчеты сигнала нужно брать без учета дополнительных старших бит, т.е. в данном примере [29:14]. Но если эквалайзер пошел в "разнос", то ИМХО при таком взятии данных возникнут ошибки переполнения разрядной сетки.

     

    Как правильно поступают в этом случае ? В случае TSE эквалайзера перед блоком принятия решений можно взять биты [35:14] и поставить ограничитель, а как поступают для FSE эквалайзеров, ведь после него отчеты пойдут на схему recovery и такое ограничение может вызвать не корректную работу схемы восстановления частоты ?

     

    Или я неправильно понимаю картину мира ? В каком месте модема обычно ставят FSE эквалайзеры. Понятно что его ставят после RRC фильтра, но куда ставить если у меня после RRC фильтра стоит ару(до него или после?

     

    Спасибо.

  11. С автоматическим синхронным разветвлением по идее должны расти синхронные задержки сигнала (в тактах). А я такого за проектом не замечал.

    Но при попытке распараллелить выходной сигнал на несколько регистров (вернее, при добавлении еше одного регистра к выходному каскаду), начинает вылетать по времени один из входов блока.

     

    Вы маню с дуней не путайте %) register insertion никакого отношения к register duplication не имеет.

    Рекомендую почитать хендбук на квартус по этой теме.

  12. Обмен с периферией только в виде выполнения внешней команды c=ext(f,a,b ), где f - номер внешней команды/устройства, любой тип адресации a,b,c. Чтобы можно было, например: умножение f=1 --> c=ext(1,a,b ) --> c=a*b, запись в видеобуфер f=2 c=ext(2,a,b ) --> c=vga[a], vga[a]=b, и тд и тп.

     

    решил пройтись по opencores

     

    а вот это не безрегистровый ли процессор ? :))

     

    http://opencores.org/projects.cgi/web/tiny8/overview

     

    The registers resides in RAM addressed via a base pointer in the WP register (like the TMS9900).

  13. Просьба указать конкретный пример, т. к. знаний для самостоятельной оценки выложенных там поектов не хватает.

     

    Кхм, зная слово wishbone и project очень сложно найти на этом сайте страницу

     

    http://opencores.org/browse.cgi/by_category

     

    и разделе SoC

     

    WISHBONE Builder: http://opencores.org/projects.cgi/web/wb_builder/overview

    WISHBONE Conmax IP Core : http://opencores.org/projects.cgi/web/wb_conmax/overview

    WISHBONE Conbus IP Core : http://opencores.org/projects.cgi/web/wb_conbus/overview

     

    сразу дам ответ на вопрос как скачать, зарегистрируйтесь.

  14. Расскажите пожалуйста поподробнее про синхронизаторы. Хочу все-таки узнать как это правильно делается.

     

    многократно обсуждалось, поиск по ключевому слову "синхронозатор" выводит на тему

     

    http://electronix.ru/forum/index.php?showt...mp;#entry449467

     

    там есть ссылки и примеры.

     

    Удачи !!!

  15. То есть, можно ли просто соединить выход с входами?

    Или надо разветвить сигнал через промежуточные триггеры?

     

    а смысл соревноваться в искусстве register duplication с синтезатором? вставить дополнительный триггер он не умеет(это надо ручками), а вот расщепить путь на 2 может. Все от тактовой и ваших ресурсов зависит.

     

     

    И можете посоветовать какую-нибудь литературу по особенностям проектирования под ПЛИС (именно по особенностям структуры ПЛИС и максимизации эффективности прошивки, а не по языкам описания).

     

    Ищите книгу Wiley.Advanced.FPGA.Design.Jun.2007

  16. Вопрос в следующем - может ли кто из здесь присутствующих провести примерный анализ увеличения производительности от использования данного продукта. На разработку тестбенча для крупного проекта уходит достаточно много времени. Зачастую даже больше, чем на разработку самой тестируемой модели. Теорию я знаю - читал зазывные агитки московской конференции ментора. А как обстоят дела с практикой?

     

    Полагаю что из активных участников форума, похоже что я единственный кто занимается OVM достаточно плотно %(( Вот моя точка зрения.

     

    Насчет времени разработки тестбенча не могу понять что вас удивляет, вы знаете примеры когда разработка автоматизированного (НЕ ad-hoc) тестбенча с функциональным покрытием >80% занимала мало времени? К сведению верификация занимает порядка 50% времени разработки крупного проекта.

     

    Насчет увеличения производительности тут вопрос сложный.

    Что касается первого проекта на OVM то : Если вы не приняли концепцию SV ООП увеличение составит минус (200-300)%. Если вы уже работали с SV ООП и достаточно хорошо разбираетесь в рандомизации, ее ограничениях, механизме синхронизации программных тредов и подходах в отладке на классах то оно составит минус (100-200)%.

     

    После этого если вы не будете пользоваться какой либо библиотекой вы в любом случае будете разрабатывать транзакции с констрейнами, драйвера, агенты, мониторы, придумывать систему переопределения свойств и параметров объектов, систему логов. В итоге это получится та же OVM/VMM/AVM только заточенная под конкретный тестбенч. Поэтому не думаю что не используя готовые (и отлаженные сообществом разработчиков !!!) либы вы выиграете время.

     

    Что касается OVM никто не заставляет вас делать как в учебниках т.е. использовать те интерфейсы и методы которые они предлагают(хотя это более правильно). Из материалов форума ovmworld я понял что сами разработчики достаточно свободно себя ведут, не всегда регистрируют объекты, создают компоненты, транзакции без фабрики и макросов и т.д(но к сожалению этого в учебниках не описано). Тут полная свобода действий %)

     

    Что касается конкретных цифр, я планирую модернизировать/переписать тестбенч для своего опенсорс проекта. Потребуется 100% переписка того кода, который есть. С точки зрения того OVM опыта что у меня есть сейчас это должно занять 2 полноценных дня. При этом ляжет все достаточно красиво, понятно и компактно. У меня нет 100% уверенности в этом, на эту работу планирую выделить ближайшие выходные, после этого станет ясно ошибся я или нет. Если интересно потом могу сообщить результат %))

     

    В одной из веток я так же задавал вопрос об интеграции ovm не только с квестой, в которой я сейчас и работаю, а со всем пакетом ментора. Тоесть когда тестбенч, построенный согласно ovm, можно будет создавать в FPGA Advantage,а не отдельно в квесте, как сейчас? Может кто знает о последних новинках? HDL designer новый уже прекрасно понимает SV, а когда же будет графика?

     

    в той же ветки я вам ответил %) вот моя точка зрения:

     

    никогда не работал с FPGA Advantage, от HDL Designera меня тошнит (все равно не рисую, а редактор там ТАК тормозит), как можно работать в убогом интерфейсе квесты тоже не понимаю. Все делаю в обычном текстовом редакторе, компилирую в нем же или с командной строки/скриптами. Поэтому не могу понять вашей ситуации. Не собираетесь же вы SV классы создавать, описывать методы, соединять, конфигурировать в GUI мышкой? Не вижу в этом ни смысла ни искры.

     

    Ну вот как то так %))

  17. кхм, господа я дико извиняюсь, но если предмет поиска это поиск регистров вместо защелок, то ничего что rising_edge/falling_edge в коде есть только в одном месте, а описание вида

     

    process(c) begin 
      if (c = '1') bla-bla-bla
    end process;

     

    принципиально приводит к синтезу latch (защелки по уровню) вместо тригера (защелки по фронту) ? :))

  18. попробую разобраться, но пока не понятно, как динамический объект может быть внутри синтезируемого (статического) RTL module

    если подразумевается, что монитор - это набор проверок (внешний тестовый модуль), соответствующий набору SVA, то непонятно его преимущество,

     

    пример встраивания динамического объекта в статический и в фабрику

     

    http://ovmworld.org/forums/showpost.php?p=...amp;postcount=2

     

    я еще не до конца со всем этим разобрался. пока набираюсь опыта управления виртуальными секвенсерами и OVM фабрикой. Заканчиваю только второй простой проект на OVM. Поэтому тут пока помочь не могу.

     

    тестеру не надо знать внутренностей модуля, достаточно только описание функций (ТЗ)

    мне не надо разбираться с кодом/структурой теста/тестбенча, по сработавшему асершину я надеюсь понять ошибку либо теста, либо RTL

     

    ассершины кажется подходящим механизмом - но я не уверен

     

    хмм, в таком случае вам действительно проще сделать все на асертах + немного поведенческого описания. Класс для данного случая изыбточен, хотя на нем много можно красивостей сделать. И пропертя в него передать и covergroup на делать и логи красиво вести и части проверок через фабрику отключать/включать....

     

    2 CaPpuCcino

     

    скормил вот это квесте 6.4

     

    int bus_command_order_number[parameter bus_number]='0;
    int bus_register_write_order_number[parameter bus_number]='0;

     

    ** Error: tb.v(99): near "parameter": syntax error, unexpected "parameter"

     

    int bus_command_order_number[bus_number]='0;

     

    ** Error: tb.v(99): Cannot assign a packed type to an unpacked type

     

    это кто у нас такое компилит ?

     

    ИМХО так должно быть

    int bus_command_order_number[bus_number]='{defаult : 0};

     

    да и в стандарте вроде не видно используемых вами таких назначений

     

    3.7 Array literal

    8.13 Assignment patterns

  19. А эта и есть datapath от сигнала DataIn2 до любого другого сигнала *.

     

    не проснулся еще, глянул не туда.

     

    Уверен, это узел обработки сигнала всегда быдет стоять после демультиплексора, далящего входной цифровой поток на 4-ре выходных (связной демультиплексор).

     

    как хорошо быть хоть в чем то уверенным на 100%, а если будут мультиплексировать 2 потока ? или 8 ? или обрабатывать не мультиплексированый поток? В общем я бы написал нормальный sdc файл и не парился по этому поводу.

  20. Всем привет. Попытаюсь описать проблему внятно :) .

    В проекте есть два блока описанных на VHDL примерно такие:

     

    Выходы первого блока подключены к входам второго блока в схематике. Для Clk в настройках задана частота.

    После компиляции TimingAnaliser ругается, что EnDataOut1 не успевает добежать до некоторых сигналов из ent2.

    Сигнал EnDataIn2 имеет примерно такой вид ___-___-___-___(000100010001000), поэтому в AssigmenEditor пишу строчку "-from ent1/DataOut1 -to * MULTICYCLE 4"(ну или что-то типа того), после чего компилятор успешно засовывает проект в кристалл по частоте.

     

     

    1. хмм а неужели это работает в кристалле ? что то мне подсказывает что мультицикл в применении к сигналам разрешения использовать нельзя, к datapath между регистрами на этом сигнале можно.

     

    2. А вы уверены что вам или вашим коллегам через несколько месяцев не придет в голову изменить характеристики сигнала EnDataIn2 ? Например для увеличения производительности его сделают со скважностью 2. И рассматривая ваш блок как гарантировано рабочий и не видя предупреждений временного анализатора будут мучительно долго искать с помошью фена и фризера причину нестабильности работы.

     

    Это к тому, что мультицикловость здесь это свойство вашего текущего проекта и делать это свойством разработанного вами блока я бы не стал.

     

    Про мультициклы рекомендую посмотреть http://electronix.ru/forum/index.php?showt...=52323&st=0

     

    Удачи!!!

  21. Я видел такого человека.

     

    ни в коей мере не сомневаюсь что такие люди есть.

     

    Это трудоемкая работа для конкретного семейства позволяет в кристалл запихнуть то, что синтезатор туда в жизнь не положит. + С мозгами и ручной разводкой lcell фпга (вплоть до использования входов переноса) - это ему позволяет поднимать тактовую, уменьшать ресурсы и получать стабильность успешной разводки чипа.

     

    Ну я бы не был столь категоричен, если синтезатору грамотно "объяснить" что от него хотят, разложит как миленький. Главное знать как "объяснять" и что бы синтезатор нормальный, класса квартуса 8 ки %) В свое потратил на изучение возможностей достаточно много времени.

     

    Как говорится я это видел, видел результат, но считаю, что цена неоправданная для других задач в разработки на FPGA. Но сложилось впечатление, что можно выжать максимум таким способом.

     

    Вот именно соотношение трудозатрат/выхлоп далеко не в пользу данного метода, крайне редко требуется достигать по чипу 500МГц и на таких частотах забивать 100% кристалла. Но вполне допускаю что грамотное описание + RPM в некоторых случаях дает хороший выйгрыш.

×
×
  • Создать...