Jump to content

    

Свои процессоры

Тактовая, производительность в ~мипсах для математики, если подсчитывали.

Если сравнить с имеющимися ARM_ами то вот к какому ближе (по архитектуре) и есть ли преимущество и в чем?

По потреблению наверное проигрыш. Насколько хорош компилятор из форта получился?

Дебагер тоже наверное медленный, не реалтайм.

Несколько лет назад таких ARM не было, сейчас не знаю. Основное преимущество - переменная разрядность, требуеться 23 разряда - будет 23-х разрядный проц, знаковый бит не надо - убираем, лишнего в микросхеме никто не возмёт.

Все операции(кроме деления, фильтра) выполняются за один такт, работает на 48 Мгц на XC3S400-4PQ208C при 20 разрядах ядра, больше просто не подавал.

Форт хорош тем, что: 1. небольшой код программы(отсутствует поле адреса регистра); 2. при прерываниях не нужно сохранять ни одного регистра; 3. более высокий уровень письма, чем у ассемблера, поскольку компилятор самоделанный, писать можно в буквальном смысле на русском языке.

Дебагер - отстой, не пользуюсь.

С описанием понимаю вас, такое часто бывает. Поскольку требует много времени.

и не для кого его писать! Похвастался здесь и хорошо, платят совсем за другое.

Share this post


Link to post
Share on other sites
А у меня уже есть свой процессор. LCC осилил, а вот с ассемблером напряг.

По образованию я не программист, но приходится писать программы для отладки

железа. Нашел вот такой проект:

http://sun.hasenbraten.de/vasm/index.php?view=source

Но из исходников собрать .exe не могу. Может кто поможет.

Поставил "Visual Studio 2008". Но с ней тоже надо разбираться.

У меня "Windows XP SP3".

 

Николай.

 

Смотри инструкцию, под Windows может и не соберешь. Исходя из содержимого vasm.tar.gz по данному линку надо ставить Linux, ну или minGW(под Windows) и собирать проект. Инструкция http://sun.hasenbraten.de/vasm/index.php?view=compile

Share this post


Link to post
Share on other sites
Смотри инструкцию, под Windows может и не соберешь. Исходя из содержимого vasm.tar.gz по данному линку надо ставить Linux, ну или minGW(под Windows) и собирать проект. Инструкция http://sun.hasenbraten.de/vasm/index.php?view=compile

 

Пошел по пути наименьшего сопротивления. Переделал свой процессор на MIPS32,

т.к. изначально делал его под эту архитектуру.

Поставил SDE v6. И теперь не знаю проблем ни с С ни с ASM-ом.

Единственное разочарование - не своя система команд.

 

Николай.

Share this post


Link to post
Share on other sites
Переделал свой процессор на MIPS32, т.к. изначально делал его под эту архитектуру.

Ну и каковы результаты синтеза?

Share this post


Link to post
Share on other sites
Ну и каковы результаты синтеза?

 

Пока не доделал блок MDU (multiply divide unit), поэтому результат синтеза без него.

 

Николай.

r32core_virtex5.rar

Share this post


Link to post
Share on other sites

~2K LUT - немного по сравнению с LEON/OpenRISC/Cortex-M и тп.

 

Без внешней памяти получится запустить что-либо дельное, написанное на Си?

Edited by Leka

Share this post


Link to post
Share on other sites
~2K LUT - немного по сравнению с LEON/OpenRISC/Cortex-M и тп.

 

Так это только ядро. Без кэш программ и данных. Без FPU.

Я в свое время синтезил leon2, точные цифры не помню, но сравнивал со своим процессором.

Результаты были не в мою пользу. Но у меня было много мультимедийных инструкций.

 

Николай.

 

 

Без внешней памяти получится запустить что-либо дельное, написанное на Си?

 

Эту версию (MIPS32) еще не применял в серьезных разработках.

Но предыдущий процессор используется в MP3 камкордере со встроенной памятью

128 кБ ПЗУ программ и 64кБ ОЗУ программ/данных (правда в ASIC-е на 0,18мкм).

 

