本次设计实验源码位于:http://download.csdn.net/detail/noticeable/9922865

实验目的:通过系统的搭建进一步了解FPGA的SOPC开发流程,并借此了姐pll IP核的应用以及用DE-SOC自带的SDRAM缓存输出数据,并为后面的工程实施提供基础。

实验现象:uart接口连接串口调试助手显示hellowold

实验步骤:

新建sopc_lesson1工程:

并新建一个sopc_lesson1.v文件

通过打开qsys工具,修改clk_0的默认时钟

添加NIOS processor内核,且暂时不进行修改,直接finish即可。

添加存储器,由于DE-SOC开发板FPGA部分板载一块64M的SDRAM,所以这里添加SDRAM

这里的设置是按照开发板上实际的芯片参数设置的,详细操作看芯片手册,芯片手册下载地址:http://download.csdn.net/detail/noticeable/9922132

由芯片手册有

配置结果如下

timing部分的时序约束部分先不改,后面在专门运用SDRAM时再详细说明。

添加uart调试接口

uart设置如下

基本功能设置完成后,之后即为一些与开发板相关的外设的添加:

添加pio_led的IO口

添加pio_key的IO口

下面即是进行总线的连接

首先即是clk、控制总线和数据总线的连接

配置rst

将中断连接到CPU

指定中断向量

分配基地址

将引脚导出

导出后发现还有一个警告,发现是uart 的s1未连接到 instruction_master上,连接上即可

连接完成后的总体连接图

将系统保存,然后点击generate->show instantiation自动生成template

然后将template复制下后,粘贴到之前生成的sopc_lesson.v文件中

最后点击generate hdl 文件

至此,设计需要的nios II软件核即设计完成了,在quartus II中将cpu.qsys文件添加到文件夹即可。

添加锁相环IP核对时钟进行倍频和移相

下面,对sopc_lesson1.v文件进行编写

  1. module sopc_lesson1 (
  2. input wire clk_50m, // clk.clk
  3. input wire [:] pio_key_export, // pio_key.export
  4. output wire [:] pio_led_export, // pio_led.export
  5. input wire reset_reset_n, // reset.reset_n
  6. output wire sdram_clk, //这里自己添加一个SDRAM_CLK
  7. output wire [:] sdram_addr, // sdram.addr
  8. output wire [:] sdram_ba, // .ba
  9. output wire sdram_cas_n, // .cas_n
  10. output wire sdram_cke, // .cke
  11. output wire sdram_cs_n, // .cs_n
  12. inout wire [:] sdram_dq, // .dq
  13. output wire [:] sdram_dqm, // .dqm
  14. output wire sdram_ras_n, // .ras_n
  15. output wire sdram_we_n, // .we_n
  16. input wire uart_0_rxd, // uart_0.rxd
  17. output wire uart_0_txd // .txd
  18. );
  19. //这一块可以直接ctrl+o打开H:\SOPC\cpu\synthesis路径下的cpu.v文件复制粘贴
  20. wire nios_clk;
  21. wire nios_reset_n;
  22. pll pll(
  23. .refclk(clk_50m), // refclk.clk
  24. .rst(~reset_reset_n), // reset.reset
  25. . outclk_0(nios_clk), // outclk0.clk
  26. . outclk_1(sdram_clk), // outclk1.clk
  27. . locked(nios_reset_n) // locked.export
  28. );
  29.  
  30. cpu u0 (
  31. .clk_clk (nios_clk), // clk.clk
  32. .pio_key_export (pio_key_export), // pio_key.export
  33. .pio_led_export (pio_led_export), // pio_led.export
  34. .reset_reset_n (nios_reset_n), // reset.reset_n
  35. .sdram_addr (sdram_addr), // sdram.addr
  36. .sdram_ba (sdram_ba), // .ba
  37. .sdram_cas_n (sdram_cas_n), // .cas_n
  38. .sdram_cke (sdram_cke), // .cke
  39. .sdram_cs_n (sdram_cs_n), // .cs_n
  40. .sdram_dq (sdram_dq), // .dq
  41. .sdram_dqm (sdram_dqm), // .dqm
  42. .sdram_ras_n (sdram_ras_n), // .ras_n
  43. .sdram_we_n (sdram_we_n), // .we_n
  44. .uart_0_rxd (uart_0_rxd), // uart_0.rxd
  45. .uart_0_txd (uart_0_txd) // .txd
  46. );
  47.  
  48. endmodule

分配引脚:

到这里,整个板载部分逻辑设计及nios相关的设计就完成了,下面即是编写EDS文件然后进行仿真。

编写EDS工程:

打开tool->NIOS II Software Build Tools for eclipse 并将workspace设定到自己本次工程的目录下

选则创建模板和bsp工程

对nios_bsp进行设置

发现其已经默认设置好了uart_0为输出,默认即可,所以退出。

编译整个工程

烧写.sof文件

设置关连文件,将hello与bsp关联起来

烧写.elf文件

选择project

执行下面这步,点击运行

至此程序烧写完成。

实验现象:

将USB-TTL按照GND->GND

        TXD->GPIOD0

        TXD->GPIOD1

串口调试助手波特率设为9600

.sof文件烧写进开发板时,led灯全亮,按复位键串口调试没有数据接收,

将.elf文件烧写到FPGA后,按下KEY0,串口调试助手接收到信息如图

