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

文章目录

  • 一 树莓派使用教程
  • 二 树莓派串口代码
  • 三 Verilog代码
  • 四 quartus引脚绑定
  • 五 运行效果
  • 总结

分别在DE2-115开发板和树莓派上编写串口通信程序, 实现树莓派串口指令对FPGA板子上的流水灯程序的控制,控制方式自定。

一 树莓派使用教程

参考:b站树莓派教程

需要注意的几点:

1、如果遇到ping不通的情况,不要着急,把共享网络关掉,树莓派关机,再重开以及共享网络就可能会ping通,我就是在碰到这的时候没有重开,选择重新安装了几次系统都不行。最后关掉共享网络再重开就又可以了。

2、这个视频教程中,烧系统到SD卡时没有选择用户配置在过去是有默认用户名和密码。但现在已经没有了,需要在烧系统时自己设置好密码和用户,并且要开启ssh,然后后续登录使用你设定的用户和密码。

3、一般进去了会要下东西,因为官方的软件源是比较慢的,肯定需要采用换源策略,修改了文件后,一定要重启重启重启(重启一次就行),我也在这踩了几次坑!!!

4、如果需要使用gpio口,会要你下载wiringPi。可以去github上下载最新的wiringPi的zip包然后移动到vnc里去build。这样会快很多。传送门

以上便是我初步使用树莓派的血的教训。

二 树莓派串口代码

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代码

串口接收模块: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

流水灯模块: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引脚绑定

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

五 运行效果

请添加图片描述

总结

这次实验初步使用了树莓派,了解了其创始人,是一个很伟大的人…本次串口的实验,效果不是特别好,代码多点几个灯是下载进去了,但是流水灯的效果不明显,感觉是时序上出现了一些问题。那个灯到处乱跳。但是收获挺大的,树莓派确实是个好东西。

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

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

相关文章

重发布与路由决策

单点重发布 将A协议--->B协议 [r2-rip-1]import-route ospf 1 将静态---->B协议 [r2-rip-1]import-route static 将直连---->B协议 [r2-rip-1]import-route direct 双点重发布 路由回馈&#xff1a;指的是从某协议传出的路由信息又被传回该协议中。可以引起选路…

python数据分析——seaborn绘图1

参考资料&#xff1a;活用pandas库 matplotlib库是python的和兴绘图工具&#xff0c;而seaborn基于matplotlib创建&#xff0c;它为绘制统计图提供了更高级的接口&#xff0c;使得只用少量代码就能生成更美观、更复杂的可视化效果。 seaborn库和pandas以及其他pydata库&#xf…

第十五节:贪心算法(下)

一 、 贪心算法的解题套路实战一&#xff08;最多的会议宣讲场次&#xff09; 1.1 描述 一些项目要占用一个会议室宣讲&#xff0c;会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间 你来安排宣讲的日程&#xff0c;要求会议室进行的宣讲的场次最多。…

vue:网页icon无法显示

logo文件放在public文件夹下&#xff0c;在html里设置icon。 本地源码运行后发现网页icon无法显示我们设置的logo&#xff0c;而是显示了浏览器默认icon。 这个问题不需要解决&#xff0c;部署后网页icon显示就正常了。

通过ip addr命令无法获取到ip地址,无法ping通百度

问题 今天通过VM安装CentOS虚拟机时&#xff0c;安装完成后&#xff0c;想查看ip地址&#xff0c;使用ip addr命令&#xff0c;发现没有展示网络ip地址&#xff0c;ping百度也不通。 解决方案 CentOS使用网络配置文件来设置网络接口的参数&#xff0c;出现这个问题说明网络的…

华为认证存储HCIE有用吗?

首先&#xff0c;对于个人来说&#xff0c;获得华为存储认证可以证明其具备信息存储技术的专业能力 1.专业认可&#xff1a;获得华为存储认证&#xff0c;尤其是HCIE-Storage级别的证书&#xff0c;意味着持有者对信息存储技术有着全面深入的理解&#xff0c;能够设计、部署、…

spring cloud微服务example 入门第一个例子

新建Maven工程 删除src目录&#xff0c;修改poml.xml <modelVersion>4.0.0</modelVersion><groupId>org.example</groupId> <artifactId>SpringCloud_example</artifactId> <version>1.0-SNAPSHOT</version> <packaging&g…

苹果cms:伪静态设置教程

官方默认的网站模式是动态模式&#xff0c;动态模式下链接中自带有“index.php”想要去除网站链接中的index.php&#xff0c;首先需要开启网站的模式为伪静态模式。这样比动态模式那一长串的链接看着也舒服一些&#xff0c;最重要的是迎合搜索引擎的喜好加快收录提高排名。 1、…

【CSP CCF记录】202206-2 寻宝!大冒险!

题目 过程 思路 1.绿化图坐标边界太大&#xff0c;不能直接用矩阵表示&#xff0c;可以用一个二维数组存储有树坐标的x,y值。 定义两个数组&#xff1a;绿化图arr[1005][2]、宝藏图数组b[55][55] 2. 依据条件&#xff0c;从绿化图中第一棵树的坐标开始区域遍历。统计绿化图…

Java进阶10 IO流

Java进阶10 IO流 IO流就是数据传输。I为input的缩写&#xff0c;表示输入读取&#xff1b;O为out的缩写&#xff0c;表示输出写出。 一、IO流体系结构 ♥巧记区分tips&#xff1a;以Stream结尾的是字节流&#xff1b;以Reader、Writer结尾的都是字符流 二、字节输出流FileOu…

免翻,剪映出品的AI作图和AI视频官网免费体验!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 近日&#xff0c;据剪映 Dreamina 官方消息&#xff0c;Deramina正式更名为即梦&#xff0c;同时宣布其AI作图和AI视频生成功能已全量上线。 ▲ 官网主页面 AI作图 1、通过文字描述或…

Mysql与Java连接----JDBC

前言: 当将Java与MySQL数据库连接时&#xff0c;JDBC&#xff08;Java Database Connectivity&#xff09;是一种重要的技术。JDBC允许Java应用程序通过标准的数据库访问方式与不同的关系型数据库进行通信&#xff0c;其中包括MySQL。通过使用JDBC&#xff0c;Java开发人员可以…