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

    

Faton_11

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Faton_11

  • Звание
    Частый гость

Посетители профиля

1 198 просмотров профиля
  1. Понимаю, что там асинхронщина, но не понимаю как в данном случае она влияет? Смотрю на анализаторе: данные ADC_Out, поступающие в ПЛИС, защелкиваются по фронту сигнала Mlndr_CLK. В состоянии SUM_step0, предположим, первый дребезг фронта клока отлавливается и происходит переход в следующее состояние. Автомат успевает проходить все состояния до нового фронта Mlndr_CLK. Что в моих рассуждениях неверно?)
  2. я не против грамотного заполнения SDC, только вот с этим совсем все плохо, и вот тому пример: В проекте есть следующие клоки : - Mlndr_CLK - клок, идущий с внешнего генератора на порт общего назначения ПЛИС и равный 12.5 МHz; - clk_dbg - клок с генератора, установленного на отладочной плате (Сyclone II FPGA Starter Board) и равный 50 МHz; - PLLclk – клок с выхода мегафункции PLL равный 100 MHZ (на входе PLL - clk_dbg) Данные поступают на вход модуля цифрового фильтра по клоку Mlndr_CLK, арифметика вычисляется на более "быстром" клоке - PLLclk always@(posedge PLLclk) case(st) SUM_step0: begin begin if (Mlndr_CLK) st=SUM_step1; else st=SUM_step0; end begin //арифметика.. end end ....... //арифметика.... SUM_step3: begin gnrt2[4].add_dataa=gnrt2[1].add_res; gnrt2[4].add_datab=gnrt_mult[8].mult_res; st=SAVE_add_res; end SAVE_add_res: st=SAVE_div_res; SAVE_div_res: st=SUM_step0; default: st=SUM_step0; endcase //_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ always @ (posedge PLLclk) if (st==SAVE_add_res) buff_reg1=gnrt2[4].add_res; //_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ always @ (posedge PLLclk) if (st==SAVE_div_res) buff_reg2=quotient_bx[ADC_WIDTH-1:0]; //_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ always @ (posedge Mlndr_CLK) dataout=buff_reg2; // выходные данные, идущие наружу модуля , где gnrt2[4].add_res - результат вычислений с выхода мегафункции сумматора (находится в блоке generate): Adder_bx addr_bx (add_dataa,add_datab,add_res); этот результат сохраняется в регистре buff_reg1 и затем поступает на мегафункцию делителя: Div div_rounding_bx(denom, buff_reg1,quotient_bx,remain_bx); результат сохраняется в регистре buff_reg2, затем по фронту "медленного" клока Mlndr_CLK, подается на выход модуля TimeQuest выдает сплошные "слэки" (см. прикрепленный файл). Констрейны, собственно, такие: create_clock -name Mlndr_CLK -period 12.5MHz [get_ports {Mlndr_CLK}] create_clock -name clk_dbg -period 50MHz [get_ports {clk_dbg}] create_generated_clock -name PLLclk -source [get_ports {clk_dbg}] -multiply_by 2 -duty_cycle 50 (видимо, для PLL ещё нужно указать параметр "[get_pins{.....]}]", но в выпадающем списке пинов ничего подходящего не было( Чем можно эти слэки исправить и почему в отчете Timequest-a в качестве launch и latch клоков стоит clk_dbg, а не PLLclk?
  3. andrew_b, вот как раз с констрейнтами вожусь, спасибо! iosifk, а как научились?) Тоже в основном удавалось решать проблему констрейнтами?
  4. Добрый день, дорогие форумчане! Пришлось столкнуться со следующей проблемой: проект работает только если после прошивки ПЛИС в окне SignalTap нажать "Program Device" (если не нажать, то и сам анализатор не запустится, и проект корректно работать не будет. Точнее будет, но такое ощущение, что как при другом варианте прошивки=/). Если в настройках отключить галочку "enable SignalTap II logic analyzer", то проект тоже корректно работать не будет. Может кто-то сталкивался, в чем тут может быть дело?
  5. Спасибо, Rob! :rolleyes:
  6. Прошу прощения за долгий ответ. В итоге пришлось сделать в лоб, т.к. в цикле for к экземплярам модулей, созданных в generate, нельзя обращаться через переменную, объявленную как integer. genvar j; generate for( j=0; j<(ORDER/2+1); j=j+1) begin:gnrt2 reg [39:0] add_dataa; reg [39:0] add_datab; wire [39:0] add_res; Adder addr (add_dataa,add_datab,add_res); end endgenerate //________________________________________________________________________________ genvar j; generate for( j=0; j<(ORDER+1); j=j+1) begin:gnrt2 reg [10:0] mult_dataa; reg [10:0] mult_datab; wire [39:0] mult_res; Mult mlt ( mult_dataa, mult_datab, mult_res); end endgenerate //________________________________________________________________________________ integer k; always@(posedge clk) case(st) SUM_step0: begin for(k=0; k<26; k=k+1) begin gnrt2[k].add_dataa=gnrt[2*k].mult_res; gnrt2[k].add_datab=gnrt[2*k+1].mult_res; end st=SUM_step0; end default: st=SUM_step0; endcase Но было бы очень интересно знать на будущее, как это обойти
  7. RobFPGA и alexadmin, спасибо большое за ответы! Тогда подскажите, пожалуйста, какую штуку надо использовать, чтобы не прописывать "в лоб", как показано ниже always@(posedge clk) if (rst) st=SUM_step0; else case(st) SUM_step0: begin gnrt2[0].add_dataa=gnrt[0].mult_res; gnrt2[0].add_datab=gnrt[1].mult_res; gnrt2[1].add_dataa=gnrt[2].mult_res; gnrt2[1].add_datab=gnrt[3].mult_res; gnrt2[2].add_dataa=gnrt[4].mult_res; gnrt2[2].add_datab=gnrt[5].mult_res; default: st=SUM_step0; end endcase , а через некую k, что-то типа такого: gnrt2[k].add_dataa=gnrt[2*k].mult_res; gnrt2[k].add_datab=gnrt[2*k+1].mult_res; Если использовать цикл for, то это не будет выполнять в одном такте
  8. Добрый день! Скажите, пожалуйста, можно ли использовать generate внутри конструкции case? Квартус ругается, говорит, что end-а нет, но если закомментировать код от "generate" до "endgenerate" включительно, все нормально. Ниже приведен пример куска подобного кода. gnrt2[k].add_dataa, gnrt2[k].add_datab - входы сумматоров (использовалась мегафункция сумматора); gnrt[k].mult_res- выходы умножителей (использовалась мегафункция умножителя) parameter SUM_step0=0; genvar k; reg [2:0]st; always@(posedge clk) if (rst) st=SUM_step0; else case(st) SUM_step0: begin generate for(k=0; k<(ORDER/2); k=k+1) begin:gnrt3 gnrt2[k].add_dataa=gnrt[2*k].mult_res; gnrt2[k].add_datab=gnrt[2*k+1].mult_res; end endgenerate st=SUM_step0; end default: st=SUM_step0; endcase Заранее спасибо за ответ!
  9. Вопросы по Agilent ADS

    Добрый день! При создании фильтра на микрополосках график на схеме и график после переноса на Layout имеют разный вид. При этом подложку импортирую на layout со схемы. Почему график меняется, и как получить один и тот же вид?
  10. Вопросы по Agilent ADS

    Добрый день! Была импортирована спайс модель, но при запуске симуляции возникает ошибка: Error detected by hpeesofsim during netlist parsing. ADS-syntax parser error in '<ADS netlist>', line 43: syntax error подскажите, пожалуйста, как можно исправить эту проблему
  11. Вопросы по Agilent ADS

    Добрый вечер! Вопрос такой: при симуляции в EM Model возникает следующая ошибка: "..ERROR: The EM model is inconsistent with the layout: Partitioning: top level libcellview changed from v4_lib:cell_2:layout to v4_lib:cell_3:layout Edit and save the EM state file to correct this. Error detected by hpeesofsim during TRAN analysis 'Tran1'. Fatal error occurred while evaluating model `MomCmpt', instance `I__0.em_data'. " Кто-нибудь знает как с ней бороться? =(
  12. Вопросы по Agilent ADS

    Добрый вечер! Симуляция запускается на одном компьютере и не запускается на другом. Было ли у кого-нибудь так и как это вообще возможно?
  13. netlist

    ЦитатаEDIF бывает Schematic, или Netlist. В DxD импортируют Schematic, а не Netlist. Экспортирую схему > изменяю схему > импортирую старую схему > появляется схема в разделе blocks > не вижу изменений на схеме даже после перезапуска дизайнера. Каким должен быть результат?
  14. netlist

    ЦитатаДолжен создастся новый блок с именем импортируемого файла edif. Ищите в навигаторе в разделе Blocks. эх, создался, но без схем и ещё такой вопрос: при импорте EDIF Netlist в навигаторе отображаются новые неты (при этом их свойства пусты), но и старые остаются. Как заменить одни на другие?
  15. netlist

    ЦитатаЕсли маршрут DxDesigner -> Expedition PCB, то причем здесь вообще нетлист? Обмен происходит через двоичную базу icdb. Работать через DxD<->нетлист<->Exp это полное извращение. Достаточно в DxD выбрать Tools>Expedition (xPCB_Layout) и процесс генерирования всего что нужно для обмена сразу запустится. Спасибо, знаю, но для стороннего инструмента нужно, и при этом с таким маршрутом В ходе всего этого теперь такой вопрос возник: при импорте EDIF Schematic File в DxDesigner что в конечном итоге должно произойти? В руководстве сказано: "All design data, including connectivity and graphical objects and properties, is translated." Т.е. изменения на схеме должны отобразиться? Закрываю проект, открываю снова, но ничего подобного не наблюдаю