Просмотр полной версии : Altera (Cyclone3?) или Xilinx (Virtex5?)
Vladimir Kladov
16.01.2007, 15:24
Не знаю что выбрать. Во-первых, какую фирму - с чего лучше начинать. Мне бы из соображений удобства средства разработки. Что лучше - Quartus альтеры или ISE ксайлинкса?
Мне нужно много логики, память на борту тоже, но это более второстепенно, логика важнее.
И как думаете, стоит подождать с выходом на рынок именно Cyclone3 / Virtex5, и китов для них, или для начала упростить проект (хотя бы из соображений цен на железо и обеспечение при розничной покупке - цены вообще не соображу какие. Ищу, ищу, такое ащущение, что их специально скрывают :v2_mad: )
- цены вообще не соображу какие.Если по Altera то www.altera.ru
Там и прайс на все доступные компоненты найдешь.
Не знаю что выбрать. Во-первых, какую фирму - с чего лучше начинать. Мне бы из соображений удобства средства разработки. Что лучше - Quartus альтеры или ISE ксайлинкса?
Мне нужно много логики, память на борту тоже, но это более второстепенно, логика важнее.
И как думаете, стоит подождать с выходом на рынок именно Cyclone3 / Virtex5, и китов для них, или для начала упростить проект (хотя бы из соображений цен на железо и обеспечение при розничной покупке - цены вообще не соображу какие. Ищу, ищу, такое ащущение, что их специально скрывают :v2_mad: )
Значит так, Virtex - это самое дорогое семейство Xilinx, и дешёвых китов с этими чипами на борту ты не найдёшь. Virtex из той же весовой категории, что и альтеровский Stratix. На когда намечен выход Cyclone III? Если даже на ближайшие полгода, то киты с ним появятся только через год минимум. Поэтому следуют оставновить свой выбор либо на Cyclone II от Altera или Spartan-III от Xilinx.
Теперь к другому вопросу: забудь про борду напрочь. Зачем сразу выкидывать деньги? Научись писать на HDL, научись симулировать схему, научись вообще работать с симулятором и уже тогда, когда примерно будет понятно что к чему и почему, можно сделать выбор борды. Кстати, у вас в Новосибирске есть представительство "Точки опоры", которые в свою очередь работают с ЭФО, которые в свою очередь являются дистрибьютором Альтеры.
Выбор производителя не принципиален, в России распространена больше Альтера. Камни они делают примерно одинаковые. Quartus и ISE (это среды разработки от Altera и Xilinx соответственно) доступны для свободного скачивания, разница только в принудительной регистрации Quartus'а. У Quartus идёт собственный внутренний симулятор, который мне не понравился, у ISE в дополнение к внутреннему симулятору (который я никогда даже не юзал) идёт ещё и ModelSim. Для квартуса тоже есть версия ModelSim, но политика Альтеры здесь сильно отличается от Xilinx, последний даёт спец. версию ModelSim, которая так же абсолютно бесплатная, как и сам ISE. Но всё равно, ModelSim не вершина совершенства (там слишком специфичный интерфейс), посему очень многие рекомендуют ActiveHDL, который может работать с Quartus и ISE. Я ковырял это дело немного, много его ковырял камрад heroy, у него спросишь про ActiveHDL.
Короче мой совет: прежде чем кидаться в поиски девборды, скачай себе Quartus или ISE и начни изучать какой-нибудь из HDL. Когда получишь симуляцию своей схемы без ошибок - тогда уже думай о борде. Кстати, по поводу HDL. Есть два основных -VHDL и Verilog. Первый сложнее, по структуре своей похож на Ада, второй намного проще, похож на С. Советую начинать с Verilog, я начинал с VHDL, но прочтение одной толстенной книжки по этому языку (с полным пониманием материала) ничего не дало, мягко говоря, а вот с Verilog завёлся с пол-пинка. Кстати, на сайте компании Aldec (автора ActiveHDL) есть туторы по VHDL и Verilog, качни, не пожалеешь.
Vladimir Kladov
16.01.2007, 16:35
Да, на альтере цены есть, меня смутило, и в том числе, в плане что лучше выбрать, что нет такой же определенности по поводу xilinx'а (plis.ru). "Прайс готовится" - вывеска висит наверное с начала года уже.
Язык-то я уже выбрал (верилог, конечно, на сложные конструкции у меня мозгов уже не хватает). Софт, правда еще не прибыл - сам я качать по диал-апу не берусь, много. Попросил, сделают. Пока мучаюсь с максом+ 2 чего-то там (интерфейс явно 96-го года, судя по диалогам и ужжжасному текстовому редактору) и криволоманым веритаком. Ну, и эмулятор для ПЦ сделал пока, проверить-то, что проц вообще работать будет (и на все команд хватит), надо же как-то.
С книгами туго. Думал на чекалде что-нибудь найти, но это же вообще полной облом. Того, что в инете нашел, малова-то будет. Ну ладно, разберусь как-нибудь. Съезжу еще на той неделе в топ-книгу, попугаюсь тамошним ценам. Может и найду какой фолиант поновее в пределах 1000 деревянных.
С бордом повременить... Действительно, куда спешить. Мне может год понадобится завершить проэктище, а там того и гляди и чипы новее и дешевше подойдут, и борды к ним... Спасибо за совет.
У меня такие подозрения что ты хошь Spec256 в реал вывести ;)
ИМХО - Altera DE1 подойдёт как для обучательства унд эксперементаторства , так и для конечного воплощения .
З.Ы. Мой религиозный фанатизм как то больше в сторону Altera смотрит :D
Vladimir Kladov
16.01.2007, 21:06
не, Z80 - это XX век и все x86-е, и RISC'и... У меня совсем другая архитектура в голове построилась. И есть масса идей по распараллеливанию, точнее по асинхронному выполнению инструкций (не в том смысле асинхронному, какой имеется в виду при программировании ПЛИС, я для простоты собираюсь все как раз делать синхронным. Просто инструкция, которая пришла позже, может начать выполняться раньше или одновременно с пришедшими раньше - по мере готовности операндов). В общем, это совсем не спекрум, не риск, не х86. И главная мысль - защита памяти с точностью до 4х байт, + полное обособление обоих стеков - вычислительного и возвратов/исключений. Программа не будет иметь к ним доступа как памяти. Вот так.
Тут нада иметь достаточно глубокие знания по архитектуре машин состояний и декомпозици операционных и управляющих блоков, короче нада сначало математическую модель построить что бы все недочеты всплыли так как в языке где все команды исполняются паралельно это бесмысленно
Lethargeek
17.01.2007, 10:53
это совсем не спекрум, не риск, не х86. И главная мысль - защита памяти с точностью до 4х байт, + полное обособление обоих стеков - вычислительного и возвратов/исключений
Форт-процессор чтоль?
Vladimir Kladov
17.01.2007, 15:20
не совсем форт. Я от него только принцип стеков беру. Другой принцип "программисту доступно все" я отвергаю напрочь. В х86 тоже доступно все. Да так доступно, что дальше некуда.
Я модель сделал. Эмуляторы писать умеем :). У меня хорошее параллельное мышление, на уровне интуиции. Строить мат. модель - уже не нужно, ее лучше держать в голове, проще сразу моделировать в верилоге. Вообще-то я не схемотехник. Но когда-то с основами имел счатье познакомиться. Что такое RS-триггер или инвертор, представляю. С крупной логикой типа регистров или сумматоров тем более могу разобраться. У меня проблемы начинаются, когда дело доходит до паяльника и припоя. Но я себе такой задачи и не ставлю. Тем более что теперь (оказывается) можно заниматься железом будучи в железе полным ламером (в смысле гонять это дело на тестовой плате от производителя, в реальном железе, не умея даже правильно ножки у микросхемы посчитать :) ).
П.С. Секрета из устройства процессора (пока без имени, с придумыванием имен дело туго) я не делаю. Регулярно обновляю описание по адресу http://www.kolmck.net/sf/architecture_contrary_to.zip
Vladimir Kladov
20.01.2007, 15:29
Интересные вещи пишут про Lattice FPGA. Быстрые, недорогие, и памяти в 5 раз больше на борту. Меня особенно порадовала поддержка DDR SDRAM на борту. Нарлд, юзаете? Или как прониклись альтерой, так и не смотрите по сторонам?
В любой более мене современной FPGA есть DDR SDRAM
береш корку и на этом действия заканчиваются
и для Lattice программаторы стоят безумных денег
Vladimir Kladov
20.01.2007, 19:29
В любой более мене современной FPGA есть DDR SDRAM
береш корку и на этом действия заканчиваются
и для Lattice программаторы стоят безумных денег
А, ну так это для штучного производства дорого. А для крупно-серийного вообще-то пофигу. Ладно, как на крупное производство перейду, обязательно припомню :v2_wink2:
Не знаю что выбрать. Во-первых, какую фирму - с чего лучше начинать. Мне бы из соображений удобства средства разработки. Что лучше - Quartus альтеры или ISE ксайлинкса?
Возможно не открою Америки, но думаю в этом случае будет полезен ресурс
http://iosifk.narod.ru/articles.html
Там есть несколько статей про создание форт-подобного микропроцессора "своими руками" в FPGA. Статьи публиковались в журнале "Компоненты и технологии", выложены собственно на страничке их автора.
В качестве примера разбирается проект на базе Altera, язык AlteraHDL, пакет MaxPlus. Автор статей считает AlteraHDL более доступным, а переход с него на другие языки - более простым.
Секрета из устройства процессора (пока без имени, с придумыванием имен дело туго) я не делаю. Регулярно обновляю описание
По-моему для начального проекта архитектура "перетяжелена" новшествами и наворотами вроде наличия в ней сразу аппаратных вычислений с плавающей запятой. Мне кажется, что было бы перспективнее уделить внимание массовому параллелизму в массиве более простых узлов, с очень большим количеством их (узлов).
http://www.lenta.ru/news/2006/11/07/multicore/
У меня были идеи попытаться поэкспериментировать с такими на симуляторе. Со стековым языком типа форт в масштабе узла и в перспективе с языком явного параллелизма типа Occam для системы.
Дальше идей к сожалению дело не пошло. :v2_down:
Vladimir Kladov
22.01.2007, 15:30
давно уже читал. Там AHDL, которому пора уже в отставку. Как-то понятно, но мне не понравилось, verilog мне больше по душе.
Вещественные - опционально. Естественно, в младших моделях и не будет. Я наверное вообще, начну с 16-битной модели данных (но адреса - 32). Мне не очень интересно делать даже простой конвейер. Хочу сделать именно асинхронное выполнение, принцип БЭСМ-6 (водопровод != конвейер!). Не, массив не хочу. Люблю классику. (Сами же упрекаете, что слишком много новшеств. Массивные вычисления - это такое новшество для меня, что новшествее дальше только квантовые вычисления...)
По мне так AHDL это ваще не язык для описания железа, а текстовое представление схемы, на нем ничего серьезно в принципе нельзя реализовать
Vladimir Kladov
22.01.2007, 18:01
я так понял, просто разработка древняя (во, время летит - 5 лет, уже древняя!). Тогда и чипы были меньше, и медленнее. А сейчас - Lattice - 800MHz, внутри PCI, Ethernet, флэш для прошивки, и чего там только нет. Только что пентиум не хватит сделать... И даже хватит - в урезанном виде, но нафиг не надо. Ибо отстой и помойка хлама!
А сейчас - Lattice - 800MHz
Это время преключения тригера если у тебя они 2 последовательно рабочая частота 400МГц а если еще пару LUT разныцы между ихними входами синхронизации + задержки трасировочного ресурса то максимум на 300 надеятся можно, допустим то же MAX3128-10 рабочяя частота макроячейки 100МГц (даже больше 175) то допустим в ULA на 64 Макроячейки рабочая частота максимальной цепочки тока 9МГц (самый дальний угол получился - формирование сигнала FLASH), Но так как те узлы где нада 14МГц работают на 14 смело (учитывая все защелки,счетчики и мультиплексоры) а FLASH если будет запаздывать на пол такта не страшно, то можно сказать что схема работает на 14МГц устойчиво
Далее еще более жестокий пример
EP2C5 у которого макроячейки запросто на 380МГц работают - всунул туда ARM7 ядро в результате после расчета всех задержек (оптимизация была установлена по размеру) рабочая частота ARM Получилась чуть менее 3МГц, а это один из наиболее линейных процесоров
Scorpion(lv)
23.01.2007, 20:19
Немножко не потеме ивините у меня есть Алтера ЕРХ740LC68-10Z. Что это за чудо?
Vladimir Kladov
23.01.2007, 20:55
что значит 2 последовательные. Я дурак, что ли, последовательно триггеры соединять? За такт триггер должен 1 раз переключиться, и все. На то, батенька, конвейер существует. Сейчас как раз делаю-думаю конвейер для очереди выделения номерков на свободные "вешалки в гардеробе" (узкий ресурс - операционные ячейки, их надо на каждом такте 8 штук давать на конвейер команд, и соответственно забирать у тех, кому уже не надобно). Получается 5 стадий конвейера, зато гарантируется работа одновременно 8 гардеробщиков, на каждом такте до 8 пальто выдали, до 8 пальто приняли. (Одно плохо - не представляю пока себе, сколько это будет лютов и вентилей - для 128 номерков например, там 32 мукса на 4 входа на нижнем каскаде, 32 мукса-смесителя на 2м, дальше 8 + 8 примерно по той же схеме, так ведь еще обратные линии на переосвобождение непринятых пальто, еще и сами номерки 7-битные толкать надо по шинам вперед...).
АРМ7 вообще-то Г. Там конвейер пропускает стадии, и работает четко последовательно. Каждый такт может выполняться только 4 одновременно разных стадии конвейера. Я хочу сделать, чтобы у меня выполнялось от 4 до 16 команд одновременно, и в среднем режиме за такт выполнялось 4 операции. Конвейер очень длинный, и с асинхронным выполнением операций: команда, пришедшая позже, может закончить свои дела раньше, зависимости определяются автоматом. Для этого я убрал нафиг само понятие флажков. Ладно, я ссылку давал? Давал. Спать хочу... наверилогился за сёдни.
Ну дык, я о том что конвеер это можно сказать единственный способ повышения частоты, чем цепочка прохождения сигнала тем естественно частота выше. Но у длинных конвеером ты думаю и без меня знаеш есть и минусы.
Зы: насчет паралельности управляемой пользователем (компилятором) очень силь E2K Бабаяна напомнило, наверное проще не предумаеш способ для разруливания связи по данным и возможности паралельного исполнения команд.
Vladimir Kladov
24.01.2007, 15:27
Нет, E2K - это вся нагрузка на компилятор. Явный параллелизм. У меня неявный. Конвейер конвейру рознь. У меня будет много разных конвейеров (уже штук 6 насчитал), и из них только 1 - конвейер инструкций, может вызывать приостановку из-за переходов (а остальные клацают без передышки, если есть над чем трудиться). Я считаю, что недостаток этот не имеет особого значения для асинхронного выполнения, с автоматическим изменением порядка выполнения, и одновременным выполнением. Он является недостатком только для "чистого" конвейера, каковой... (блин чего я нажал?) характерен для всех современных ЦП. У меня (я надеюсь) будет сглаживание этого недостатка, засчет длинной очереди инструкций. В очереди каждая и. может находиться на любой стадии выполнения, и совсем необязательно, что и., пришедшая раньше, ближе к концу выполнения, чем пришедшая позже. (Неужели надо приводить примеры? Я удивляюсь просто).
ПС. Наконец-то достал софтинку: Protel DSP 2004 г. 1 раз запустил, интерфейс посовременнее, чем MAXII+. Пойду потружусь...
Если хочеш удобную среду для написания, и самую быструю симуляцию процессов то тебе нада Active-HDL а если серьезно хочеш просимулить и максимально быстро то можно полностью отлаженные блоки перевести на С (а можно и на Delphi) и подключить их как PLI причем при помощи тестбенчев можно сравнить их поведение
Vladimir Kladov
24.01.2007, 20:24
знаю. Жду диск, идет. Пока посмотрел на протел. VHDL, хотя тот кто давал, говорил, что Verilog. Впрочем я уже тогда заподозрил, что не то: он не знает разницы между Verilog HDL и VHDL.
Перевод на C/Delphi делает ActiveHDL?
Перевод на C/Delphi делает ActiveHDL?
Не, сам пишеш, (хотя есть достаточно интересное мероприятие SystemC, Вроде его уже довели до синтезируемого) но это уже когда проект становиться достаточно большой, скажем когда у тебя один такт процесора будет симулиться по 2 минуты то ничего другого не останеться, а в FPGA нативной нет такого удобства отладки как в средах когда после исправления == на != ненадо перкомпиливать весь проект и перезаливать его в отладочный наборчик.
Vladimir Kladov
25.01.2007, 04:29
Не, сам пишеш, (хотя есть достаточно интересное мероприятие SystemC, Вроде его уже довели до синтезируемого) но это уже когда проект становиться достаточно большой, скажем когда у тебя один такт процесора будет симулиться по 2 минуты то ничего другого не останеться, а в FPGA нативной нет такого удобства отладки как в средах когда после исправления == на != ненадо перкомпиливать весь проект и перезаливать его в отладочный наборчик.
Не представляю, как это сам. Сам я могу логический эмулятор сделать (собственно уже). Есть icarus verilog - он автоматом может C-модель сделать. Но с ним неудобно работать: командная строка, не очень люблю. Но если приспичит, буду юзать.
У меня будет много разных конвейеров (уже штук 6 насчитал), и из них только 1 - конвейер инструкций, может вызывать приостановку из-за переходов (а остальные клацают без передышки, если есть над чем трудиться).
Конечно, наверное интересно создать свой собственный процессор, но интересно, что в нем приципиально предполагается нового? Конвейеры всех мастей и типов давно использутся везде. Мало того, от автоматического (на уровне Dispatch Unit) out-of-order выполнения команд в новых процессорах начинают отказываться, перекладывая эту задачу частично на компиляторы, с чем компиляторы справляются значительно лучше, нежели это было бы сделано на ходу. Примером может служить тот же новоиспеченный Cell-процессор от PS3.
Vladimir Kladov
25.01.2007, 15:15
я же говорил, что нового. Защита памяти до 4 байт. Кроме того, меня интересует засунуть все, что нужно в один чип: видео, звук, интерфейсы, и сделать самый дешевый, самый маленький и самый надежный комп класса целерона (т.е. еще и самый быстрый из софт-процессоров классического типа). И потом, я талдычу, талдычу: У МЕНЯ НЕ КОНВЕЙЕР, а ВОДОПРОВОД.
Про cELL я уже слышал. Linux для него адаптировать не удалось по-нормальному. Сопроцессоры остались не задействованы, все 8. Работает только главный. Это называется: компиляторы "справляются". Написание хорошего компилятора сейчас дороже, чем разработка железа, которое оптимизирует работу программы на ходу. Сколько в мире языков, знаете? Для всех писать оптимизированные компиляторы - сколько надо программистов? Да их столько нету...
А смысл защиты в 4 байта??
Вроде как 4Кб вполне удобная величина, все равно нету щас фрагментаци жесткой. Было бы интересней аппратное управление кучей и контроль выхода за границы выделенного участка, типа прощай дырки связанные с переполнением буфера, а еще веселей что бы в дискрипторе выделеного участка помимо адреса и размера хранился еще и тип данных, типа что бы процессор выпадал в Trap при не (оформленной специальным образом) доступа к ячейке в которой храниться указатель как к вещественному числу. Так же было бы полезно для операционок в данном дискрипторе хранить признак модифицированости, и признак вываливаться в отладку при определенном виде доступа.
ЗЫ: Ох мы и у офтопили :)
я же говорил, что нового. Защита памяти до 4 байт. Кроме того, меня интересует засунуть все, что нужно в один чип: видео, звук, интерфейсы, и сделать самый дешевый, самый маленький и самый надежный комп класса целерона (т.е. еще и самый быстрый из софт-процессоров классического типа). И потом, я талдычу, талдычу: У МЕНЯ НЕ КОНВЕЙЕР, а ВОДОПРОВОД.
Практически утопическая задача )))
Не говоря уже о том, что, если он так и останется в FPGA, то вряд ли он будет дешевым. А забабахать производство в кремнии... это вообще UNREAL
Так же не понимаю, чем вой водопровод отличается от конвейера (по описанию чисто конвейер ;-)). А следовательно быстродействие стандартное для систем такого типа.
Vladimir Kladov
25.01.2007, 20:11
смысл в том, чтобы программы, написанные с ошибками и обращающиеся НЕ ТУДА в пределах СВОЕЙ кучи, падали сразу, еще у программера, а не у юзера. А если упали у юзера, чтобы было видно не то место, куда программа "попала", а то место, _откуда_ она туда попала. И больше никаких переполнений буфера. А если в пределах 4К, то ничего это не даст, как и сейчас не дает.
Аппаратное управление кучей у меня как раз и предусматривается. Я считаю, что очень многие программы тормозят как раз на этом. А вот путать вещественные и целые - это как раз пускай транслятор разбирается. Если язык нормальный, там этих проблем нет (почти нет). Это в С - завсегда пожалуйста. Ну так не пишите на С.
Конвейер - это когда все команды проходят одни и те же стадии выполнения. Скажем, 6 или 8 или даже 20. Если какой-то команде стадия не нужна, она пропускает ее. Если какая-то задержалась, придерживается весь конвейер. Водопровод - это когда каждая команда работает независимо (насколько возможно). В водопроводе может случиться так, что пришедшая позже сделает свои дела раньше (если не зависит от предыдущих). Проблема определения зависимости у меня решается аппаратно, и очень простыми способами.
Конечно утопическая. Но иногда бывает, случается чудо...
deathsoft
25.01.2007, 23:52
В водопроводе может случиться так, что пришедшая позже сделает свои дела раньше
У интела это реализовано начиная с Pentium Pro, называется out of order execution. Используется обычный конвейер, плюс переименование регистров (несколько скрытых регистровых файлов) и несколько модулей с АЛУ и блоков предсказания ветвлений.
Гранулярность защиты в 4байта приведет к тому, что половину памяти будет занимать таблица атрибутов блоков (RWX или чтото подобное). Не даром на новых процессорах (начиная с Pentium) сделали поддержку страниц 2Мб и 4Мб (для того чтобы таблица страниц занимала как можно меньше памяти).
deathsoft
25.01.2007, 23:58
куда программа "попала", а то место, _откуда_ она туда попала
Ну эта проблема решается элементарно (либо трассировка стека, для call, либо FIFO переходов как сделано в DSP TMS320VC5502 для целей отладки (запоминается около 20-30 переходов и циклов)) .
Конвейер - это когда все команды проходят одни и те же стадии выполнения. Скажем, 6 или 8 или даже 20. Если какой-то команде стадия не нужна, она пропускает ее. Если какая-то задержалась, придерживается весь конвейер. Водопровод - это когда каждая команда работает независимо (насколько возможно). В водопроводе может случиться так, что пришедшая позже сделает свои дела раньше (если не зависит от предыдущих). Проблема определения зависимости у меня решается аппаратно, и очень простыми способами...
То, что ты называешь водопроводом - обычный конвейер, который давно применяется :-) И out-of-order исполнение команд его обычная фича :-)
p.s.: Ой! просмотрел, что deathsoft уже это ответил :-)
deathsoft
26.01.2007, 00:08
водопроводом
водопровод по английски - pipe и конвейер тоже по английски pipe
Vladimir Kladov
26.01.2007, 14:31
Ну эта проблема решается элементарно (либо трассировка стека, для call, либо FIFO переходов как сделано в DSP TMS320VC5502 для целей отладки (запоминается около 20-30 переходов и циклов)) .
В Intel х86 это не решается. Программа выпадает в момент отладки, в IP хрен знет что, стек показывает на адрес 30000h, доступа к этой памяти нет, как мы туда попали - неизвесто. Ошибка недетерминированная, в режиме трассировки (с записью в файл всех вызовов) потребуется несколько суток - до того, как упасть, прога перелопатила гигабайты (работала 15 минут). И что прикажете делать?
Vladimir Kladov
26.01.2007, 14:36
водопровод по английски - pipe и конвейер тоже по английски pipe
да я чихал на английский pipe. Первыми схему "водопровод" применили русские, в лохматом 1964-67 г. если не ошибаюсь.
Видите ли, в Интеловском компьютере нельзя эффективно использовать эту схему. Стек адресуется как память. И все, приехали.
Vladimir Kladov
26.01.2007, 14:42
Гранулярность защиты в 4байта приведет к тому, что половину памяти будет занимать таблица атрибутов блоков (RWX или чтото подобное). Не даром на новых процессорах (начиная с Pentium) сделали поддержку страниц 2Мб и 4Мб (для того чтобы таблица страниц занимала как можно меньше памяти).
Я об этом сразу сказал. Только куда вы эту память деваете, солите, что ли? Обратите внимание на то, насколько объемы памяти быстро растут - по сравнению с медленным ростом быстродействия, и памяти, и процов. Пора задействовать "лишнюю" память для пользы дела.
А вы, кстати, в курсе, что целероны до сих пор кэшируют только часть памяти, по начальным физическим адресам? А вся остальная память идет мимо L2-кэша. Так что (почти) пофигу, у вас 128 метров или 2 Гига оперативки на борту. В лучшем случае компу полегчает засчет меньшего свопинга. Вот такие дела.
deathsoft
26.01.2007, 14:47
И что прикажете делать?
Использовать MSR регистры в которых есть trace fifo как в TMS (на 8 или 16 переходов в зависимости от модели проца)
deathsoft
26.01.2007, 14:50
А вы, кстати, в курсе, что целероны до сих пор кэшируют только часть памяти,
Нет, не в курсе (я их не использую, т.к. это процы обрезки). Но такое было и на пентиум 1, чипсет i430TX кэшировал только первые 32Мб, а i430HX 1Гб
deathsoft
26.01.2007, 14:52
Пора задействовать "лишнюю" память для пользы дела.
Проблема как раз в том, что при большой таблице атрибутов поиск в ней будет занимать значительное время, что скажется на общем быстродействии системы. Именно по этому на 64битных процессорах используют не таблицу страниц, а инверсную хэш таблицу, т.к. для 64битного адресного пространства таблица страниц просто не влезет в физическую память.
deathsoft
26.01.2007, 15:00
Первыми схему "водопровод" применили русские
У нас много чего применяли, только это не прижилось. Завод "Светлана" (у нас в Питере) выпускал полностью асинхронные процессоры (без сигнала тактирования), работали они по принципу запрос-ответ (ready/busy), но распространения эта идея не получила, т.к. процы были склонны к зависаниям, а проверить факт зависания было невозможно.
deathsoft
26.01.2007, 15:05
Но вообще, создание проца с собственной архитектурой занятие полезное, т.к. можно вживую увидеть все достоинства и недостатки той или другой вычислительной архитектуры. Раньше (когда не было ПЛИС) это можно было сделать только на моделях (выпуск в железе могли себе позволить только крупные заводы), а теперь можно сделать и в железе.
Vladimir Kladov
26.01.2007, 16:58
какую таблицу... Нет никакой таблицы. Вот представьте - 4 байта по адресу 0000_0104H. И "под" ними - 4 байта дескриптора, по адресу 1_0000_0104H. На самом деле, теневая память с дескрипторами может адресоваться так, чтобы в SDRAM обе четверки попали в одну линейку. И может быть групповой дескриптор на 256 байт. И думаю, этого достаточно. Памяти - ровно в 2 раза больше надо. Зато программистам будет проще жить - сейчас этот ресурс дороже какой-то там памяти.
Vladimir Kladov
26.01.2007, 17:02
Использовать MSR регистры в которых есть trace fifo как в TMS (на 8 или 16 переходов в зависимости от модели проца)
Где это взять, это в ПЦ есть? Как задействовать? Колись уже, а то у меня ситуация с прогой именно такая вышла - пришлось отложить проект и надолго (нет, не EmuZWin, с ним все в порядке, просто некогда).
Если про это:
Model-Specific Registers – модельно-специфические регистры.
Эти регистры предоставляют средства программной связи с микроархитектурой процессора, все важнейшие настройки которые можно менять программно находятся именно там.
...
Команды RDMSR и WRMSR
Команда RDMSR (ReaD from Model Specific Register) выполняет чтение из MSR-регистра. Действие команды заключается в проверке двух условий: во-первых, проверяется наличие нулевого уровня привилегированности кода, во-вторых, проверяется наличие в регистре ECX значения, адресующего один из MSR-регистров. Если хотя бы одно из этих условий не выполняется, то выполнение команды RDMSR заканчивается. Если выполняются оба условия, то значение MSR-регистра, адресуемого содержимым регистра ECX, помещается в пару 32-битных регистров EDX:EAX.
то это вряд ли поможет.
deathsoft
26.01.2007, 17:04
Памяти - ровно в 2 раза больше надо.
Ну - это дико не оптимально. Это примерно как Бил Гейтс везде продвигает свой бейсик и C# (хотя это дикие тормоза и огромный бесполезный расход памяти, в результате чего любой комп. работает со скоростью 386го). Вспомните алгоритмы из книг Кнута (там все было оптимально и написано на ассемблере).
deathsoft
26.01.2007, 17:06
это в ПЦ есть?
Да есть во всех процах начиная с Pentium Pro (см. интеловскую доку по процу том 3)
deathsoft
26.01.2007, 17:08
Колись уже, а то у меня ситуация с прогой именно такая вышла - пришлось отложить проект и надолго
Для этого есть DevPartner Studio (раньше BoundsChecker).
Vladimir Kladov
26.01.2007, 17:09
Да, конечно, неоптимально. Хранить boolean в байте - тоже неоптимально. Знаете, что на самом деле НЕ ОПТИМАЛЬНО? Не оптимально - не иметь возможности найти максимум ошибок в программе до того, как она зависнет, и завесит систему. Не оптимально - заставлять программеров искать баги, которые могли бы себя проявит сами, и сказать - "вот тут ошибка". Не оптимально - пытаться сделать не-дырявую ось на дырявом по определению железе (см. проект Singularity).
Vladimir Kladov
26.01.2007, 17:12
эта платная штука. И пробовал я ее. Ничего она не может. В этой ситуации - ничего. Не знаю, где там ей что сказать надо, чтобы она указала, откуда ноги выросли. Да, забыл сказать: задача многопоточная (> 5 потоков), и вообще непонятно, в каком потоке вылет.
deathsoft
26.01.2007, 18:18
эта платная штука. И пробовал я ее. Ничего она не может. В этой ситуации - ничего. Не знаю, где там ей что сказать надо, чтобы она указала, откуда ноги выросли. Да, забыл сказать: задача многопоточная (> 5 потоков), и вообще непонятно, в каком потоке вылет.
Для того чтобы работали все проверки надо компилить с ее библиотекой (для MSVC) старые версии поддерживали и делфи, был BoundChecker Delphi edition. При этом ловсятся ошибки с точностью до заданого числа байт. Технология очень простая, перед вызовом функции массивы и стек заполняются патерном, потом этот патерн проверяется, если были переполнения - это тутже выявляется.
Проблема как всегда не в железе, а в криворуких програмерах, какое хорошее железо не делай и там найдутся те кто напишет программу, которая будет работать с глюками на самом отказоустойчивом железе. Раньше люди программирвоали на асме и выявляли все ошибки, а сейчас не могут выявить ошибки на ЯВУ (хотя это на порядок проще).
В большинстве своем наличие трудноотлаживаемых ошибок в программе, обуславливается стилем программирвоания. Есть у меня одна отечетсвенная книга (годов еще 60х), называется "Индивидуальная отладка программ", там про это очень хорошо написано. Книга актуальна и в наше время.
deathsoft
26.01.2007, 18:20
задача многопоточная (> 5 потоков)
Более того DevPartner позволяет выявлять deatlock'и в многопоточных программах, и делает это достаточно эффективно.
deathsoft
26.01.2007, 18:21
эта платная штука
Ну, бесплатный - только сыр в мышеловке. Делфи - тоже платный продукт. И любой софт для разработки под альтеру - тоже (и не малых денег стоит).
Vladimir Kladov
26.01.2007, 20:39
Проект на паскале, но какая разница. Метод паттернов не проходит. Проверялось и другими средствами, которые заполняют все паттерном. (Не пойму только, а при чем тут MSR'ы всякие? Какой с них толк - если это всего лишь средство получить информацию о возможностях аппаратуры). Там ошибка очень глубокая, наведенная. И наверняка даже не моя, а в одной из библиотек графики. Криворукие программисты, говорите? Вы попробуйте написать 100000 сток кода, и чтобы без ошибки, а я посмотрю. Хорошая ошибка - это которая сразу приводит к сбою. Но есть плохие ошибки. Функция отрабатывает нормально, ничего не происходит. На первый взгляд, и на второй и на десятый. Но где-то в памяти делает что-то не то. И спустя минуты долгого выполнения другая функция в другом месте начинает обращаться к данным, а они какие-то не те. Все случаи предусмотреть нельзя, и прога с грохотом падает. Попробуй теперь догадайся, которая из 10000 функций что-то не учитывает. Это не кривые руки программистов. Это ленивое железо + принцип "программисту доступно все". Я считаю, что сейчас на разработку ПО приходится вбухивать все больше средств и времени и сил - только потому, что слишком много экономии на разработке железа. "Мы не будем делать паровоз, вот вам 100 лошадей, скачите куда хотите". Так получается.
deathsoft
26.01.2007, 20:46
Не пойму только, а при чем тут MSR'ы всякие? Какой с них толк - если это всего лишь средство получить информацию о возможностях аппаратуры
Читайте первоисточник (мануал по процессору от интела том 3 (с сайта интела)), а не русский перевод непонятно кого. В области регистров MSR есть область из 16-32х регистров, которые запоминают последние 16-32 перехода (все виды переходов call/jmp/int и т.д.), просто так этим воспользоваться не удастся, т.к. обработчик исключения Page Fault в первую очередь должен сохранить значения этих регистров (в противном случае в них запишутся переходы, которые происходят внутри обработчика).
Ну на счет 100000 строк кода я могу сказать только одно, что на компьютере код отлаживать намного легче, чем например во встроеной системе на TMS (у которого защиты памяти вообще нету) и кроме JTAG эмулятора нет никаких средств общени с внешним миром (ни монитора ни клавиатуры).
Я разрабатываю драйверы режима ядра (для систем на ядре NT) и исходников там порядка 1Мб, однако мне это не мешает находить и исправлять ошибки. Большинство ошибок можно исправить исходя из чисто теоретических принципов. Остальные с помощью контролирующего кода (assert'ов) и всяких там дебагеров и средств типа баундс чекера.
Понятное дело, что код без ошибок написать очень сложно, но для этого и существуют всякие разные приемы отладки, чтобы исправлять ошибки в том числе и трудноуловимые.
Vladimir Kladov
27.01.2007, 09:21
Ну и какой обычному разработчику (не уровня ядра) от этих регистров, если он может ими воспользоваться. Ошибки ошибками, но есть еще преднамеренный вредоносный код, от которого на x86 не убежать, не спрятаться. Стек программе доступен всегда как адресуемой пространство. В том же самом стеке лежат и адреса возвратов, и локальные переменные, и параметры. Метод паттернов здесь не поможет. Кроме естественных ошибок, появляется возможность найти редкий случай сочетания входных данных и переполнением буфера выполнить код, который никогда не должен был бы выполниться, в случае нормальном. Архитекутура, в которой стеки разделены, и не адресуются как обычная память, исключает такую возможность напрочь.
deathsoft
27.01.2007, 12:00
Стек программе доступен всегда как адресуемой пространство. В том же самом стеке лежат и адреса возвратов, и локальные переменные, и параметры. Метод паттернов здесь не поможет.
Ну, вообще метод патернов со стеком отлично помогает, делается проверка стека после каждого вызова функции, аналогично выявляются непроинициализированные переменные и налезание стека на код.
В новых x86 есть бит защиты страниц, который разрешает/запрещает выполнение кода с этой страницы, для стека стасятся атрибуты RW, для данных тоже RW, для кода RX, при этом запись в страницы с кодом тутже приводит к исключению, а также попытка выполнени данных и стека.
Кстати на x86 есть возможность защиты стэка, кода и данных, практически как в компьютерах с гарвардской архитектурой - это использование сегментной модели, когда у каждого сегмента задается его адрес и размер, тогда при переполнении стека вырабатывается исключение Stack Fault. Это никто не использует, потому что компилятор под сегментную модель писать в 100 раз сложнее, поэтому везде и используют упрощенную - FLAT модель. В своей тестовой многозадачной ОС, которую я писал на ассемблере я использовал защиту уровня сегментов и все 3 кольца защиты (как раз дл того чтобы посмотреть какие преимущества это дает), защищенность от ошибок повышается в разы, но компиляторов поддерживающих это нет, а из ОС только OS/2 поддерживала уровни привелегий 0, 2 и 3, все остальные ОС поддерживают только 0 и 3.
deathsoft
27.01.2007, 12:04
Ну и какой обычному разработчику (не уровня ядра) от этих регистров, если он может ими воспользоваться.
Так это не проблема железа, а проблема кривых инструментальных средств, которые не поддерживают аппаратуру на которой работают. Тотже отладчик SoftIce поддерживал MSR регистры, но только LastBranchFromIp и LastBranchToIp.
Vladimir Kladov
27.01.2007, 19:58
Всего стека? В каждом потоке? Ну вы меня умиляете. Я же говорю: до возникновения ошибки придется запускать прогу на несколько суток тогда.
Проверять после вызова придется всю память, принадлежащую задаче. Я о том и толдычу, что это нереалистично.
И потом, представьте себе идеальный мир. Прогу можно написать сразу так, что если в пределах защищенного блока произойдет ошибка, то прога не слоамется, а просто сообщеит, что данный участок данных сбойный, и пропустит его, и дальше пойдет. А может и не сообщать, просто в журнале фиксировать - если задача такая. А сейчас - будьте добры увидеть, что "программа выполнила недопустимую операцию", и полчаса ваших прежних ожиданий накрылись медным тазом. И будьте добры сами методом исключения (например) найти тот кусок данных, который роняет прогу, и удалить их из набора. Пример абстрактный, но характеризует нынешнее положение дел в полной мере. Разработчики даже не пытаются предусмотреть восстановление после сбоя, потому что сбой однозначно испортит общую кучу, доступную всей программе с едиными правами, и дальше пытаться выполнять что-либо просто бессмысленно: восстановление невозможно.
Нет, конечно, можно организовывать для каждой мелкой задачки свой собственный процесс (упало - главный процесс перезапускает ведомый), но - накладно получается, тормозить будет, причем сильно тормозить.
Vladimir Kladov
27.01.2007, 20:07
Ну вот, получил я Quartus II 6.1. Пока не понял, пойдет ли он с лицензией Web Edition, буду сейчас пробовать.
Ага, вроде идет. Expiration date: 27-Jun-2007. На полгода, то есть. Через полгода новую дадут, если от имени той же сетевой карты / пользователя просить, кто в курсе, скажите.
Пойду туториал "полистаю" ;)
дают, хотя проще вылечить, в qartus отладчик убогий, можно сказать его там нет.
deathsoft
28.01.2007, 02:03
Нет, конечно, можно организовывать для каждой мелкой задачки свой собственный процесс (упало - главный процесс перезапускает ведомый), но - накладно получается, тормозить будет, причем сильно тормозить.
Ну, далеко ходить не надо, ОС с ядром mach (микроядерная ОС, где все процессы и драйверы работают в юзермоде). Там все процессы могут быть восстановлены. Точно также большинство военных приложений, там практически всегда требуется прохождение программой контрольных точек и восстановление в случае сбоя с этих контрольных точек.
deathsoft
28.01.2007, 02:07
И еще, я например, выработал для себя правило - не использовать в своих проектах бблиотеки и компоненты (vcl/mfc и т.д.) у которых нет исходников (не важно коммерческая библиотека или нет), т.к. в библиотеках глюков предостаточно, а когда нет сорцов, то глюки пофиксить невозможно. Я находил и исправлял не один глюк в контролах и библиотеках для C++ Builder.
deathsoft
28.01.2007, 02:12
Я же говорю: до возникновения ошибки придется запускать прогу на несколько суток тогда.
Можно сделать гранулярность защиты памяти хоть 1 байт, но если программа портит чужую память которая разрешена на запись, то это никак не поможет. (Например 5 функций используют одну структуру в куче, и одна из функций записывает туда мусор). За правильность работы программы ответственнен ПРОГРАММИСТ и только. Железо - это только инструмент, в противном случае программисты были бы вообще не нужны, компьютеры бы сами писали и отлаживали программы (как в научно фантастических романах).
Lethargeek
28.01.2007, 07:09
За правильность работы программы ответственнен ПРОГРАММИСТ и только
+1
Кстати тот же Форт весьма просто позволяет зверски переопределить все что можно настолько, что программисту станет "НЕдоступно все". :) Конечно тормоза возникают, но для тестовой версии самое то. Имхо нормальный контроль юзания аппаратных ресурсов гораздо важнее, чем защита памяти.
Vladimir Kladov
28.01.2007, 07:42
К сожалению, бывают ситуации, когда использовать чужие библиотеки без исходного кода невозможно. Например: Jpeg, Jpeg2K, Mpeg, Tiff... То, что есть в открытом виде, жутко тормозно, а в случае Tiff'а так вообще половину форматов не понимает. Самое печальное, что не существует нормального описания алгоритма, из которого можно было бы сделать свой код, а тот, что уже есть в открытом виде, не дает понимания того, как это можно сделать по-другому и что-либо оптимизировать. Проще плюнуть и взять готовое в виде откомпилированных jbj-файлов, и ждать, когда все грохнется.
Кривые руки могут быть результатом простой опечатки. Проблема в том, что на х86 вы не сможете обнаружить 10% таких опечаток сразу, а в случае нормальной защиты - 0,1%. Если вы считаете, что труд программиста ничего не стоит, то можете оставаться при своем имхе. Но то, что он стоит намного дороже, чем железо, об этом известно давно. ПО сейчас золотое по сравнению с железом, как раз потому, что софта надо много, и разного, а железо - оно просто клонирует древних ящеров. Тот же арм. Простите меня, но это копия наших советских трехадресных машин: Наири, БЭСМ4. Хорош прогресс...
Vladimir Kladov
28.01.2007, 12:34
Вот первые результаты. Это на 1 такте получается, на 1 небольшом (но важном) устройстве. Кажется, 420 MHz - близко к границе возможного на CycloneII, но неясно, как бы оно было на более быстром чипе. Web Edition обламывает с выбором чипа, зараза.
Info: Clock "clk" Internal fmax is restricted to 420.17 MHz between source register "OperRegQueue_mux1:mux0|out_num3[0]" and destination register "OperRegQueue_mux1:mux0|out_num3[0]"
Info: fmax restricted to clock pin edge rate 2.38 ns. Expand message to see actual delay path.
Info: + Longest register to register delay is 0.407 ns
Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LCFF_X83_Y1_N25; Fanout = 2; REG Node = 'OperRegQueue_mux1:mux0|out_num3[0]'
Info: 2: + IC(0.000 ns) + CELL(0.323 ns) = 0.323 ns; Loc. = LCCOMB_X83_Y1_N24; Fanout = 1; COMB Node = 'OperRegQueue_mux1:mux0|out_num3[0]~11'
Info: 3: + IC(0.000 ns) + CELL(0.084 ns) = 0.407 ns; Loc. = LCFF_X83_Y1_N25; Fanout = 2; REG Node = 'OperRegQueue_mux1:mux0|out_num3[0]'
Info: Total cell delay = 0.407 ns ( 100.00 % )
Info: - Smallest clock skew is 0.000 ns
Info: + Shortest clock path from clock "clk" to destination register is 2.906 ns
Info: 1: + IC(0.000 ns) + CELL(0.989 ns) = 0.989 ns; Loc. = PIN_T2; Fanout = 1; CLK Node = 'clk'
Info: 2: + IC(0.114 ns) + CELL(0.000 ns) = 1.103 ns; Loc. = CLKCTRL_G3; Fanout = 192; COMB Node = 'clk~clkctrl'
Info: 3: + IC(1.266 ns) + CELL(0.537 ns) = 2.906 ns; Loc. = LCFF_X83_Y1_N25; Fanout = 2; REG Node = 'OperRegQueue_mux1:mux0|out_num3[0]'
Info: Total cell delay = 1.526 ns ( 52.51 % )
Info: Total interconnect delay = 1.380 ns ( 47.49 % )
Info: - Longest clock path from clock "clk" to source register is 2.906 ns
Info: 1: + IC(0.000 ns) + CELL(0.989 ns) = 0.989 ns; Loc. = PIN_T2; Fanout = 1; CLK Node = 'clk'
Info: 2: + IC(0.114 ns) + CELL(0.000 ns) = 1.103 ns; Loc. = CLKCTRL_G3; Fanout = 192; COMB Node = 'clk~clkctrl'
Info: 3: + IC(1.266 ns) + CELL(0.537 ns) = 2.906 ns; Loc. = LCFF_X83_Y1_N25; Fanout = 2; REG Node = 'OperRegQueue_mux1:mux0|out_num3[0]'
Info: Total cell delay = 1.526 ns ( 52.51 % )
Info: Total interconnect delay = 1.380 ns ( 47.49 % )
Info: + Micro clock to output delay of source is 0.250 ns
Info: + Micro setup delay of destination is -0.036 ns
Ладно, пойду пока 2ю ступень этого конвейера рисовать в verolg'е.
deathsoft
28.01.2007, 12:52
Web Edition обламывает с выбором чипа, зараза
Могу дать ссылку на полный эдишен (правда там 700-800Мб придется с ftp скачивать) и лекарство в личку скинуть.
deathsoft
28.01.2007, 12:55
наших советских трехадресных машин
Ну, трехадресность то тоже не у нас придумали (БЭСМ4 и НАИРИ - это просто отечественная реализация трехадресной машины), тот же MIX кнута - трехадресный.
deathsoft
28.01.2007, 12:56
Jpeg, Jpeg2K
Это есть у интела (http://www.intel.com/cd/software/products/asmo-na/eng/perflib/ipp/302910.htm) с оптимизацией под самые последние процы.
В этуж библиотеку входят и mpg-2, mpeg-4, H.263, H.264 кодеры/декодеры.
deathsoft
28.01.2007, 12:57
Самое печальное, что не существует нормального описания алгоритма,
Скорее всего существует, но этот стандарт просто платный, или патентованый и распространяется под NDA.
deathsoft
28.01.2007, 13:09
Кстати тема то названа неверно - нет микросхемы cyclon 3, видимо имелось ввиду Stratix III (т.к. идет сравнение с Virtex 5, а это схемы одного уровня), а Cyclon соответсвует Spartan.
Vladimir Kladov
28.01.2007, 16:00
Есть, есть. Уже анонсировано, указано время выхода в продажу (какой-то квартал 7 года), , цены ориентировочные (только я не понял насчет этих цен: как хочешь считай то ло 2000 баксов за 1000 штук, то ли при партии от 1000 штук 2 бакса за штуку).
Я когда давал линк на альтеровском фтп, то указывал вот этот файл: 61_quartus_windows.exe его мне и качнули. Я так решил, что Web-edition назывется 61_quartus_free.exe , тоже не маленький, 400 метров. А что такое 61_quartus_programmer.exe (50 метров) я вообще не понял. Заставка была вроде бы та же, но я продолжать не стал установку.
По 2000$ за штуку при партиях от 1000 штук
поштчно может и все 3000$
Vladimir Kladov
28.01.2007, 17:48
По 2000$ за штуку при партиях от 1000 штук
поштчно может и все 3000$Вот теперь окончательно понятно. Золотые прямо. Но я думаю, эти цены не навсегда. Вспомнить, сколько 1Гб флэшка стоила год назад (~1000 уе), и сколько сейчас стоит 4Гб (~100 уе). Наделают побольше, подешевеет поди. Я вообще целюсь влезть если не в циклон2, то хотя бы в стратикс. Они тоже дороговаты пока, правда. Но если ничего не делать, то и ничего не будет к тому моменту, как они подешевеют.
Так я вэб-эдишн качнул (в смысле не я а мне) или полную версию? Как узнать-то? :v2_crazy:
Vladimir Kladov
28.01.2007, 17:53
Такс, я щас качнул какой-то док по System Verilog, стандарта 2001 мне не хватат. Кто-нить по-быстрому может сказать, как вот такое в цикл `for впихнуть (если это вообще можно):
module OperRegQueue_step1(clk, reset, in_free_flgs, in_empty_triads,
out_reset_flgs, out_nums, out_write);
input clk, reset;
input [63:0] in_free_flgs;
input [2:0] in_empty_triads [15:0];
output [63:0] out_reset_flgs;
output [5:0] out_nums [2:0] [15:0];
output [2:0] out_write [15:0];
reg [63:0] free_flags;
OperRegQueue_mux1 mux0( clk, in_free_flgs[3:0], 4'd0, in_empty_triads[0],
out_write[0], out_nums[0][0], out_nums[1][0], out_nums[2][0], out_reset_flgs[3:0] );
OperRegQueue_mux1 mux1( clk, in_free_flgs[7:4], 4'd1, in_empty_triads[1],
out_write[1], out_nums[0][1], out_nums[1][1], out_nums[2][1], out_reset_flgs[7:4] );
OperRegQueue_mux1 mux2( clk, in_free_flgs[11:8], 4'd2, in_empty_triads[2],
out_write[2], out_nums[0][2], out_nums[1][2], out_nums[2][2], out_reset_flgs[11:8] );
OperRegQueue_mux1 mux3( clk, in_free_flgs[15:12], 4'd3, in_empty_triads[3],
out_write[3], out_nums[0][3], out_nums[1][3], out_nums[2][3], out_reset_flgs[15:12] );
OperRegQueue_mux1 mux4( clk, in_free_flgs[19:16], 4'd4, in_empty_triads[4],
out_write[4], out_nums[0][4], out_nums[1][4], out_nums[2][4], out_reset_flgs[19:16] );
OperRegQueue_mux1 mux5( clk, in_free_flgs[23:20], 4'd5, in_empty_triads[5],
out_write[5], out_nums[0][5], out_nums[1][5], out_nums[2][5], out_reset_flgs[23:20] );
OperRegQueue_mux1 mux6( clk, in_free_flgs[27:24], 4'd6, in_empty_triads[6],
out_write[6], out_nums[0][6], out_nums[1][6], out_nums[2][6], out_reset_flgs[27:24] );
OperRegQueue_mux1 mux7( clk, in_free_flgs[31:28], 4'd7, in_empty_triads[7],
out_write[7], out_nums[0][7], out_nums[1][7], out_nums[2][7], out_reset_flgs[31:28] );
OperRegQueue_mux1 mux8( clk, in_free_flgs[35:32], 4'd8, in_empty_triads[8],
out_write[8], out_nums[0][8], out_nums[1][8], out_nums[2][8], out_reset_flgs[35:32] );
OperRegQueue_mux1 mux9( clk, in_free_flgs[39:36], 4'd9, in_empty_triads[9],
out_write[9], out_nums[0][9], out_nums[1][9], out_nums[2][9], out_reset_flgs[39:36] );
OperRegQueue_mux1 mux10( clk, in_free_flgs[43:40], 4'd10, in_empty_triads[10],
out_write[10], out_nums[0][10], out_nums[1][10], out_nums[2][10], out_reset_flgs[43:40] );
OperRegQueue_mux1 mux11( clk, in_free_flgs[47:44], 4'd11, in_empty_triads[11],
out_write[11], out_nums[0][11], out_nums[1][11], out_nums[2][11], out_reset_flgs[47:44] );
OperRegQueue_mux1 mux12( clk, in_free_flgs[51:48], 4'd12, in_empty_triads[12],
out_write[12], out_nums[0][12], out_nums[1][12], out_nums[2][12], out_reset_flgs[51:48] );
OperRegQueue_mux1 mux13( clk, in_free_flgs[55:52], 4'd13, in_empty_triads[13],
out_write[13], out_nums[0][13], out_nums[1][13], out_nums[2][13], out_reset_flgs[55:52] );
OperRegQueue_mux1 mux14( clk, in_free_flgs[59:56], 4'd14, in_empty_triads[14],
out_write[14], out_nums[0][14], out_nums[1][14], out_nums[2][14], out_reset_flgs[59:56] );
OperRegQueue_mux1 mux15( clk, in_free_flgs[63:60], 4'd15, in_empty_triads[15],
out_write[15], out_nums[0][15], out_nums[1][15], out_nums[2][15], out_reset_flgs[63:60] );
always @(posedge clk)
if (reset)
begin
free_flags = 64'b0;
end
else
begin
free_flags = free_flags & in_free_flgs | out_reset_flgs;
end
endmodule
Мне так долгонько рисвать все эти вызовы модулей придется, если без `for, да и ошибок боюсь добавится.
Полный Quarus в наборе имеет
Quartus
ModeSim
IP Cores
NIOS
и вроде че то еще
И весит что то около 1Гб
WEB окло 300 мег и почти ничего нету, но клизма подходит что к полному что к урезаному варианту.
Ну SystemVerilog это чуть из другой песни
А так что то в таком духе
integer I;
for (I:=0;I<16;I++)
OperRegQueue_mux1 ( clk, in_free_flgs[(I+1)*4-1:I*4], I , in_empty_triads[I],
out_write[I], out_nums[0][I], out_nums[1][I], out_nums[2][I], out_reset_flgs[(I+1)*4-1:I*4] );
ЗЫ: Синтаксис циклов не сильно помью ибо до такого обычно редко доходит, тебе нада спецификацию Verilog почитать очень лаконично расписанна, вспомню как зовется - кину ссылку.
Во IEEE 1364
Vladimir Kladov
28.01.2007, 18:40
не, шлет подальше.
Error (10170): Verilog HDL syntax error at OperRegQueue_step1.v(25) near text "for"; expecting an identifier ("for" is a reserved keyword ), or "endmodule", or a parallel statement
Внутри always-блока прокатило (я уже раньше попробовал), но там же нет обращения к модулям, просто набор присваиваний.
deathsoft
28.01.2007, 18:41
А что такое 61_quartus_programmer.exe (50 метров) я вообще не понял.
Это не нужно, это отдельный программатор, чтобы без квартуса в микросхемы готовые прошивки заливать. Программатор входит внутрь квартуса.
deathsoft
28.01.2007, 18:50
Кто-нить по-быстрому может сказать, как вот такое в цикл `for впихнуть (если это вообще можно)
Стандарта Verilog 2001 для циклов и условных конструкций достаточно, а вообще я бы советовал использовать VHDL (он похож на паскаль и ада, вам я думаю это привычнее будет) и поддерживает if/generate и for/generate с самой первой версии. Плюс к тому поддерживает типы данных, как обычный язык программирования, что позволяет при моделировании автомата видень состояние автомата в виде осмысленного текста (s_idle, s_rx и т.п.). Кроме того VHDL поддерживает 9ти значную логику, кроме состояний '0', '1' есть еще 'X', 'Z' и различные уровни нагрузки, от weak до strong (что необхдимо для выявления гонок при моделировании).
Верилог изначально предполагался совсем для других целей (это был внутренний язык для синтеза фирмы Cadence) и поддерживает всего 2 типа "провод" и "регистр", поэтому при симуляции видны только нули и единицы.
Vladimir Kladov
28.01.2007, 19:00
Стандарта Verilog 2001 для циклов и условных конструкций достаточно, а вообще я бы советовал использовать VHDL (он похож на паскаль и ада, вам я думаю это привычнее будет) и поддерживает if/generate и for/generate с самой первой версии. Плюс к тому поддерживает типы данных, как обычный язык программирования, что позволяет при моделировании автомата видень состояние автомата в виде осмысленного текста (s_idle, s_rx и т.п.). Кроме того VHDL поддерживает 9ти значную логику, кроме состояний '0', '1' есть еще 'X', 'Z' и различные уровни нагрузки, от weak до strong (что необхдимо для выявления гонок при моделировании).
Верилог изначально предполагался совсем для других целей (это был внутренний язык для синтеза фирмы Cadence) и поддерживает всего 2 типа "провод" и "регистр", поэтому при симуляции видны только нули и единицы.
Там двухмерный массив, и поэтому нужен System. Мне вообще-то глубоко до лампочки, в каком из стандартов поддерживаются макросы, но как я узнал про их существование, я окончательно выбрал верилог.
Когда-то Паскаль был сложнее С, и я не любил Паскаль, и писал на С. В С было всего 7 конструкций, зная которые (и кучу функций библиотеки, но это всех касается) можно было писать код. Сейчас ситуация изменилась: Паскаль проще чем Ansi C. В нем 11 конструкций, которые надо знать, и это неизмеримо меньше, чем в С. VHDL vs Verilog HDL мне не понравился именно этим: в нем слишком много слов надо помнить. Это не к Паскалю ближе, а к Коболу. Который я так в молодости и не осилил. Хотя для изучения того же PL/1 мне хватило недели. Слишком много слов. А еще мне непонятно, зачем 3 раза писать одно и то же. В Entity, в Architecture, и еще (не помню уже как называется) в реализации. Читать я его могу. Ну, почти могу. Но писать - ну его.
deathsoft
28.01.2007, 19:05
Там двухмерный массив
А что в обычном не System вложеные циклы писать нельзя? Я просто уже 100 лет на верилоге ничего не писал, т.к. в симуляции только 0 и 1, то я перешел на VHDL.
deathsoft
28.01.2007, 19:08
Это не к Паскалю ближе, а к Коболу
Кобола к сожалению не знаю (даже как синтаксис примерно выглядит).
Но синтаксис у VHDL как у языка ADA, все параллельные действия описываются в виде процессов.
P.S. Возможно у кобола тоже похожий синтаксис.
Vladimir Kladov
28.01.2007, 19:08
Не, квартус спотнулся на декларации двумерного массива, пришлось выбрать множество System.
Но я-то на Аде не пишу. И близким к паскалю его назвать не могу (наличие begin/end мало о чем говорит - в verilog'е они тоже есть, но ведь все в один голос утверждают все равно, что это С).
deathsoft
28.01.2007, 19:11
е, квартус спотнулся на декларации двумерного массива
Так это в квартусе неполная реализация верилога, используйте что нибудь типа Synplify Pro или Leonardo Spectrum, а в квартус грузите только результат этих программ (RTL-уровень, только регистры, логические элементы и провода).
deathsoft
28.01.2007, 19:14
все в один голос утверждают все равно, что это С
так в верилоге все операции сишные >>,<<,|,& и т.п. А в VHDL нужны объявления аля interface/implenentation, типы описываются по паскалевски:
x:integer;
v:std_logic(3 downto 0);
операции тоже паскалевские: or, xor, and
циклы паскалевские:
for i=0 to 10 do
begin
end
Vladimir Kladov
28.01.2007, 19:53
ну как же неполная. Все он поддерживает. Я просто до сих пор не получил учебник по почте, а в и-нете нахаляву режат только огрызки. Замечу, что по VHDL лежит гораздо больше. И реализаций софт-процессоров на opencores тоже больше в VHDL, чем в Verilog'е. Но он мне все равно VHDL не нравится. Достаточно почитать было сравнительную книжицу Стешенко (кажется), из нее сразу видно, что на верилоге текст намного короче получается. Особенно мне конкатенация в { } понравилась.
Ну, вот ответили на electronix.ru. generate for. Тут же спросил в гугле verilog "generate for" и нашел 2 pdf'а с описанием синтаксиса и примерами использования. И почему мне запало что именно `for - по нему ничего найти не удавалось...
deathsoft
28.01.2007, 20:47
Я просто до сих пор не получил учебник по почте
Могу прислать IEEEшный стандарт на верилог, там весь синтаксис описан, и книжку по верилогу от Cadence (правда там verilog 98 без for generate).
deathsoft
28.01.2007, 20:50
что на верилоге текст намного короче получается
Мне этим верилог тоже понравился, я сначала все на верилоге писал, на VHDL перешол исключительно из за отсутствия for generate в верилоге (в тогдашней версии) и из за дубовой симуляции с двоичными сигналами. А для синтеза верилог удобнее (собственно для этого он фирмой Cadence и разрабатывался и применялся).
deathsoft
28.01.2007, 20:59
Особенно мне конкатенация в { } понравилась.
Ну, вот так далается конкатенация на VHDL:
e1<=e(1 to 4) & e(12+1 to 12+4) & e(2*12+1 to 2*12+4) & e(3*12+1 to 3*12+4)...
e1 - вектор на 96 бит;
А еще мне непонятно, зачем 3 раза писать одно и то же. В Entity, в Architecture, и еще (не помню уже как называется) в реализации. Читать я его могу. Ну, почти могу. Но писать - ну его.
Это грубо говоря похоже на сишные ifdef'ы. Если чип такой-то, то определяем константы (как пример) так и задержки эдак. Если чип другой, то все данные тоже другие. Можно сравнить с пустой платой, на которой напаяны панельки под микросхемы. Плюс это сильно типизированый язык по-сравнению с верилогом.
deathsoft
29.01.2007, 12:01
Architecture
Architecture - задает вариантность архтектуры, например поведенческая (для моделирования) и синтезируемая (оптимизированая до уровней вентилей например).
А Entity задает общий абстрактный интерфейс доступа скрывая реализацию.
Vladimir Kladov
29.01.2007, 16:53
Да я все понимаю. Просто, как говорят англоязычные, too verbose, не люблю много болтовни. В языке программирования тем более. Я лучше комментарии подробные напишу, на своем, русском.
Да я все понимаю. Просто, как говорят англоязычные, too verbose, не люблю много болтовни. В языке программирования тем более. Я лучше комментарии подробные напишу, на своем, русском.
С чего бы это too verbose? Наоборот, "лёгким движением руки брюки превращаются"... Без особого напряга можно проект настроить на особености другого камня, в этом смысл. Или проапдейтить какую-либо часть проекта не трогая остальные.
Vladimir Kladov
01.02.2007, 15:02
С чего бы это too verbose? Наоборот, "лёгким движением руки брюки превращаются"... Без особого напряга можно проект настроить на особености другого камня, в этом смысл. Или проапдейтить какую-либо часть проекта не трогая остальные.
Ну `define в verilog'е тоже есть. И `include есть, куда можно положить то, что является "особенностями". А в тело смотрю - куча раз одно и то же понаписано, для чего - непонятно. Мне и 1 раза хватит.
Vladimir Kladov
03.02.2007, 21:00
А никто не знает, как конкретному регистру сказать, чтобы он был именно на триггерах, а не на памяти сделан? Зараза квартус засунул длинный регистр (96 бит) в ram, и сам же показывает в своем тайм-анализаторе, что на этом деле возникают тормоза: частота клока в 3 раза уменьшилась. Гад. Гад. Сволочь. Гад.
deathsoft
04.02.2007, 17:05
А никто не знает, как конкретному регистру сказать, чтобы он был именно на триггерах, а не на памяти сделан? Зараза квартус засунул длинный регистр (96 бит) в ram, и сам же показывает в своем тайм-анализаторе, что на этом деле возникают тормоза: частота клока в 3 раза уменьшилась. Гад. Гад. Сволочь. Гад.
Не использовать компоненты квартуса, а описывать регистр самому на верилоге, тогда квартус не будет запихивать его в память (либо через атрибуты/прагмы для верилога отключать оптимизацию).
Vladimir Kladov
04.02.2007, 18:39
Не использовать компоненты квартуса, а описывать регистр самому на верилоге, тогда квартус не будет запихивать его в память (либо через атрибуты/прагмы для верилога отключать оптимизацию).
Не использовал. Он сам запихал. В итоге я убрал директивой. Но что смешное, когда обратно удалил директиву, он уже больше не не делает. Запомнил, что ли.
Меня сейчас волнует, как правильно интерпретировать его отчеты тайминг анализера. То он говорит, что все нормально 420МГц - MET. При этом показывает 6 нс (а это явно не 420 МГц). То он на 5 нс начинает орать, что частоту надо уменьшить до 200 МГц (ясен пень, надо - но почему про 6 нс его все устраивает, на меньшей модели - на простом сумматоре).
deathsoft
04.02.2007, 20:28
Еще необходимо учитывать задержки на внешних выводах (5нс на каждый вывод из корпуса)
deathsoft
04.02.2007, 20:29
Меня сейчас волнует, как правильно интерпретировать его отчеты тайминг анализера.
В отчетах много чего показыается, наилучшее время, наихудшее время и т.п., есть вывод критического пути (просмотр его на топологии кристалла).
Vladimir Kladov
04.02.2007, 21:11
В отчетах много чего показыается, наилучшее время, наихудшее время и т.п., есть вывод критического пути (просмотр его на топологии кристалла).
Хм. Я там видел только From и To. А если у меня из этого From в этот To несколько путей, то дальше сам догадайся, на какой дуге оно тормознуло. или надо что-то сделать, чтобы он весь путь показал?
deathsoft
04.02.2007, 22:07
Вроде в квартусе была отдельная функция Show Critical Path (хотя может я путаю с Synplify Pro, там эта функция точно есть, квартус как таковой я не использовал, т.к. она давал довольно посредственные результаты по сравнению с профессиональными средствами типа Synplify Pro и Leonardo Spectrum).
Vladimir Kladov
05.02.2007, 15:14
Ну, Synplify мне новый взять просто негде. То, что мне прислали на диске - 2003 г. Уже рухлядь. Хотя компилирует очень шустро. Жаль, что для старых чипов, а так бы я не посмотрел, что интерфейс уже малось древноват. Не в курсе, где новй synplify народ берет?
deathsoft
05.02.2007, 17:27
Не в курсе, где новй synplify народ берет?
Через форум телесистем "в закромах родины". www.telesys.ru, там форум а дальше спрашивать и искать. А в принципе раньше можно было с родного сайта качнуть, а потом лекарство в инете найти.
deathsoft
05.02.2007, 17:28
То, что мне прислали на диске - 2003 г. Уже рухлядь.
Ну, у меня вроде вообще 2001 был. (7.3 или 7.03)
Vladimir Kladov
05.02.2007, 18:19
я хочу сразу тестировать на циклон2 хотя бы, и временные характеристики его учитывать. А там - циклон даже без римских цифр, 50МГц максимум.
deathsoft
05.02.2007, 20:24
Тогда нужен свежий Synplify Pro, кроме того, результаты которые выдает Synplify Pro - неточные. Выход Synplify Pro (.edf файл) надо пропускать через квартус, и смотреть временнЫе параметры уже в квартусе (т.к. только квартус делает окончательное размещение ячеек внутри ПЛИС). Есть еще такой пакет как Amplify, он тоже делает физ. размещение. (но я его никогда не использовал).
Вот здест заполните имя и email и вам дадут скачать Synplify Pro, потом ищите лекарство
http://www.synplicity.com/downloads/download1.html
Vladimir Kladov
06.02.2007, 18:22
Это понятно. Я нашел где достать, через некоторое время будет. Я просто начинаю уставать от тягомотности квартуса. По 2 минуты компилировать небольшой проект, чтобы получить новые тайминги - это слишком для меня. Я в программинге потому и перешел к Delphi, что он не такой тягомотный как любой C-компилятор. А когда первичная подгонка сделана, тогда можно уже и квартус помучить...
deathsoft
06.02.2007, 22:16
А когда первичная подгонка сделана, тогда можно уже и квартус помучить...
Ну, так я по этому Synplify и использовал, там все за 3 секунды компилится, дальше отсимулировал, проверил что все без ошибок, а в самом конце можно и квартусом компилить.
Vladimir Kladov
11.02.2007, 19:12
Yes! Получил 8.8.0. Это нечто: скорость синтеза просто офигенная, да и репорт о таймингах просто исчерпывающий: сразу стало видно где не успевает, и ясно как поправить. Поправил - ускорил на 30% сразу. Ух, поработаем... а то у меня с квартусом снова стало по пачке сигарет в день выкуриваться :v2_thumb:
deathsoft
11.02.2007, 22:56
Получил 8.8.0.
А лекарство нашли?, а то я чегото лекарство не нашел, саму прогу тоже скачал. Если нашли, то немогли бы мне его по почте скинуть.
Vladimir Kladov
12.02.2007, 16:00
это не проблема, шлю. У меня теперь проблема с ActiveHDL 7.2. Т.е. это и не так срочно, но имеющееся у меня средство не помогает. В лицензии написано что-то странное, типа сами сюда добавите фич и соли (зачем в лицензии соль?). Пробовал взять содержимое из версии 6.2, но не работает.
это не проблема, шлю. У меня теперь проблема с ActiveHDL 7.2. Т.е. это и не так срочно, но имеющееся у меня средство не помогает. В лицензии написано что-то странное, типа сами сюда добавите фич и соли (зачем в лицензии соль?). Пробовал взять содержимое из версии 6.2, но не работает.
если найдёшь вдруг приправы для ActiveHDL - поделись пожалуйста
deathsoft
12.02.2007, 16:53
соли
"соль" - это sault vaule? По английски "соль" в шифровании значит шум (случайная последовательность байтов).
Vladimir Kladov
12.02.2007, 19:17
да там по-русски написано :)
deathsoft
13.02.2007, 01:31
да там по-русски написано
Так может автопереводчиком переводили типа Promt и ему подобных.
Vladimir Kladov
13.02.2007, 15:12
чего, лицензию? Там текст:
; Можно добавлять FEATURES и соль по вкусу :-)
И все. Думаю, если бы переводчиков, уж слово FEATURES точно бы перевело заодно.
Vladimir Kladov
13.02.2007, 16:00
Кстати, на большом проекте Симплифай уже не не молниеносен. И жутко привиредлив (хотя это хорошо: квартус мне ничего не сказал, а симплифай выдал с полсотни предупреждений, из которых добрая треть оказались по делу). Мне даже срочно пришлось утилитку делать для перевода русских комментариев в транслит и обратно: он, оказывается, очень не любит русские буквы. А при попытке напечатать русскую букву в своем редакторе просто вываливается.
deathsoft
13.02.2007, 17:50
А при попытке напечатать русскую букву в своем редакторе просто вываливается.
Напишите им багрепорт, может в следующей версии исправят. Я чтото тоже подобное припоминаю, что были проблемы с русскими буквами, я просто писал коментарии по английски.
deathsoft
13.02.2007, 17:53
квартус мне ничего не сказал, а симплифай выдал с полсотни предупреждений
Квартус иногда просто молча синтезирует полную лажу, которую потом видно только при моделировании, т.к. раньше в квартусе не было возможности посмотреть RTL уровень, а в синплифай это было с самого начала.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot