树莓派点亮FPGA小灯

树莓派点亮FPGA小灯

引言:

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

希望你在本次学习过后,能够有一定的收获!!!

推荐歌曲—雨爱-杨丞琳

​ 冲啊!!!! ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶

文章目录

  • 树莓派点亮FPGA小灯
    • 一、任务介绍
    • 二、树莓派介绍
      • 一、树莓派
      • 二、树莓派图片
    • 三、实验流程
      • 1、树莓派设置
      • 2、FPGA相关
    • 四、实验效果
    • 五、实验总结

一、任务介绍

  1. 了解树莓派的相关内容
  2. 实现树莓派与FPGA开发板之间的通信
  3. 使用树莓派点亮FPGA开发板上面的小灯

二、树莓派介绍

一、树莓派

a.简介:树莓派(Raspbreey Pi,RPi),慈善组织“Raspberry Pi 基金会”开发,为学生计算机编程教育而设计,基于Linux系统的单片机系统。随Windows 10 IoT的发布,有可以用运行Windows的树莓派。只有信用卡大小,却有视频、音频等功能。

c. 硬件:是一款基于ARM的微型电脑主板

内存硬盘:SD/MicroSD卡

四类接口:有1/2/4个USB接口;

一个10/100 以太网接口(A型没有网口);

视频模拟信号的电视输出接口;

和HDMI高清视频输出接口。

可连接键盘、鼠标和网线.,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。Raspberry Pi B款只提供电脑板,无内存、电源、键盘、机箱或连线。

d.语言:树莓派基金会提供了基于ARM的Debian和Arch Linux的发行版供大众下载。还计划提供支持Python作为主要编程语言,支持Java、BBC BASIC (通过 RISC OS 映像或者Linux的"Brandy Basic"克隆)、C 和Perl等编程语言。

e. 发展以及应用(亚博官网摘)

img

二、树莓派图片

a.板子图片(亚博官网摘)

img

b.树莓派3b与树莓派3b+参数对比:

img

b.树莓派3b+引脚图:

img

三、实验流程

1、树莓派设置

  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
这里要先获取权限,否则后面代码会报错

接着进入python3中,输入如下代码,这里一定一定要注意,不要安装serial库!!!因为这个是安装好的,再安装会提示serial中无Serial!

树莓派发送数据代码

import serial
import time
ser = serial.Serial('/dev/ttyAMA0',115200)while ser.isOpen() :ser.write(b"A") # 点亮第一个小灯time.sleep(1)ser.write(b"B") # 点亮第二个小灯time.sleep(1)

