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

topor_topor

Свой
  • Постов

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

  • Посещение

Весь контент topor_topor


  1. Так асинхронный RS с динамическими входами устроит? В детали ваших преобразований полностью не вник, но думаю что так будет работать при условии что сдвиг clk относительно comp_in константа на время АЦП преобразования. Так?
  2. 1) OK. Если это нормально на генератор тока подать импульс 1нс или меньше (как фронты совпадут).... ....правда при этом любая цифровая схема у которой на одном входе comp_in а на другом clk словит метастабильность...... 2) АЦП при том, что оно имеет конечное время преобразования... Как я понял, в Вашем случаэ АЦП должен успевать за 1нс (чтобы розбить период на 10 частей)... Неплохой такой АЦП... Или я как-то не так "достаточное время" понял? 5) "tdc_pld может пропустить пару тактов, но он должен их ВСЕГДА пропускать, т.е. одинаковое количество." Весь вопрос в требуемой точности. Может таки можна увеличить clk раза в 2 и пропускать 1-2 такта.... 6) Кажется мне, что Вашу задачу надо переформулировать: как сделать асинхронный RS ригер с динамическими входами (R & S срабатывают по положительному перепаду). При этом S=comp_in, R=clkб а Q=tdc_pld? Не к этому ли решению Вы клоните, уходя от синхронного принципа дизайна? Вижу отсюда ноги ростут: http://electronix.ru/forum/index.php?showt...98383&st=15 Так-бы и сразу. В осцилографах я не спец.... но как сделать АЦП в 10 раз быстрее могу предложить Ставите 10 тактируемых АЦП и подаёте тактовые клоки со сдвигом. Проще всего иметь 10х базовый клок и поделить его на 10 сдвинутых 1х.
  3. В такой постановке задачи, понятие синхронного дизайна не применимо впринципе. Есть вопрос к постановке задачи ("измерив напряжение на конденсаторе, можно узнать "в каком месте" клока пришел фронт с компаратора."): 1) а что если comp_in прийдёт 1нс (1пс....) перед clk перепадом? Ваша ёмкость успеет зарядиться? 2) А чем это Вы напряжение на конденсаторе померяете? Не АЦП ли? А какое время ему надо для измерения? 3) А зачем Вам этот сдвиг надо знать? Может задачу по другому надо решать..... 4) А нельзя-ли увеличитьВаш clk и померять время напрямую - счётчиком? ----- 5) "tdc_pld может пропустить пару тактов clk. comp_in нельзя ни к кому привязывать" Вот тут не понятно.... "tdc_pld может пропустить пару тактов clk" - значит ли это, что запуск Вашего генератора тока можно отложить на 1-2 clk? Если да, то это значит, что tdc_pld будет сдвинут относительно фронта comp_in. Правильно? Аналогично сдвиг tdc_pld можно получить, сдвинув comp_in на 1-2 clk, а сам tdc_pld выдать моментально по фронту сдвинутого comp_in (comp_in_sync). Т.е. как я Вам и описал на верилоге..... Таким образом "comp_in нельзя ни к кому привязывать" противоречит "может пропустить пару тактов clk". Правильно? Или есть другая причина почему "comp_in нельзя ни к кому привязывать"?
  4. Для того чтобы "зырить вейвформы близкие к железу" когда Вы есчё на уровне RTL в Сadence NC-Sim есть режим, при котором симулятор показывает дельтазадержки как небольшой сдвиг на времянке. Про другие симуляторы не скажу..... Поэтому и подавна никакие задержки # в RTL включать не надо - надо правильный симулятор иметь :). P.S Этот режим так-же помогает выловить комбинаторные the loop'и напр....
  5. ОК. Вся цифра работает на clk=100MHz (т.е. enable, tdc_pld, start синхронны clk) Мы имеем только оди асинхронный вход - comp_in. 1) comp_in надо превязать к clk при помощи синхронизатора из 2-х флопов. Вас устроит задержка перепада comp_in в 2 clk? wire comp_in_sync; reg [1:0] sync_rg; always @ (posedge clk) sync_rg[1:0] <= {sync_rg[0], comp_in}; assign comp_in_sync =sync_rg[1]; 2) tdc_pld формируем на диференциаторе (or posedge detector). Можно использовать sync_rg[1] как часть диференциатора (diff_rg0): wire tdc_pld; reg diff_rg1; always @ (posedge clk) begin if (!enable) diff_rg1 <= sync_rg[1]; else diff_rg1 <= diff_rg1; end assign tdc_pld = sync_rg[1] & (~diff_rg1); 3) start - RS тригер в котором R=enable S=comp_in_sync; reg start; always @ (posedge clk) begin if (enable) start <= 1'b0; else begin if (comp_in_sync) start <= 1'b1; else start <= start; end end Не симулил, но где-то типа так.... Ресет асинхронный опустил для наглядности.... Схема роботоспособна при времени comp_in=1 < времени enable=0
  6. 1) Mожете описать сдвиговый регистр нагляднее (используя <= ): reg [2:0] shift_rg; always @(posedge CLK posedge RST) begin if (RST) shift_rg[2:0] <= {3{1'b0}}; else // Сдвиг влево shift_rg[2:0] <= {shift_rg[1:0],INP}; end assign OUTP=shift_rg[2]; 2) "Чем же плоха система "четные по фронту, нечетные по спаду" - тем что максимальная тактовая частота в 2 раза ниже 3) " я знаю точно, что когда переключается, исключается "гонка сигналов", так всегда есть время на распространение равное в пол-такта" - это очень большое заблуждениен! При роботе по одному фронту - у Вас будет аж ЦЕЛЫЙ такт. Время распространения контролируется синтезатором (точнее плейсером+роутером+clock tree инсертером) а никак не Вами. В этом и есть суть синхронного дизайна и забота тулзы. Подумайте, как увеличение задержки в линии влияет на HOLD тайм destination тригера - улутшает или ухудшает это требование? 4) "физическая частота прежняя -> меньше потребляемая мощность" мощность потребления зависит от КОЛИЧЕСТВА и ЧАСТОТЫ переключения тригеров. В Вашем случае, количество=конст и частота переключения=конст. Мощность потребления=клнст соотв. 5) "Если работать по одному фронту, то получается, что я вынужден полностью отказаться от предсинтезной симуляции, так как ее результаты не соответствуют реальности" - а зачем-же по Вашему существуют RTL симуляторы? У Вас просто ошибка в коде. 6) "Можно ли при функциональном моделировании задать некую каждому триггеры условную "задержку", чтобы результаты досинтезного моделирования соответствовали постсинтезному?" - Можна, но не нужно. В технологии <=0.35u существенно влияют задержки в линии чем задержки гейта. Их как задавать будете (после синтеза все цепи обычно переименовываються)?
  7. В таком случае опишите эти клоки - синхронные, один получен делением другого, полностью аснхронные..... иначе толковую схему не предложить. Лутше пояснить времянкой...
  8. К данному случаю не относиться но так, для общего розвития.... Как-то у меня попалась Altera Cyclon которая частично не работала после прошивки (но статично). Вылечилась небольшим изменением топологии (перероутом). Пришли к выводу - FPGA имела stack-at fault (залипание в 0\1) в какой-то ячейке.... Такое может быть, ведь не зря же ATPG придумывали.... А вот в ASIC попадались фолты и похуже - сопротивление цепи зависимо от напряжения и температуры. То работает чип, то не работает.... Такие вещи не так-то и легко поймать в производстве.... Надо знать как аккуратно тесты делать..... Допускаю, что подобные фолты могут и в FPGA попадаться.
  9. 1) автомат сработает неправильно если: - какие-либо сигналы на его входах асинхронны клоку (напр. внешний ресет....) - set-up\hold тайминги не выполнились (например изза нештатного PVT (Process Voltage Temperature), т.е. не того что задан при SP&R ) - джитер\скважность клока не такие как при SP&R. - шум по питанию. - FPGA тоже бывают битые (имеют stack-at fault) (хотя при 80-% плат тот-же отказ, врядли) 2) Синтезатор делает синтез с учётом PVT corner. STA кстати то-же. И напр. новая FPGA хоть и того-же типа может иметь слегка другую временную зависимость от PVT на 3-м году выпуска.... Это должно учитываться в новой версии FPGA CAD.... 3) А как можна плату в нормальное состояние вернуть? Никак, ресетом, поверофом....
×
×
  • Создать...