基于FPGA软核,定制你的SoC

打造自己的cpu,自己的system on chip!
本文以step by step的方式guide you来定制你自己的nios-ii软核soc,并创建c语言的流水灯测试程序,运行在自己做的cpu系统上。
软件:
quartus ii 12.0, nios ii 12.0 software build tools for eclipse. (在安装quartus ii时,所需软件 一起安装。)
硬件:
fpga跑起linux, ucos-ii等rtos,是可行的,据相关人士的测试数据该软核在fpga上性能介入arm7-arm9.
一,详细步骤定制
1, 打开quartus ii 并且新建一个空的工程。
file -> new project wizard
click the next button.
click next.
选择与开发板对应的fpga芯片。click next
click next.
最后finish. 如下图:
2, 使用sop builder 工具来生成自己的软核
tools->sop builder
click ok, if qsys 提示.
从左边panel的tree 里选择nios processor
双击processors->nios processor
resetvector是复位后启动时的memory类型和偏移量exceptionvector是异常情况时的memory类型和偏移量。现在还不能配置,需要ram设置好以后才能修改这里.
一路点击next,最后finish.
接下面我们要添加片内ram选择左边目录树下的
memoriesandmemorycontrollers->on-chip->on-chipmemory(ramorrom)
本例中我只使用1024bytes.
接下来建立一个systemid
systemid就是一种标示符,类似校验和的这么个东西,在你下载程序之前或者重启之后,都会对它进行检验,以防止错误发生。
在左边窗口的peripherals->
debugandperformance->systemidperipheral双击systemidperipheral
接下来创建jtaguart
首先jtaguart是实现pc和niosii系统间的串行通信接口,它用于字符的输入
输出,在niosii的开发调试过程中扮演了重要的角色,接下来我们开始建立它的模块。选择sopcbuilder主窗口左边interfaceprotocols->serial->jtaguart
接下来要添加一个pio模块(paralleli/o)
其中width表示要建立的pio宽度是多少,我们的板上有8个led,选择宽度为8,direction复选框中表示要建立的pio的方向,分别表示bidirectional(tristate)ports(双向三态口)inputportsonly(仅仅作为输入口)bothinputandoutputports(作为输入和输出口)outputportsonly(仅仅作为输出口)
在本实验中,将要实现的是点亮led,所以这个新建的pio采用outputportsonly(仅输出口)方式
查看配置的结果:
重命名系统 内组件。
双击cpu并设置内存
点击 finish.
执行system菜单上的auto-assignbaseaddresses自动分配一下地址。
开始编译,经过耐心等待后,程序编好了,查看下最后的输出如下:
最后一行显示info:systemgenerationwassuccessful,产生成功。
点击exit退出,会回到quartusii主界面。
新建一个block diagram/schematic file
在丁板上双击左键:
点击,放在丁板上,
放好后,在nios软核kernel上点击右键后点击generatepinsforsymbolports
双击out_port_from_the_pio_led[7..0]拉出来的端口符号,重命令
分配引脚有多种方法,常用的为tcl脚本分配,建立一个文件,取名为nios2.tcl,文件内容如下:
set_global_assignment -name reserve_all_unused_pins as input tri-stated
set_location_assignment pin_16 -to clk_0
set_location_assignment pin_17 -to reset_n
set_location_assignment pin_10 -to led[0]
set_location_assignment pin_11 -to led[1]
set_location_assignment pin_26 -to led[2]
set_location_assignment pin_35 -to led[3]
set_location_assignment pin_27 -to led[4]
set_location_assignment pin_28 -to led[5]
set_location_assignment pin_33 -to led[6]
set_location_assignment pin_34 -to led[7]
保存到工程目录下。
菜单上tools->tclscripts 运行刚刚的脚本。
右击选device
saveall,
会提示你nios2.bdf保存到哪里?直接点确认,我们此例中就保存在示例目录下
3, 执行菜单processing->startcompilation,开始进行编译
编译完成,下载固件程序到epcs1或使用jtag下载到ram.
二,生成c语言的程序并调试运行
1, 以管理员方式运行niosii 12.0 software build tools for eclipse
新建 一个测试程序:
点击finish.
替换demo程序的源码如下:
#includestdio.h
#includeunistd.h
#includesystem.h
#define_led 1
typedefstruct
{
unsignedlongintdata;
unsignedlongintdirection;
unsignedlongintinterrupt_mask;
unsignedlongintedge_capture;
}pio_str;
#ifdef_led
#defineled ((pio_str*)pio_led_base)
#endif
intmain()
{
inti;
while(1)
{
for(i=0;idata = 1<

特斯拉新型的混合电池打造出配置增程器的纯电动汽车
STA-0.静态时序分析概述
如何使用BerryBoot双启动树莓派
QFP接地虚焊步骤简析
目前A00级电动车的竞争正在加剧
基于FPGA软核,定制你的SoC
超细晶和纳米多孔材料的高效热电制冷性能
USB设备如果插满了会影响到电脑性能吗
5V直流电源浪涌保护方案
STWBC -MC无线充电发射器使参考设计具有高度可塑性
鸿蒙os开辟国产操作系统新道路 有望打破国外技术垄断
芯旺微电子:KungFu内核国产车规级32位MCU的突破与创新
无人驾驶吸引力惊人 华为或正闭门造车
什么是智能制造技术_机器人与智能制造技术_智能制造机器像人一样工作
安富利将收购Softweb Solutions并将人工智能扩展到其生态圈
5G手机开售,4G手机距离淘汰还要多久,中国移动通讯专家给出答案
R8100便携式无线电综测仪的产品特点及适用范围
4家LED封装模组厂商发布上半年“成绩单”
WIFI无线信号满格却不能上网的原因是什么
IDC发布2019年一季度全球可穿戴市场报告 小米凭借着10.7%的市场份额成功拿下全球第一