DE2-115开发板基于verilog和nioⅡ的流水灯实现

目录

  • 一、 内容概要
  • 二、 实现
    • 2.1 基于Nios II软核的流水灯
      • 2.1.1 准备工作
      • 2.1.2 工程搭建
      • 2.1.3 硬件代码设计
        • Ⅰ 连接IP核
        • Ⅱ 编写代码
        • Ⅲ 各种配置
      • 2.1.4 软件代码设计
        • Ⅰ 环境构建
        • Ⅱ 编写代码
      • 2.1.5 代码下载
        • Ⅰ 硬件下载
        • Ⅱ 软件下载
      • 2.1.6 运行结果
    • 2.2 Verilog流水灯
  • 三、 心得体会
  • 四、 参考链接

一、 内容概要

在DE2-115开发板上分别用 Verilog和 Nios软件编程两种方式完成LED流水灯显示,理解两种方式的差异

二、 实现

2.1 基于Nios II软核的流水灯

2.1.1 准备工作

  1. Quartus II
  2. DE2-115开发板
    在这里插入图片描述

2.1.2 工程搭建

  1. 打开Quartus,新建一个工程
    按照图片进行如下选择
    在这里插入图片描述
    在这里插入图片描述
    选择芯片
    在这里插入图片描述
    finish

2.1.3 硬件代码设计

Ⅰ 连接IP核

类似于以可视化界面的方式进行verilog里面的通过顶层文件连接各模块操作

找到platform Designer,某些版本可能是 Qsys
在这里插入图片描述

首先设置时钟
在这里插入图片描述
默认即为50MHZ,设置好后点右下角finish
在这里插入图片描述
左侧通过搜索栏进行搜索,添加以下模块:

Nios Ⅱ Processor (nios软核处理器)
On-Chip Memory (储存器)
JTAG UART (JTAG、UART)
System ID Peripheral (为Nios II生成一个ID号)
pio (流水灯管脚)

在这里插入图片描述
先全部点Finish保持默认
在这里插入图片描述
在这里插入图片描述
三连击Name标签下的属性可以修改名称:
在这里插入图片描述
略微修改了一下名字
在这里插入图片描述

连接模块:

clk,reset,datamaster需要和其他所有IP核连接,nios ii的指令端口(instruction_master)只与存储器进行连接,nios ii中的jtag_debug_model_reset与外部IP核进行连接 。jtag端口的中断信号的连接,其中0表示中断的优先级(可以进行设置)
在这里插入图片描述

在这里插入图片描述

接下来进行参数配置(右键模块点击edit)

  1. On-chip Memory
    设置为10k(10240)
    在这里插入图片描述
  2. nios
    在这里插入图片描述
  3. PIO
    将width设置为4表示4个Led灯
    在这里插入图片描述
    把管教名设置为led
    在这里插入图片描述

然后系统分配地址
在这里插入图片描述
完成后就不报错了
在这里插入图片描述
最后点击右下角Generate生成
在这里插入图片描述
在这里插入图片描述
然后等待
在这里插入图片描述
完成后一路finish

Ⅱ 编写代码

回到Quartus,新建一个verilog文件
在这里插入图片描述
在这里插入图片描述
写入代码

module led_ctrl(input clk,input reset_n,output  [3:0] led
);
Ⅲ 各种配置

在这里插入图片描述
找到生成的文件添加
在这里插入图片描述
找到这个总文件,根据管脚信息在之前写的代码里面加入:

