Обсуждение существующих процессорных ядер (opensource)

Архитектура СнК, разработка RISC-ядра, функциональная верификация, разработка инструментальных средств, прототипирование и отладка на FPGA

Модератор: Интегральный вычислитель

Обсуждение существующих процессорных ядер (opensource)

Сообщение Интегральный вычислитель » 10 фев 2010, 23:58

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

На данный момент мы с invaisor'ом посмотрели два ядра с opencores: ucore (http://www.opencores.org/project,ucore) и plasma (http://www.opencores.org/project,plasma) (оба MIPS32).

В случае с Плазмой достигнут epic success: удалось запустить plasm'у на spartan 3an starter kit. Если у кому-то удастся запустить на стендах какие-либо другие процессоры (за исключением microblaze и picoblaze), просьба отписываться в этой теме.

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

Если crusader доделает кэш раньше появления процессорного ядра от Михи, можно будет прикрутить кэш к плазме. Интерфейс ядра следующий (оно написано на vhdl):
Код: Выделить всё
entity mlite_cpu is
   generic(memory_type     : string  := "XILINX_16X"; --ALTERA_LPM, or DUAL_PORT_
           mult_type       : string  := "DEFAULT"; --AREA_OPTIMIZED
           shifter_type    : string  := "DEFAULT"; --AREA_OPTIMIZED
           alu_type        : string  := "DEFAULT"; --AREA_OPTIMIZED
           pipeline_stages : natural := 2); --2 or 3
   port(clk          : in std_logic;
        reset_in     : in std_logic;
        intr_in      : in std_logic;

        address_next : out std_logic_vector(31 downto 2); --for synch ram
        byte_we_next : out std_logic_vector(3 downto 0);

        address      : out std_logic_vector(31 downto 2);
        byte_we      : out std_logic_vector(3 downto 0);
        data_w       : out std_logic_vector(31 downto 0);
        data_r       : in std_logic_vector(31 downto 0);
        mem_pause    : in std_logic);
end; --entity mlite_cpu 


Если сигнал mem_pause сигнализирует об обработке кэш-промаха, тогда интерфейс к нашей кэш подсистеме можно будет подогнать практически без изменений.

В ближайшее время я напишу в этой теме подробный отчет по Плазме (начиная от компиляции программ, заканчивая прошивкой spartan3an)
I Have Seen The Truth And It Doesn't Make Any Sense
Аватара пользователя
Интегральный вычислитель
 
Сообщения: 561
Зарегистрирован: 02 апр 2008, 16:04
Откуда: из Леса

Re: Обсуждение существующих процессорных ядер (opensource)

Сообщение Интегральный вычислитель » 12 фев 2010, 14:05

В документации к plasma описано как с ней работать, однако я позволю себе повторить отдельные пункты:

Часть 1. Компиляция программ и симуляция
1) Качаем gcc: CodeSourcery mips-sde-elf: http://www.codesourcery.com/sgpp/lite/m ... plate=lite , ставим, прописываем в PATH
2) Качаем Плазму: http://www.opencores.org/project,plasma,downloads
3) В дистрибутиве с Плазмой три папки:
  • VHDL - исходный RTL код
  • TOOLS - Утилиты для генерации образа памяти, примеры программ, хидер с картой памяти
  • Kernel - ОСРВ
Нам понадобятся первые две.
4) Заходит в папку Tools. Там лежит makefile, из которого можно понять что и как собирать.
Сначала собираем convert_bin, mlite, tracehex, bintohex и ram_image
Каждая программа собирается из одного С-шного исходника:
Код: Выделить всё
gcc -o convert_bin convert.c
gcc -o mlite mlite.c
gcc -o tracehex tracehex.c
gcc -o bintohex  bintohex.c
gcc -o ram_image  ram_image.c

5) mlite - симулятор системы команд, можно протестировать работоспособность программ в нём:
Собираем программу count для mips:
Код: Выделить всё
   mips-sde-elf-as -o boot.o boot.asm

   mips-sde-elf-gcc -O2 -Wall -c -s   count.c

   mips-sde-elf-gcc -O2 -Wall -c -s  no_os.c

   mips-sde-elf-ld -Ttext 0 -eentry -Map test.map -s -N -o test.axf boot.o count.o no_os.o

   mips-sde-elf-objdump --disassemble test.axf > test.lst

   ./convert_bin


Запускаем программу в симуляторе системы команд:
Код: Выделить всё
./mlite test.bin


Для запуска нажимаем '5'
Должно быть выведено примерно следующее:
Код: Выделить всё
0000000003: three
0000000009: nine
0000000027: twenty seven
0000000081: eighty one
0000000243: two hundred forty three
0000000729: seven hundred twenty nine
0000002187: two thousand one hundred eighty seven
0000006561: six thousand five hundred sixty one
0000019683: nineteen thousand six hundred eighty three
0000059049: fifty nine thousand forty nine
0000177147: one hundred seventy seven thousand one hundred forty seven
0000531441: five hundred thirty one thousand four hundred forty one


Далее запустим эту же программу в Modelsim'е

6) Копируем code.txt из папки tools в папку vhdl
7) В Xilinx ISE нужно скомпилировать библиотеки для Modelsim'a и импортировать их в Modelsim. Если у вас Modelsim Xilinx Edition, то все должно работать из коробки.
8 ) Запускаем modelsim, создаем новый проект в папке vhdl. Добавляем все vhdl файлы кроме plasma_3e, plasma_if и ram_xilinx: они нужны только для синтеза.
9) Устанавливаем compile order: (compile -> compile order) так, чтобы mlite_pack.vhd собирался первым, а tbench.vhd последним.
10) Компилируем, запускаем tbench. Запускаем симуляцию: tbench загружает инициализирует память из code.txt
11) После завершения симуляции в output.txt должно быть:
Код: Выделить всё
0000000003: three
0000000009: nine
...
I Have Seen The Truth And It Doesn't Make Any Sense
Аватара пользователя
Интегральный вычислитель
 
Сообщения: 561
Зарегистрирован: 02 апр 2008, 16:04
Откуда: из Леса


Вернуться в ANCILE: создание системы на кристалле

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron