DE1-SOC开发板上搭建NIOS II处理器运行UCOS II

 

今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过程失败。因此特地记录下来,以防日后忘记。

 

第一步:建立Quartus II工程

    建立Quartus II工程时需要注意以下几点

  1. 器件选择为EP5CSEMA5F31C6N;
  2. 工程路径中不得出现非法字符(空格和中文字符);
  3. 开发工具选择Quartus II 13.1及以上,这里我选择的版本为Quartus II 14.1。
  4. 由于我们最终的软件工程也是建立在Quartus II工程目录下的,而软件工程有一个最让人崩溃的地方就是,软件工程在建立时,很多包含文件是以据对路径存在的,如果你更改了工程路径,那么当你再次编译工程时,就会报错。所以这里我在建立工程时,直接在E盘根目录下建立了一个mysystem的文件夹,并将工程建立在此文件夹中。这样可以避免路径太深,以后切换电脑时,只需要将工程直接拷贝到新的电脑的E盘下即可。只要QII软件安装位置相同,再次编译软件工程就不会报错。

     

第二步:打开Qsys工具

在Quartus II软件中,依次点击 tools/Qsys,以打开Qsys工具。

 

第三步:在Qsys系统中添加NIOS II处理器

    在左侧的IP Catalog的搜索框中,输入nios,在搜索结果中,选择并添加NIOS II(Classic)Processor到右侧的System Contents中来。添加时,选择NIOS II/f型CPU。添加完成后,在System Contents中修改其名字为mycpu。

 

第四步:在Qsys中添加UCOS系统所需定时器

    在左侧的IP Catalog的搜索框中,输入timer,在搜索结果中,选择并添加Interval timer到右侧的System Contents中来。添加时,将timeout period 设定为10ms。添加完成后,修改其名字为ucosii_timer。

 

第五步:在Qsys中添加SDRAM

    在左侧的IP Catalog的搜索框中,输入sdram,在搜索结果中,选中并双击SDRAM Control,在打开的参数配置选项卡中,按照如下图所示的配置进行设置:

添加完成后,修改其名字为sdram。

 

第六步:在Qsys系统中添加JTAG_UART

    在左侧的IP Catalog的搜索框中,输入uart,在搜索结果中,选择并添加JTAG UART到右侧的System Contents中来。添加时,所有参数默认即可。添加完成后,修改其名字为JTAG_ UART_0。

 

第七步:在Qsys系统中添加sysid

    在左侧的IP Catalog的搜索框中,输入sys,在搜索结果中,选择并添加System ID Peripheral到右侧的System Contents中来。添加时,设定32bit system id为自定义值,我这里设定为0x00000002。添加完成后,修改其名字为sysid0。

 

第八步:连线和导出端口

自此,所有的外设添加就已经完成了,接下来,需要将每个模块的端口连接到对应的总线上,这里不一一介绍,详情请参看下图:

其中,clk_100M模块的clk_in和clk_reset,以及sdram模块的wire需要export。

将ucosii_timer和jtag_uart_0的irq连接到mycpu的d_irq上,在右侧的IRQ一栏中,ucosii_timer的中断号设置为0、jtag_uart_0的中断号设置为1。

 

第九步:设定sdram基地址

在Base一栏中,将sdram模块的起始地址设置为0,然后点击地址前面很小的那个锁的符号,使其变为锁定状态。

 

第十步:自动分配所有模块地址

    在Qsys系统中,依次点击菜单栏中的sysytem/Assign Base Address,系统即可自动为我们分配各个模块的基地址。由于sdram的基地址本身处于锁定状态,所以在此过程中,可能其他模块的基地址会因为自动修改而发生变化,但是sdram的基地址将保持不变。

 

第十一步:设定CPU的复位向量地址和异常向量地址

    双击mycpu模块,在打开的参数设置中,将Reset Vector和Exception Vector都选择为sdram.s1。

 