demo2_waterled u0 (.clk_clk       (clk),       //   clk.clk.reset_reset_n (reset_n), // reset.reset_n.led_export    (led)     //   led.export);

在这里插入图片描述
这样完整的代码即为:

module led_ctrl(input clk,input reset_n,output  [3:0] led
);demo2_waterled u0 (.clk_clk       (clk),       //   clk.clk.reset_reset_n (reset_n), // reset.reset_n.led_export    (led)     //   led.export);endmodule

配置一下管脚

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后进入Dual-purpose Pins,全部设置为Use as regular I/O
在这里插入图片描述
然后编译一下
在这里插入图片描述
然后分配一下管脚
在这里插入图片描述
重新编译

2.1.4 软件代码设计

Ⅰ 环境构建

通过此处打开eclipse
在这里插入图片描述
自己选定一个工作空间(不一定是当前项目目录)
进入初始界面后创建文件
在这里插入图片描述
在这里插入图片描述
点击NEXT
在这里插入图片描述
点击Finish
完成后找到这个文件
在这里插入图片描述

Ⅱ 编写代码

把hello_world.c的代码修改为:

#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_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;
}

保存

而后右键waterled_bsp,再Nios II 中选择BSP Editor进行如下配置:

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0697eb0f10f54a1f95cc607c7c6d28bc.png在这里插入图片描述
在这里插入图片描述

选择Generate BSP
在这里插入图片描述
然后右键waterled,选择build project
在这里插入图片描述
完成
在这里插入图片描述

2.1.5 代码下载

Ⅰ 硬件下载

在这里插入图片描述
在这里插入图片描述

Ⅱ 软件下载

回到eclipse,右键waterled,选择Run As中的Nios II Hardware
在这里插入图片描述
刷新一下
在这里插入图片描述
然后先apply再run
在这里插入图片描述

2.1.6 运行结果

在这里插入图片描述

2.2 Verilog流水灯

直接编写Verilog代码

module led_ctrl(input En,input CP,input Dn,output reg [0:7] Out);//匹配8个灯,故宽度为8
reg [25:0] cnt;
reg cnt1;
reg Cn;
parameter cnt_max = 26'd49_999_999;//时钟的频率是50mhz,要实现几秒钟变一次就调到//相应时间,例子为1s每次always@(posedge CP or negedge En)//该always循环实现的是一秒钟的计数if(En==1'b0)cnt<=26'd0;else if(cnt == cnt_max)cnt<=26'd0;else cnt<=cnt + 1'b1;
always @(posedge CP or negedge En) //cnt每次为1代表到了一秒钟if(En==1'b0)cnt1<=1'b0;else if(cnt == cnt_max-1'd1)cnt1<=1'b1;else cnt1<=1'b0;always @(posedge CP or negedge En)if(En==1'b0) beginif(Dn==1'b1)                  //用 Dn来判断赋不同的值,1为亮,也就可以实现两个灯一起移动的选择Out <=8'b00000001;elseOut <=8'b00000011;endelse beginif (Out[0]==1'b1)//不用判断整个Out,只需要判断最边上的1,为1则表示需要改变方向,方向由Cn判断Cn<=1'b1;else if(Out[7]==1'b1)Cn<=1'b0;if (cnt1==1'b1) beginif(Cn==1'b1)Out<={1'b0,Out[0:6]};//右移elseOut<={Out[1:7],1'b0};//左移endendendmodule

管脚配置
在这里插入图片描述

正常编译烧录就行
结果:
在这里插入图片描述

三、 心得体会

·理解硬件与软件编程的差异:通过实践,我更深入地理解了硬件描述语言(如Verilog)和软件编程(如C语言)在FPGA设计中的应用差异。

·硬件编程的直观性:使用Verilog直接编程,可以直观地控制硬件行为,如LED的亮灭顺序,这种方式更接近底层硬件,对FPGA的资源利用和性能优化有更直接的控制。

·软件编程的便利性:Nios II软核提供了一个类似于通用处理器的环境,可以使用高级语言(如C语言)进行编程,这使得开发过程更加简便,代码更易于理解和维护。

·综合工具的重要性:无论是硬件还是软件编程,都需要依赖于综合工具(如Quartus II)来将设计部署到FPGA上。这些工具提供了图形界面和自动化流程,极大地提高了开发效率。

·学习曲线:Verilog编程可能对初学者来说有一定的难度,因为它需要对硬件电路有一定的理解。而Nios II软核编程则更容易上手,因为它使用的是更熟悉的编程语言和概念。

