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

FROL_256

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о FROL_256

  • Звание
    Частый гость
    Частый гость
  1. Точно, внес еще небольшое изменение: rAdd := ("0" & unsigned(xA)) + unsigned(yB) + unsigned'("") & carryIn; -- full 32 bit adder with carry И заработало. Спасибо Вам огромное! :)
  2. Здравствуйте, уважаемые форумчане! Недавно был вынужден перейти с ActiveHDL на ModelSim. Появилась ошибка компиляции, смысл которой я пока не понимаю ... подскажите пожалуйста что ему не нравится. subtype WORD is STD_LOGIC_VECTOR (31 downto 0); variable xA : WORD := x"00000000"; -- first op variable xB : WORD := x"00000000"; -- second op variable yB : WORD := x"00000000"; -- second op passed to adder variable carryIn : std_logic := '0'; variable rAdd : unsigned(32 downto 0) := (others => '0'); -- result of add ops group ... rAdd := unsigned("0" & xA) + unsigned(yB) + unsigned("" & carryIn); -- full 32 bit adder with carry /// вот эта строчка вызывает ошибку Ambiguous type in infix expression; ieee.std_logic_1164.STD_LOGIC_VECTOR or work.A0.REGISTER_MEMORY. Illegal type conversion to ieee.NUMERIC_STD.UNSIGNED (operand type is not known). Ambiguous type in infix expression; ieee.std_logic_1164.STD_LOGIC_VECTOR or ieee.std_logic_1164.STD_ULOGIC_VECTOR. Illegal type conversion to ieee.NUMERIC_STD.UNSIGNED (operand type is not known). VHDL Compiler exiting
  3. Здравствуйте! Использую для симуляции Active HDL 9.1. Наблюдаются чудеса загрузки данных их файла. Вот код: subtype WORD is STD_LOGIC_VECTOR (31 downto 0); file file_PROG : text; -- file there the program is located variable v_ILINE : line; variable v_CMD : WORD; variable i : integer := 0; Следующий код заключен в еще 1 цикл, и выполняется 17 раз (в соответствии с текущим количеством моих тестов) i := 0; while not endfile(file_PROG) loop readline(file_PROG, v_ILINE); read(v_ILINE, v_CMD); program(i) <= v_CMD; i := i+1; end loop; 16 тестов отрабатывают четко, все как надо, а при загрузке 17-ого, на четвертом слове программы вместо значения '10' - грузится '3' .... Причем если ту же самую программу загружать не 17-ой а первой, то все работает правильно. Вот первые 5 строк бинарных данных программы: 01001011000000000000000000000000 01001011000100010001000000000000 01001011001000100010000000000000 11000011001100000000000000000000 00000000000000000000000000001010 11000011010000000000000000000000 Четко видно что в четвертой строчке закодирована десятка, но на 17-рый раз выполнения этого кода грузится почему-то '3'. Я в растерянности, помогите пожалуйста советом. Где проблему искать.
  4. Здравствуйте, уважаемые форумчане! В процессе работы над простым MIPS-like процессором у меня накопилось довольно много тестовых программ (ну пока еще не очень много, но будет всё больше и больше). Сейчас схема тестирования выглядит так: 1) Мой питоновский скрипт asm.py собирает программу в некоторый файл out.txt 2) Я вручную запускаю Active HDL, ставлю брек-поинты и симулирую по клокам дожидаясь завершения программы (программа загружается до начала симуляции из out.txt). 3) Смотрю содержимое регистров и принимаю решение о том, прошел тест или нет. Но это очень утомительно. Я бы хотел научиться в автоматическом режиме запускать симуляцию по очереди всех программ, в конце каждой писать содержимое регистров в файл (с последним проблем нет). И в автоматическом же режиме сравнивать полученный результат и писать что тест прошел или не прошел. В связи с этим мой вопрос - расскажите пожалуйста как оргаинизовать автоматический запуск и остановку (например по достижении N клоков) симуляции через каки-нибудь программные средства в windows использую ActiveHDL. В идеале скрипт на питоне или .bat -ники. Спасибо!
  5. Спасибо! :) Пишу свой, но не совсем MIPS, делаю MIPS-like. Со своей системой команд, более минималистичной. В мипсе мне не нравятся некоторые вещи ... например почему нету команды сложения с переносом но зато есть команда вытаскивания флага переноса. это на мой взляд довольно странно.
  6. Здравствуйте, уважаемые форумчане! Мой вопрос: Мы знаем что в MIPS конвейер устроен таким образом: F D X M W Причем, на операции с АЛУ отводится 1 клок, а на операции с памятью, как правило, 2 клока. И смысл F D X M W конвейера именно в том, чтобы на 1 клоке посчитать смещение через АЛУ, а на 2 уже реализовать выборку из памяти, это понятно. Однако, АЛУ ведь тоже довольно тяжелая вешь, почему бы не разбить его на 2 стадии. На первой стадии мы просто вычисляем все что нужно - то есть все варианты операций. На 2-ую стадию перенесим все мультиплексоры (включая bypass), которые выбирают нужный результат и записывают его куда надо. Как мне стало казаться, это многое упростит и улучшит. Во-первых, меньше bypass-а и проще определять, когда процессор простаивает а когда, нет, т.к. все команды занимаю 2 клока и точка. Во-вторых, алу станет меньше и возможно вырастет частота ... но я понимаю что здесь надо считать конечно на практике и наверное многое зависит от того как память будет реализована. Поэтому интересует: 1) Насколько такая идея оправдана? 2) Где обычно находится боттлнек в MIPS конвейере? Возможно, ваш личный опыт. Спасибо! PS: больно не бейте, я в этом деле любитель :)
  7. Спасибо! Ссылки работают! Хотя мне бы конечно лучше какие-нибудь тулзы для и верификации именно VHDL. Мне просто нравится VHDL. А так как я делаю в основном для себя то не вижу смысла переходить на SV или что-то еще. Еще вот всегда было интересно, существует какая-нибудь тулза для визуализации процесса прохождения данных по конвейеру? Скажем, она на вход берет VHDL, а затем по тактам рисует анимацию, что вот тут сигналы, вот комб. логика, и по тактам вот так данные перемещаются. ИМХО было бы реально полезно. Ясно, спасибо! Ну я так и думаю пока, начать того что написать на VHDL просто много тестбенчей и запускать их в автоматическом режиме.
  8. Можно считать что из под винды (Win7). Из под линукса очень редко.
  9. Ну да, хотелось бы что-то более-менее серьезное использовать. Спасибо, посмотрим OVM. >>тестбенча (если он systemverilog) $readmemh() У меня только VHDL, но суть понял, да.
  10. Добрый день, уважаемые гуру. Постараюсь описать свою проблему в кратце: 1) Есть процессор, который находится в разработке и куча программ для него. Программы и начальные значения регистров я забиваю прямо в VHDL коде. Затем запускаю на моделсиме фактически вручную смотрю что происходит. 2) Проблемам в том, что если в дизайн процессора были внесены изменения, мне приходится вручную же прогонять все тесты. Сначала запускаю самописный компилятор, который генерит программу в hex виде (вернее он создает прямо VHDL код), затем вставляю полученный VHDL я вставляю в основной исходник процессора (опять же вручную), запускаю моделсим и кликаю по тактам до тех пор пока программа не завершится. Затем проверяю регистр R0, в нем у меня обычно хранится результат. Подскажите пожалуйста, как лучше организовать систему тестов. Может, поделитесь скриптами (все-равно на чем, но лучше конечно на питоне). Я не очень большой опыт имею работы с моделсимом. Если можно, опишите пожалуйста в деталях, как лучше организовать такую систему (или где посмотреть). То есть я конечно в принципе догадываюсь как такое сделать, но мне не хочется писать все с нуля, если уже что-то подобное существует. Спасибо!
  11. Почему один? У меня потоков столько сколько пикселей на экране. Я думаю их группами по 16 выполнять. В том то вся и идея, что какова бы ни была задержка, если потоков много, я могу латентность скрыть. Длинна конвейера 16? => 16 потоков. 30? => 32 потока. 48? => значит будет 48 потоков. нужно просто поочередно команды из разных потоков брать. То ест такой гипер-трединг очень высокой степени как бы. Асболютно согласен. Это не вся работа, но надо с чего-то начать. Пока что я думаю сделать прототип а не промышленную железку. Это моя инициатива а не чья-то еще, так что отчет мне писать не для кого. Такие работы есть, просто повторять их не имеет большого смысла. Ну почти, но не совсем. Дело в том, что ускорители рейтрейсинга уже давно есть. И есть статьи по тому как их делали. Я хочу сделать не просто железку которая считает пресечения, а сделать программируемый процессор. Такое решение на котором в теории можно было бы ускорить обычный C++ код, добавив к нему всего-лишь небольшой юнит описанный на VHDL. Ну насчет LEON-а я думал. Я еще раз хочу подчеркнуть, что не мультиядерность мне нужна а многопоточность. Это немного разные вещи. Потоки стоять не будут. Поскольку хочу сделать только прототип, то все данные я положу в память на чипе. Ничего грузить извне я не собираюсь, это должен быть только прототип. Но вобщем я попробую наверное на обычном проце сделать, типа LEON или Nois 2. А там посмотрим. Спасибо еще раз всем за ценные замечания! :)
  12. Да дело даже не в частоте. Если будет 100 Mhz меня устроит. Перф не задарма, а за счет того, что мультипроцессор выполняет поочередно команды из разных потоков и зависимостей по данным нет. То есть одна команда в клок это на мультипроцессоре спокойно можно сделать, даже если это команда с плавающей точкой. А если поток один, то любая зависимость => задержка в 10 клоков => падение производительности в 10 раз.
  13. Остается открытым вопрос о производительности FPU при наличии всего одного потока. Ну вот допустим у нас 10 стадий в конвейере FPU (В альтеровской либе 12 вообще). Это ж будет латентность 10 клоков при любой зависимости. Но вообще наверное можно попробовать забить на это и действительно сделать на ниосе.
  14. Я имел ввиду, что в среднем за один такт будет считаться. То есть если юнит загружен работой, то по нему треугольники будут проходить со скоростью один треугольник в клок. Я думал так сделать сначала, но плохо то, что у ниоса с плавающей точкой ахтунг. Помимо пересечений есть вообще говоря и другие вычисления. Если в результате окажется, что боттлнек просто напросто в том, что ниос неуспевает посчитать шейдинг, я получу немного не те числа при сравнении. Можно конечно еще считать шейдинг и проч. вещи. с фиксированной точкой...возможно вы правы и начать стоит именно с этого. Это уже давно есть :) Интерес сделать аппаратное решение. Боюсь DSP мне не подойдет, но все-равно спасибо.
×
×
  • Создать...