Jump to content
    

SM

Свой
  • Posts

    7,912
  • Joined

  • Last visited

Reputation

0 Обычный

About SM

  • Rank
    Гуру
    Гуру
  • Birthday 03/25/1974

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

10,198 profile views
  1. Тогда можно смело и триггером поделить. Имеющийся косяк в create_generated_clock влияет только на междоменные переходы.
  2. А у меня собралось в тупом тестовом примере: module test (clk, in, out1, out2, out3); input clk, in; output reg out1, out2, out3; wire clkout_o, clkoutd_o, clkoutd3_o; Gowin_rPLL pll_inst( .clkout(clkout_o), //output clkout .clkoutd(clkoutd_o), //output clkoutd .clkoutd3(clkoutd3_o), //output clkoutd3 .clkin(clk) //input clkin ); CLKDIV clkdiv_inst (.HCLKIN(clkoutd_o), .CLKOUT(clko)); defparam clkdiv_inst.DIV_MODE="2"; always @(posedge clko) out3 <= in; always @(posedge clkoutd_o) out2 <= in; always @(posedge clkoutd3_o) out1 <= in; endmodule Самоконстрейнится вроде нормально: Только вот под вопросом другое - клок лэтенси для выхода 150 МГц CLKOUTD 1.080 нс, а для выхода 75 - CLKDIV/CLKOUT 0.685 нс, и получается, что 75 МГц умудряется опередить 150 МГц. Этому по идее есть объяснение - пути то разные от PLL до триггеров через дерево, и от PLL до CLKDIV, которые через HCLK - вот он и обогнал. Могут быть вопросы с холдами на переходе со 150 на 75, если этот переход не на IDES-ах. А могут и не быть... Ну и хорошая новость - CLKOUTD умеет заходить в HCLK: То есть, можно использовать IDES4 / IDES4_MEM для приема сигналов с SDRAM с FCLK 150 и PCLK 75 ---------- А вот с CLKDIV2 не удалось "в лоб" (если прямо в этом примере заменить CLKDIV на CLKDIV2 и убрать defparam) - что-то с чем-то не может соединить... И это очень странно, с учетом того, что на CLKDIV зашло [вроде] через тот же HCLK. А на CLKDIV2 не шмогло. Неожиданно. Или, возможно, он не может затащить ВЫХОД (!) CLKDIV2 в primary clock. Но, де факто, облом. С этим, похоже, можно и нужно идти в поддержку с вопросами, "какого хрена", чтобы жизнь кое кому мёдом не казалась. Можно. Там куча разных вариантов как их описывать, через "from", "to", "through" со всеми TCL-ными вилдкартами и регекспами для выбора имен. Так 150 взять из 300, подав 300 на вход CLKDIV-а, настроенного на деление пополам (как в моем примере). И в этом случае, кстати, можно будет поподгонять фазу 150 МГЦ, если это надо, под лэтенси 75 МГц, если 300 взять с CLKOUTP. Но, как видим из примера, и 75 из 150 получается. Так что даже выбор есть! Вот, пожалуйста: module test (clk, in, out1, out2, out3); input clk, in; output reg out1, out2, out3; wire clkout_o, clkoutd_o, clkoutd3_o; Gowin_rPLL your_instance_name( .clkout(clkout_o), //output clkout .clkoutp(clkoutp_o), //output clkoutp .clkoutd(clkoutd_o), //output clkoutd .clkoutd3(clkoutd3_o), //output clkoutd3 .clkin(clk) //input clkin ); CLKDIV clkdiv_inst (.HCLKIN(clkoutp_o), .CLKOUT(clko)); defparam clkdiv_inst.DIV_MODE="2"; always @(posedge clko) out3 <= in; always @(posedge clkoutd_o) out2 <= in; always @(posedge clkoutd3_o) out1 <= in; endmodule
  3. Мало вводных. Первый вариант, который прямо сразу просится - получить 75 из 150 на CLKDIV в режиме /2. Если нельзя завести 150 на CLKDIV (я не знаю, можно ли с CLKOUTD - я же правильно понимаю, что сделать 100 и 150 из 50 можно только так, что на CLKOUT и CLKOUTP будет 300, на CLKOUTD 150, а на CLKOUTD3 - 100 ?). Если с CLKOUTD 150 нельзя завести на CLKDIV, то с CLKOUT точно можно. Там 300, его можно поделить на 4. Второй вариант - получить 75 на CLKOUTD с PLL, а 150 на CLKDIV или CLKDIV2 с CLKOUT (там, если я правильно понимаю, 300, а 300 пополам как раз 150). НО! Если надо получить для сдрам 150 на FCLK, а 75 на PCLK (на входах IDES4_MEM) - то тут вероятно придет облом со 100 МГц, если вдруг нельзя ввести CLKOUTD в HCLK (не знаю, проверять надо, но сильно подозреваю, ибо на CLKDIV2 он прямо не заводится, но это не значит, что не заведется "криво", когда будет использован вход FCLK, прямо говорящий о том, что этот клок надо пускать в HCLK). Но можно для такого случая попробовать сделать 150 из 300 на CLKDIV, а 75 из 150 на CLKDIV2 с выхода CLKDIV, оставив CLKOUTD в покое (вероятность успеха мала, но...) Пополамить клок триггером в говине пока плохая идея, так как там create_generated_clock не работает как надо, и не даст гарантии точного соблюдения времянок, так как ему надо сдвиг фронтов на задержке входного клока прописывать руками, это косяк среды. Но по всем другим аспектам, в т.ч. и по разводке, все ОК. Техподдержка во главе со Stewart Little на тему этого косяка замолчала... Ну и вариант 2 с энейблом - а что там за вероятность? Откуда? Если правильно прописаны set_multicycle_path, и в них нет говинных косяков, то должно быть все в порядке и с запаcом. Хотя я и не люблю такого дела, незачем ВЧ клоки гонять по большим деревьям, их стоит минимизировать, это пустая и бесполезная жрачка тока.
  4. Не знаю. В документации написано: "A signal which indicates FPGA is configured successfully, DONE is pulled up after successfully configuring." Это логично трактовать, что на этом пине включается подтяжка после конфигурирования. Если так, то получается что подтянут, и не важно, выведен он наружу или нет. Но это надо проверять.
  5. Читайте документацию - если их нет снаружи, то значит они куда-то подтянуты внутри.
  6. Первое - подготовка битстрима для возможности прошивки во флеш без останова работы ПЛИС в текущей конфигурации. Для некоторых семейств там есть и другие варианты. Второе - при нуле, ПЛИС стартанет независимо от подтяжки DONE, при 1 - чтобы ПЛИС стартанула, надо чтобы DONE был подтянут в 1 и был хотя бы один импульс по TCK при этом.
  7. Не могёт быть! Совершенно точно меняется клок лэтенси в отчетах по путям сетапов/холдов. Проверял. А вот с генерацией клока на логике пока поосторожнее - говинный create_generated_clock глючный, он не учитывает задержку клока от исходного клока и до выхода целла, генерирующего выходной клок. Эту задержку пока надо вписывать руками примерную какую-то, оценивая её по другим путям в анализаторе времянок, через опцию -edge_shift (или другую с подобной функцией). Надеюсь, Stewart little окажет должное ментальное и физическое воздействие на говин, и это поправят в среде.
  8. Спасибо. Но дело было не в этом. ЦБ как-то самосглючила, в компоненте почему-то целл стал привязан как "alternate", а Top/Bottom оказались пустыми.
  9. Еще вопрос возник. Вот такой варнинг выскакивает при Forward Annotation (в логе - ForwardAnnotation.txt): Целл есть для этого компонента, и в центральной, и в локальной. И на плате он размещен и никаких проблем с виду не имеет, дорожки подводятся, всё что надо, с ним работает корректно. Я попробовал разные опции обновления локальной библиотеки в Project Integration, и Only extrat missing, и Update local with newer, и rebuild local - всё одно... Это с чем может быть связано? Оно как-то вдруг появилось само, и я точно этот целл и этот компонент нигде не трогал вообще. Да и его целл (корпус 0603) еще много в каких других компонентах применен, а ругается только на этот
  10. А напомните пожалуйста, как удобно свопить гейты между разными корпусами? Что-то "в лоб" не вспомнилось. PS Вопрос отпал. Долго ломал мозг, но вспомнил про "F2" и "Symbol gate groups"
  11. Где тут шутки? Инструкция простая - Stewart little это официальная поддержка говина у нас. Описываете ему найденный в среде разработки баг, и он добивает китайцев, чтобы баг исправили.
  12. Выше же написал - при помощи секретного ядерного оружия под кодовым названием "Stewart little" :) Другого способа пофиксить баг в среде я не знаю.
  13. Она не обновляется, она рядом ставится, не снося предыдущую. Были неадекватные Clock latency по этим цепям в отчете анализатора времянок, и бонусом варнинг о проходе клока через логику (generic routing resources).
  14. А нет смысла. Там ничего не пишут полезного :) К примеру, при помощи недетских усилий Stewart little в этой версии исправили найденный мной глюк с заведением клока на прямые пины-входы PLL (предыдущая версия заводила его через логику, а не прямо, как минимум в GW1-NS). И в RN об этом не сказано. Отсюда можно сделать вывод, что и еще много о чем не сказано. Там вообще почти ноль информации. А посмотреть его не проблема, он в папке IDE/doc лежит после установки.
  15. Обновил скрипт. Теперь все параметры катушки сосредоточены в конце файла скрипта для удобства их изменения. Также исправил некоторые неточности, связанные с переходом в центре катушки от отвода к спирали. И добавил задание внутреннего радиуса, который может быть больше, чем занимает места отвод - это мне понадобилось, из-за этого и все изменения. Если внутренний радиус задать 0 или меньше требуемого для отвода, будет сделан минимальный радиус так, чтобы отвод начинался в центре. Пользуйтесь, кому надо катушки круглые делать. Spiral1.7z
×
×
  • Create New...