基于Nios II软核的流水灯
发布日期:2021-06-22 22:48:17 浏览次数:3 分类:技术文章

本文共 2089 字,大约阅读时间需要 6 分钟。

文章目录

文章使用的工具及板子类型

工具:Quartus II 13.1
开发板:Cyclone IV E EP4CE115F29C7

一、PIO的介绍

  1. 定义
    PIO IP核:Avalon-MM从端口和通用I/O端口提供了一个存储器映射(memory-mapped)接口
  2. 用途
    用户逻辑或外围器件提供了简单的I/O控制
    例如
    ①控制LED灯
    ②获取按键的电平变化信息
    ③控制显示设备
    ④与片外器件通信(SPI, I 2 C {I^2C} I2C
  3. 寄存器
偏移量 寄存器名称 读/写 含义
0 data 读/写 读的时候,获取当前PIO输入的端口值,写的时候,输出到PIO端口的值,可配置单向功能
1 direction 读/写 控制每个I/O的数据方向,0为输入,1表示输出
2 interruptmask 读/写 各输入端口的中断使能信号,1表示使能中断
3 edgecapture 读/写 各输入端口的边沿触发中断
4 outset 设定输出位位1
5 outclear 设定输出位为0

二、Nios II软核实现流水灯

(一)硬件部分设计

  1. 完成基本的硬件部分设计

    请先参考下面链接中的硬件部分设计,完成相应的硬件部分设计

  2. 添加其他IP核

    添加PIO
    在搜索框上输入pio,选择PIO(Parallel I/O),点击Add
    在这里插入图片描述
    设置宽度(这里我设置为4,表示4个灯的流水灯),默认为8,其他保持默认设置
    在这里插入图片描述

  3. 连接时钟和复位

    在这里插入图片描述

  4. 设置led的输出

    在这里插入图片描述

  5. 系统分配地址

    选择System->Assign Base Address

  6. 使用FPGA资源

    选择Generate->Generate,保持默认设置,点击Generate,选择Save

  7. 创建顶层文件

    回到Quarters,选择New->Verilog HDL File
    顶层文件内容

    module hello_world(	input clk,	input reset_n,	output  [3:0] led);//此处的代码可以通过Qsys中的Generate->Generate Example,复制里面的内容,粘贴到此处,进行相应的修改system_qsys u0 (        .clk_clk       (clk),       //   clk.clk        .reset_reset_n (reset_n), // reset.reset_n        .led_export    (led)     //   led.export    );endmodule

    保存文件,并编译

    问题描述:

    Node instance "u_qsys" instantiates undefined entity "system_qsys"

    解决方法:

    手动添加上面创建的系统
    在这里插入图片描述
    选择File->添加对应的文件->Add->Apply->关闭
    在这里插入图片描述

  8. 芯片引脚设置

    菜单里选择 Assignments-device,点击 Device pin options
    进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As
    input tri-stated
    在这里插入图片描述
    特殊引脚设置,设置为常规引脚
    在这里插入图片描述

  9. 编译完成后,分配管脚

    在这里插入图片描述
    再次编译

(二)软件设计

  1. 基本软件设计过程
    请参考下面链接中,软件设计的过程,完成文件的创建
  2. 修改代码文件
    打开hello_world中的.c文件
    内容如下
    #include 
    #include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"const alt_u8led_data[4]={
    0x01,0x03,0x07,0x0F};int main (void) {
    int count=0; alt_u8 led; volatile int i; while (1) {
    if (count==4) {
    count=0; } else {
    count++; } led=led_data[count]; IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led); //延时的设置 i = 0; while (i<5000000) i++; } return 0;}
  3. 保存编译
    点击保存,选择hello_wold_bsp,右键后,选择Nios II中的Generate BSP,编译应用文件,选择hello_world右键后,点击Build Project

(三)下载硬件和软件

  1. 硬件的下载
    在这里插入图片描述
  2. 软件的下载
    选择应用工程,右键后,选择Run As中的Nios II Hardware
    出现下面问题
    在这里插入图片描述
    点击Refresh Connections解决
    在这里插入图片描述
    选择Apply后,点击Run,就下载完成
    在这里插入图片描述

三、实际结果

在这里插入图片描述

四、参考资料

转载地址:https://blog.csdn.net/qq_43279579/article/details/115917160 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:牛客小白月赛27 B.乐团派对
下一篇:Win32开发1-简介

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月10日 13时36分57秒