最后对hello_world.c进行如下编程,完成对I/O和基本函数的调用

  1. /*
  2. * "Hello World" example.
  3. *
  4. * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on
  5. * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example
  6. * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT
  7. * device in your system's hardware.
  8. * The memory footprint of this hosted application is ~69 kbytes by default
  9. * using the standard reference design.
  10. *
  11. * For a reduced footprint version of this template, and an explanation of how
  12. * to reduce the memory footprint for a given application, see the
  13. * "small_hello_world" template.
  14. *
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <system.h>//添加包含了系统宏定义的文件
  19. #include <altera_avalon_pio_regs.h>//添加包含IO操作函数的.h文件
  20. #include <unistd.h>//添加包含usleep的头文件进行精确延时
  21.  
  22. int main()
  23. {
  24. printf("Hello from Nios II!\n");
  25. while()
  26. {
  27. IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,);//通过向PIO的基地址写数据,实现对GPIO的控制
  28. //delay(1000000);
  29. usleep();//us级延时
  30. IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0x3ff);//通过向PIO的基地址写数据,实现对GPIO的控制
  31. // delay(1000000);
  32. usleep();//us级延时
  33. }
  34. return ;
  35. }

同样的方法再次烧写程序

实验现象:LED以2HZ的频率闪烁

SOPC与 hello world的更多相关文章

  1. CPU MPU MCU SOC SOPC关系及区别

    在嵌入式开过程,会经常接触到一些缩写术语概念,这些概念在嵌入式行业中使用率非常高,下面我们就解释一下这些概念之间的关系和区别: 1.CPU(Central Processing Unit),是一台计算 ...

  2. CPU,MPU,MCU,SOC,SOPC联系与差别

    转自CPU,MPU,MCU,SOC,SOPC联系与差别 1.CPU(Central Processing Unit),是一台计算机的运算核心和控制核心.CPU由运算器.控制器和寄存器及实现它们之间联系 ...

  3. 【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等

    [推荐图书]+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等 3赞 发表于 2016/7/4 21:14:12 阅读(1921) 评论(3) 初次接触FPGA,到 ...

  4. 基于ALTERA SOPC设计的概述

    下图是比较传统的系统设计开发板的设备图 由于元器件比较多,成本,复杂性和功耗都比较高,所以需要一种新的方案来降低成本和复杂性. ALTERAL  就提供了一种SOPC解决方案,将系统的I/O.CPU和 ...

  5. 完整的SOPC开发流程体验

    课程目标:学习并掌握完整的SOPC开发流程. 开发环境:Quartus15.1 学习内容:1.使用QSYS工具建立能够运行流水灯项目的NIOS II处理器系统 2.在quartus ii中添加NIOS ...

  6. FPGA/SOPC学习转载

    转自小時不識月http://www.cnblogs.com/yuphone/archive/2010/08/27/docs_plan.html 新网址为:http://andrewz.cn [连载计划 ...

  7. Altera SOPC FrameBuffer系统设计教程

    Altera SOPC FrameBuffer系统设计教程 小梅哥编写,未经授权,严禁转载或用于任何商业用途 在嵌入式系统中,LCD屏作为最友好的人机交互方式,被大量的应用到了各个系统中.在基于ARM ...

  8. 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦

    SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...

  9. 【小梅哥SOPC学习笔记】切换NIOS II CPU的主内存后软件中需要注意的几点设置

    切换NIOS II CPU的主内存后软件中需要注意的几点设置 有时候,我们可能面对这样一种情况: 1. 我们创建一个SOPC系统,并在QSYS中设置NIOS II的复位地址和异常地址都指向SRAM: ...

随机推荐

  1. 使用Jmeter进行http接口测试(转载)

    原文:http://www.cnblogs.com/puresoul/p/4740436.html  前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于 ...

  2. win7、centos7 双系统安装总结

    centos7安装过程 问题:TroubleShooting选项进入图形化界面安装才成功. win7恢复引导区 问题:安装完Centos后,win7的引导区不见了 具体恢复过程:http://www. ...

  3. funny故事

    name1 = input('请输入一个名字:') name2 = input('请输入一个名字:') vehicle = input('请输入一种车子:') print('\n上近代史的{}刚下课, ...

  4. Sql Server数据库之identity(自增)

    一.identity的基本用法 1.identity的含义: identity表示该字段的值会自动更新,通常情况下,不允许直接修改identity修饰的字段,否则编译会报错 2.基本语法 列名  数据 ...

  5. vue 初始化data中的数据

    Object.assign(this.$data, this.$options.data());

  6. cdn是否缓存了网站内容,如何查看

    查看网站是否缓存,本例以cdnbest的节点程序,浏览器是firefox为例 打开浏览器后按 F12键,再打开网站,如下图显示 HIT就表示有缓存,没有缓存就会显示MISS

  7. Linux 禁止普通用户su到root

    Linux账户权限管理上为了防止普通用户通过su切换到root用户,需要修改/etc/pam.d/su和/etc/login.defs两个配置文件. Step1:修改 /etc/pam.d/su文件 ...

  8. 【c++】内存检查工具Valgrind介绍,安装及使用以及内存泄漏的常见原因

    转自:https://www.cnblogs.com/LyndonYoung/articles/5320277.html Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包 ...

  9. 49-Python 安装pythoncom库和pyHook

    这个直接用pip不行,所以借鉴了别人的方法: YTouchCoder 1. https://sourceforge.net/projects/pywin32/files/pywin32/ 这里面下载p ...

  10. linux主机名设置

    有时会报错: 代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostExcept ...