基于Nios-II实现流水灯

基于Nios-II实现流水灯的主要原理

涉及到FPGA(现场可编程门阵列)上的嵌入式软核处理器Nios II与LED控制逻辑的结合。以下是详细的实现原理,分点表示并归纳:
Nios II软核处理器介绍:
Nios II是Altera公司推出的一种应用于Intel FPGA的32位RISC嵌入式处理器。
它拥有强大的性能和可定制特性,允许用户在FPGA内部构建多个处理器,以完成复杂系统的各项功能。
Nios II包括三种产品:Nios II/f(快速)、Nios II/s(标准)和Nios II/e(经济),分别对应不同的性能需求和FPGA使用量。
流水灯控制原理:
流水灯的实现依赖于LED灯和相应的控制逻辑。
通过Nios II软核处理器编写控制LED灯闪烁的用户程序代码,并将其固化在FPGA的片内ROM中执行。
变量、堆栈等空间使用FPGA的片内RAM,无需外部存储器。

基于Nios-II实现流水灯
1.新建项目,选择芯片


2.osys设计
2.1 进入Tools -> Platform Designer
2.2 设置时钟主频


2.3 添加Nios-II Processor并设置

在”Advanced Features”标签栏中保持默认设置,
在”MMU and MPU Settings”标签栏中保持默认设置,
在”JTAG Debug Module”标签栏中保持默认设置(注意勾选 Include JTAG Debug),
点击 Finish 回到 PD 界面。
将 nios2_qsys_0 重命名为 cpu,点击”Rename”即可重新命名,操作完成后如下图所示。



将 cpu 的 clk 和 reset 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连。

2.4 添加JTAG并配置
左边选择JTAG_UART_Intel_FPGA_IP,点击Add。右键重命名为uart,并按图进行时钟线,复位线,数据线的连接:同时还要连接中断


2.5 添加RAM
选择On-Chip Memory (RAM or ROM) Intel FPGA,点击Add加入。


更改名字并连线

2.6 添加PIO

连接clk,reset,s1并导出输出端口:


这里将输出命名为out_led


2.7 添加System ID Peripheral


进行连接


2.8 其他设置
基地址分配:点击 PD 主界面菜单栏中的”System”下的”Assign Base Addresses”。


分配中断号:在”IRQ”标签栏下点选”Avalon_jtag_slave”和 IRQ 的连接点就会为”jtag_uart”核添加一个值为 0 的中断号。


指定 NIos II 的复位和异常地址:从”System Contents”标签栏
双击建立好的 cpu 进入 Nios II Processor 的配置界面,配置 Reset Vector 和 Exception Vector 为””onchip_ram.s1”,点击 Finish。点击 Qsys 主界面菜单栏中的”System”下的”Create Global Reset Network”。完成后会自动连接所有复位端口。生成HDL


3.Quartus设计
3.1 添加原理图文件


返回到Quartus页面,新建原理图文件:双击空白处,加入生成的bsf文件:

右键生成IO端口

3.2芯片引脚设置
(1)菜单里选择 Assignments-device,然后点击 Device pin options。
(2)进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As input tri-stated。
在这里插入图片描述

3.3编译
回到 Quartus II 主界面后编译项目。如下图所示,编译成功后,点击 OK 完成。

点击下图所指快捷键进入 Pin Planner 界面,按照开发板提供的管脚名称分配针脚,下图所示:

4.软件部分设计
4.1.启动 Nios II SBT
tool->Nios II Software Build Tools for Eclipse

出现 Nios II SBT for Eclipse 主界面


4.2创建工程
建立新工程

在”SOPC Information File name”窗口中选择 kernel.sopcinfo 文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU

会弹出问题,点击finish出现问题

回到Platform Designer,将on-chip ram的指令线也连上

4.3修改程序
在 hell_word.c 里修改流水灯控制程序。

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
int main (void)
{
 int count=0;
 alt_u8 led;
 volatile int i;
 while (1)
 { if (count==7)
 {count=0;}
 else
 {count++;}
 led=led_data[count];
 IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);
 i = 0;
 while (i<500000)
 i++;
 }
 return 0;
}
编译工程
右键单击项目名称,在弹出的菜单中选择 Build Project

5.运行项目
启动 Quartus Prime Programmer并将sof文件烧录到板子


运行/调式程序
配置 Run Configurations,转到”Target Connection”标签栏,点击右侧的 Refresh Connections 将 USB-Blaster

加入Apply 后,Run。下载完成后,可以看见 Console 里打印信息“hello from Nios


”(第一段代码实现)流水灯实现:


IMG_4385

基于Verilog实现流水灯
1.Verilog代码撰写
module led #(parameter TIME_1_5s=75_000_000)(
    input             clk,
    input             rst_n,
    output  reg [3:0] led
);
    //parameter TIME_1_5s=75_000_000;
    reg [2:0] cnt;
    reg [26:0] cnt_1;
    wire add_cnt1;  
    wire end_cnt1;  
    wire add_cnt;
    wire end_cnt;
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cnt_1<=27'b0;
        end
        else if(add_cnt1)begin                   
            if(end_cnt1)begin                    
                cnt_1<=1'b0;                        
            end
            else begin
                cnt_1<=cnt_1+1'b1;                  
            end
        end
        else begin
            cnt_1<=cnt_1;                        
        end
    end
    assign add_cnt1=1'b1;
    assign end_cnt1=add_cnt1&&cnt_1 ==TIME_1_5s-1;
 //   always @(posedge clk or negedge rst_n)begin
 //       if(!rst_n)begin
 //           led<=4'b0001;
 //       end
 //       else if(end_cnt1)begin
 //           led<={led[2:0],led[3]};
 //       end
 //       else begin
 //           led<=led;
 //       end
 //   end
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cnt<=1'b0;
        end
        else if(add_cnt)begin
            if(end_cnt)begin
                cnt<=1'b0;
            end
            else begin
                cnt<=cnt+1'b1;
            end
        end
        else begin
            cnt<=cnt;
        end
    end
    assign add_cnt=end_cnt1;
    assign end_cnt=add_cnt&&cnt==7;
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            led<=4'b1111;
        end
        else begin
            if(cnt==3'b000)begin
                led<=4'b0001;
            end
            else if(cnt==3'b001)begin
                led<=4'b0011;
            end
            else if(cnt==3'b010)begin
                led<=4'b0111;
            end
            else if(cnt==3'b011)begin
                led<=4'b1111;
            end
            else if(cnt==3'b100)begin
                led<=4'b1110;
            end
            else if(cnt==3'b101)begin
                led<=4'b1100;
            end
            else if(cnt==3'b110)begin
                led<=4'b1000;
            end
            else if(cnt==3'b111)begin
                led<=4'b0000;
            end
            else begin
                led<=4'b1111;
            end
        end
    end
endmodule


2.引脚绑定


3.烧录,运行

基于Nios-II实现流水灯的实验总结和心得

在基于Nios-II实现流水灯的实验的总结和心得。
实验准备阶段
在开始实验之前,我深入研究了Nios-II软核处理器的原理、特点和应用方法。我了解到Nios-II是Intel FPGA上的一种嵌入式处理器,具有高性能、可定制性强等优点。同时,我也熟悉了Quartus II、Platform Designer和Nios II SBT for Eclipse等开发工具的使用方法。
硬件设计
在硬件设计阶段,我使用Platform Designer工具在FPGA上搭建了一个包含Nios-II处理器、PIO(并行输入/输出)接口等组件的嵌入式系统。我选择了适当的FPGA芯片,并设置了合适的时钟频率。然后,我添加了必要的组件,并进行了相应的配置和连接。特别地,我通过PIO接口连接了8个LED灯,并配置了相应的输出端口。
软件设计
在软件设计阶段,我使用Nios II SBT for Eclipse工具创建了一个Nios II工程,并编写了C/C++代码以控制LED灯的闪烁。我通过PIO接口读取和写入数据,实现了对LED灯的亮灭状态的控制。为了实现流水灯效果,我采用了延时函数和循环语句相结合的方式。我调整了延时函数的时间参数,以控制LED灯闪烁的速度和顺序。
实验结果
将配置文件(.sof)和可执行文件(.elf)下载到FPGA后,我成功观察到了流水灯效果。LED灯按照预设的顺序依次亮起和熄灭,形成了循环变化的效果。这让我感到非常兴奋和满足,因为我不仅实现了预期的功能,还学到了很多实用的知识和技能。
三、实验心得与体会
深入理解嵌入式系统设计
通过这次实验,我深刻理解了嵌入式系统设计的复杂性和挑战性。在设计过程中,我需要考虑硬件和软件之间的协同工作、资源的合理分配以及性能的优化等方面的问题。这些经验对于我将来的学习和工作都非常重要。
掌握FPGA开发技术
通过这次实验,我掌握了FPGA开发技术的基本流程和工具使用方法。我了解了FPGA的工作原理、设计方法和优化技巧等方面的知识。这些技术对于我在未来的电子工程和嵌入式系统设计领域的发展具有重要意义。
提升实践能力和解决问题的能力
在实验过程中,我遇到了很多问题和挑战。但是通过不断地尝试、调试和修改代码,我最终成功地实现了流水灯效果。这个过程让我深刻体会到了实践能力和解决问题能力的重要性。我相信这些能力将对我未来的学习和工作产生积极的影响。
激发对电子工程的热爱
通过这次实验,我感受到了电子工程的魅力和乐趣。我喜欢通过编程和硬件设计来实现各种有趣的功能和效果。这种创造性和挑战性的工作让我感到非常兴奋和满足。我相信这种热爱将激励我在未来的学习和工作中更加努力和专注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350912.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue笔记(二)

Vue&#xff08;一&#xff09;&#xff1a;Vue笔记&#xff08;一&#xff09;-CSDN博客 目录 综合案例&#xff1a;水果购物车 生命周期 1.生命周期&生命周期四个阶段 2.生命周期函数&#xff08;钩子函数【8个】&#xff09; 3.生命周期两个案例 初始化渲染 自动获…

Node.js和npm的安装及配置

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞 I/O 的模型。 npm&#xff08;node package manager&#xff09;是一个 Node.js 包管理和分发工具&#xff0c;也是整个 Node.js 社区最流行、支持第三方模块最多的包管理器。使…

2024.6.14 作业 xyt

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

Unity2D计算两个物体的距离

1.首先新建一个场景并添加2个物体 2.创建一个脚本并编写代码 using UnityEngine;public class text2: MonoBehaviour {public GameObject gameObject1; // 第一个物体public GameObject gameObject2; // 第二个物体void Update(){// 计算两个物体之间的距离float distance Vec…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上&#xff0c;基于TCP/IP协议工作&#xff0c;对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面&#xff0c;使得管理员可以使用统一的操作进行管理&#xff0c;而不必理会设…

课设--学生成绩管理系统(一)

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术核心 &#x1f349;引言 &#x1f348;标识 &#x1f348;背景 &#x1f348;项目概述 &#x1f348; 文档概述 &#x1f349;可行性分析的前提 &#x1f348;项目的要求 &#x1f348;项目的目标 &#x1f348;…

高才通通过后,香港身份证办理

高才通通过后&#xff0c;到香港前需要准备 身份证办理预约&#xff08;流程见下面&#xff09;办理好D签&#xff1a;在入境前&#xff0c;根据入境处给的签证&#xff0c;下载签证并办理港澳通行证D签&#xff08;逗留签&#xff09;携带的文书&#xff1a;港澳通行证&#…

九、BGP路由属性和选路

目录 一、属性分类 1.1、公认属性 1.2、可选属性 二、选路原则 0、丢弃不可达 取值越大越优 1、Preferred-Value 2、Local_Preference 取值越小越优 3、路由优先级 4、AS_Path 5、Origin 6、MED 7、路由来源 8、Next_Hop的IGP度量值 BGP路由等价负载分担&#…

音频处理软件adobe audition使用教程

教程1笔记 基本操作 点击文件-》新建-》多轨会话&#xff1a; 编辑-》首选项&#xff0c;设置自动保存时间&#xff1a; 导入素材&#xff0c;文件-》导入素材&#xff0c;或者直接拖动进来文件&#xff01; 导出多轨混音&#xff1a; 更改为需要导出的格式wav,mp3等格式&am…

探索开源世界:2024年值得关注的热门开源项目推荐

文章目录 每日一句正能量前言GitCode成立背景如何使用GitCode如何把你现有的项目迁移至 GitCode&#xff1f;热门开源项目推荐actions-poetry - 管理 Python 依赖项的 GitLab CI/CD 工具项目概述技术分析应用场景特点项目地址 Spider - 网络爬虫框架项目简介技术分析应用场景项…

餐厅点餐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;商品管理&#xff0c;用户管理&#xff0c;店家管理&#xff0c;广告管理 店家账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;广告管…

机器学习:GANs网络在图像和视频技术中的应用前景

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

Qt creator day2练习

使用手动连接&#xff0c;将登录框中的取消按钮使用第二种方式&#xff0c;右击转到槽&#xff0c;在该函数中&#xff0c;调用关闭函数&#xff0c;将登录按钮使用Qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为“admin”&#xff0c;密…

Swift 是 C++ 的最佳继任者

苹果称 Swift 是 C 的最佳继任者 Swift 是苹果公司在 2014 年推出的&#xff0c;一款旨在替代 Objective-C 的编程语言。但苹果语言和运行时总监 Ted Kremenek 在 WWDC24 的主题演讲中表示&#xff0c;Swift 也将取代 C。 “Swift 的安全性、速度和易用性&#xff0c;加上内…

mongodb 集群安装

1. 配置域名 Server1&#xff1a; OS version: CentOS Linux release 8.5.2111 hostnamectl --static set-hostname mongo01 vi /etc/sysconfig/network # Created by anaconda hostnamemong01 echo "192.168.88.20 mong1 mongo01.com mongo02.com" >> /…

阿里云OSS对象存储服务使用

阿里云OSS对象存储服务使用 1、点击产品&#xff0c;然后找到并点击对象存储OSS 2、然后点击立即开通&#xff0c;如果只是为了学习&#xff0c;简单的使用还是可以的&#xff0c;不需要购买 3、开通后进入OSS管理控制台界面,点击进入Bucket列表&#xff0c;然后创建一个Bucket…

Python基础教程(二十一):多线程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

521. 最长特殊序列 Ⅰ(Rust单百解法-脑筋急转弯)

题目 给你两个字符串 a 和 b&#xff0c;请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在&#xff0c;则返回 -1 。 「最长特殊序列」 定义如下&#xff1a;该序列为 某字符串独有的最长 子序列 &#xff08;即不能是其他字符串的子序列&#xff09; 。 字符串 s …

redis源码编译安装

源码下载地址http://download.redis.io/releases/ 1 环境准备 安装编译环境 sudo yum install gcc -y gcc -v 查看版本 sudo yum -y install centos-release-scl sudo yum -y install devtoolset-10-gcc devtoolset-10-gcc-c devtoolset-10-binutils scl enable devtool…

C语言之main函数的返回值(在linux中执行shell脚本并且获取返回值)

一&#xff1a;函数为什么要返回值 &#xff08;1&#xff09;函数 在设计的时候是设计了参数和返回值&#xff0c;参数是函数的输入&#xff0c;返回值是函数的输出 &#xff08;2&#xff09;因为函数需要对外输出数据&#xff08;实际上是函数运行的一些结果值&#xff09;…