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

egorman44

Свой
  • Постов

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

  • Посещение

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


  1. В ISE в process properties для Generate Programming File есть вкладка readback options, там можно отключить.

     

    Это я уже пробовал, не помогает, сразу после конфигурации из Impact пробую readback, он проходит, затем заливаю это в плис и все работает как и должно

  2. Добрый день многоуважаемые форумчане. Осваиваю Spartan 3an , и наткнулся на замечательную белую страницу под названием "Advanced Security Schemes for Spartan..." В разделе по активной защите (JTAG) сказанно , что существует некий блок BSCAN_SPARTAN3AN, с его помощью можно мониторить активность на JTAG и в зависимости от желания можно стереть конфигурацию , пропустить функцию или запретить ее.

     

    Можно ли отключить Readback при помощи этого самого вышеупомянутого блока? Если кто отключал поделитесь опытом отключения пожалуйста :rolleyes:

     

    На одном из форумов прочитал, что запретить ReadBack можно отключив JTAG,ну и как его отключить ?! поставив в высокий импеданс выходы TDI, TCK и TMK блока BSCAN_SPARTAN3AN. :biggrin: и чего тогда будет , смогу ли я перепрограммировать ПЛИСину после отключения JTAG c помощью Impact?

     

     

     

     

  3.  

    ахахаха спасибо за let me google that for you, я не те запросы вбивал в поисковике :biggrin:

     

    Пожелаю вам успехов.

     

    благодарю!

  4. огогого сколько всего ! выражаю огромную признательность и благодарность всем ответившим ! респект и уважуха так сказать :biggrin:

     

    Для пунктов 2 и 3 мог бы пригодиться doxigen. Это хоть как-то автоматизирует процесс в части струкутрного описания.

    Для пункта 4 использовать LEC, чтобы избежать глупых ошибок.

     

    Работа по освоению чужого кода долгая и довольно занудная. Естественно время зависит от вашего уровня понимания ЯОА, решаемой блоком задачи и необходимой глубины понимания кода. Но в любом случае, если каждый день делать пусть и маленький, но шаг, то вскоре будет повеселее, а потом и совсем быстро и весело.

     

    doxigen актуален для verilog? зашел на main page читаю:

     

    but it also supports other popular programming languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D.

     

    можно поподробнее, что же такое LEC ?

    и извините , может быть за наивный вопрос, но в аббревиатурах не силач , что значит ЯОА, а то даже мой старый знакомый Гугл мне отказывается помочь :smile3046:

     

    Менеджерам на заметку...

    А почему-бы и не научится документировать то что разрабатывается?

    Деньги разработчику уплочены - значит и комплектность результатлов работы должна соответствовать - т.е. проект должен иметь документацию.

    Тут скорее вопрос в какой форме и объёме документировать... Может чё посоветуют опытные люди по поводу именно документирования цифровых дизайнов...

     

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

     

    описание никто лучше не задокументирует, кроме самого разработчика, также как и программу - программист (мое мнение). Менеджеры могут "налить воды", отредактировать для лучшего понимания - но уже в готовом (мое мнение)...

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

    Ответ разработчика был простой - не умею их (тестбенчи) писать и проверяю все осцилографом....

    Наличие тестбенчей естественно ускоряет понимание чужого проекта/описания...

     

    Насколько я успел разобраться тестбенчи тоже на проект не писались.

     

  5. Также здорово помогают комментарии.

     

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

     

    найти верхний модуль и потихонечку спускаться в глубину.

     

    да тоже подумал , что освоение по одному модулю куда целесообразней, но можно и в обратном направлении , снизу вверх.

     

    + голова, каранадаш и стопка бумаги.

     

    тоже предпочитаю карандаши :biggrin:

     

    Быстро?.. Никак.

     

    это конечно жаль, знать будем сидеть и въезжать по-тихоньку :biggrin:

     

  6. Всем здравствуйте и доброго времени суток!!!

    Думается, что многие из читателей форума проходили этап, когда необходимо было перелопачивать и исправлять чужой код . С этой ситуацией столкнулся и я. Второй день тупо смотрю в монитор, стараясь понять в проекте, что откуда пришло и куда зашло, как где модифицировалось и что в итоге получилось. Сначала смотрел описание девайсины, потом начал читать про протоколы используемые в ней, параллельно заглядывая в код. Голова под конец вечера была полна мути, а состоянии напоминало состоянии прострации. Накопленный стресс приходилось снимать вечерними пробежками и маханиями руками по воздуху :biggrin:

    Хотя сегодня ,когда заглянул в RTL viewer, после того как скомпилил проект, дело пошло гораздо веселее, но все же, может есть у кого пара тройка дельных советов по тому как быстро попробовать проглотить кем то написанный проект ?

  7. По модели - у вашей микросхемы есть время установки данных и время удержания. По нарастающему фронту клока данные выставляются на шину через время tsu

     

    а разве не после tCO (clock-to-output delay— задержка выхода относительно синхрочастоты) ,а не tsu?

    на сколько я понимаю tSU (setup) и tHD(hold) это просто интервал в котором данные на входе синхронной логики должны быть стабильны.

  8. 1. Фильтры нормированные, т.е. коэффициент усиления фильтра, в полосе пропускания = 1?

     

    я так полагаю, что matlab строит именно такие. по крайней мере график АЧХ в fdatool , в полосе пропускания ,имеет затухание 0 дБ, или же коэф передачи равен 1.

     

    2. Тестовый сигнал имеет одинаковую спектральную плотность во всей полосе частот ?

     

    именно

     

    такое ощущение что matlab , для преобразования коэффициентов из double в 16 signed binary использует разный множитель. в некоторых случаях перемножает коэффициент на 2^15 в других на 2^16, ну и делает дальнейшие преобразование к знаковому типу.

     

     

  9. Собственно от глюков в signal tap я избавился двумя строчками в sdc файле, оказывается синтезатор , размещал компоненты в ПЛИС как хотел. Не смотря на то,что тактовая 16 МГц , это приводило к суровым непоняткам в просмоторщике.

     

    derive_clock_uncertainty
    create_clock -name {SCLK} -period 16384KHz [get_ports {SCLK}]
    create_clock -name {MCLK} -period 16384KHz [get_ports {CLK_IN}]

     

    точнее это три ... и это все?! я плакал от счастья :biggrin:

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

    ___________________________________

     

    но вот еще что мне показалось достаточно странным. коэффициенты я экспортирую в ASCII файл в бинарном формате, оттуда вставляю в файл инициализации памяти. когда я строю ФНЧ , то все просто превосходно работает. строю ФВЧ и режектор, АЧХ в полосе пропускания становится ниже на 6дБ , строю полосовой фильтр АЧХ получается выше на 6 дБ. Соответственными манипуляциями (поделив на 2, умножив на 2 сигнал с выхода фильтра) я могу получить что хотел, но все таки почему сие может происходить ? Ни у кого не было такой ситуации ?

     

  10. Надеюсь клок с речевого кодека идет на клоковый вход ПЛИС?

     

    и я надеюсь , плату не я разводил :biggrin: PIN planer говорит что SCLK подключили к CLK_n

     

    а работу на один фронт не переносили?

     

    попробую

     

    SCLK - это клок данных, идет ли он постоянно, если только в момент передачи это стремно.

     

    постоянно

     

    Данные что вы по нему получили и сохранили в вектор, по какому клоку дальше используете? Если по тому же ок, если по мастер клоку, то надо данные синхронизовать..

     

    все ок , по тому же SCLK

     

     

  11. Если же это все внутри плис происходит, я так думаю потому что странно что вы тактируетись тем же сигналом что и данные если этот сигнал внешний.

     

    обрисую ситуацию поподробнее, у меня имеется ученическая плата на ней 2 кварца 100 и 16.384 МГц. имеется кодек речевого сигнала, на него через ПЛИС я подаю тактовую 16.384 (сигнал MasterCLK), он из этой тактовой формирует синхросигнал 64 кГц (SDOFS)и тактовый сигнал SCLK кратный MCLK для последовательной передачи данных . Частота обновления прихода информационного пакета 64 кГц, мне вполне хватает SCLK что-бы выполнить все до прихода нового пакета. почему это странно ?! каким же сигналом тактировать ?

     

    -------

    и это просто анбеливэбл , перенес проект , в другой проект, и signal tap ожил, хотя могу поклясться, что ничего не исправлял... :wacko:

  12. и синхронная и информационная линия тактируется сигналом SCLK , причем изменение уровня происходит по нарастающему фронту . блин чего-то я и не заметил , что защелкиваю по разным фронтам. :laughing:

     

    на сколько я понимаю, в этом случае мне надо по ниспадающему защелкивать ?

     

    reg a1, a2;
    always @(negedge SCLK)
    begin
        a1 <= SDOFS;
        a2 <= a1;    
    end
    
    always @(negedge SCLK) begin
        checker <= {checker[30:0],SDOFS_risingedge};

  13. товарищи я в тупике , не могу понять чего происходит?!

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

     

    я написал следующее

     

    //    *******************************
    //    *** detecting SDOFD impulse ***
    //    *******************************
    
    reg a1, a2;
    always @(negedge SCLK)
    begin
        a1 <= SDOFS;
        a2 <= a1;    
    end
    
    wire SDOFS_risingedge = ((a2)&~a1);        // смотрим высокий уровень на SDOFS
    
    //    ***********************************************
    // *****receving message from FPGA to AD73322*****
    //    ***********************************************
    reg WR1;
    reg WR2;
    
    reg [31:0]     received_data    = 0;
    reg [15:0]     received_data_1 = 0;
    reg [15:0]     received_data_2 = 0;
    
    reg [31:0]     checker;
    reg WR;
    
    reg next_chan = 0; // To switch buffers
    
    
    always @(posedge SCLK) begin
    
        checker <= {checker[30:0],SDOFS_risingedge};    // это нам скажет когда пришла вся посылка
        received_data <= {received_data[30:0],SDO};    // читаем что пришло в входа SDO 
        if((checker[31] && checker[15]) == 1) begin        // если в 31 и 15 битах по единице то защелкнули всю инфу 
        
            received_data_1 <= received_data[31:16];        // записываем в регистр received_data_1
            received_data_2 <= received_data[15:0] ;        // записываем в регистр received_data_2     
        end
        
    end

     

    Вроде бы как , считанная информация , с входа SDO должна грузиться в буфер received_data_1 и received_data_2 и не изменяться, до прихода нового пакета. Но происходит вообще что-то невообразимое если верить signal tap. В ModelSime все ok!

    post-74507-1400746940_thumb.png

  14. читайте консоль, симулятор пишет в лог сообщение о том, что он не видит файла.

     

    и в правду пишет :biggrin:

     

    добавил файл инициализации в папку симуляции и все заработало!

     

     

     

     

    зы. наконец-то , раскрыта тайна , что же такое ТС ! поклон! :biggrin:

  15. вообщем я доделал модуль фильтра, проверил , вроде бы как работает. Пришло время вставлять его в головной проект и о "чудо", ничего не заработало :crying:

     

    Глядя на временные диаграммы , вижу что на выходе у блока ROM одни XXXXXX.

    Инициализирую при помощи

    $readmemb("single_port_rom_init.txt", rom);

     

    Думал , что это быть может , из-за того , что модуль фильтра и top level дислоцированы в разных папках, ан нет. Скопировал все в один проект , а так же добавил файл инициализации памяти single_port_rom_init.txt в ту же папку , но увы на выходе все те же злополучные ХХХХХХ.

     

    есть какие-нибудь предположения?

    post-74507-1399976671_thumb.png

  16. где поставить галочку, чтобы генерируемый Matlab'ом код, синтезировал КИХ-фильтр , на основе циклического буфера?

     

    как я понял нигде :laughing:

     

    Ну и хорошо . Решил написать сам этот фильтр на основе циклического буфера. Порыл в интернетах и нашел схему . К этой схеме давались и временные диаграммы, но я в них повис.

    Схему выполнил с помощью альтеровских шаблонов (RAM и ROM имеют синхронный интерфейс). Хотелось бы уточнить следующее. Вот на схеме есть два счетчика СТ1 и СТ2, допустим я считаю импульсы по заднему фронту, формируя тем самым адрес для RAM и ROM блоков. Защелкивать эти значения для RAM и ROM блоков необходимо по переднему фронту ?

     

    И необходимо ли между блоком перемножения и суммирования синхронизировать сигнал ? Что то вроде:

    always @(negedge clk)
    mult_out <= ROM_out * RAM_out;

     

    или достаточно

     

    mult_out <= ROM_out * RAM_out;

    post-74507-1399284532_thumb.png

    post-74507-1399286484_thumb.png

  17. Не понял. В чём же была проблема, что умножители заменяло логикой?

     

    было AUTO, блоки перемножения не использовались, поставил DSP Blocks синтезатор задействовал встроенные перемножители.

    В режиме AUTO как говорит инструкция , синтезатор сам волен поступать как знает , для минимизации площади и для увеличения скорости проекта.

     

  18. Выражаю огромную благодарность всем ответившим! :biggrin:

     

    Значит так, пошел я путем наименьшего сопротивления. Сгенерировал фильтр в MAtlab'е , транслировал в verilog. Получил 17 блоков перемножения, но почему то ,вместо того ,что-бы использовать встроенные блоки перемножение (embeded multiplier), компилятор использовал логические элементы (LE).

    На сколько я понимаю при разработке чего-то серьезного , логических элементов может не хватить и именно тогда предпочтительней использование встроенных блоков ? Или использование встроенных блоков всегда предпочтительнее ?

    Я уже пользовался встроенными блоками при помощи мегафункции LPM_Mult, существуют ли другие возможности как то их активизировать ?

  19. Здравствуйте многоуважаемые форумчане! :a14:

     

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

     

    До сих пор играюсь с кодеком AD73322. Обрабатываю речевой сигнал. С частотой дискретизации 64кГц, на FPGA поступает 16-битный кадр в дополнительном коде(two’s complement). Хотел попробовать отфильтровать сие фильтром с частотой среза, ну скажем 10 кГц.

     

    Выбрал КИХ фильтр, 32-ой порядок. Для начала рассчитал его коэффициенты. Коэффициенты получились дробные, а некоторые еще и отрицательные :biggrin: Тут же возник вопрос, в каком формате их представлять ? Товарищи подсказывают , что в принципе, можно умножить все на 65536, представить все в дополнительном коде, и получившееся значение после фильтрации поделить на те же 65536. А как же правильно будет ?

     

    Вопрос номер 2 , посмотрев внимательно на фильтр, я увидел в нем блок перемножения :biggrin: , получается , что я перемножаю 16-бит на знаковые 16-бит,на выходе получаю сколько? 31-битовое знаковое число ? А мне бы надо вернуть его во все тот же 16-битовый дополнительный код. Какими махинациями это осуществимо? Сдвигом на 16 вправо ?

  20. Среды от Xilinx и Altera имеют препроцессор, который умеет переделывать initial в global set и global reset, а так же fill block ram.

     

    я так полагаю , что уже столкнулся с этим. Мне перед началом работы необходимо было инициализировать режим работы микросхемы, послать туда несколько 16 битных слов. Я думал ,куда их девать ?! сначала смотрел в сторону параметров,но почитав , увидел, что слова инициализации можно попробовать в reg засунуть.

     

    reg [0:15]initialization [0:6]; 
    
    initial begin
    
        initialization[0] = 16'b10001001_0_000_10_11;
        initialization[1] = 16'b10000001_0_000_10_11;
        initialization[2] = 16'b10001010_11111001;
        initialization[3] = 16'b10000010_11111001;
        initialization[4] = 16'b10001000_00010001;
        initialization[5] = 16'b10000000_00010001;
        initialization[6] = 16'b0111111111111111;
        
    end

     

    компилятор все это в RAM блок синтезировал . Правильно ли для хранения слов инициализации пользоваться таким способом ?

    И правильно ли я понял , что начальные уровни я могу тоже задать в этом блоке ? и global reset там же ?

  21. // 1
    reg [3:0] RST_CNT=0;
    reg       RST=1;
    wire      RESET;
    
    always @(posedge iCLK)
    begin
      RST <= ~RST_CNT[3];
      if (~RST_CNT[3])
        RST_CNT <= RST_CNT + 1;  
    end
    
    assign RESET = RST;
    
    // 2
    reg [3:0] RST_CNT=~0;
    reg       RST=1;
    wire      RESET;
    
    always @(posedge iCLK)
    begin
      RST <= |RST_CNT;
      if (RST)
        RST_CNT <= RST_CNT - 1;
    end
    
    assign RESET = RST;

     

    то что надо , спасибо !

     

  22. это же в тестбенче у Вас?))

    initial 
    begin
        RESET_INV = 1'b0; 
        repeat(10) @(posedge SCLK);
        RESET_INV <= 1'b1;
    end

     

    припоминается , где - то читал , про невозможность синтезирования initial блока :laughing:

     

    ну а как , тогда ?

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