对比
·开发速度:使用Nios II软核进行软件编程通常开发速度更快,因为它允许开发者使用高级语言和现有的库函数。

·资源消耗:硬件编程(Verilog)通常对FPGA资源的消耗更少,因为它直接控制硬件,而软件编程可能需要更多的资源来运行软核处理器。

·性能:硬件编程可以实现更高的性能,因为它可以精细控制时序和并行操作,而软件编程可能受限于软核处理器的性能。

·灵活性与可移植性:软件编程在灵活性和可移植性方面具有优势,因为编写的软件可以在不同的硬件平台上运行,而硬件编程则更依赖于特定的FPGA架构。

·调试与测试:硬件编程的调试可能更复杂,需要使用仿真和硬件测试工具。软件编程则可以使用标准的调试工具,如Eclipse的调试器。

·应用场景:对于需要高性能和低延迟的应用,硬件编程可能更合适。而对于复杂的算法和数据处理任务,软件编程可能更加高效。

四、 参考链接

  1. https://blog.csdn.net/qq_43279579/article/details/115933154
  2. https://blog.csdn.net/m0_64791246/article/details/125114387
  3. https://blog.csdn.net/qq_31348733/article/details/101310105
  4. https://blog.csdn.net/qq_43279579/article/details/115953871

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

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

相关文章

带你探索CA和SSL证书

目录 一、什么是CA&#xff1f; 二、什么是SSL证书&#xff1f; 三、SSL证书分类和文件种类&#xff1f; 3.1 证书的分类&#xff1a; 3.2证书格式&#xff1a; 四、SSL和TSL 五、PSK介绍 六、nginx配置介绍 一、什么是CA&#xff1f; CA是证书的签发机构&#xff0c;它是…

sumif的求和区域是文本格式怎么办?

sumif函数的求和区域是文本型数字&#xff0c;不更改源数据的情况下怎么求和呢&#xff1f; 一、不能使用SUMIF、SUMIFS函数 这两个函数的求和区域只能是引用&#xff0c;不能是公式运算的内存数组&#xff0c;因此不能用公式或运算符将求和区转换成数值。当引用来的数据是文本…

公司网页设计思路

在当今互联网时代&#xff0c;公司网页设计是一个极为重要的环节。一款精心设计的公司网页可以提升企业形象&#xff0c;增加用户粘性&#xff0c;吸引更多的潜在客户和合作伙伴。下面将为大家介绍一些公司网页设计的思路。 首先&#xff0c;要确立公司网页的整体风格。网页风格…

C++的数据结构(四):队列

在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种特殊的线性表&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作。队列中没有元素时&#xff0c;称为空队列。队列的…

基于SSM的“网约车用户服务平台”的设计与实现(源码+数据库+文档)

基于SSM的“网约车用户服务平台”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能 首页 站内新闻浏览 打车信息查询功能 在线打车功能…

GD32用ST-Link出现internal command error的原因及解决方法

一、GD32 F407烧录时出现can not reset target shutting down debug session 搜寻网上资料&#xff0c;发现解决方式多种多样&#xff0c;做一个简单的总结&#xff1a; 1.工程路径包含中文名 2.需更改debug选项 3.引脚冲突 4.杜邦线太长 而先前我的工程路径包含中文名也仍…

(Java)心得:LeetCode——18.四数之和

一、原题 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; …

Git在windows和Linux安装并自动更新代码超详细讲解

202405122316 一、Git官网安装 1、官网安装地址&#xff1a; Git - Downloading Packagehttps://git-scm.com/download/win 官网下载比较慢建议使用下面链接 2、国内镜像下载地址&#xff1a; CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-fo…

Libcity 笔记:自定义模型

在/libcity/model/trajectory_loc_prediction/&#xff0c;我们复制一份Deepmove.py&#xff0c;得到DM_tst.py&#xff0c;我们不改变其中的机制&#xff0c;只动class name 然后修改相同目录下的__init__.py&#xff1a; 修改task_config文件&#xff1a; 在config/model/tra…

