|
|
  |
Свои процессоры, Разработка своих процессоров со своей системой команд |
|
|
|
Oct 21 2009, 09:10
|
Участник

Группа: Свой
Сообщений: 58
Регистрация: 28-12-04
Из: Минск
Пользователь №: 1 713

|
Цитата(Aner @ Oct 16 2009, 12:58)  Тактовая, производительность в ~мипсах для математики, если подсчитывали. Если сравнить с имеющимися ARM_ами то вот к какому ближе (по архитектуре) и есть ли преимущество и в чем? По потреблению наверное проигрыш. Насколько хорош компилятор из форта получился? Дебагер тоже наверное медленный, не реалтайм. Несколько лет назад таких ARM не было, сейчас не знаю. Основное преимущество - переменная разрядность, требуеться 23 разряда - будет 23-х разрядный проц, знаковый бит не надо - убираем, лишнего в микросхеме никто не возмёт. Все операции(кроме деления, фильтра) выполняются за один такт, работает на 48 Мгц на XC3S400-4PQ208C при 20 разрядах ядра, больше просто не подавал. Форт хорош тем, что: 1. небольшой код программы(отсутствует поле адреса регистра); 2. при прерываниях не нужно сохранять ни одного регистра; 3. более высокий уровень письма, чем у ассемблера, поскольку компилятор самоделанный, писать можно в буквальном смысле на русском языке. Дебагер - отстой, не пользуюсь. Цитата(Aner @ Oct 16 2009, 12:58)  С описанием понимаю вас, такое часто бывает. Поскольку требует много времени. и не для кого его писать! Похвастался здесь и хорошо, платят совсем за другое.
|
|
|
|
|
Oct 23 2009, 04:57
|
Группа: Новичок
Сообщений: 1
Регистрация: 22-10-09
Пользователь №: 53 134

|
Цитата(Ynicky @ Mar 13 2009, 17:23)  А у меня уже есть свой процессор. 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
|
|
|
|
|
Oct 23 2009, 16:07
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(OverDrewk @ Oct 23 2009, 08:57)  Смотри инструкцию, под Windows может и не соберешь. Исходя из содержимого vasm.tar.gz по данному линку надо ставить Linux, ну или minGW(под Windows) и собирать проект. Инструкция http://sun.hasenbraten.de/vasm/index.php?view=compileПошел по пути наименьшего сопротивления. Переделал свой процессор на MIPS32, т.к. изначально делал его под эту архитектуру. Поставил SDE v6. И теперь не знаю проблем ни с С ни с ASM-ом. Единственное разочарование - не своя система команд. Николай.
|
|
|
|
|
Oct 23 2009, 19:27
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(Leka @ Oct 23 2009, 21:32)  Ну и каковы результаты синтеза? Пока не доделал блок MDU (multiply divide unit), поэтому результат синтеза без него. Николай.
|
|
|
|
|
Oct 23 2009, 20:39
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(Leka @ Oct 24 2009, 00:21)  ~2K LUT - немного по сравнению с LEON/OpenRISC/Cortex-M и тп. Так это только ядро. Без кэш программ и данных. Без FPU. Я в свое время синтезил leon2, точные цифры не помню, но сравнивал со своим процессором. Результаты были не в мою пользу. Но у меня было много мультимедийных инструкций. Николай. Цитата(Leka @ Oct 24 2009, 00:26)  Без внешней памяти получится запустить что-либо дельное, написанное на Си? Эту версию (MIPS32) еще не применял в серьезных разработках. Но предыдущий процессор используется в MP3 камкордере со встроенной памятью 128 кБ ПЗУ программ и 64кБ ОЗУ программ/данных (правда в ASIC-е на 0,18мкм). Николай.
|
|
|
|
|
Oct 23 2009, 20:47
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(Leka @ Oct 24 2009, 00:44)  Вот и спрашиваю, можно каким Си-компилятором создавать более-менее практичные приложения для системы с несколькими Кбайтами памяти(те без внешней памяти). Можно, например WEB камера (без звука, в системах безопасности) на основе камкордера занимает у меня 32 кБ кода, написанного на С. А FPGA - это промежуточная стадия перед ASIC-ом. Николай.
Сообщение отредактировал Ynicky - Oct 23 2009, 21:02
|
|
|
|
|
Dec 5 2009, 14:19
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 27-12-08
Из: Петербург
Пользователь №: 42 787

