Предлагаю вашему вниманию демонстрационный проект SoC
для плат Марсоход2 и Марсоход3 на базе микропроцессорного
ядра mips32r1 (см.
opencores.org/project,mips32r1
).
Стандартной шиной для сборки SoC из IP-блоков opencores.org
является шина Wishbone, однако упомянутое ядро mips32r1
не поддерживает эту шину. Поддержка этой шины была добавлена
за счёт присоединения внешних "переходников", что вводит
дополнительную задержку.
К доработанному таким образом ядру mips32r1 через сгененированный
коммутатор Wishbone подключены два IP-блока с opencores:
блок ПЗУ на 1 КБ с программой nmon и блок UART.
Конфигурационный файл для генератора коммутаторов Wishbone,
сам генератор и все его библиотечные модули прилагаются.
Тактовая частота процессорного ядра и шины Wishbone для этого
проекта --- 10 МГц. Значения Fmax и показатели использования
ресурсов ПЛИС приведены ниже.
После старта процессора начинается исполнение nmon.
nmon производит инициализацию UART на скорость 9600,
выводит справку по командам и ждёт команд от пользователя.
Так как SoC содержит слишком мало аппаратуры, то в текущем
состоянии кроме запуска nmon демонстрационный проект
ничего пока делать не может.
Дальнейшее совершенствование проекта вижу в добавлении
контроллера SDRAM и контроллера SPI для подключения внешней
периферии, избавлении от переходников для Wishbone.
Репозиторий с проектом:
github.com/open-design/mips32r1_soc_nano
Сгенерированные проекты для Quartus --- в ветке marsohod_generated_files (
github.com/open-design/mips32r1_soc_nano...ohod_generated_files
).
Прямые ссылки на готовые файлы с битовыми потоками:
github.com/open-design/mips32r1_soc_nano...-q13.1-marsohod2.sof
github.com/open-design/mips32r1_soc_nano...-q13.1-marsohod2.svf
github.com/open-design/mips32r1_soc_nano...-q15.0-marsohod3.sof
github.com/open-design/mips32r1_soc_nano...-q15.0-marsohod3.svf
Для подключения к UART используются пины CN2. Вот схема подключения:
CN2
1 -- O o -- 2
o X
o o
o o
o o -- 10 (IO[5]) fpga --> host
o o -- 12 (IO[7]) fpga <-- host
13 -- o o -- 14 (GND)
Вот фрагменты логов Quartus'а:
marsohod2
+---------------------------------------------------------------------------------+
; Flow Summary ;
+------------------------------------+--------------------------------------------+
; Quartus II 64-Bit Version ; 13.1.4 Build 182 03/12/2014 SJ Web Edition ;
; Family ; Cyclone III ;
; Device ; EP3C10E144C8 ;
; Total logic elements ; 8,964 / 10,320 ( 87 % ) ;
; Total combinational functions ; 8,027 / 10,320 ( 78 % ) ;
; Dedicated logic registers ; 2,464 / 10,320 ( 24 % ) ;
; Total registers ; 2464 ;
+------------------------------------+--------------------------------------------+
+---------------------------------------------------------------------------------+
; Slow 1200mV 85C Model Fmax Summary ;
+------------+-----------------+--------------------------------------------------+
; Fmax ; Restricted Fmax ; Clock Name ;
+------------+-----------------+--------------------------------------------------+
; 25.45 MHz ; 25.45 MHz ; pll|altpll_component|auto_generated|pll1|clk[0] ;
+------------+-----------------+--------------------------------------------------+
marsohod3
+---------------------------------------------------------------------------------+
; Flow Summary ;
+------------------------------------+--------------------------------------------+
; Quartus II 64-Bit Version ; 15.0.2 Build 153 07/15/2015 SJ Web Edition ;
; Family ; MAX 10 ;
; Device ; 10M50SAE144C8GES ;
; Total logic elements ; 8,404 / 49,760 ( 17 % ) ;
; Total combinational functions ; 8,037 / 49,760 ( 16 % ) ;
; Dedicated logic registers ; 2,464 / 49,760 ( 5 % ) ;
; Total registers ; 2464 ;
; Total memory bits ; 256 / 1,677,312 ( < 1 % ) ;
; Embedded Multiplier 9-bit elements ; 16 / 288 ( 6 % ) ;
+------------------------------------+--------------------------------------------+
+---------------------------------------------------------------------------------+
; Slow 1200mV 85C Model Fmax Summary ;
+-----------+-----------------+---------------------------------------------------+
; Fmax ; Restricted Fmax ; Clock Name ;
+-----------+-----------------+---------------------------------------------------+
; 29.45 MHz ; 29.45 MHz ; pll|altpll_component|auto_generated|pll1|clk[0] ;
+-----------+-----------------+---------------------------------------------------+