以上,我们就完成了完整Qsys系统的搭建,接下来,我们就可以生成Qsys系统的RTL代码了。

 

第十二步:保存设计

    点击file/save,将我们的系统保存,我这里命名为"cpu"。

 

第十三步:生成Qsys系统的HDL代码

    在Qsys系统中,依次点击Generate/Generate HDL,在弹出的窗口中,点击Generate来完成HDL代码的生成。此过程根据电脑配置的不同,大约需要3到5分钟。

 

第十四步:在Quartus II系统中添加并例化QSYS系统

    在Qsys系统中,依次点击Generate/HDL Example,在打开的界面中,将HDL Example中的代码选中并复制,如下图中红线圈起来的内容:

回到Quartus II工程中,新建一个Verilog HDL文件,将刚刚复制的内容粘贴进去,将文件保存,命名为mysystem。

 

第十五步:添加锁相环

    在Quartus II软件中,依次点击tools/IP Catalog,在右侧弹出的窗口中,在搜索栏输入pll,然后双击打开搜索结果中的Altera PLL,在打开的窗口中,选择Verilog格式,并保存名为sys_pll。然后点击OK。等待大于10秒钟左右,会弹出PLL的配置窗口,在配置窗口中,按下图所示的内容进行配置:

 

第十六步:添加Qsys系统到Quartus II工程中

    第十四步中,只是完成了Qsys系统的例化,实际并没有将Qsys系统添加到Quartus II工程中来。这里,我们双击Quartus II软件中Project Navigator窗口中Files选项卡中的Files

在弹出的窗口中,找到E:\mysystem\cpu\synthesis路径下的cpu.qip文件,加入到工程中。

 

第十七步:完善mysystem.v模块

    将mysystem.v中的内容完善如下:

module mysystem(refclk,rst_n,sdram_addr,sdram_ba,sdram_cas_n,sdram_cke,

sdram_cs_n,sdram_dq,sdram_dqm,sdram_ras_n,sdram_we_n,sdram_clk);

 

input refclk;

input rst_n;

 

output
[12:0]sdram_addr;

output
[1:0]sdram_ba;

output sdram_cas_n;

output sdram_cke;

output sdram_cs_n;

inout
[15:0]sdram_dq;

output
[1:0]sdram_dqm;

output sdram_ras_n;

output sdram_we_n;

output sdram_clk;

 

wire cpu_clk;

wire sdram_clk;

wire cpu_reset_n;

wire pll_locked;

assign cpu_reset_n = pll_locked;

 

cpu u0 (

.clk_clk (cpu_clk),
// clk.clk

.reset_reset_n (cpu_reset_n),
// reset.reset_n

.sdram_addr (sdram_addr),
// sdram.addr

.sdram_ba (sdram_ba),
// .ba

.sdram_cas_n (sdram_cas_n),
// .cas_n

.sdram_cke (sdram_cke),
// .cke

.sdram_cs_n (sdram_cs_n),
// .cs_n

.sdram_dq (sdram_dq),
// .dq

.sdram_dqm (sdram_dqm),
// .dqm

.sdram_ras_n (sdram_ras_n),
// .ras_n

.sdram_we_n (sdram_we_n)
// .we_n

);

 

sys_pll_0002 sys_pll_inst (

.refclk (refclk),
// refclk.clk

.rst (~rst_n),
// reset.reset

.outclk_0 (cpu_clk),
// outclk0.clk

.outclk_1 (sdram_clk),
// outclk1.clk

.locked (pll_locked)
// locked.export

);

 

endmodule

 

第十八步:分析和综合;

第二十步:分配引脚

    引脚分配如下表所示:

    

refclk

Input

PIN_AF14

rst_n

Input

PIN_AA14

sdram_addr[12]

Output

PIN_AJ14

sdram_addr[11]

Output

PIN_AH13

sdram_addr[10]

Output

PIN_AG12

sdram_addr[9]

Output

PIN_AG13

sdram_addr[8]

Output

