Pavia 0 February 8, 2014 Posted February 8, 2014 · Report post У меня сложилась такое понимание что все пытаются описать слона с завязанными глазами. Сразу скажу про инициализацию. У Quartus II прописано всё четко он синтезирует согласно стандартам Verilog HDL and VHDL. Так что если какой-то там синтезатор не следует стандартам это его проблемы. Inferred Power-Up Levels Quartus II Integrated Synthesis reads default values for registered signals defined in Verilog HDL and VHDL code, and converts the default values into Power-Up Level settings. The software also synthesizes variables with assigned values in Verilog HDL initial blocks into power-up conditions. Synthesis of these default and initial constructs allows synthesized behavior of your design to match, as closely as possible, the power-up state of the HDL code during a functional simulation. The following register declarations all set a power-up level of VCC or a logic value “1”, as shown in Example 14–39: Example 14–39. signal q : std_logic = '1'; -- power-up to VCC reg q = 1'b1; // power-up to VCC reg q; initial begin q = 1'b1; end // power-up to VCC Из частных проблем. Клок надо за стабилизировать. Так как на практике у нас есть ПЛИС т.е микруха которая должна быть за программирована. Поэтому тут проблем нет, так как к тому времени как закночится программирование клок будет стабилизирован. Зато если синтезатор частот должен включаться через ПЛИС, то надо делать свой ресет. Если мы делаем ASIC, то должны продумать ресет в виде гипервизора. Который будет встроен или будет внешнем устройством. Один из вариантов создания гипервизора в виде счётчика. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 February 8, 2014 Posted February 8, 2014 · Report post кстати насчет ПЛЛ клок что на входе в плис, подаем на ПЛЛ, делаем делитель 1, то есть что вошло-то и вышло, и дальше сигнал клок стабилен используем для разрешения общего клока всей схемы. В этом варианте модуль ПЛЛ, сам проверит застабилизировался ли клок и отдаст его только тогда, когда все станет хорошо. Этот же сигнал клок стабилен можно использовать и как обратный ресет. Вроде бы удачная схема, поудачнее счетчиков в коде грея вроде как? Quote Share this post Link to post Share on other sites More sharing options...
SM 15 February 8, 2014 Posted February 8, 2014 · Report post так как к тому времени как закночится программирование клок будет стабилизирован. Откуда такая уверенность? Берем ПЛИС LFXP2-5E-5MN132C. Flash Download Time (from On-Chip Flash to SRAM) min typ max XP2-5 — 1.8 2.1 ms Вы уверены, что всегда и любой осциллятор полностью выйдет на режим за 1.8 ms? Вроде бы удачная схема, поудачнее счетчиков в коде грея вроде как? Ну как сказать... В этом случае, скорее всего, PLL будет в режиме bypass, что вошло, то вышло, а сигнал LOCK всегда в 1. Если Вы заставите PLL работать в режиме именно PLL с клоком 1:1, то да, это вариант. Ну и тут еще вопрос третий есть... Если генератор был высокой точности с низким джиттером, а именно они обычно очень долго входят в режим, то PLL испохабит его параметры до неузнаваемости. Чем не устраивает обычный счетчик, работающий от on-chip осциллятора ПЛИСы? Без всяких греев, гарантированно считающий с момента POR? Ничего не стОит, и 100% работает, и джиттер в клок не довносит. Quote Share this post Link to post Share on other sites More sharing options...
Timmy 1 February 9, 2014 Posted February 9, 2014 · Report post Чем не устраивает обычный счетчик, работающий от on-chip осциллятора ПЛИСы? Без всяких греев, гарантированно считающий с момента POR? Ничего не стОит, и 100% работает, и джиттер в клок не довносит. Боюсь, что не устраивает тем, что для его использования придётся переползать под Латтис, так как больше ни у кого доступа к on-chip осциллятору, насколько я знаю, нет. А напрасно. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 February 9, 2014 Posted February 9, 2014 · Report post ну и как план Б, пусть ПЛЛ делает 1 к 2 или как хочет. Использовать от него только сигнал клок стабилен, для разрешения запуска схемы, если нам дорог исходный мего качественный клок. Quote Share this post Link to post Share on other sites More sharing options...
SM 15 February 9, 2014 Posted February 9, 2014 · Report post так как больше ни у кого доступа к on-chip осциллятору, насколько я знаю, нет. А напрасно. У Альтеры тоже без проблем осциллятор, мегафункция ALTINT_OSC. У xilinx у знающих людей надо спросить, или документацию перекопать... Там, вероятно, надо поставить STARTUP блок и взять GCLK с него. У латиса OSCE. В общем, есть у всех, нету в старых ПЛИС времен FLEX/ACEX Использовать от него только сигнал клок стабилен, для разрешения запуска схемы, если нам дорог исходный мего качественный клок. Я не уверен что то, что PLL залочилась от клока, есть гарантия того, что этот клок вошел в норму для питания всего клокового дерева... Однако счетчик от этой PLL считать уже обязан корректно - резет можно им сгенерировать, резету на джиттер наплевать. То есть на резет счетчика резета :) подать в качестве резета !LOCK :) и затактировать его от PLL. Но IMHO это все извращение против внутреннего осциллятора. UPD: В таком случае еще можно получить нежданный резет, если по какой нибудь причине PLL вылетит из захвата во время работы на какое то время. При этом с клоком на ее выходе будет все в относительном порядке, но LOCK-ом она дернет. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 February 9, 2014 Posted February 9, 2014 · Report post UPD: В таком случае еще можно получить нежданный резет, если по какой нибудь причине PLL вылетит из захвата во время работы на какое то время. При этом с клоком на ее выходе будет все в относительном порядке, но LOCK-ом она дернет. Ну с одной стороны это можно обойти более сложным автоматом, а с другой стороны можно использовать как доп ресетилку на случай каких то траблов. Ведь если ПЛЛ сбился, значит и еще что-то могло... а кстати вот такой вопрос, а вообще работать от внутреннего клока можно? То есть внешнего вообще ничего не ставить? Он медленный или потом выключается? Quote Share this post Link to post Share on other sites More sharing options...
Timmy 1 February 9, 2014 Posted February 9, 2014 · Report post а кстати вот такой вопрос, а вообще работать от внутреннего клока можно? То есть внешнего вообще ничего не ставить? Он медленный или потом выключается? Для всей схемы смысла нет, внешний генератор копеечный по сравнению с FPGA, а если работать от внутреннего, придётся подрезать рабочие частоты в соответствии с разбросом частоты внутреннего осциллятора, а это порядка +-20%. Хотя я работаю иногда, но только при отладке, потому что плата тактируется от внешнего источника через разъём и всё это влом включать:). Quote Share this post Link to post Share on other sites More sharing options...
SM 15 February 9, 2014 Posted February 9, 2014 · Report post а кстати вот такой вопрос, а вообще работать от внутреннего клока можно? То есть внешнего вообще ничего не ставить? Он медленный или потом выключается? Можно. Он включается сразу, от него же ведь ПЛИС загружает себя при старте. Он гарантировано работает все время, когда работает ПЛИС. Частоты... Ну тут я не знаю, у кого как, читайте даташиты... У LatticeXP2 выбор из вот таких значений: 2.5, 3.1, 4.3, 5.4, 6.9, 8.1, 9.2, 10, 13, 15, 20, 26, 32, 40, 54, 80, 163 МГц. Единственный недостаток этого клока, это низкая стабильность, +-30% от установленной частоты, он же RC-генератор. У Altera MAX-V, другой пример, там все проще. Частота не задается параметром, а фиксирована, и может быть 3.9–5.3 МГц (технологической разброс). У LatticeECP3 выбор частот тоже довольно широкий, но другой ряд - 2.5, 4.3, 5.4, 6.9, 8.1, 9.2, 10, 13, 15, 20, 26, 30, 34, 41, 45, 51, 55, 60, 130 МГц, но поточнее, +-15%. Но все равно, разброс плюс минус километр, по сравнению с 10-20ppm средепаршивого кварца. То есть, если такая точность частоты устраивает, то никаких проблем. Quote Share this post Link to post Share on other sites More sharing options...
topor_topor 0 February 9, 2014 Posted February 9, 2014 · Report post У меня сложилась такое понимание что все пытаются описать слона с завязанными глазами. Сразу скажу про инициализацию. У Quartus II прописано всё четко он синтезирует согласно стандартам Verilog HDL and VHDL. Так что если какой-то там синтезатор не следует стандартам это его проблемы. Из частных проблем. Клок надо за стабилизировать. Так как на практике у нас есть ПЛИС т.е микруха которая должна быть за программирована. Поэтому тут проблем нет, так как к тому времени как закночится программирование клок будет стабилизирован. Зато если синтезатор частот должен включаться через ПЛИС, то надо делать свой ресет. Если мы делаем ASIC, то должны продумать ресет в виде гипервизора. Который будет встроен или будет внешнем устройством. Один из вариантов создания гипервизора в виде счётчика. РЕСЕТ нужен не только для начальной установки автомата. Єто даже не его главное назначение. Он нужен для перезапуска цифри после аварийних ситуаций. Как частний случай, типичной аварией есть провал питания. при єтом: 1) встроенний в ПЛИС супервизор такое плохо отслеживает - смотрите его характеристики 2) начальние значения с прошивки не помогут, ибо перепрошивка может и не начаться. 3) специальние микросхеми супервизоров питания имеют точную тримировку уровней для детектирования ресета. Хоть єто и аналоговая микросхема внешне, но внутри у нее может бить встроена EEPROM для хранения тримировочних коефициентов, и соответственно - спец процедура при производстве... В ПЛИС такого конечно-же нет. ВИВОД Если у вас неважна чувствительность устройства к сбоям (например у меня єто Altera USB-Blaster) - можно и встроенний супервизор использовать (что-то не так - ничего, перезапущу процесс)... при условии что все внешние штуки стабилизируются к моменту снятия ресета.... Если у вас критическое приложение (у меня єто гигабитний свич, при остановке которого провайдер влетит на бабки) - то тут только внешний качественний супервизор Quote Share this post Link to post Share on other sites More sharing options...
SM 15 February 9, 2014 Posted February 9, 2014 · Report post 1) встроенний в ПЛИС супервизор такое плохо отслеживает - смотрите его характеристики Ну тут не совсем так, встроенный супервизор гарантирует, что в пределах его разброса конфигурация ПЛИС останется целой и невредимой, исходя из этого разброс его параметров и проектируется. Да и в случае чего, всякие там подсистемы, такие как например Soft Error Detection, инициируют перезагрузку ПЛИС сами при сбое в конфигурационной SRAM. Quote Share this post Link to post Share on other sites More sharing options...
topor_topor 0 February 9, 2014 Posted February 9, 2014 · Report post Ну тут не совсем так, встроенный супервизор гарантирует, что в пределах его разброса конфигурация ПЛИС останется целой и невредимой, исходя из этого разброс его параметров и проектируется. Да и в случае чего, всякие там подсистемы, такие как например Soft Error Detection, инициируют перезагрузку ПЛИС сами при сбое в конфигурационной SRAM. Короче, вот пример, почему встроенний POR плохой (учтите, доля нормальной работи должно бить VCCINT (1.71-1.89)V): When power is applied to a MAX V device, the POR circuit monitors VCCINT and begins SRAM download at 1.55 V for MAX V devices For MAX V devices, the POR circuitry does not monitor the VCCINT and VCCIO voltage levels after the device enters user mode. If there is a VCCINT voltage sag below 1.4 V during user mode, the functionality of the device is not guaranteed and you must power down VCCINT to 250 mV for a minimum of 10 μs before powering VCCINT and VCCIO up again. Помоему очевидно, что єот супервизор не отслеживает VCCINT (1.71-1.89)V ето рас, а во вторих он тупо виключен после загрузки. При віходе напряжения немного вне VCCINT (1.71-1.89)V (похоже гдето до 1.55 V), конфигурация может и не теряется, а вот set-up\hold тайминги идут нафик... Такчто - встроенний ресет - ФИГНЯ Quote Share this post Link to post Share on other sites More sharing options...
SM 15 February 9, 2014 Posted February 9, 2014 · Report post Такчто - встроенний ресет - ФИГНЯ Видимо, смотря где, надо внимательно рассматривать каждый конкретный случай. Для LatticeXP2 явно указано, что POR активен, когда VCC или VCCAUX уходят за пределы допуска. И что за то, чтобы VCCIO были уже в норме к этому времени, отвечает уже разработчик. А что он не отключается после загрузки, так это я сам экспериментально проверял (об этом даташит умалчивает) Quote Share this post Link to post Share on other sites More sharing options...
Timmy 1 February 9, 2014 Posted February 9, 2014 · Report post У Альтеры тоже без проблем осциллятор, мегафункция ALTINT_OSC. У xilinx у знающих людей надо спросить, или документацию перекопать... Там, вероятно, надо поставить STARTUP блок и взять GCLK с него. У латиса OSCE. В общем, есть у всех, нету в старых ПЛИС времен FLEX/ACEX Действительно, я слегка отстал от жизни. У Ксайлинкс 6 серии осциллятор выводится из STARTUP(а вот у Спартан 3 нет такого). У Альтеры на Циклоне 3 осциллятор можно сделать новым мегавизардом(а у меня старый, там нет:)), или вручную поставить библиотечный компонент. Quote Share this post Link to post Share on other sites More sharing options...
Pavia 0 February 10, 2014 Posted February 10, 2014 · Report post Вы не поверите как влияет отсутствие интернета на продуктивность работы. Два дня провёл без интернета по независящим от меня обстоятельствам. в результате просидел в квартусе. Изучая verilog. Проект простой модель супервизора. Которая при старте плиса делает ресет всей оставшейся части. Так же на вход принимает внешний не синхронный ресет синхронизирует его с клоком. И функция задержки, которая блокирует глобальный клок до тех пор пока не пройдёт пауза. // Starter // Pause for stabilization clock // Power On Reset // Starter - стартер // Пауза для стабилизации напряжения и клока // Выполняет функция ресета при подаче питания module Starter( input Clock , input Reset, output wire OutClock, output wire OutReset ); // Reset sinhronization // Синхронизация ресета c клоком reg r1,r2; always @(posedge Clock) begin : SynRST r1<=Reset; r2<=r1; end reg [11:0] Counter=0; // !!! In sintezer maybe not support. // !!! У синтезаторов может не работать assign OutReset=Counter == 12'hFFF ? 1:0; assign OutClock=Clock & OutReset; // блокируем клок. always @ (posedge Clock) begin :delay // Задержка для стабилизации в виде счётчика if (r2 == 1'b0) begin Counter <=0; end else if (Counter != 12'hFFF) begin Counter <=Counter + 1'b1; end end endmodule Пример использования супервизора. //Micro processor //Микро процессор module MP32( input clock, input reset, output wire [31:0] reg4 ); wire GlobalClock; wire ResetSyn; Starter Stater1(.Reset(reset),.Clock(clock),.OutReset(ResetSyn),.OutClock(GlobalClock)); reg [31:0] reg1; reg [31:0] reg2; wire [31:0] reg3; ALU ALU1(reg1,reg2,reg3); assign reg4=reg1; always@(posedge GlobalClock) begin if (!ResetSyn) begin reg1<=0; reg2<=1; end else reg1<=reg3; end endmodule Прошу проверить на ошибки. Правильно ли выполнена синхронизация? Вроде нет ошибок, сделал по книжке. А вот второй вопрос правильно ли я использую синхронный ресет? Должен ли я его применять через if? И ещё как бы вопрос по использованию else в коде. Когда его надо применять а когда нет? К примеру если я его опущу в стартере то синтез не меняется а если уберу в MP32 , то схема меняется кардинально синтезатор совсем ресет выкидывает. Quote Share this post Link to post Share on other sites More sharing options...