OGG几何内核-网格化的改进

OGG社区于4月19日发布了OGG 1.0 preview版本。相对于OCCT 7.7.0有很多改进&#xff0c;目前在持续研究中。最近测试了一下网格化&#xff0c;确实有很好的改进。对比展示如下&#xff1a; 几何内核&#xff1a; OGG 1.0 preview 几何内核&#xff1a;OCCT 7.7.0 采用OCCT几何内…

2024中国(重庆)VR/AR科技展8月举办

2024中国(重庆)VR/AR科技展8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会背景&#xff1a; 2024中国航空科普大会暨第八届全国青少年无人机大赛在重庆举办&#xff0c;同时举办第二届中国…

深圳晶彩智能ESP32-1732S019实时观看GPIO的状态

深圳晶彩智能ESP32-1732S019介绍 ESP32-1732S019开发板是基于ESP32-S3-WROOM-1模块作为主控&#xff0c;双核MCU ,集成WI-FI和蓝牙功能&#xff0c;主控频率可达240MHz , 512KB SRAM , 384KB ROM&#xff0c;8M PSRAM&#xff0c;16MB Flash&#xff0c;显示分辨率为170*320 I…

牛津大学和上海交大将SAM和Flow应用于移动目标,简单而有效,轻松分割运动目标!

光流可以在运动物体分割中发现运动物体并为分割提供清晰的边界。然而&#xff0c;如果物体暂时静止&#xff0c;就会面临分割挑战。 而我们知道SAM可以很好的分割静态图像对象。因此&#xff0c;是否可以利用SAM与光流结合来在视频中进行移动物体分割&#xff1f; 今天给大家介…

分享一个php常驻内存多进程任务的扩展

前言 最近在摸鱼的时候发现一个PHP常驻内存多进程任务扩展包&#xff1a;EasyTask: PHP常驻内存多进程任务管理器&#xff0c;支持定时任务(PHP resident memory multi-process task manager, supports timing tasks) (gitee.com)&#xff0c;支持php使用多线程处理任务。之前…

重写muduo之TcpServer

目录 1、Callbacks.h 2、TcpServer.h 3、TcpServer.cc 1、Callbacks.h 回调操作 不用依赖boost库&#xff0c;全部翻译成对C11的依赖&#xff0c;与多线程相关&#xff0c;也翻译成C11,与Linux底层的API的关联性减少&#xff0c;移植性更好 #pragma once#include <memo…

PV操作大题强化

1.生产者消费者问题——进程间关系为“生产资源-消费资源” 解题步骤 分析有几类进程——每类进程对应一个函数在每一个函数内部可以用中文描述动作(如果动作只做一次&#xff0c;就不用加while循环&#xff0c;如果动作要重复&#xff0c;就要加while循环)分析每一个动作在做…

【超详细】跑通YOLOv8之深度学习环境配置1

环境配置1下载安装内容如下&#xff1a; Anaconda&#xff1a;https://www.anaconda.com/download/success VScode&#xff1a;https://code.visualstudio.com/Download Pycharm&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows Visual Studio2019&a…

Linux 信号保存

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 阻塞信号 1. 信号其他相关常见…

LLM-KERec

1、LLM-KERec整体框架 LLM-KERec系统包括传统推荐模块和基于LLM的互补知识增强模块。传统推荐模块负责召回候选商品、粗排过滤、精排和重排。LLM互补知识增强模块则包括实体提取器、互补图构造、E-E-I权重决策模型等&#xff0c;以整合互补知识&#xff0c;增强推荐效果。 2、…

周末可以做什么副业?

周末可以做很多种副业&#xff0c;具体可以根据个人兴趣和技能来选择。以下是一些常见的周末副业推荐 1. 线上销售 可以开设自己的网店&#xff0c;销售自己制作的产品、代理热门商品或者利用二手交易平台售卖闲置物品。 2. 做任务 空闲时间可以选择做的是百度的黑鲨阁&…