Николай.

Share this post


Link to post
Share on other sites
Так это только ядро. Без кэш программ и данных.

Вот и спрашиваю, можно каким Си-компилятором создавать более-менее практичные приложения для системы с несколькими Кбайтами памяти(те без внешней памяти).

 

Для FPGA, не для ASIC.

Share this post


Link to post
Share on other sites
Вот и спрашиваю, можно каким Си-компилятором создавать более-менее практичные приложения для системы с несколькими Кбайтами памяти(те без внешней памяти).

 

Можно, например WEB камера (без звука, в системах безопасности) на основе камкордера занимает у меня 32 кБ кода, написанного на С.

 

А FPGA - это промежуточная стадия перед ASIC-ом.

 

Николай.

Edited by Ynicky

Share this post


Link to post
Share on other sites
А FPGA - это промежуточная стадия перед ASIC-ом.

Значит все-таки для ASIC. Для FPGA и 8КБ памяти м/б максимумом (для кода+данные).

Share this post


Link to post
Share on other sites

Кто-нибудь реализовал MMU? Поделитесь опытом.

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

Edited by flipflop

Share this post


Link to post
Share on other sites
Кто-нибудь реализовал MMU? Поделитесь опытом.

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

А что значит за один такт?

Если обращение происходит к внутренней памяти малого объема (например к встроенной в FPGA)

или к кеш первого уровня (также малого объема) то это можно сделать и за один такт.

Если Вам надо обратиться к дальней памяти или кеш второго уровня (например для заполнения кеш первого уровня),

то в этом случае нужна остановка процессора (stall). А количество тактов в конвейере тут не причем.

 

Николай.

Share this post


Link to post
Share on other sites
А что значит за один такт?

Если обращение происходит к внутренней памяти малого объема (например к встроенной в FPGA)

или к кеш первого уровня (также малого объема) то это можно сделать и за один такт.

Если Вам надо обратиться к дальней памяти или кеш второго уровня (например для заполнения кеш первого уровня),

то в этом случае нужна остановка процессора (stall). А количество тактов в конвейере тут не причем.

Николай.

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

У меня 32-разрядный RISC (load/store) процессор, целевая микросхема Spartan-3AN (XC3S700AN-FG484):

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

2) Какой уровень ассоциативности/размер тэга оптимален?

3) Есть ли смысл (с точки зрения производительности) разбить выборку команды и доступ к памяти на 2 ступени? Выигрыш в частоте вполне реален, но конвейер становиться на 2 ступени длиннее, причем одна из них всегда работает в холостую.

Edited by flipflop

Share this post


Link to post
Share on other sites
3) Есть ли смысл (с точки зрения производительности) разбить выборку команды и доступ к памяти на 2 ступени? Выигрыш в частоте вполне реален, но конвейер становиться на 2 ступени длиннее, причем одна из них всегда работает в холостую.

В моем последнем процессоре как раз это и используется.

Команды ветвления при этом имеют два слота задержки, но я на это пошел,

так как только используя слоты можно не потерять в производительности.

Только приходится критичный код править в ассемблере, т.е. переставлять команды,

т.к. компилятор не может это сделать сам.

Еще я сделал флаг в командах ветвления для аннулирования слотов задержки.

Это позволяет немного сократить код (не надо в пустые слоты добавлять nop).

Но этим я пользуюсь редко.

Так же и с данными. Если результат загрузки регистра не используется в следующих

командах, то процессор не останавливается.

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

 

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

 

Николай.

Share this post


Link to post
Share on other sites
В моем последнем процессоре как раз это и используется.

Команды ветвления при этом имеют два слота задержки, но я на это пошел,

так как только используя слоты можно не потерять в производительности.

Только приходится критичный код править в ассемблере, т.е. переставлять команды,

т.к. компилятор не может это сделать сам.

...

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

Николай.

Ясно, значит я все правильно понимаю и проблемы вполне реальные .

 

Если не секрет, какой частоты и на каком кристалле вам удалось добиться?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this