weiqi7777

Max10试用之hello world

0
阅读(2748)

拿到板子有一段时间了,一直没有时间试用写心得。趁着周末,赶快来试用,并写写心得。

因为板子上没有什么外设,所以就先简单的构建nios2系统,并输出hello world。

用的软件是quartus14.1的web版本。。因为max10要quartus14版本才支持,而且quartus14版本要64位系统才能装的,这里大家要注意一下。

首先新建工程,这里就不多说了,比较简单。

clip_image002

建好工程后,就是这样的一个界面。。和以前版本的界面没有什么区别。

然后打开qsys,可以在tool菜单下打开,或者直接快捷面板上

clip_image004

就打开qsys了。

clip_image006

界面就这个样子了。

可以看到,默认有个时钟,因为一个嵌入式系统肯定是需要一个时钟的。

下面就是关键了,首先添加一个nios2软核IP。

clip_image007

选择上面那个

clip_image009

这个是配置界面,这里就把nios2类型选择为nios2/s型。其他都不更改,直接完成。

clip_image011

然后界面就这个样子了。。一个nios2的IP添加进来了,但是没有连线,连线一会在连。

下面的提示框有错误和警告,这些先都不用管,因为我们还没有构建好系统。

接着添加rom和ram,rom用来存储指令,ram用来存储数据。不过这里,是把一个比较大的ram来当rom和ram的。

clip_image012

选择上面这个。这个ram是芯片内部的block ram。大小可以从芯片手册看到。我之前看过是47K。

clip_image014

就进入到ram的配置界面了。

选择类型为RAM,因为我们是要这ram一部分当ram的。位宽选择32位,因为nios2是32位系统。大小选择10240byte,也就是10K。没有超出47K范围。其他都默认。

clip_image016

这下,我们的ram也添加进去了。

接着要添加system ID。

clip_image017

选择上面这个。

clip_image019

配置界面也很简单,就是填写systemID是多少,这里可以随便填写。

clip_image021

然后我们的systemID也添加进来了。

最后添加jtag-uart。这个可是很好的一个东西,相当于串口,可以随时打印信息。有了这个,我们才能实现hello world。

clip_image022

选择上面这个。

clip_image024

配置都不用管,直接默认。

clip_image026

这下,我们的系统所需要的IP就添加完成了。然后就开始连线了。。

连线也比较简单,图中不是有很多小圆点,黑色就表示连接,白色就表示不连接。那我们就只要去点对应的小圆点就行了。但是怎么点,因为不知道连线是怎么连的。

我们先对各个IP重命名下。

clip_image028

主要看三个东西,一个时钟,一个数据总线,一个指令总线。

时钟每个模块都是需要的。但是数据总线和指令总线就不一定了。有的只是要传输数据,有的只传输指令,有的两个都传输。

这里有个规则,如果是存储类模块,那么两个都连,其他都只连数据总线。

所以这下,就好连线了。

首先连时钟

clip_image030

因为大家都共用一个时钟,所以时钟都是连在一起的。

然后连数据总线。

clip_image032

把CPU的数据总线输出和其他模块的数据总线输入连在一起。

最后连指令总线
clip_image034

因为这里只有一个存储器设备,所以就将CPU的指令总线输出和ram的指令总线输入连在一起就行了。

这样,就大致构建好了系统。

修改一下时钟,因为我们的系统是跑在50M时钟上的,所以需要修改时钟频率为50M.

clip_image036

接着分配地址,因为现在模块的地址都是一样的,这当然是不行的,需要为他们分配唯一的地址,这样CPU才能唯一的访问到外设。

clip_image037

软件就自动的为我们分配好了地址。

然后分配中断,因为这里有有一个jtag-uart的中断。要为他分配一个中断号。

clip_image039

就在jtag-uart的irq后面的那个白色点那里点一些,分配一个中断号。

最后,在设置下CPU的复位地址和异常地址。

clip_image041

都选择ram。

最后,连接复位信号。因为整个系统都共用一个复位信号,所以,让软件自动连。

clip_image042

这下,我们的系统就构建好了

clip_image044

可以看到,错误没有了。最后保存下。

clip_image046

然后生成。

clip_image048

点击finish,点对话框中的yes。

clip_image050选择generate。

clip_image051

完成点击finish。

这样,我们的nios2系统就构建好了。

在ruartus中新建一个原理图。

然后分配管脚,全编译。。。

编译的时候,会出错。。。这个时候,要改一些东西。。。

打开之前建立的qsys,

打开ram的配置界面。

clip_image053

把初始化的第一个勾去掉。

然后在quartus中,

clip_image055

在device的device and options 中的configuration中。

把configuration改为图上的那个。

这个时候就可以编译了。

编译生成的sof文件下到板子中。

然后开始软件设计了

clip_image057

选择nios2 SBT。

把目录指到目前工程目录

clip_image059

clip_image061

新建一个bsp工程。

clip_image063

选择目录下的.sopcinfo,这个文件包含了硬件的一些信息。

工程名字填写hello_world。模板选择hello world。。工程的名字不能有中文和空格。

最后finish。

编译工程。

clip_image065

编译完成后

clip_image067

然后就可以运行了。

clip_image069

等一会,就可以从nios2 控制台收到hello world了。。

clip_image071

注意:

1、 ram的大小不能太大,不能超过芯片的ram的大小。

2、 ram配置的时候,要把初始化的选项勾给去掉,不然编译会出错

3、 编译之前需要更改device里面的cinfiguration里面的设置。不然编译会报错

4、 因为用的是nios2,web版对这个IP是限制的,生成的sof文件是有时间限制的,下载的时候,会弹出一个框,这个框不能取消掉。

clip_image073

5、 在nois2 SBT中,生成的代码比较大,编译会出现报错,这个时候更改一些设置。

clip_image075

clip_image077

把enable_small_c_library和enable_reduced_device_drivers选上。在编译。