egorman44
-
Постов
144 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные egorman44
-
-
Добрый день многоуважаемые форумчане. Осваиваю Spartan 3an , и наткнулся на замечательную белую страницу под названием "Advanced Security Schemes for Spartan..." В разделе по активной защите (JTAG) сказанно , что существует некий блок BSCAN_SPARTAN3AN, с его помощью можно мониторить активность на JTAG и в зависимости от желания можно стереть конфигурацию , пропустить функцию или запретить ее.
Можно ли отключить Readback при помощи этого самого вышеупомянутого блока? Если кто отключал поделитесь опытом отключения пожалуйста :rolleyes:
На одном из форумов прочитал, что запретить ReadBack можно отключив JTAG,ну и как его отключить ?! поставив в высокий импеданс выходы TDI, TCK и TMK блока BSCAN_SPARTAN3AN. и чего тогда будет , смогу ли я перепрограммировать ПЛИСину после отключения JTAG c помощью Impact?
-
ахахаха спасибо за let me google that for you, я не те запросы вбивал в поисковике
Пожелаю вам успехов.благодарю!
-
огогого сколько всего ! выражаю огромную признательность и благодарность всем ответившим ! респект и уважуха так сказать
Для пунктов 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:
Менеджерам на заметку...А почему-бы и не научится документировать то что разрабатывается?
Деньги разработчику уплочены - значит и комплектность результатлов работы должна соответствовать - т.е. проект должен иметь документацию.
Тут скорее вопрос в какой форме и объёме документировать... Может чё посоветуют опытные люди по поводу именно документирования цифровых дизайнов...
Да хотелось бы очень узнать от бывалых , как собственно оформляется эта документация. Я так полагаю , что в ней должна присутствовать некая иерархия модулей проекта, с их кратким описанием.
описание никто лучше не задокументирует, кроме самого разработчика, также как и программу - программист (мое мнение). Менеджеры могут "налить воды", отредактировать для лучшего понимания - но уже в готовом (мое мнение)...про тестбенчи - это правильно, но у меня были случаи когда передавались описание/проект без тестбенчей.
Ответ разработчика был простой - не умею их (тестбенчи) писать и проверяю все осцилографом....
Наличие тестбенчей естественно ускоряет понимание чужого проекта/описания...
Насколько я успел разобраться тестбенчи тоже на проект не писались.
-
Также здорово помогают комментарии.
к большому моему сожалению , по наследству мне их не досталось. надо бы и себя приучать достойно комментировать код.
найти верхний модуль и потихонечку спускаться в глубину.да тоже подумал , что освоение по одному модулю куда целесообразней, но можно и в обратном направлении , снизу вверх.
+ голова, каранадаш и стопка бумаги.тоже предпочитаю карандаши
Быстро?.. Никак.это конечно жаль, знать будем сидеть и въезжать по-тихоньку
-
Всем здравствуйте и доброго времени суток!!!
Думается, что многие из читателей форума проходили этап, когда необходимо было перелопачивать и исправлять чужой код . С этой ситуацией столкнулся и я. Второй день тупо смотрю в монитор, стараясь понять в проекте, что откуда пришло и куда зашло, как где модифицировалось и что в итоге получилось. Сначала смотрел описание девайсины, потом начал читать про протоколы используемые в ней, параллельно заглядывая в код. Голова под конец вечера была полна мути, а состоянии напоминало состоянии прострации. Накопленный стресс приходилось снимать вечерними пробежками и маханиями руками по воздуху
Хотя сегодня ,когда заглянул в RTL viewer, после того как скомпилил проект, дело пошло гораздо веселее, но все же, может есть у кого пара тройка дельных советов по тому как быстро попробовать проглотить кем то написанный проект ?
-
По модели - у вашей микросхемы есть время установки данных и время удержания. По нарастающему фронту клока данные выставляются на шину через время tsu
а разве не после tCO (clock-to-output delay— задержка выхода относительно синхрочастоты) ,а не tsu?
на сколько я понимаю tSU (setup) и tHD(hold) это просто интервал в котором данные на входе синхронной логики должны быть стабильны.
-
1. Фильтры нормированные, т.е. коэффициент усиления фильтра, в полосе пропускания = 1?
я так полагаю, что matlab строит именно такие. по крайней мере график АЧХ в fdatool , в полосе пропускания ,имеет затухание 0 дБ, или же коэф передачи равен 1.
2. Тестовый сигнал имеет одинаковую спектральную плотность во всей полосе частот ?именно
такое ощущение что matlab , для преобразования коэффициентов из double в 16 signed binary использует разный множитель. в некоторых случаях перемножает коэффициент на 2^15 в других на 2^16, ну и делает дальнейшие преобразование к знаковому типу.
-
Собственно от глюков в 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}]
точнее это три ... и это все?! я плакал от счастья
чувствуется надо бы подразобраться с TimeQuest если назначение ограничений , может так серьезно сказываться на проекты.
___________________________________
но вот еще что мне показалось достаточно странным. коэффициенты я экспортирую в ASCII файл в бинарном формате, оттуда вставляю в файл инициализации памяти. когда я строю ФНЧ , то все просто превосходно работает. строю ФВЧ и режектор, АЧХ в полосе пропускания становится ниже на 6дБ , строю полосовой фильтр АЧХ получается выше на 6 дБ. Соответственными манипуляциями (поделив на 2, умножив на 2 сигнал с выхода фильтра) я могу получить что хотел, но все таки почему сие может происходить ? Ни у кого не было такой ситуации ?
-
Надеюсь клок с речевого кодека идет на клоковый вход ПЛИС?
и я надеюсь , плату не я разводил PIN planer говорит что SCLK подключили к CLK_n
а работу на один фронт не переносили?попробую
SCLK - это клок данных, идет ли он постоянно, если только в момент передачи это стремно.постоянно
Данные что вы по нему получили и сохранили в вектор, по какому клоку дальше используете? Если по тому же ок, если по мастер клоку, то надо данные синхронизовать..все ок , по тому же SCLK
-
Опубликовано · Изменено пользователем egorman44 · Пожаловаться
Если же это все внутри плис происходит, я так думаю потому что странно что вы тактируетись тем же сигналом что и данные если этот сигнал внешний.обрисую ситуацию поподробнее, у меня имеется ученическая плата на ней 2 кварца 100 и 16.384 МГц. имеется кодек речевого сигнала, на него через ПЛИС я подаю тактовую 16.384 (сигнал MasterCLK), он из этой тактовой формирует синхросигнал 64 кГц (SDOFS)и тактовый сигнал SCLK кратный MCLK для последовательной передачи данных . Частота обновления прихода информационного пакета 64 кГц, мне вполне хватает SCLK что-бы выполнить все до прихода нового пакета. почему это странно ?! каким же сигналом тактировать ?
-------
и это просто анбеливэбл , перенес проект , в другой проект, и signal tap ожил, хотя могу поклясться, что ничего не исправлял...
-
и синхронная и информационная линия тактируется сигналом SCLK , причем изменение уровня происходит по нарастающему фронту . блин чего-то я и не заметил , что защелкиваю по разным фронтам. :laughing:
на сколько я понимаю, в этом случае мне надо по ниспадающему защелкивать ?
reg a1, a2; always @(negedge SCLK) begin a1 <= SDOFS; a2 <= a1; end always @(negedge SCLK) begin checker <= {checker[30:0],SDOFS_risingedge};
-
товарищи я в тупике , не могу понять чего происходит?!
у меня двухканальный звуковой кодек , протокол передачи достаточно простой, на одной линии синхроимпульс (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!
-
Опубликовано · Изменено пользователем egorman44 · Пожаловаться
читайте консоль, симулятор пишет в лог сообщение о том, что он не видит файла.и в правду пишет
добавил файл инициализации в папку симуляции и все заработало!
зы. наконец-то , раскрыта тайна , что же такое ТС ! поклон!
-
Опубликовано · Изменено пользователем egorman44 · Пожаловаться
вообщем я доделал модуль фильтра, проверил , вроде бы как работает. Пришло время вставлять его в головной проект и о "чудо", ничего не заработало :crying:
Глядя на временные диаграммы , вижу что на выходе у блока ROM одни XXXXXX.
Инициализирую при помощи
$readmemb("single_port_rom_init.txt", rom);
Думал , что это быть может , из-за того , что модуль фильтра и top level дислоцированы в разных папках, ан нет. Скопировал все в один проект , а так же добавил файл инициализации памяти single_port_rom_init.txt в ту же папку , но увы на выходе все те же злополучные ХХХХХХ.
есть какие-нибудь предположения?
-
Опубликовано · Изменено пользователем egorman44 · Пожаловаться
где поставить галочку, чтобы генерируемый 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;
-
Так как 0 это 32 бита. Или 64 ? :)
по умолчанию 32 бита.
-
куда проще поставить нужную галочку в матлабе
где поставить галочку, чтобы генерируемый Matlab'ом код, синтезировал КИХ-фильтр , на основе циклического буфера?
-
Не понял. В чём же была проблема, что умножители заменяло логикой?
было AUTO, блоки перемножения не использовались, поставил DSP Blocks синтезатор задействовал встроенные перемножители.
В режиме AUTO как говорит инструкция , синтезатор сам волен поступать как знает , для минимизации площади и для увеличения скорости проекта.
-
Analysis & Synthesis Settings->More Settings->DSP Block Balancing?
Так же посмотрите и Maximum DSP Block Usage.
DSP Block Balancing -> auto
Maximum DSP Block Usage -> -1(UNLIMITED)
спасибо , с этим разобрался!
-
Выражаю огромную благодарность всем ответившим!
Значит так, пошел я путем наименьшего сопротивления. Сгенерировал фильтр в MAtlab'е , транслировал в verilog. Получил 17 блоков перемножения, но почему то ,вместо того ,что-бы использовать встроенные блоки перемножение (embeded multiplier), компилятор использовал логические элементы (LE).
На сколько я понимаю при разработке чего-то серьезного , логических элементов может не хватить и именно тогда предпочтительней использование встроенных блоков ? Или использование встроенных блоков всегда предпочтительнее ?
Я уже пользовался встроенными блоками при помощи мегафункции LPM_Mult, существуют ли другие возможности как то их активизировать ?
-
Опубликовано · Изменено пользователем egorman44 · Пожаловаться
Здравствуйте многоуважаемые форумчане! :a14:
Продолжаю разбираться в премудростях цифровой схемотехники и в тонкостях проектирования цифровых фильтров в частности.
До сих пор играюсь с кодеком AD73322. Обрабатываю речевой сигнал. С частотой дискретизации 64кГц, на FPGA поступает 16-битный кадр в дополнительном коде(two’s complement). Хотел попробовать отфильтровать сие фильтром с частотой среза, ну скажем 10 кГц.
Выбрал КИХ фильтр, 32-ой порядок. Для начала рассчитал его коэффициенты. Коэффициенты получились дробные, а некоторые еще и отрицательные Тут же возник вопрос, в каком формате их представлять ? Товарищи подсказывают , что в принципе, можно умножить все на 65536, представить все в дополнительном коде, и получившееся значение после фильтрации поделить на те же 65536. А как же правильно будет ?
Вопрос номер 2 , посмотрев внимательно на фильтр, я увидел в нем блок перемножения , получается , что я перемножаю 16-бит на знаковые 16-бит,на выходе получаю сколько? 31-битовое знаковое число ? А мне бы надо вернуть его во все тот же 16-битовый дополнительный код. Какими махинациями это осуществимо? Сдвигом на 16 вправо ?
-
Опубликовано · Изменено пользователем egorman44 · Пожаловаться
Среды от 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 там же ?
-
// 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;
то что надо , спасибо !
-
это же в тестбенче у Вас?))
initial begin RESET_INV = 1'b0; repeat(10) @(posedge SCLK); RESET_INV <= 1'b1; end
припоминается , где - то читал , про невозможность синтезирования initial блока :laughing:
ну а как , тогда ?
Readback Spartan 3an
в Работаем с ПЛИС, области применения, выбор
Опубликовано · Пожаловаться
Это я уже пробовал, не помогает, сразу после конфигурации из Impact пробую readback, он проходит, затем заливаю это в плис и все работает как и должно