Jump to content

    

des00

Модераторы
  • Content Count

    7654
  • Joined

  • Last visited

Everything posted by des00


  1. про технологии, это вам явно не в книги, это надо брать и делать, хотя бы на уровне симулятора с имитаторами от вендоров. Про DSP : DSP with FPGA, Advanced Synthesis Cookbook от Альтеры Про подход к разработке Principles of VLSI RTL Design REUSE METHODOLOGY MANUAL FOR SYSTEM -ON-A-CHIP DESIGNS Ну и немного не мейнстримового Asynchronous Circuit Design. А не популисткие книги типа вот этой вашей)
  2. В любом случае будет не полный рандом как нужно ТС, в остальном согласен. Все упрется в раскладку и контролер. Насколько знаю, все современные аппаратные контроллеры в плис, банки держат открытыми. И даже между командами стараются паузы заполнять. Делал похожий для сдрам, выжал практически максимум за счет конвейризации команд разных банков между собой, открытых банков памяти, все еще лежит на опенкоресах, в доках графики скоростей чтения/записи в разных режимах.
  3. тогда вам не в книги, а в статьи. все что можно взять с книг, вы взяли уже. ну либо в верификацию SV: uvm, assertions
  4. прочитайте лучше Stuart Sutherland and Don Mills "Verilog and SystemVerilog Gotchas 101 Common Coding Errors and How to Avoid Them" оно для не-начинающих, судя по этой теме, полезнее ;)
  5. вы отдаете себе отчет, что уважаемый @zombi, в своем вопросе, говорит про чип, у которого 240/570 триггеров всего, нет памяти и речь идет про DDR SDRAM?
  6. при рандомном, ни на какой. потому SRAM и не умерла до сих пор. UPD при квази рандомном(когда связь между блоками все же есть), с кешем и собственным контроллером можно попробовать. Но может вам все же остаться на SRAM?
  7. если вам критичен именно этот параметр, то тут нужно полное ТЗ на вашу разработку. Судя по всему, тактовая частота у вас 24МГц, макс5 спокойно работает на частоте 96МГц, вполне возможно проработать вариант вашей архитектуры с учетом передискретизации (oversample) и хранением результатов в памяти, но в макс5 памяти нет, а делать память на триггерах, будет тоже самое шило на мыло. Может быть возможен вариант понижения разрядности счетчиков, за счет их работы на пониженой частоте (за счет генерации сигналов разрешения), но это может быть не допустимо по вашим требованиям. Подытожу, вы реализовали ваш шим в лоб, пути оптимизации по ресурсам есть, но зависят они, от поставленного вам ТЗ. Будь вы моим студентом, рекомендовал бы вам отложить софт, взять ручку, тетрадь, затем думать и рисовать) памяти на макс2/5 нет
  8. в квартусе абсолютно тоже самое, если судить по нему, то все мои проекты с интерфейсами и с массивами структур, не рабочие)))
  9. попробовал на 15.1 для второго, результат тотже. balanced/area одинаковы. Да и не понятно с чего, даже беглый взгляд по вашему коду, показывает использование порядка 4*22+4*22+4*22+3+7+8+22+12+12 = 328 регистров, типовое соотношение регистры/логика порядка 1 к 2.5, что и дает порядка 820LE. Результат ожидаем. А вот код мне ваш не понравился: 1. типовая ошибка описания регистровой логики. 2. плохая самодокументируемость кода(названия переменных, куча констант в битовом формате, не нужные разрядности в сравнениях и т.д.). 3. не очень хорошая архитектурная проработка проекта. судя по всему в PWM.v описано несколько раз одно и тоже. сделайте ядро и вставьте его несколько раз с нужными параметрами. Вот над этим я бы рекомендовал вам поработать)
  10. чип MAX V: 5M1270ZT144I5, Quartus Prime 15.1 вариант Balanced/Area 819/1270 (64%), Performance Agressive 821/1270(65%). Глянул код, так у вас только одни счетчики по сути, тут сильно по площади не разыграешься. Поэтому и разницы стратегий практически нет.
  11. Вот теперь понятно, судя по отступам, скорее всего при верстке и рецензировании, участники сего процесса посчитали код избыточным и вот так его сократили. Такое сплошь и рядом и вина совсем не автора)
  12. у меня на компе 3 квартуса стоят. друг другу не мешают.
  13. Да вроде корректно все. module test ; bit [2 : 0] count; bit muxOut; bit [3 : 0] cnt; initial begin forever begin #20s; cnt <= cnt + 1'b1; end end assign muxOut = cnt[2]; initial begin for (count = 0; count != 3'b111; count++) begin #10ns; if (count[0]) if (muxOut != count[1]) $display("pipa %b -> %b :: %b", cnt, muxOut, count); else if (muxOut != count[2]) $display("popa %b -> %b :: %b", cnt, muxOut, count); end $display("done"); end endmodule Все корректно. по сути проверка наличия значений 011 и x01 в переменной count. Ну либо контекст книги не соответствует примеру, но мы его не видим) UPD. Более корректно даже так, проверка значений {1'bx. !muxOut, 1'b1} и {!muxOut, muxOut, 1'b1} в последовательности чисел. Просто записано не обычно и begin end тут не нужен. т.к. после if должен быть одиночный операнд, а if else if else как раз таким и является. Но с точки зрения читаемости, вы правы, begin end тут не помешает. Даже три
  14. для этого мне нужен пример 1.5:) В том же Морелос Сарагоса "Искусство помехоустойчивого кодирования" куча ошибок в численных примерах кодирования/декодирования но это не мешает этой книге быть одной из базовых для быстрого вхождения в тему)
  15. Прочитал, мне не понятно что вас удивляет. Речь идет про моделирование на вентильном уровне, и да, там действительно для соединения использовались провода с разными характеристиками: wire/wand/wor/tri/triand/trior/tri0/tri1 и длительное присваивание assign. Изначальное заложенное в верилог вентильное моделирование никуда не делось из стандарта. Просто смысла особого сейчас нет этим заниматься, когда есть поведенческое моделирование, но тем не менее, тут мне не понятно что вас так удивило. Как бы ошибки в SV тут нет, есть не соответствие комментариев коду. Подозреваю что при верстке, пример был урезан. исчезло выше assign a = count[2] и b = count[1]. И была экономия на рецензорах, но тем не менее, опечатки они есть много где. Раньше, на корешке даже вклейки были, с указанием номера страницы и опечатки на ней)
  16. эммм, мои телепатические способности слабы, можно скриншот про wire?
  17. Ну, судя по документу Questa®SIM User’s Manual Including Support for Questa SV/AFV -> Chapter 19 Code Coverage -> Notes on Coverage and Optimization, который вы естественно изучили перед тем как работать с покрытием кода, возможно вы забыли вот это Отсюда и предупреждение что экземпляр компонента в проекте есть, но от него отвязан.
  18. Начальное состояние не гарантировано, тем более если синтезатор использует умный синтез и инвертирует регистры самостоятельно. Для надежных применений лучше сбрасывать принудительно или делать самосинхронные схемы. Полезная статья, пусть и от другого производителя ПЛИС. Xilinx WP272 Get Smart About Reset
  19. вы сильно ошибаетесь, прям очень. Судя по вашей фразе мне нужно выкинуть все что за 20 лет написано, т.к. оно не работает))))
  20. Вас интересовало вот это Ответы на это, в документации на Флекс10к. Читать его максимум час. На этом форуме, таких тем штук 50, с 2001года, когда я на него наткнулся. Там все это пережеванно много раз, в том числе со ссылками на хорошие статьи. И эти вопросы, сильно косвенно относятся к клону Флекс10к.
  21. https://embedders.org/content/timequest-dlya-chainikov-prilozhenie-3-dobryi-i-zlobnyi-multicycle мультициклы можно накладывать только между регистрами. в целом ложный путь тоже пойдет.
  22. ну что вы включили человека со сломаной логикой здравого смысла, возьмите документацию на Flex10к, ручку и бумагу, соберите в кучу все что написано в документации и включите логику здравого смысла. Сразу все встанет на место. Речь про конкретную фичу, конкретной плис. А понесло всех в сторону синхронизаторов сброса и Clock Domain Crossing (CDC)
  23. в чем проблема то? подавать тактовую, только после снятия асинхронного сброса, выдержав гарантированное время. Тактовые буфера модернизировать чуток и все. С первого вашего вопроса, меня не покидает одна мысль. Этот чип клон FLEX10k, в чем проблема найти подробные доки на него и изучить? Доки в сети доступны, не смотря на то, что чипу порядка 25 лет.