PIN_AH15

sdram_addr[7]

Output

PIN_AF15

sdram_addr[6]

Output

PIN_AD14

sdram_addr[5]

Output

PIN_AC14

sdram_addr[4]

Output

PIN_AB15

sdram_addr[3]

Output

PIN_AE14

sdram_addr[2]

Output

PIN_AG15

sdram_addr[1]

Output

PIN_AH14

sdram_addr[0]

Output

PIN_AK14

sdram_ba[1]

Output

PIN_AJ12

sdram_ba[0]

Output

PIN_AF13

sdram_cas_n

Output

PIN_AF11

sdram_cke

Output

PIN_AK13

sdram_clk

Output

PIN_AH12

sdram_cs_n

Output

PIN_AG11

sdram_dq[15]

Bidir

PIN_AJ5

sdram_dq[14]

Bidir

PIN_AJ6

sdram_dq[13]

Bidir

PIN_AH7

sdram_dq[12]

Bidir

PIN_AH8

sdram_dq[11]

Bidir

PIN_AH9

sdram_dq[10]

Bidir

PIN_AJ9

sdram_dq[9]

Bidir

PIN_AJ10

sdram_dq[8]

Bidir

PIN_AH10

sdram_dq[7]

Bidir

PIN_AJ11

sdram_dq[6]

Bidir

PIN_AK11

sdram_dq[5]

Bidir

PIN_AG10

sdram_dq[4]

Bidir

PIN_AK9

sdram_dq[3]

Bidir

PIN_AK8

sdram_dq[2]

Bidir

PIN_AK7

sdram_dq[1]

Bidir

PIN_AJ7

sdram_dq[0]

Bidir

PIN_AK6

sdram_dqm[1]

Output

PIN_AK12

sdram_dqm[0]

Output

PIN_AB13

sdram_ras_n

Output

PIN_AE13

sdram_we_n

Output

PIN_AA13

 

第二十一步:全编译

    此过程大约需要6到10分钟左右

 

第二十二步:配置

    将生成的SOF文件配置到DE1-SOC开发板中。

 

第二十三步:打开NIOS II EDS软件

    在Quartus II软件中,依次点击tools/NIOS II software Buil tools for Eclipse,在打开的Workspace Launcher中,设定Workspace为E:\mysystem,然后点击OK。

 

第二十四步:建立UC/OS II模版工程

    在打开的开发环境中,点击File/New/Nios II Application and BSP from Template。

在打开的窗口中,按下图所示的内容进行选择:

然后系统便能为我们自动生成完整的系统,生成后的界面如下所示:

此时,我们按下键盘上的组合键"ctrl + B",就能够对软件工程全编译。

编译完成后,点击Run/Run Configurations,在打开的窗口中,

双击Nios II Hardware,在弹出的界面中,选择Project Name为myucosii(注:图中我的工程名为myucos,只是工程名字不同而已,无其他影响)。

选择完成后,切换到Target_Connection选项卡中,如下图:

若1处和2处无内容,则点击3处的Refresh Connections,直到1和2中出现我们的Cable和Device为止。选中4处的两个选项。然后点击5处的apply,最后点击6处的Run,则系统将启动软件烧写过程,并在烧写完成后启动FPGA中的Nios II处理器。此时,我们在Eclipse的Nios II Console窗口中便能看到Nios II处理器通过串口发送到PC上的内容,如下图所示:

自此,整个在DE1-SOC上搭建NIOS II处理器并运行UC/OS-II系统告一段落。

关于这个模版例程中相关代码的解释,我也是跟着特权的大神的博客才看懂的。这里,也再次向大众偶像特权同学致敬。具体软件代码的分析,大家可以看特权博客中的内容,当然,相信很多做软件大神也能分析的更加透彻。

    参考内容:http://www.eefocus.com/ilove314/blog/12-08/284486_7e6a4.html

 

小梅哥

2015年4月21日于北京至芯科技