|
Кто-нибудь реализовал MMU? Поделитесь опытом. Не совсем понятно, как его реализовать таким образом, чтобы чтение и запись из памяти проходило за один такт (не хочется отходить от классической схемы 5-6 ступенчатого конвейера).
Сообщение отредактировал flipflop - Dec 5 2009, 14:20
|
|
|
|
|
Dec 6 2009, 09:41
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(flipflop @ Dec 5 2009, 17:19)  Кто-нибудь реализовал MMU? Поделитесь опытом. Не совсем понятно, как его реализовать таким образом, чтобы чтение и запись из памяти проходило за один такт (не хочется отходить от классической схемы 5-6 ступенчатого конвейера). А что значит за один такт? Если обращение происходит к внутренней памяти малого объема (например к встроенной в FPGA) или к кеш первого уровня (также малого объема) то это можно сделать и за один такт. Если Вам надо обратиться к дальней памяти или кеш второго уровня (например для заполнения кеш первого уровня), то в этом случае нужна остановка процессора (stall). А количество тактов в конвейере тут не причем. Николай.
|
|
|
|
|
Dec 6 2009, 10:27
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 27-12-08
Из: Петербург
Пользователь №: 42 787

|
Цитата(Ynicky @ Dec 6 2009, 12:41)  А что значит за один такт? Если обращение происходит к внутренней памяти малого объема (например к встроенной в FPGA) или к кеш первого уровня (также малого объема) то это можно сделать и за один такт. Если Вам надо обратиться к дальней памяти или кеш второго уровня (например для заполнения кеш первого уровня), то в этом случае нужна остановка процессора (stall). А количество тактов в конвейере тут не причем. Николай. Это понятно. Рассматриваем только кэш первого уровня: все равно, получается так, что выборка команды и доступ к памяти данных тянет за собой всю производительность. У меня 32-разрядный RISC (load/store) процессор, целевая микросхема Spartan-3AN (XC3S700AN-FG484): 1) Какую память использовать для кэша: блочную или распределенную? 2) Какой уровень ассоциативности/размер тэга оптимален? 3) Есть ли смысл (с точки зрения производительности) разбить выборку команды и доступ к памяти на 2 ступени? Выигрыш в частоте вполне реален, но конвейер становиться на 2 ступени длиннее, причем одна из них всегда работает в холостую.
Сообщение отредактировал flipflop - Dec 6 2009, 10:28
|
|
|
|
|
Dec 6 2009, 12:45
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(flipflop @ Dec 6 2009, 13:27)  3) Есть ли смысл (с точки зрения производительности) разбить выборку команды и доступ к памяти на 2 ступени? Выигрыш в частоте вполне реален, но конвейер становиться на 2 ступени длиннее, причем одна из них всегда работает в холостую. В моем последнем процессоре как раз это и используется. Команды ветвления при этом имеют два слота задержки, но я на это пошел, так как только используя слоты можно не потерять в производительности. Только приходится критичный код править в ассемблере, т.е. переставлять команды, т.к. компилятор не может это сделать сам. Еще я сделал флаг в командах ветвления для аннулирования слотов задержки. Это позволяет немного сократить код (не надо в пустые слоты добавлять nop). Но этим я пользуюсь редко. Так же и с данными. Если результат загрузки регистра не используется в следующих командах, то процессор не останавливается. Но при этом также, в большинстве случаев, требуется правка кода вручную. Что касается первых двух пунктов, то оптимальный результат может дать только перебор различных комбинаций. Николай.
|
|
|
|
|
Dec 6 2009, 12:54
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 27-12-08
Из: Петербург
Пользователь №: 42 787

|
Цитата(Ynicky @ Dec 6 2009, 15:45)  В моем последнем процессоре как раз это и используется. Команды ветвления при этом имеют два слота задержки, но я на это пошел, так как только используя слоты можно не потерять в производительности. Только приходится критичный код править в ассемблере, т.е. переставлять команды, т.к. компилятор не может это сделать сам. ... Что касается первых двух пунктов, то оптимальный результат может дать только перебор различных комбинаций. Николай. Ясно, значит я все правильно понимаю и проблемы вполне реальные . Если не секрет, какой частоты и на каком кристалле вам удалось добиться?
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|