2、FPGA相关

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 if (dout_vld) beginif (dout == 8'h41) beginled <= 8'b0000_0001;endelse if (dout == 8'h42) beginled <= 8'b0000_0010;endelse if (dout == 8'h43) beginled <= 8'b0000_0100;endelse if (dout == 8'h44) beginled <= 8'b0000_1000;endelse if (dout == 8'h45) beginled <= 8'b0001_0000;endelse if (dout == 8'h46) beginled <= 8'b0010_0000;endelse if (dout == 8'h47) beginled <= 8'b0100_0000;endelse beginled <= led;endendend    endmodule

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 = 5207;  // 使用波特率 115200 发送1 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) begin din_r0<= 1; din_r1<=1;    endelse begin din_r0<= din; din_r1<= din_r0;   endendassign nedge = din_r1 && !din_r0; // 下降沿//  计数一个bit发送需要的时钟周期reg [20:0] cnt_bsp; wire add_cnt_bsp; wire end_cnt_bsp; always @(posedge clk or negedge rst_n) beginif (!rst_n)     cnt_bsp <= 0;else if (add_cnt_bsp)if (end_cnt_bsp)    cnt_bsp <= 0;else                cnt_bsp <= cnt_bsp + 1; else cnt_bsp <= cnt_bsp;endassign add_cnt_bsp = flag;assign end_cnt_bsp = add_cnt_bsp && (cnt_bsp == BAUD - 1);// 计数当前到了哪一 bitreg [3:0] cnt_bit;          wire add_cnt_bit;wire end_cnt_bit;always @(posedge clk or negedge rst_n)beginif (!rst_n)     cnt_bit <= 0;else if (add_cnt_bit)if (end_cnt_bit)    cnt_bit <= 0;else                cnt_bit <= cnt_bit + 1;else cnt_bit <= cnt_bit;endassign add_cnt_bit = end_cnt_bsp;assign end_cnt_bit = add_cnt_bit && (cnt_bit == 8); // 起始位 1bit 数据位 8bit always @(posedge clk or negedge rst_n) beginif (!rst_n) flag <= 0;else if(nedge) flag <= 1;else if(end_cnt_bit) flag <= 0;else flag <= flag;endalways @(posedge clk or negedge rst_n) beginif(!rst_n) data <=0;else if(cnt_bsp == BAUD>>1 && flag) data[cnt_bit] <= din; // 串并转换 LSBelse data <= data; endalways @(posedge clk or negedge rst_n) beginif(!rst_n) begindout <= 8'b0;dout_vld <= 0;endelse if(end_cnt_bit)begindout <= data[8:1]; // 第0位起始位 被舍去 dout_vld <= 1;endelse begindout <= dout;dout_vld <= 0;endendendmodule

FPGA引脚图

在这里插入图片描述

四、实验效果

在这里插入图片描述

五、实验总结

实验成果

本次实验成功实现了通过树莓派与FPGA之间的串口通信控制FPGA开发板上的小灯。实验中,树莓派作为上位机,通过发送特定的字符信号,点亮了FPGA板上的LED灯。这验证了树莓派与FPGA之间的通信能力,并且展示了数字逻辑设计在实际应用中的实用性和灵活性。

技术要点

  • 串口通信:实验中使用了树莓派的串口功能来与FPGA进行数据交换,这是实现控制的关键技术点。
  • 信号解析:FPGA端的逻辑设计能够正确解析树莓派发送的信号,这是实现特定功能的基础。
  • 硬件连接:确保树莓派与FPGA之间的物理连接正确无误,包括串口线和电源连接。

遇到的问题及解决方案

  • 串口通信不稳定:在实验过程中,遇到了串口通信不稳定的问题,通过调整波特率和检查串口线路解决了这一问题。
  • FPGA逻辑设计错误:在FPGA逻辑设计中出现了解析信号错误的问题,通过反复检查和调试逻辑电路得到了解决。

实验心得

通过本次实验,我们不仅学习了树莓派和FPGA的基本知识,还掌握了它们之间的通信方法。实验过程中遇到的问题和挑战提高了我们解决实际问题的能力。此外,实验也加深了我们对数字逻辑设计和微控制器编程的理解。

最后感谢大佬友情链接:

  • 树莓派3B+串口通信(超详细简单版)_树莓派3b串口通信-CSDN博客
  • 树莓派3B+ 引脚图说明_树莓派3b+引脚图-CSDN博客
  • 树莓派介绍&树莓派3代B+型开发板_树莓派开发板-CSDN博客

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

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

相关文章

【QT】QT背景介绍

本专栏内容为&#xff1a;QT学习专栏 通过本专栏的深入学习&#xff0c;你可以了解并掌握QT。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;QT &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f…

3D分子生成的定制扩散框架 MolDiff - 评测

MolDiff模型是一种考虑分子键生成的3D分子生成的新模型。MolDiff是清华大学智能产业研究院马剑竹课题组发表在PMLR 2023的工作&#xff0c;第一作者是Xingang Peng&#xff0c;文章题目为&#xff1a;《 Addressing the Atom-Bond Inconsistency Problem in 3D Molecule Genera…

【Android】Kotlin学习之数据容器 -- 集合

一. 定义 List : 是一个有序列表, 可通过下标访问元素. 元素可以在list中出现多次, 元素可重复 Set : 是元素唯一的集合, 一般来说Set中元素的顺序并不重要, 无序集合. Map : 是一组键值对, 键是唯一的, 每个键刚好映射到一个值, 值可以重复 二. 集合创建 三. 示例 mutabl…

OSTE-Web-Log-Analyzer:基于Python的Web服务器日志自动化分析工具

关于OSTE-Web-Log-Analyzer OSTE-Web-Log-Analyzer是一款功能强大的Web服务器日志自动化分析工具&#xff0c;该工具专为安全研究人员设计&#xff0c;能够使用Python Web日志分析工具&#xff08;Python Web Log Analyzer&#xff09;帮助广大研究人员以自动化的形式实现Web服…

推导 模型矩阵的逆转置矩阵求运动物体的法向量

一个物体表面的法向量如何随着物体的坐标变换而改变&#xff0c;取决于变换的类型。使用逆转置矩阵&#xff0c;可以安全地解决该问题&#xff0c;而无须陷入过度复杂的计算中。 法向量变化规律 平移变换不会改变法向量&#xff0c;因为平移不会改变物体的方向。 旋转变换会改…

栈和队列的相互实现

1. 两个队列实现栈. - 力扣&#xff08;LeetCode&#xff09; 队列的特点是先进先出&#xff0c;而栈的特点是后进先出&#xff08;先进后出&#xff09;&#xff0c;也就是说重点在于利用两个队列来改变“出”的顺序。 假设我们在进行入栈操作的时候将数据依次入到一个队列中…

python如何单步调试

Python怎么单步调试&#xff1f;下面给大家介绍一下单步调试&#xff1a; 方法一&#xff1a;执行 python -m pdb myscript.py (Pdb) 会自己主动停在第一行。等待调试&#xff0c;这时你能够看看帮助。 方法二&#xff1a;在所调试程序的开头中&#xff1a;import pdb 并在你…

民航电子数据库:数据库的备份与恢复

目录 前言备份库级逻辑备份示例 恢复库级的逻辑恢复示例 前言 民航电子数据库的备份与恢复 备份 库级逻辑备份 备份目标库下所有的对象 。 因此 &#xff0c;库级逻辑备份需要由备份库的管理员&#xff08;SYSDBA&#xff09;登录至备份目标库进行操作。 语法格式 &#xff1…

商家转账到零钱怎么开通?一步步教你玩转微信营销新利器

在数字化营销日新月异的今天&#xff0c;微信支付凭借其便捷、安全的特点&#xff0c;成为了商家不可或缺的支付工具。而其中的“商家转账到零钱”功能&#xff0c;更是为商家提供了一个全新的营销利器。今天&#xff0c;我们就来详细解读一下如何开通这一功能&#xff08;我处…

怎么制作流程图?介绍制作方法

怎么制作流程图&#xff1f;在日常生活和工作中&#xff0c;流程图已经成为我们不可或缺的工具。无论是项目规划、流程优化&#xff0c;还是学习理解复杂系统&#xff0c;流程图都能帮助我们更直观地理解和表达信息。然而&#xff0c;很多人可能并不清楚&#xff0c;其实制作流…

通过 Java 操作 redis -- zset 有序集合基本命令

目录 使用命令 zadd&#xff0c;zrange 使用命令 zcard 使用命令 zrem 使用命令 zscore 使用命令 zrank 关于 redis zset 有序集合类型的相关命令推荐看Redis - Zset 有序集合 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Jav…

探索智慧推理:线上剧本杀小程序引领新潮流

随着科技的飞速发展&#xff0c;线上剧本杀小程序作为一种新兴的数字娱乐形式&#xff0c;正以其独特的魅力引领着新潮流&#xff0c;并在内容创造上展现出无限的潜力。这种融合了角色扮演、推理解谜和社交互动的游戏模式&#xff0c;不仅为用户带来了沉浸式的体验&#xff0c;…

物流单打印机怎么调格式距离,佳易王物流托运单管理系统软件打印单据左边距调节教程

物流单打印机怎么调格式距离&#xff0c;佳易王物流托运单管理系统软件打印单据左边距调节教程 一、前言 以下软件操作教程以&#xff0c;佳易王物流单打印管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、佳易王物流单管理系统打印…

Whistle Web Debugging Proxy介绍及使用

大家好&#xff0c;今天继续给大家分享一款抓包工具&#xff0c;这款抓包工具是网页的形式&#xff0c;方便多人访问同时维护。Whistle Web Debugging Proxy是一个用于HTTP、HTTPS、WebSocket等网络协议的跨平台调试工具。它可以帮助开发者对网络请求进行捕捉、分析、修改和重定…

【OpenGL的数学01】从窗口空间计算视空间

文章目录 一、说明二、定义三、来自gl_FragCoord四、来自gl_FragCoord的XYZ4.1 从窗口到ndc4.2 从NDC到剪辑4.3 从剪辑到眼睛4.4 GLSL示例 五、从gl_FragCoord的XYZ优化方法 一、说明 本文将解释如何在给定窗口空间顶点位置的情况下重新计算眼空间顶点位置。以及相反的计算。其…

【Obsidian】视频笔记插件Media Extended的强大功能

我将开设一个专栏&#xff0c;介绍当下最好用的笔记软件Obsidian的使用经验和技巧。欢迎持续关注。 摘要&#xff1a;本文将首先向您介绍一款功能强大的笔记软件Obsidian&#xff0c;然后为您详细解析Obsidian的一款实用插件——Media Extended&#xff0c;帮助您更好地利用Obs…

如何在Mac 电脑上安装 Homebrew

1、打开终端应用程序 在终端中输入以下命令并回车: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 这个命令会自动下载并运行 Homebrew 的安装脚本。 系统可能会提示您输入管理员密码,请输入您的 Mac 登录…

易图讯科技三维电子沙盘系统

深圳易图讯科技有限公司&#xff08;www.3dgis.top&#xff09;创立于2013年&#xff0c;专注二三维地理信息、三维电子沙盘、电子地图、虚拟现实、大数据、物联网和人工智能技术研发&#xff0c;获得20多项软件著作权和软件检测报告&#xff0c;成功交付并实施了1000多个项目&…

十、Redis内存回收策略和机制

1、Redis的内存回收 在Redis中可以设置key的过期时间&#xff0c;以期可以让Redis回收内存&#xff0c;循环使用。在Redis中有4个命令可以设置Key的过期时间。分别为 expire、pexpire、expireat、pexpireat。 1.1、expire expire key ttl&#xff1a;将key的过期时间设置为tt…

QTreeView学习 branch 虚线设置

1、方法一&#xff1a; #include <QStyleFactory> ui.treeView->setStyle(QStyleFactory::create("windows")); 2、方法二&#xff1a; QString strtyle2 R"( QTreeView::branch:has-siblings:!adjoins-item { border-image: url(:/TreeViewDe…