天津做网站seo的/周口seo公司

天津做网站seo的,周口seo公司,青岛广新信建设咨询公司网站,做网站职员工资文章目录 前言一、树莓派简介二、整体实现步骤三、树莓派设置四、树莓派串口代码五、Verilog代码5.1 串口接收模块5.2 流水灯模块 六、quartus引脚绑定七、 运行效果总结参考 前言 ​ 本次实验的目的是通过树莓派和FPGA之间的串口通信,控制FPGA开发板上的小灯。实验…

文章目录

  • 前言
  • 一、树莓派简介
  • 二、整体实现步骤
  • 三、树莓派设置
  • 四、树莓派串口代码
  • 五、Verilog代码
    • 5.1 串口接收模块
    • 5.2 流水灯模块
  • 六、quartus引脚绑定
  • 七、 运行效果
  • 总结
  • 参考


前言

​ 本次实验的目的是通过树莓派和FPGA之间的串口通信,控制FPGA开发板上的小灯。实验将展示如何使用树莓派发送特定的字符信号,通过串口传输至FPGA,并在FPGA上实现逻辑解析,以点亮指定的小灯。这不仅验证了树莓派与FPGA之间的通信能力,也展示了数字逻辑设计在实际应用中的灵活性。

实验器材:
DE2-115开发板
树莓派


一、树莓派简介

树莓派是什么?
树莓派(Raspberry Pi)是尺寸仅有信用卡大小的一个小型电脑,您可以将树莓派连接电视、显示器、键盘鼠标等设备使用。
树莓派能替代日常桌面计算机的多种用途,包括文字处理、电子表格、媒体中心甚至是游戏。并且树莓派还可以播放高至 4K 的高清视频。
我们希望将树莓派推广给全世界的青少年电脑爱好者,用于培养计算机程序设计的兴趣和能力。

树莓派各版本发布时间和差异对照:
在这里插入图片描述

二、整体实现步骤

  • 1.使用一个FPGA开发板和一个串口通信模块(如UART)来进行通信。确保开发板上有足够的GPIO引脚可用于连接流水灯。

  • 2.在FPGA开发环境中创建一个新项目,并为其添加一个顶层模块。这个顶层模块将负责接收串口数据,并控制流水灯的状态。

  • 3.在顶层模块中添加一个串口接收器模块,用于接收来自串口通信模块的数据。您可以使用FPGA开发环境提供的现成模块,或者自己编写一个。

  • 4.在顶层模块中添加一个计数器,用于控制流水灯的状态。每当接收到串口数据时,计数器会更新,并根据其值来控制流水灯的亮灭。

  • 5.添加一个输出模块,将计数器的值连接到流水灯所需的GPIO引脚上。确保配置正确的约束文件,以确保引脚映射正确。

  • 6.编译和烧录FPGA,并将串口通信模块连接到计算机上。您可以使用串口终端程序来发送数据给FPGA。

  • 7.当串口接收器接收到数据时,计数器将更新,并相应地控制流水灯的状态。

三、树莓派设置