DE1-SOC开发板上搭建NIOS II处理器运行UCOS II的更多相关文章

  1. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  2. FS210开发板上Qt4.7.0移植过程

    作者:冯老师,华清远见嵌入式学院讲师. 1. 搭建Qt开发环境平台 1.开发环境:ubuntu 12.04 2.交叉编译链:arm-cortex_a8-linux-gnueabi 3.开发板:FS21 ...

  3. 交叉编译环境以及开发板上-/bin/sh: ./hello: not found 转载自 http://blankboy.72pines.com

    交叉编译环境以及开发板上-/bin/sh: ./hello: not found 目标板是S3C2440.至于交叉编译环境的搭建就不多说了,网上很多教程. 搭建好了交叉编译环境后,第一件事就是传说中的 ...

  4. 使用Xilinx SDSoc在Xilinx zcu102开发板上编程HelloWorld

    关于Xilinx SDSoc的介绍我就不再复述了,我理解的也不一定准确,可以阅读官方文档了解SDSoc,你可以把它理解为一个集成开发环境 (IDE),通过SDSoc我们能够简单快速的对Xilinx的开 ...

  5. 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南

    昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...

  6. python调用c++/c 共享库,开发板上编译的一些坑!

    1.对于python,ctypes只能load动态库,但现在我的对象是一个静态库,而且我没有源代码,静态库在编译过程中没有加--fPIC参数,所以我也没办法将其编译为动态库,有没有什么方法在pytho ...

  7. easycwmp在开发板上的配置

    原创作品,转载请注明出处 copyright:weishusheng   2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...

  8. 开发板上使用core文件调试

    转载:http://www.nginx.cn/1521.html 如果开发板的操作系统也是linux,core调试方法依然适用.如果开发板上不支持gdb,可将开发板的环境(依赖库).可执行文件和cor ...

  9. [转载]在iTOP-4412开发板上调试helloworld应用

    本文转自迅为论坛:http://www.topeetboard.com 1.安装ADB驱动 在开发板上调试 Android 应用,首先要安装 ADB 驱动. 通过“SDK Manager.exe”来安 ...

随机推荐

  1. python模块(os)

    os模块 os模块提供了许多与操作系统交互的接口 os.getcwd() -> str # 返回当前路径, 相当于pwd os.chdir("dirname") -> ...

  2. WCF第一个Demo

    参考文献:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 自己学习的Demo 第一个是控制台宿主服务,第二个是Windows服 ...

  3. status 状态栏

    http://www.pchou.info/ios/2015/08/22/oc-statusbar.html IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏.控制状态栏的文字颜色等,导 ...

  4. The Struts dispatcher cannot be found. This is usually caused by using Strut

    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the assoc ...

  5. 系统性能调优CPU与内存

    CPU相关术语 处理器:插到系统插槽或者处理器版上的物理芯片,以核或者硬件线程的方式包含了一块或者多块CPU. 核:一颗多核处理器上的一个独立CPU实例.核的使用时处理器扩展的一种方式,有称为芯片级多 ...

  6. Undefined index:

    $username=$_POST["username"]; 初学时发现这个错误, Undefined index: username 如果不仔细看,还以为是$username报错, ...

  7. ScrollView属性总结

    结构 继承关系 public class ScrollView extends FrameLayout java.lang.Object android.view.View android.view. ...

  8. SpringMvc:视图和视图解析器

    请求处理方法执行完成后,最终返回一个ModelAndView对象,对于返回String,View或ModelMap等类型的处理方法,SpringMvc也会在内部将它们装配成一个ModelAndView ...

  9. struts文件上传(多文件)

    第01步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  10. [转]ms sql 2000 下批量 附加/分离 数据库(sql语句)

    这次公司要把MS SQL Server 2000 服务器上的数据库复制到新的服务器上面去,于是几百个数据库文件就交给我附加到新服务器上了   以前一直没接触过这方面的东西,于是果断谷歌了也百度了  找 ...