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

SergeyF

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные SergeyF


  1. Спасибо! Я и не знала, что есть редакторы, работающие с двоичными данными. Скачала WinHEx, буду изучать, чего он умеет.

    Это, конечно, полезно :). Но я имел в виду другое. Как обойтись без редактора, умеющего работать с двоичными данными.

    Вот кусок .rbf: FF FF 62 FF 36 00 FF (то, что записано в файле в двоичном виде по байтам)

    Вот кусок .ttf: 255,255, 98,255, 54, 0,255, (текст)

    Но данные одни и те же. Просто из .rbf легко получить .hex или .bin для программирования. А из ttf проще копировать данные для инициализации массивов в C. Вам нужно второе.

  2. ttf и rbf - близнецы. Просто один в двоичном виде, другой в текстовом. Копируйте из текстового редактора ttf кусками, вставляйте в исходник для atmega и редактируйте длину и начальный адрес записи этого блока.

     

    Но это странно. Действительно, как говорит ViKo - лучше написать программу, которая принимает данные по RS-232 и программирует at45db.

  3. Моя проблема в том, что надо конфигурировать EP1K50 (Acex 1K), файлы .rbf проекта весят 98кбайт, а пытаюсь конфигурировать Атмегой 32.... Хочу попробовать разбить rbf и по кусочкам заливать его в микросхему памяти (at45db). А потом из памяти уже в ПЛИС.

    Просто порезать на куски любого удобного размера. А откуда Вы его будете брать "по кусочкам"? Кто будет программировать ПЗУ?

  4. Никак. Это основы науки о тестировании - сам программист не должен тестировать свои программы. :laughing:

    Хорошо, тогда как доказать корректность тестбенча, который кто-то разработал? :laughing:

     

    Недавно делал один модуль - в определенный момент я уже мог по входным воздействиям и тактам доказать, что он правильно работает, он уже работал в железе, а написать корректно работающий тестбенч и прогнать его мне удалось в последнюю очередь. Таким образом, если сложность разработки тестбенча превышает сложность разработки тестируемого модуля, а вероятность ошибки при проектировании обоих допустить равной, получается плохо. Это меня и мучает.

     

  5. Ха, я же в соседней теме недавно поднимал этот вопрос!!! Видать хорошо я объясняю что мне надо...

    А та же фигня для переменных-массивов прокатит?

    А зачем? Лучше зайти в BSP Editor и там на странице linker script порезать нужный memory device на несколько секций. На рисунке пример - мы отрезали от ext_ram старшие 4096 байт и создали регион памяти с именем repa. Потом ниже в этом регионе создали секцию .repa_section.

    А в приложении пишете:

    INT8U repa_data[4096] __attribute__ ((section (".repa_section")));

    post-8660-1302624715_thumb.png

  6. GCC прекрасно понимает ассемблерные файлы , имеющие расширения , *.s *.S , поскольку использует , по умолчанию , GNU Assembler из GNU Binutils .

    И тут прекрасно понимает. :)

    Вам необходимо разобраться как сделать тоже самое для НИОСа . Не забудьте поделиться результатами .

    Вот ниже пример - берем, создаем Hello MicroC/OS-II, и там куча ассемблерных файлов в порте - можно использовать как пример. Передача параметров в функции рассмотрена в NiosII Processor Reference Handbook, Section II.7 Application Binary Interface.

    post-8660-1302622770_thumb.png

  7. результат примерно тот же. Связи с регистром r2 нету переменной r2 тоже.

    Sergey'F подскажите, где это указывать. По настройкам пробежал - не увидел. Или это надо ручками прописывать?

    Сам регистр r2 тут ни при чем. Это же переменная. Вообще, у компилятора gcc куча флагов, с которыми его можно вызывать.

    Диалог настройки параметров проекта ниже.

    post-8660-1302612275_thumb.png

  8. На всякий случай спрошу - а оптимизацию, например, -O3, включили? Обычно неплохой код генерирует. И регистры как надо использует, держит в них значения. Кроме того, переменная, которую хочется разместить в регистре, с большой вероятностью окажется в кэше... так что пусть себе обращается к памяти.

  9. может знает кто как под альтеру для моделсима библиотеки стандартных элементов скомпилить, понятно что квартус будет это за тебя делать, но после хилых привык как-то отдельно работать с симулятором через скрипты

    Не совсем понятен вопрос. Вот это двумя постами выше не подходит?

    В ModelSim-Altera Edition библиотеки уже предкомпилированы и перекомпилироваться не должны, а для других не-альтеровских версий ModelSim можно их откомпилировать и использовать откомпилированные версии, используя EDA Simulation Library Compiler.

    На всякий случай - Tools>Launch EDA Simulation Library Compiler в меню Quartus.

  10. На симуляции (сразу после курсора) - в последний разряд sample_out дописано parity (1) хотя должно бы range_2_parity (0)

    Вроде логично.

    Вопрос - как исправить? Что приходит в голову - дополнительный задержанный на клок sample_strobe_in и по нему делать if во втором always. Т.е. проверку условия counter делать на такт позже его изменения. Правильно ли я думаю? Так ли это принято делать?

    Но как тогда сделать чтобы данные (sample_out) не появились позже чем их строб (sample_strobe_out)? Задерживать и его тоже?

    Вроде бы все соответствует описанию. Ведь и sample_out, и counter - регистры по приведенному описанию. Соответственно, sample_out изменится на следующем разрешенном такте после перехода counter в 0. Как исправить? Приведенное Вами предложение, если допустимо задержать данные на еще один такт - логичный вариант.

     

  11. По поводу повторного запуска EDA RTL Simluation - все равно получаю ошибку, гласи она следующее:

    "error deleting msim_transcript": permission denied

    Check the NativeLink log file ....

    На счет повторного запуска команды do <имя проекта>_run_msim_rtl_verilog.do - запускается, и моделсим начинает заново компилить все библиотеки, что есть время =/

    Правильно, если из-под Квартуса запускать RTL, то надо ModelSim закрыть. А на чем у Вас тратится время? Компилирует он то, что написано в do файле (команда vlog). А при запуске команды vsim он запускает моделирование и подключает все используемые библиотеки. В ModelSim-Altera Edition библиотеки уже предкомпилированы и перекомпилироваться не должны, а для других не-альтеровских версий ModelSim можно их откомпилировать и использовать откомпилированные версии, используя EDA Simulation Library Compiler.

     

    По поводу функционального и временного моделирования - функциональное быстрее, не требует полной компиляции и позволяет изолировать чисто логические ошибки. Разработчики, использующие только возможности Quartus при работе со встроенным симулятором часто полностью компилируют проект, а потом запускают моделирование. По умолчанию запускается временное. Но это не отменяет того, что там, до того, как убрали встроенный симулятор, функциональное тоже было. Такая возможность была. :)

     

    Поэтому здесь два вопроса. Первый - интеграция функционального моделирования в маршрут проектирования. Второй - переход от задания входного воздействия в виде временных диаграмм к созданию тестового окружения, формирующего входные воздействия и каким-то образом обрабатывающего выходные сигналы, на языке.

     

  12. Если честно моделировать не особо хочется, плата пустяковая. А клампинг диод обязательно нужен? По умолчанию квартус включается его выборе стандарта 3,3В.

    Мне всегда казалось, при выборе стандарта 3.3/3.0В его вообще не отключить. Не так?

  13. любимый редактор <-> моделсим -> квартус -> таймквест -> работа в реальном железе

    А что мне делать, если меня редактор Quartus устраивает? :)

     

    Автору темы: для функционального моделирования:

    1. Настраиваем testbench.

    2. При внесении изменений в проект его не надо полностью перекомпилировать в Quartus - достаточно запустить Start Analysis and Elaboration.

    3. Запускаем EDA RTL Simluation.

    Для моделирования с задержками:

    А чем EDA Gate Level Simulation после полной компиляции не устраивает?

     

    Изучайте технологию моделирования в ModelSim. Тогда поймете, что именно NativeLink складывает в папку simulation и как зупускается моделирование. Небольшая подсказка: если посмотрите транскрипт вывода в ModelSim после запуска из-под Quartus, то в начале там подается команда:

    do <имя проекта>_run_msim_rtl_verilog.do

    Вот и запустите ее заново после изменения исходного текста модулей и их сохранения (в любом редакторе :)).

     

     

    встречный вопрос: а нафига? исправлять-то все равно придется в коде. делайте все в моделсиме, потом анализируйте в тайсквесте.

    Ну а почему бы не сделать gate-level simulation? Понятно, что в большинстве случаев функционального моделирования и статического временного анализа достаточно, но на поздних этапах проектирования делать прогон на gate-level или не делать - это вопрос технологии, применяемой конкретным разработчиком.

     

    А то человек спрашивает, как ему промоделировать, а ему сразу методологию навязывают, в которой это моделирование некошерно. :)

  14. Еще вопрос - от чего защищаться собираетесь? В datasheet приведен допустимый процент времени превышения над 3.95В в результате выбросов, чуть не в самом начале характеристик. Это если моделировать будете.

  15. который кстати, при формальном подходе, не является списком чуствительности, а является оператором ожидания.

    Я бы только уточнил, что он является не оператором ожидания, а объявлением события.

  16. alexadmin, des00, извините, а вы не о разных вещах говорите? Я например, под перекосом понимаю разницу во времени прихода сигнала в разные точки устройства. А задержка - это собственно задержка распространения от источника до приемника.

     

    Все-таки деревья тактирования стараются выравнивать по перекосу. То есть, задержка большая, а перекос, даже по разным углам кристалла, будет небольшим. Вот для примера скриншот ChipPlanner для немаленького и медленного Cyclone IV E. Выделены задержки на выходе с clock control block для clock и reset. Схема - просто 8-ми разрядный регистр:

    module testskew
    (
    input clk, reset,
    input [7:0] din,
    output reg [7:0] count
    );
    
    always @ (posedge clk or posedge reset)
    begin
    	if (reset)
    		count <= 0;
    	else 
    		count <= din;
    end
    
    endmodule

    Пару триггеров я кинул в произвольные места кристалла сам, еще один сделал Fast Input, а другой Fast Output. Остальные 4 разбросал Quartus. Результат - по кристаллу перекос порядка 0.1нс, до триггеров в элементах ввода-вывода задержка просто другая, но тоже выровненная (3нс вместо 2.5нс - в StratixII аналогично, сталкивался уже).

     

    Очень интересно увидеть именно пример перекоса более 1-2нс, а не задержку в глобальной линии тактовых импульсов.

    post-8660-1299769153_thumb.jpg

  17. А вы знаете какой у нас на работе скандал была когда закупили лицензионный Q10.1, а оказалось там Vector Waveform Editor отсутствует...

    Самое смешное, что в месте к Квартусом купили еще (отдельно) модельсим - самую навороченную версию(!). И это для того чтобы работать с MAX7000(!). Но никто им пользоваться (кроме меня B) ) не умеет. Потому что никто не юзает HDL, а про тестбенчи вообще не слышали..

    Но лицензия ведь не привязана к версии. Можно работать с той же лицензией на 9.1SP2.

  18. DMA в домене приемника, на клоке 80 МГц, между дма и источниками стоит фифо двухклоковое входной - источник, выходной - дма (80мгц). Так вот я пробовал коммутировать клок логическим И от источников на клок входного потока фифо - не катит.

    Если хватит памяти, то идеологически правильнее поставить два двухклоковых FIFO с разными входными частотами, а мультиплексировать их выход, который у обоих будет читаться на частоте 80МГц.

     

     

    Как вариант, так как переключение осуществляется редко, можно попробовать поиграть с переконфигурацией PLL. Т.е. сделать выход, у которого частота и фаза (через множители, выбор входного ТИ и т.д.) будут определяться загруженной конфигурацией.

  19. а приемник (SGDMA) на мультиплексированном, а значит задержанном клоке.

    А этот DMA в составе системы на кристалле? Не знаю, как Вы пересинхронизируете дальше, т.е. в каком домене находится приемник. Но не лучше ли поставить DMA в домене приемника? Тогда на входе DMA ставится мультиплексор, а перед ним по каждому входу ставится логика перехода между тактовыми импульсами - один блок с 20МГц, другой с 5.18МГц в домен тактового импульса DMA и приемника.

  20. ну это я в википедии прочитал. Если открыть англ версию, и ввести Combinational logic , то в скобочках указывается In digital circuit theory, combinational logic (sometimes also referred to as combinatorial logic). Хотелось вот и узнать , почему применяют 2 разных термина для объяснения одного и того же.

    Все эти кальки - суть перевода, кем-то и когда-то сделанного и более устоявшейся версии. Да, традиционно более правильный термин - комбинационная логика. Но как на Западе, так и у нас, "безграмотные инженеры", в том числе из компании Mathworks, делающей продукт Matlab, и даже во многих университетах, часто используют термин "combinatorial", а не "combinational" (замечу, что чаще они из области Electrical Engineering). Если человек хорошо знает мат. логику (например, за границей - из области Computer Science), ему это может не понравиться, так как действительно есть "правильная" область под названием "комбинаторная логика". А так как кальки идут и в русском переводе, то и у нас встречаются оба варианта.

     

    Кстати, термин "последовательностная" мне нравится гораздо больше, чем нерусская калька "секвенциальная", но я никогда не возмущаюсь. Как и в случае с триггерами, которые с динамическим/потенциальным управлением - синхронизацией по фронту/по уровню, или автоматы с единичным кодированием/с одной активной единицей и т.д. и т.п.....

     

    Совет - если Вам встретился человек, так сильно настаивающий на корректности терминов, которые по сути являются калькой, не спорьте. Бывает, что для него это важно, бывает, что это просто занудство и самоутверждение. Спорить бессмысленно, как и в других областях, только холивары разводить.

  21. Создайте отдельно BSP без приложения, там будет пункт создания BSP c uC/OS-II. Все файлы, включая нужный Вам includes.h, добавятся автоматом. А потом отдельно приложение и привяжите его к этому BSP.

  22. LE RAM - это то, на что хочется надеяться, или она собирается на триггерах?

    С трудом нахожу отличия от MAXII:

    - ушел встроенный регулятор

    + появилась пара крохотных устройств в линейке

    + появились LVDS/RSDS

    + 1000 циклов перезаписи UFM в коммерческом диапазоне и по-прежнему 100 в индустриальном.

    В чем идея? Ему честное имя - MAXIIE. :)

  23. Но так пока получается только расчетом нужных таблиц "в лоб" :crying: :
    Что, собственно, и возвращает нас к начальному предложению расписать все в виде таблицы. ч.т.д. :biggrin:

    Ну вот щаз еще дождусь ответа Leka - и все, оформляю как полугодовой НИР))) :)
    Придется еще все на VHDL переписать. :)
×
×
  • Создать...