1、首先确认波特率设置正确,是否为115200。(当然,其他波特率也可以的,不过代码得改一下
2、向microSD卡中烧录树莓派官方的镜像后,先不要急着把它插入树莓派中。
3、在电脑上打开microSD卡,按如下方式修改config.txt和cmdline.txt这两个文件,在config.txt文件中附加

dtoverlay=pi3-miniuart-bt

在电脑里直接打开比在树莓派里打开要好操作,不用获取权限
然后把cmdline.txt中的内容换成

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

修改完成之后,我们打开树莓派

进入到树莓派的命令行当中进行如下操作
在命令行中输入如下命令

sudo chmod 777 /dev/ttyAMA0
这里要先获取权限,否则后面代码会报错

四、树莓派串口代码

fpgaUart.c

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>int main()
{int fd =serialOpen("/dev/ttyAMA0",115200); //打开串口if(fd == -1){	//如果打开串口失败则退出程序printf("serialOpen failed!\n");return 0;}printf("serialOpen success!\n");while(1){serialPrintf(fd,"A");delay(2000);serialPrintf(fd,"B");delay(2000);}return 0;
}

编译命令
gcc -o fpgaUart fpgaUart.c -lwiringPi

五、Verilog代码

5.1 串口接收模块

uart_rx.v

module uart_rx (input               clk     ,input               rst_n   ,input               din     ,   //pc端发送给FPGA的数据output  reg [7:0]   dout    ,   //发送给tx 让他串行的传出去output  reg         dout_vld    //当这一次8bit接收完成 再传给tx
);parameter BAUD = 434 ;  //使用波特率115200 发送1bit所需要的时钟周期reg     [8:0]       cnt_bsp     ;wire                add_cnt_bsp ;wire                end_cnt_bsp ;reg     [3:0]       cnt_bit     ;   //计数当前到了哪一bit了 计数9bit 起始位加上数据wire                add_cnt_bit ;wire                end_cnt_bit ;reg                 din_r0      ;   //同步到时钟上升沿reg                 din_r1      ;   //打拍 延时一个时钟周期wire                nedge       ;   //下降沿reg                 flag        ;   //计数器计数的标志 下降沿到来之后开始计数 传输数据完成了就停止计数reg     [8:0]       data        ;   //寄存数据always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_bsp <= 9'b0;endelse if(add_cnt_bsp)beginif(end_cnt_bsp)begincnt_bsp <= 9'b0;endelse begincnt_bsp <= cnt_bsp + 1'b1;endendelse begincnt_bsp <= cnt_bsp;endendassign add_cnt_bsp = flag;assign end_cnt_bsp = add_cnt_bsp && cnt_bsp == BAUD - 1;always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_bit <= 4'b0;endelse if(add_cnt_bit)beginif(end_cnt_bit)begincnt_bit <= 4'b0;endelse begincnt_bit <= cnt_bit + 1'b1;endendelse begincnt_bit <= cnt_bit;endendassign add_cnt_bit = end_cnt_bsp;assign end_cnt_bit = add_cnt_bit && cnt_bit == 8; //起始位加上8bit数据位always @(posedge clk or negedge rst_n)beginif(!rst_n)begindin_r0 <= 1'b1;din_r1 <= 1'b1;endelse begindin_r0 <= din;din_r1 <= din_r0;endendassign nedge = ~din_r0 & din_r1; always @(posedge clk or negedge rst_n)beginif(!rst_n)beginflag <= 1'b0;endelse if(nedge)beginflag <= 1'b1;endelse if(end_cnt_bit)beginflag <= 1'b0;endelse beginflag <= flag;endendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begindata <= 9'b0;endelse if(cnt_bsp == (BAUD >> 1) && flag)begindata[cnt_bit] <= din;   //串并转换  LSBendelse begindata <= data;endendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begindout <= 8'b0;dout_vld <= 1'b0;endelse if(end_cnt_bit)begindout <= data[8:1];  //第0位是起始位 舍弃掉dout_vld <= 1'b1;endelse begindout <= dout;dout_vld <= 1'b0;endendendmodule

5.2 流水灯模块

led.v

module led (input  clk,input  rst_n,input  tx,output reg[7:0] led
);wire [7:0] dout;wire dout_vld;uart_rx uart_rx_inst (.clk (clk),.rst_n (rst_n),.din    (tx),.dout(dout),.dout_vld    (dout_vld));always @(posedge clk or negedge rst_n) beginif(!rst_n) beginled <= 8'b0;endelse begincase (dout)8'h41 : led <= 8'b0000_0001;8'h42 : led <= 8'b0000_0010;default: led <= led;endcaseendend    
endmodule

六、quartus引脚绑定

可以选择其它灯,看数据手册
在这里插入图片描述

七、 运行效果

在这里插入图片描述


总结

实验概述
在本次实验中,我们成功地通过树莓派与FPGA之间的串行通讯,实现了对FPGA开发板上LED灯的控制。该实验展示了树莓派作为控制端与FPGA结合的潜力,以及数字逻辑设计在工程实践中的应用价值。

技术实现

  • 串口通讯:实验利用树莓派的串行通讯接口与FPGA进行数据传输,这是实现远程控制的核心环节。
  • 信号解码:FPGA上的逻辑电路能够准确地解析来自树莓派的信号,确保了控制指令的准确执行。
  • 硬件配置:实验中对树莓派与FPGA之间的物理连接进行了严格的检查,确保了串口线路和电源供应的稳定性。
    问题与解决策略
  • 通讯稳定性问题:面对串口通讯过程中出现的不稳定现象,我们通过调整通讯波特率和仔细检查串口线路来确保通讯的可靠性。
    逻辑设计缺陷:在FPGA的逻辑设计阶段,我们遇到了信号解析的误差,通过细致的复查和调试,最终修正了逻辑电路。

实验反思
本次实验不仅加深了我们对树莓派和FPGA硬件特性的理解,还提升了我们在通信技术和数字逻辑设计方面的实践技能。在解决实验中遇到的挑战时,我们的问题分析与解决能力得到了显著提升,同时对微控制器编程和系统集成有了更深入的认识。

通过这次学习经历,我们认识到了理论与实践相结合的重要性,并体会到了在解决复杂工程问题时,耐心和细致的必要性。

参考

树莓派对FPGA板子上的流水灯程序的控制

树莓派点亮FPGA小灯

【树莓派初始化】教你从0开始搭建树莓派的使用环境

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

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

相关文章

Excel常用操作

计算支付成功率 使用公式 ROUND(B2/C2,4)*100&"%" 字符串拼接 将A1-A10的数字用英文逗号拼接 TEXTJOIN(",",TRUE,A1:A10) 将A1-A10中大于5的数字用英文逗号拼接 ARRAYFORMULA(TEXTJOIN(",",TRUE,IF(A1:A10>5,A1:A10,"")…

未来想从事营销策划类的工作,需要怎么学习?

从事营销策划类的工作&#xff0c;提升和学习主要从以下三个方面&#xff1a; 一、营销底层逻辑的搭建 二、营销系统知识的构建 三、大量营销案例的积累 营销入门&#xff0c;其实大多数人一直都在入门的道路上&#xff0c;每个人都是终身学习者。虽然从事营销工作十年多了…

2024年5月中,AITOP100平台活动专区迎来六场AI大赛盛事!

AITOP100平台的活动专区在2024年5月中旬更新的6场AI大赛来了&#xff01; 随着人工智能技术的飞速发展&#xff0c;AI设计已经成为了创新与创意的新领域。2024年5月中旬&#xff0c;由腾讯研究院、剪映、站酷等互联网大厂主办的6场AI设计大赛震撼来袭&#xff0c;为广大AI设计…

【数据分析面试】43.寻找给小费最多的客人(Python:字典用法)

题目&#xff1a; 寻找给小费最多的客人 &#xff08;Python) 给定两个非空列表user_ids和tips&#xff0c;编写一个名为most_tips的函数&#xff0c;用于找到给小费最多的客户。 示例&#xff1a; 输入&#xff1a; user_ids [103, 105, 105, 107, 106, 103, 102, 108, 1…

短剧看剧系统,当前互联网热门项目工具系统模板。

目录 揭秘爆款神器&#xff1a;短剧看剧系统&#xff0c;让你的内容火遍全网&#xff01; 一、短剧看剧系统&#xff1a;一站式解决方案 二、灵活定价&#xff0c;实现收益最大化 三、高效管理&#xff0c;团队协作更轻松 四、数据驱动&#xff0c;精准把握市场动态 五、智…

设置linux终端用户输入空闲一段时间后就自动断开(linux终端超时自动断开)

在 /etc/profile 中加入TMOUT变量即可。 在文件的最后追加以下两行 export TMOUT600 # 600秒内无操作就断开。 readonly TMOUT # 将变量设置为只读&#xff0c;防止用户更改如图

企业计算机服务器中了rmallox勒索病毒怎么解密,rmallox勒索病毒解密工具流程

在当今数字化时代&#xff0c;越来越多的企业依赖计算机服务器进行办公开展业务&#xff0c;计算机服务器犹如企业的心脏&#xff0c;能够为企业存储许多重要的核心信息&#xff0c;帮助企业有效的开展各项工作业务&#xff0c;提高企业的生产效果&#xff0c;但网络是一把双刃…

springMVC基础使用(示例)

maven依赖&#xff08;javax.servlet-api版本与spring-webmvc班恩要匹配不然会报java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRespons&#xff09;&#xff1a; <dependencies><dependency><groupId>javax.servlet</groupId><arti…

CAN模块开发问题概述

问题一 问题描述 工作环境&#xff1a;ECU外接canoe 操作&#xff1a;使用CANoe模拟发送NM报文&#xff0c;然后停发或者断开CANoe 现象&#xff1a;程序跑死&#xff0c;调用call stack查看压栈情况如下图所示 定位代码如下图所示。可见是由于CAN模块在设置Controller状态时…

计算机毕业设计 | vue+springboot调查问卷管理系统(附源码)

1&#xff0c;研究目的 在进入21世纪以后&#xff0c;互联网得到了蓬勃的发展&#xff0c;电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后&#xff0c;传统问卷还存在很多弊端&#xff1a; 问卷分发起来比较困难&#xff0c;并且分发试卷耗费大量的金钱和时…

网络安全法中关于网络信息的保护和监管,有哪些规定?

网络安全法作为我们数字时代的重要法律保障&#xff0c;对于网络信息的保护和监管有着明确且详细的规定。这些规定不仅体现了国家对于网络安全的重视&#xff0c;也为我们每个人在数字世界中提供了坚实的法律屏障。 首先&#xff0c;我们来看一个关于网络运营者主体责任的案例。…

uniapp开发安卓app使用文字转语音技术

在 UniApp 开发安卓应用时&#xff0c;要实现文字转语音&#xff08;Text-to-Speech, TTS&#xff09;技术&#xff0c;你可以利用 UniApp 的跨平台能力结合原生模块或第三方服务来实现。以下是一些建议的步骤和方法&#xff1a; 1. 使用 UniApp 原生模块&#xff08;如果支持…

【架构-17】通信系统架构设计理论

通信系统网络架构 1. 局域网网络架构 拓扑结构&#xff1a;星型、总线型、环型、树型。 网络架构&#xff1a;单核心架构&#xff08;结构简单&#xff0c;地理范围受限&#xff09;、双核心架构&#xff08;网络拓扑结构可靠&#xff0c;投资较单核高&#xff09;、环型架构…

更高效的数据交互实现丨 DolphinDB Arrow 插件使用教程

Apache Arrow 是一种跨语言的内存数据交换格式&#xff0c;旨在为用户提供高效的数据结构&#xff0c;以实现在不同的数据处理系统之间共享数据而无需进行复制。它由 Apache 软件基金会开发和维护&#xff0c;目前已经成为许多大型数据处理和分析框架的核心组件之一。在分布式框…

收藏:如何轻松建立CRM系统的帮助中心

大家好&#xff0c;今天咱们来聊聊怎么给公司的CRM系统建个帮助中心。为什么CRM系统需要建立帮助中心呢&#xff1f;很简单&#xff0c;就是为了让客户、员工在遇到问题时能有个快速找到答案的地方&#xff0c;提升咱们的服务质量和内部工作效率。 一、为什么需要建立CRM系统的…

【SQL每日一练】获取PADS公司用户名称和各职业总数并根据格式输出

文章目录 题目一、解析二、题解1.MySQL 题目 生成以下两个结果集&#xff1a; 1、查询 OCCUPATIONS 表中所有名字&#xff0c;紧跟每个职业的第一个字母作为括号&#xff08;即&#xff1a;括在括号中&#xff09;&#xff0c;并按名字顺序排序。例如&#xff1a;AnActorName…

使用 Python 进行图像验证码识别训练及调用

目录 1、验证码识别原理1.1 Tensorflow 介绍1.2 Tensorflow 运行原理1.3 卷积神经网络 CNN&#xff08;Convolutional Neural Networks&#xff09; 2、验证码识别实现步骤2.1 安装第三方模块2.1.1 安装 TensorFlow 模块2.2.2 安装 cuda2.2.3 下载 cudnn 2.2 读取验证码样本形成…

ShellCode详解三

直接进入正题。 在完成正式的shellcode代码导出之前&#xff0c;我们先手动的对代码进行导出&#xff0c;以使各位同学更加了解其原理。 手动注入shellcode 1、我们利用DLE工具找到上一节中我们生成的PE文件的代码段位置 上述图片就是我们的代码段位置 2、利用WinHex工具我…

IP证书签发申请

IP证书签发申请 IP证书的全称是IP SSL证书&#xff0c;其主要的作用是为IP实现https访问&#xff0c;且IP SSL证书可以完美的解决企业对于IP地址实现https加密需求。 这种类型的证书特别适合于那些没有域名只有公网IP或者不方便使用域名的企业或个人。证书允许通过特定的IP地…

Databend 开源周报第 144 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解 Databend …