Jump to content

    

djhall

Свой
  • Content Count

    189
  • Joined

  • Last visited

Community Reputation

0 Обычный

About djhall

  • Rank
    Частый гость

Recent Profile Visitors

1761 profile views
  1. Меня просто возмущает, что ни command line ни Tcl скрипты нельзя отлаживать, например тот же Python прекрастно выполняется по шагам и ни каких проблем нет. Конечно всегда можно отлаживать и просто выводя результаты в консоль, но это как будто бы прошлый век. Поэтому мне хотелось бы иметь возможность пошагово отлаживать .tcl скрипт. Я установил Eclipse, модуль для поддержки Tcl и отладчик. Указал в качестве интерпретатора интерпретатор от Quartus и подключил (прописав в TCLLIBPATH - там есть это в настройках при выборе интерпретатора) пакеты из папки quartus\common\tcl\packages А вот подключить пакеты ::quartus::flow, ::quartus::project и прочие не удаётся. Может быть они действительно находятся где-то в .dll-ках или ещё где. Но это не значит, что их нельзя подключить. Может кто укажет как это сделать.
  2. В Quartus используется язык Tcl для создания проектов, разного рода присвоений, компиляции и др. И соответстенно есть консоль для ввода комманд: Tcl Console. Там можно загружать package ну и работать вообщем. Но ведь Tcl это это интерпретируемый язык программирования, имеющий свой интерпретатор - это tclsh.exe в папке quartus\bin64 Но вот если запустить этот интерпретатор, то стандартные действия языка Tcl производить можно, а вот всё что относится непосредственно к Quartus не запускается. Пишет, что не может найти соответстующий пакет. Подскажите можно ли догрузить квартусовский функционал непосредственно через интерпретатор? Может быть даже не через родной интерпретатор?
  3. А можно какой-нибудь пример или ссылку на пример. Я понял так: например, мне нужно просимулировать двадцать вариантов дизайна, чтобы выбрать лучший или просто убедиться в их работоспособности. Я с помощью скрипта .tcl выбираю нужные файлы копирую их в отдельную папку и отдельно создаю файл с параметрами, компилирую, запускаю симуляцию, сохраняю отчёт и далее по кругу 20 раз. Да спасибо огромное это очень похоже на то что нужно. Уже изучаю. Ну то есть нужно запускать симуляцию для каждого параметра, а параметр менять скриптом. Лучшее решение сохранить разные варианты IP или систем Qsys ну и скриптами генерить Qsys и перемещать по разным папкам для дальнейшей работы, как по ссылке https://gitlab.com/camlab/xilinx-vivado-bullet/wikis/Fpga build system ? Может есть какой промышленный стандарт для таких вещей, по типу https://gitlab.com/camlab/xilinx-vivado-bullet/wikis/Fpga build system ну или просто опробированное решение?
  4. Проблема такая: Есть сравнительно сложный проект на System Verilog. Он содержит кучу разных моих модулей, альтеровких FIFO и RAM и пр. Причём могут добавляться варианты модулей(например другой SPI поддерживающий другое внешнее устройство), FIFO могут быть разной ширины и глубины и т.д. Причём всё это должно работать для разных ПЛИС - Cyclone3, Cyclone5, MAX10. Причём всё это должно быть просимулированно в разных конфигурациях и затем конкретная конфигурация должна быть синтезирована. Меня интересует как оптимально организовать проект: 1. Чтобы можно было автоматически просимулировать разные конфигурации. Например, если используются параметры, можно ли их автоматически заменять. Если используются разные FIFO можно ли их каким либо образом заменять. 2. Может быть создать своего рода библиотеку из всех модулей и использовать скрипт, чтобы составлять verilog файл из частей. Ну и скриптом менять файлы, например на FIFO с другой глубиной 3. Генерировать синтезируемую часть для конкретной конфигурации. Если несовсем внятно объяснил - спрашивайте.
  5. Это я к тому что может это с чем связано - типа отменят Quartus Standard или ещё что
  6. Подскажите, что за несправедливаость - для Pro уже выпущена версия 19.2, а для Standard только 18.1?
  7. Ну на мой скромный взгляд разрабам этой шины и компонента DMA стоило бы сделать возможность читать из всех адресов, а не из каждого второго.
  8. Ну это всё равно, что сказать, что если по этой шине USB нужно передавать 100 байт в сутки, то можно и карандашом обойтись, что толку огород городить. Я считаю так, что если передача по каждому такту длится допустим 100нс, а по каждому второму 200нс, то скорость передачи упала в два раза. Короче я говорю о мгновенной скорости, вы о средней.
  9. Я говорю именно о DMA. Что значит несколько лишних слов? Например у меня по этому адресу USB, DMA нужно считать одно слово по адресу 0, а он вместо этого читает слово по этому адресу и ещё по адресу 1. Если говорить про теоретические цифры, то производительность падет ровно в два раза, ведь вместо чтения по адресу 1, можно было бы ещё раз прочитать по адресу 0.
  10. Меня смущает следущее: 1. Уменьшение производительности. В данном случае в два раза. В произвольном случае в зависимости от отношений ширин мастера и слэйва. 2. Невозможно считать данные из нечётного адреса. Можно считать данные из 0-го и 1-го адреса сразу и они будут лежать последовательно в памяти. Можно считать данные из 0-го адреса и данные будут лежать в младшем и старшем полу-словах. Только из первого адреса данные считать вообще нельзя, ну во всяком случае с помощью стандартной DMA.
  11. Наверное можно, что-то придумать если вы разрабатываете и мастер и слэйв - выставлять определённые byteenable, например. Я применяю стандартный компонент DMA, а он похоже читает только словами, полагаю также ведёт себя SGDMA и mSGDMA. Так что двух чтений последовательных адресов из 32-битной шины видимо не избежать.
  12. Давайте ещё раз. Как я это представляю: есть 64-битный мастер, он читает из 32-битного слэйва, между ними шина Avalon. 64-битный мастер читает одно слово по адресу 0, Avalon преобразует этот запрос и из слэйва происходит чтение двух слов по адресу 0 и 1. Так? Так как же мне настроить "дешифратор адресов для АЦП". Может так: Было: assign data0_read = avs_chipselect & avs_read & (avs_address==6'd0); assign data1_read = avs_chipselect & avs_read & (avs_address==6'd1); Стало: assign data0_read = avs_chipselect & avs_read & ((avs_address==6'd0) | (avs_address==6'd1)); Если вы это имели ввиду, то это не самый лучший вариант, т.к. теперь Verilog код компонента зависит от того к какому мастеру я его подключу в будущем.
  13. Ну когда из памяти читаете, то разницы действительно нет. Представьте копятся в FIFO по адресу 0 и 1 данные от АЦП, накопились теперь нужно их считать. Считываете с адреса 0, сохраняете в память. Считываете с адреса 1 и тут выясняется, что там пусто ведь заботливый мастер всё скачал и непонятно куда дел. Да не вроде норм. Можно конечно и к 64 битам привести, но где гарантия, что в следующий раз не придётся приводить к 128 байтам.
  14. Вообще я пытаюсь использовать DMA для передачи данных. Попробовал переделать свой компонент для байтовой адресации - в параметрах компонента есть такое поле Address units - было Word сделал Symbol(8 бит). В общем не помогло мастер также читает по два адреса, правда значение адреса теперь в 4 раза больше. Получается нонсенс какой-то, т.е. используя более широкий мастер невозможно нормально прочитать более узкий слэйв. Как же тогда должны работать всякие SPI и UART? Раньше всё вроде работало, но тогда адресация была Native, а не Dynamic.
  15. Не вариант. Посталю вопрос по другому. Можно ли читать один фиксированный адрес из 32 битного слэйва с помощью 64 битного мастера ?