Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   Altera (Cyclone3?) или Xilinx (Virtex5?) (http://zx-pk.ru/showthread.php?t=4592)

deathsoft 26th January 2007 16:00

Quote:

Originally Posted by Vladimir Kladov
Первыми схему "водопровод" применили русские

У нас много чего применяли, только это не прижилось. Завод "Светлана" (у нас в Питере) выпускал полностью асинхронные процессоры (без сигнала тактирования), работали они по принципу запрос-ответ (ready/busy), но распространения эта идея не получила, т.к. процы были склонны к зависаниям, а проверить факт зависания было невозможно.

deathsoft 26th January 2007 16:05

Но вообще, создание проца с собственной архитектурой занятие полезное, т.к. можно вживую увидеть все достоинства и недостатки той или другой вычислительной архитектуры. Раньше (когда не было ПЛИС) это можно было сделать только на моделях (выпуск в железе могли себе позволить только крупные заводы), а теперь можно сделать и в железе.

Vladimir Kladov 26th January 2007 17:58

какую таблицу... Нет никакой таблицы. Вот представьте - 4 байта по адресу 0000_0104H. И "под" ними - 4 байта дескриптора, по адресу 1_0000_0104H. На самом деле, теневая память с дескрипторами может адресоваться так, чтобы в SDRAM обе четверки попали в одну линейку. И может быть групповой дескриптор на 256 байт. И думаю, этого достаточно. Памяти - ровно в 2 раза больше надо. Зато программистам будет проще жить - сейчас этот ресурс дороже какой-то там памяти.

Vladimir Kladov 26th January 2007 18:02

Quote:

Originally Posted by deathsoft
Использовать 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 26th January 2007 18:04

Quote:

Originally Posted by Vladimir Kladov
Памяти - ровно в 2 раза больше надо.

Ну - это дико не оптимально. Это примерно как Бил Гейтс везде продвигает свой бейсик и C# (хотя это дикие тормоза и огромный бесполезный расход памяти, в результате чего любой комп. работает со скоростью 386го). Вспомните алгоритмы из книг Кнута (там все было оптимально и написано на ассемблере).

deathsoft 26th January 2007 18:06

Quote:

Originally Posted by Vladimir Kladov
это в ПЦ есть?

Да есть во всех процах начиная с Pentium Pro (см. интеловскую доку по процу том 3)

deathsoft 26th January 2007 18:08

Quote:

Originally Posted by Vladimir Kladov
Колись уже, а то у меня ситуация с прогой именно такая вышла - пришлось отложить проект и надолго

Для этого есть DevPartner Studio (раньше BoundsChecker).

Vladimir Kladov 26th January 2007 18:09

Да, конечно, неоптимально. Хранить boolean в байте - тоже неоптимально. Знаете, что на самом деле НЕ ОПТИМАЛЬНО? Не оптимально - не иметь возможности найти максимум ошибок в программе до того, как она зависнет, и завесит систему. Не оптимально - заставлять программеров искать баги, которые могли бы себя проявит сами, и сказать - "вот тут ошибка". Не оптимально - пытаться сделать не-дырявую ось на дырявом по определению железе (см. проект Singularity).

Vladimir Kladov 26th January 2007 18:12

эта платная штука. И пробовал я ее. Ничего она не может. В этой ситуации - ничего. Не знаю, где там ей что сказать надо, чтобы она указала, откуда ноги выросли. Да, забыл сказать: задача многопоточная (> 5 потоков), и вообще непонятно, в каком потоке вылет.

deathsoft 26th January 2007 19:18

Quote:

Originally Posted by Vladimir Kladov
эта платная штука. И пробовал я ее. Ничего она не может. В этой ситуации - ничего. Не знаю, где там ей что сказать надо, чтобы она указала, откуда ноги выросли. Да, забыл сказать: задача многопоточная (> 5 потоков), и вообще непонятно, в каком потоке вылет.

Для того чтобы работали все проверки надо компилить с ее библиотекой (для MSVC) старые версии поддерживали и делфи, был BoundChecker Delphi edition. При этом ловсятся ошибки с точностью до заданого числа байт. Технология очень простая, перед вызовом функции массивы и стек заполняются патерном, потом этот патерн проверяется, если были переполнения - это тутже выявляется.

Проблема как всегда не в железе, а в криворуких програмерах, какое хорошее железо не делай и там найдутся те кто напишет программу, которая будет работать с глюками на самом отказоустойчивом железе. Раньше люди программирвоали на асме и выявляли все ошибки, а сейчас не могут выявить ошибки на ЯВУ (хотя это на порядок проще).

В большинстве своем наличие трудноотлаживаемых ошибок в программе, обуславливается стилем программирвоания. Есть у меня одна отечетсвенная книга (годов еще 60х), называется "Индивидуальная отладка программ", там про это очень хорошо написано. Книга актуальна и в наше время.

deathsoft 26th January 2007 19:20

Quote:

Originally Posted by Vladimir Kladov
задача многопоточная (> 5 потоков)

Более того DevPartner позволяет выявлять deatlock'и в многопоточных программах, и делает это достаточно эффективно.

deathsoft 26th January 2007 19:21

Quote:

Originally Posted by Vladimir Kladov
эта платная штука

Ну, бесплатный - только сыр в мышеловке. Делфи - тоже платный продукт. И любой софт для разработки под альтеру - тоже (и не малых денег стоит).

Vladimir Kladov 26th January 2007 21:39

Проект на паскале, но какая разница. Метод паттернов не проходит. Проверялось и другими средствами, которые заполняют все паттерном. (Не пойму только, а при чем тут MSR'ы всякие? Какой с них толк - если это всего лишь средство получить информацию о возможностях аппаратуры). Там ошибка очень глубокая, наведенная. И наверняка даже не моя, а в одной из библиотек графики. Криворукие программисты, говорите? Вы попробуйте написать 100000 сток кода, и чтобы без ошибки, а я посмотрю. Хорошая ошибка - это которая сразу приводит к сбою. Но есть плохие ошибки. Функция отрабатывает нормально, ничего не происходит. На первый взгляд, и на второй и на десятый. Но где-то в памяти делает что-то не то. И спустя минуты долгого выполнения другая функция в другом месте начинает обращаться к данным, а они какие-то не те. Все случаи предусмотреть нельзя, и прога с грохотом падает. Попробуй теперь догадайся, которая из 10000 функций что-то не учитывает. Это не кривые руки программистов. Это ленивое железо + принцип "программисту доступно все". Я считаю, что сейчас на разработку ПО приходится вбухивать все больше средств и времени и сил - только потому, что слишком много экономии на разработке железа. "Мы не будем делать паровоз, вот вам 100 лошадей, скачите куда хотите". Так получается.

deathsoft 26th January 2007 21:46

Quote:

Originally Posted by Vladimir Kladov
Не пойму только, а при чем тут MSR'ы всякие? Какой с них толк - если это всего лишь средство получить информацию о возможностях аппаратуры

Читайте первоисточник (мануал по процессору от интела том 3 (с сайта интела)), а не русский перевод непонятно кого. В области регистров MSR есть область из 16-32х регистров, которые запоминают последние 16-32 перехода (все виды переходов call/jmp/int и т.д.), просто так этим воспользоваться не удастся, т.к. обработчик исключения Page Fault в первую очередь должен сохранить значения этих регистров (в противном случае в них запишутся переходы, которые происходят внутри обработчика).

Ну на счет 100000 строк кода я могу сказать только одно, что на компьютере код отлаживать намного легче, чем например во встроеной системе на TMS (у которого защиты памяти вообще нету) и кроме JTAG эмулятора нет никаких средств общени с внешним миром (ни монитора ни клавиатуры).

Я разрабатываю драйверы режима ядра (для систем на ядре NT) и исходников там порядка 1Мб, однако мне это не мешает находить и исправлять ошибки. Большинство ошибок можно исправить исходя из чисто теоретических принципов. Остальные с помощью контролирующего кода (assert'ов) и всяких там дебагеров и средств типа баундс чекера.

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

Vladimir Kladov 27th January 2007 10:21

Ну и какой обычному разработчику (не уровня ядра) от этих регистров, если он может ими воспользоваться. Ошибки ошибками, но есть еще преднамеренный вредоносный код, от которого на x86 не убежать, не спрятаться. Стек программе доступен всегда как адресуемой пространство. В том же самом стеке лежат и адреса возвратов, и локальные переменные, и параметры. Метод паттернов здесь не поможет. Кроме естественных ошибок, появляется возможность найти редкий случай сочетания входных данных и переполнением буфера выполнить код, который никогда не должен был бы выполниться, в случае нормальном. Архитекутура, в которой стеки разделены, и не адресуются как обычная память, исключает такую возможность напрочь.

deathsoft 27th January 2007 13:00

Quote:

Originally Posted by Vladimir Kladov
Стек программе доступен всегда как адресуемой пространство. В том же самом стеке лежат и адреса возвратов, и локальные переменные, и параметры. Метод паттернов здесь не поможет.

Ну, вообще метод патернов со стеком отлично помогает, делается проверка стека после каждого вызова функции, аналогично выявляются непроинициализированные переменные и налезание стека на код.
В новых x86 есть бит защиты страниц, который разрешает/запрещает выполнение кода с этой страницы, для стека стасятся атрибуты RW, для данных тоже RW, для кода RX, при этом запись в страницы с кодом тутже приводит к исключению, а также попытка выполнени данных и стека.
Кстати на x86 есть возможность защиты стэка, кода и данных, практически как в компьютерах с гарвардской архитектурой - это использование сегментной модели, когда у каждого сегмента задается его адрес и размер, тогда при переполнении стека вырабатывается исключение Stack Fault. Это никто не использует, потому что компилятор под сегментную модель писать в 100 раз сложнее, поэтому везде и используют упрощенную - FLAT модель. В своей тестовой многозадачной ОС, которую я писал на ассемблере я использовал защиту уровня сегментов и все 3 кольца защиты (как раз дл того чтобы посмотреть какие преимущества это дает), защищенность от ошибок повышается в разы, но компиляторов поддерживающих это нет, а из ОС только OS/2 поддерживала уровни привелегий 0, 2 и 3, все остальные ОС поддерживают только 0 и 3.

deathsoft 27th January 2007 13:04

Quote:

Originally Posted by Vladimir Kladov
Ну и какой обычному разработчику (не уровня ядра) от этих регистров, если он может ими воспользоваться.

Так это не проблема железа, а проблема кривых инструментальных средств, которые не поддерживают аппаратуру на которой работают. Тотже отладчик SoftIce поддерживал MSR регистры, но только LastBranchFromIp и LastBranchToIp.

Vladimir Kladov 27th January 2007 20:58

Всего стека? В каждом потоке? Ну вы меня умиляете. Я же говорю: до возникновения ошибки придется запускать прогу на несколько суток тогда.

Проверять после вызова придется всю память, принадлежащую задаче. Я о том и толдычу, что это нереалистично.

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

Нет, конечно, можно организовывать для каждой мелкой задачки свой собственный процесс (упало - главный процесс перезапускает ведомый), но - накладно получается, тормозить будет, причем сильно тормозить.

Vladimir Kladov 27th January 2007 21:07

Ну вот, получил я Quartus II 6.1. Пока не понял, пойдет ли он с лицензией Web Edition, буду сейчас пробовать.

Ага, вроде идет. Expiration date: 27-Jun-2007. На полгода, то есть. Через полгода новую дадут, если от имени той же сетевой карты / пользователя просить, кто в курсе, скажите.

Пойду туториал "полистаю" ;)

ZEK 27th January 2007 21:47

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

deathsoft 28th January 2007 03:03

Quote:

Originally Posted by Vladimir Kladov
Нет, конечно, можно организовывать для каждой мелкой задачки свой собственный процесс (упало - главный процесс перезапускает ведомый), но - накладно получается, тормозить будет, причем сильно тормозить.

Ну, далеко ходить не надо, ОС с ядром mach (микроядерная ОС, где все процессы и драйверы работают в юзермоде). Там все процессы могут быть восстановлены. Точно также большинство военных приложений, там практически всегда требуется прохождение программой контрольных точек и восстановление в случае сбоя с этих контрольных точек.

deathsoft 28th January 2007 03:07

И еще, я например, выработал для себя правило - не использовать в своих проектах бблиотеки и компоненты (vcl/mfc и т.д.) у которых нет исходников (не важно коммерческая библиотека или нет), т.к. в библиотеках глюков предостаточно, а когда нет сорцов, то глюки пофиксить невозможно. Я находил и исправлял не один глюк в контролах и библиотеках для C++ Builder.

deathsoft 28th January 2007 03:12

Quote:

Originally Posted by Vladimir Kladov
Я же говорю: до возникновения ошибки придется запускать прогу на несколько суток тогда.

Можно сделать гранулярность защиты памяти хоть 1 байт, но если программа портит чужую память которая разрешена на запись, то это никак не поможет. (Например 5 функций используют одну структуру в куче, и одна из функций записывает туда мусор). За правильность работы программы ответственнен ПРОГРАММИСТ и только. Железо - это только инструмент, в противном случае программисты были бы вообще не нужны, компьютеры бы сами писали и отлаживали программы (как в научно фантастических романах).

Lethargeek 28th January 2007 08:09

Quote:

Originally Posted by deathsoft
За правильность работы программы ответственнен ПРОГРАММИСТ и только

+1
Кстати тот же Форт весьма просто позволяет зверски переопределить все что можно настолько, что программисту станет "НЕдоступно все". :) Конечно тормоза возникают, но для тестовой версии самое то. Имхо нормальный контроль юзания аппаратных ресурсов гораздо важнее, чем защита памяти.

Vladimir Kladov 28th January 2007 08:42

К сожалению, бывают ситуации, когда использовать чужие библиотеки без исходного кода невозможно. Например: Jpeg, Jpeg2K, Mpeg, Tiff... То, что есть в открытом виде, жутко тормозно, а в случае Tiff'а так вообще половину форматов не понимает. Самое печальное, что не существует нормального описания алгоритма, из которого можно было бы сделать свой код, а тот, что уже есть в открытом виде, не дает понимания того, как это можно сделать по-другому и что-либо оптимизировать. Проще плюнуть и взять готовое в виде откомпилированных jbj-файлов, и ждать, когда все грохнется.

Кривые руки могут быть результатом простой опечатки. Проблема в том, что на х86 вы не сможете обнаружить 10% таких опечаток сразу, а в случае нормальной защиты - 0,1%. Если вы считаете, что труд программиста ничего не стоит, то можете оставаться при своем имхе. Но то, что он стоит намного дороже, чем железо, об этом известно давно. ПО сейчас золотое по сравнению с железом, как раз потому, что софта надо много, и разного, а железо - оно просто клонирует древних ящеров. Тот же арм. Простите меня, но это копия наших советских трехадресных машин: Наири, БЭСМ4. Хорош прогресс...

Vladimir Kladov 28th January 2007 13:34

420 MHz на CycloneII ?
 
Вот первые результаты. Это на 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 28th January 2007 13:52

Quote:

Originally Posted by Vladimir Kladov
Web Edition обламывает с выбором чипа, зараза

Могу дать ссылку на полный эдишен (правда там 700-800Мб придется с ftp скачивать) и лекарство в личку скинуть.

deathsoft 28th January 2007 13:55

Quote:

Originally Posted by Vladimir Kladov
наших советских трехадресных машин

Ну, трехадресность то тоже не у нас придумали (БЭСМ4 и НАИРИ - это просто отечественная реализация трехадресной машины), тот же MIX кнута - трехадресный.

deathsoft 28th January 2007 13:56

Quote:

Originally Posted by Vladimir Kladov
Jpeg, Jpeg2K

Это есть у интела (http://www.intel.com/cd/software/pro...ipp/302910.htm) с оптимизацией под самые последние процы.

В этуж библиотеку входят и mpg-2, mpeg-4, H.263, H.264 кодеры/декодеры.

deathsoft 28th January 2007 13:57

Quote:

Originally Posted by Vladimir Kladov
Самое печальное, что не существует нормального описания алгоритма,

Скорее всего существует, но этот стандарт просто платный, или патентованый и распространяется под NDA.

deathsoft 28th January 2007 14:09

Кстати тема то названа неверно - нет микросхемы cyclon 3, видимо имелось ввиду Stratix III (т.к. идет сравнение с Virtex 5, а это схемы одного уровня), а Cyclon соответсвует Spartan.

Vladimir Kladov 28th January 2007 17:00

Есть, есть. Уже анонсировано, указано время выхода в продажу (какой-то квартал 7 года), , цены ориентировочные (только я не понял насчет этих цен: как хочешь считай то ло 2000 баксов за 1000 штук, то ли при партии от 1000 штук 2 бакса за штуку).

Я когда давал линк на альтеровском фтп, то указывал вот этот файл: 61_quartus_windows.exe его мне и качнули. Я так решил, что Web-edition назывется 61_quartus_free.exe , тоже не маленький, 400 метров. А что такое 61_quartus_programmer.exe (50 метров) я вообще не понял. Заставка была вроде бы та же, но я продолжать не стал установку.

ZEK 28th January 2007 18:39

По 2000$ за штуку при партиях от 1000 штук
поштчно может и все 3000$

Vladimir Kladov 28th January 2007 18:48

Quote:

Originally Posted by heroy
По 2000$ за штуку при партиях от 1000 штук
поштчно может и все 3000$

Вот теперь окончательно понятно. Золотые прямо. Но я думаю, эти цены не навсегда. Вспомнить, сколько 1Гб флэшка стоила год назад (~1000 уе), и сколько сейчас стоит 4Гб (~100 уе). Наделают побольше, подешевеет поди. Я вообще целюсь влезть если не в циклон2, то хотя бы в стратикс. Они тоже дороговаты пока, правда. Но если ничего не делать, то и ничего не будет к тому моменту, как они подешевеют.

Так я вэб-эдишн качнул (в смысле не я а мне) или полную версию? Как узнать-то? :v2_crazy:

Vladimir Kladov 28th January 2007 18:53

Такс, я щас качнул какой-то док по System Verilog, стандарта 2001 мне не хватат. Кто-нить по-быстрому может сказать, как вот такое в цикл `for впихнуть (если это вообще можно):

Code:

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, да и ошибок боюсь добавится.

ZEK 28th January 2007 18:55

Полный Quarus в наборе имеет
Quartus
ModeSim
IP Cores
NIOS
и вроде че то еще

И весит что то около 1Гб

WEB окло 300 мег и почти ничего нету, но клизма подходит что к полному что к урезаному варианту.

ZEK 28th January 2007 19:03

Ну SystemVerilog это чуть из другой песни

А так что то в таком духе

Code:

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 28th January 2007 19: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 28th January 2007 19:41

Quote:

Originally Posted by Vladimir Kladov
А что такое 61_quartus_programmer.exe (50 метров) я вообще не понял.

Это не нужно, это отдельный программатор, чтобы без квартуса в микросхемы готовые прошивки заливать. Программатор входит внутрь квартуса.

deathsoft 28th January 2007 19:50

Quote:

Originally Posted by Vladimir Kladov
Кто-нить по-быстрому может сказать, как вот такое в цикл `for впихнуть (если это вообще можно)

Стандарта Verilog 2001 для циклов и условных конструкций достаточно, а вообще я бы советовал использовать VHDL (он похож на паскаль и ада, вам я думаю это привычнее будет) и поддерживает if/generate и for/generate с самой первой версии. Плюс к тому поддерживает типы данных, как обычный язык программирования, что позволяет при моделировании автомата видень состояние автомата в виде осмысленного текста (s_idle, s_rx и т.п.). Кроме того VHDL поддерживает 9ти значную логику, кроме состояний '0', '1' есть еще 'X', 'Z' и различные уровни нагрузки, от weak до strong (что необхдимо для выявления гонок при моделировании).

Верилог изначально предполагался совсем для других целей (это был внутренний язык для синтеза фирмы Cadence) и поддерживает всего 2 типа "провод" и "регистр", поэтому при симуляции видны только нули и единицы.


All times are GMT +4. The time now is 17:39.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.