fpga实操训练(从模块到系统开发)

news2024/11/16 6:42:51

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们学习了fpga的一些基本操作,熟悉了这些操作,基本上说fpga已经入门了。但是距离我们用fpga开发产品,这中间还有一些距离。这就好比,掌握了c语言的语法后,还不能立马来开发软件,还需要掌握数据库编程、qt编程、网络编程、多线程编程、文件读写、内存分配等等,如果涉及到业务层面,还有必要了解客户的作业流程,这样才能开发出符合客户需要的软件。fpga的学习过程也是一样,掌握了led、key、uart、数码管、pwm,以及熟悉了fpga rom、ram、fifo、lpm_mult、signal tap配置,加上状态机设计,这些都只是为后面的系统开发打下了基础。在这些工作的基础之上,还需要进一步的学习协议、算法和流程。个人建议,不妨从这几个地方入手,

1、掌握好通用的协议

        目前通用的协议主要就是uart、spi、iic。外接的芯片、模块,一般都是根据这几个协议开发的。就拿spi来说,常用的就有flash、sd、时钟芯片、ad、da芯片。iic也很多,比如camera、eeprom、lcd屏等等。uart的话,调试、模块通信都有涉及。

        也许有同学会说,需不需要学习ddr sdram。个人的体会,如果是ddr2,那么可以自己编写试试,从某金、某原子、某火那里学习fpga操作ddr2的方法,这是完全可以的。但是如果是ddr3、ddr4,自己只是拿来用,那么基本掌握好接口就可以了。因为对于很多fpga来说,比如xilinx,上面的ddr4、ddr3完全就是用Vivado MIG(memory interface generator)生成的,并不需要自己写verilog代码。

        上面这些协议只是基础,本身并不复杂,大家不要有畏难情绪。一遍不行,那就两遍;两遍不行,那就三遍,总能学会的。以spi为例,它的信号一般就4个,分别是cs、clk、din、dout。cs是片选,clk是时钟,din是数据输入,dout是数据输出。四个信号里面,最重要的又是clk,

         CPOL主要是描述空闲状态,clk信号是低电平,还是高电平。CPHA则表示,采样数据发生在第一个时钟跳变的时刻,还是第二个时钟跳变的时刻。所谓采样数据,表示的是接收数据的一方什么时候拿到这个数据。因此,作为数据的发送方来说,那就只能在采样的下一个时钟跳变的时候切换数据了。

2、学会读芯片手册(算法设计过程也类似)

        协议和芯片的关系,有点类似于arm和soc的关系。不同厂家用arm做出来的soc是完全不一样的。而fpga要想实现自己的功能,就有必要和其他的芯片进行通信、交互。那怎么通信、频率多少、数据协议是什么,这就要求我们学会看芯片手册了。对于厂家来说,它的芯片会被用在很多的场合,厂家自己也不知道这个芯片会和谁连接,所以它只能把机械封装、引脚、电气、协议、最大频率、信号约束这些信息原原本本告诉开发者,这也是开发者debug的重要参考依据。以M25P16这颗16Mbit的spi norflash来说,它的官方文档就提供了大量的有效信息,我们挑几个做说明,

         这段内容告诉我们这些信息,1)芯片16M bit;2)每一页有256 byte,一般1.4ms写一页,3)支持sector擦除,一个sector512k bit;4)支持16M bit擦除;5)支持2.7v到3.6v的电压输入;6)兼容SPI接口;7)最大时钟50M;8)支持深度省电模式,只需要1uA;9)支持电子签名;10)每个sector支持超过10万次擦除、编程;11)数据保存超过20年。

         芯片逻辑图如上所示,VCC是电压+,Vss是地,D是数据输入,Q是数据输出,C是时钟,S是片选,W是写保护,HOLD是保持信号。

         上面这张图表明芯片完全兼容SPI,支持CPOL=0,CPHA=0和CPOL=1,CPHA=1这两种模式。通常CPOL=0,CPHA=0写起来简单一些,可以写好spi之后,就可以做一些基本动作了。

         表格中表示了芯片支持的命令,从上到下是写使能、写关闭、读取ID、读取状态寄存器、写状态寄存器、读取数据、快速读取数据、页编程、sector擦除、芯片擦除、深度省电、省电恢复,总共12条命令。因为flash只能从1写到0,如果从0写到1的话,就需要对sector或者整个芯片erase,这是需要注意的地方。

         除了命令和协议之外,另外一个重要的就是时序。红框中就是这颗芯片比较重要的几个时序部分,读数据命令之外的其他命令最大不能超过50M,读数据命令不能超过20M,clock为high的时间不能低于9ns,clock为low的时间不能低于9ns。从clock的这个时间限制也说明了,频率不能超过1s/(9ns+9ns)=55M这个频率,和上面说的50M差不多。

        一般来说,芯片之间的传输慢点没事,但是影响效率。关键是大家都想要快一点,但是不同芯片有自己的最大频率限制,这部分需要注意下。

3、查看和掌握电路原理图

        学习了协议和芯片之后,最好再掌握一下原理图,也就是电路原理图。一来加深下印象;二来将来如果功能不正确,也知道元器件在哪,怎么去测试和度量。下面这幅图就是spi norflash的原理图,

4、编写代码做仿真

        有了协议、芯片手册(或者算法)、电路图,下面要做的就是编写verilog代码。编写的过程中可能会反复查看协议和芯片手册,这都是常有的事情。写好代码后,一定要做仿真,仿真不仅速度快,而且可以提前发现很多的设计问题,这比fpga调试快多了。等到所有的仿真都解决了,再上班子测试,这是效率比较高的办法。fpga综合的速度慢,而且调试起来费时费力,远没有仿真这样方便和简洁。

5、运用signal tap、示波器和逻辑分析仪进行调试

        不同的fpga可以选用不同的debug工具调试。这个大家可以根据自己选用的eda工具,灵活进行配置。仿真一般信号都是比较理想的,但是真实的硬件可能会出各种各样的情况,供电、排线插反、信号质量、频率、干扰、电源,方方面面都会有牵制。这个时候就要学会运用signal tap、示波器、逻辑分析仪等各种方法进行调试和验证了。

6、将自己的代码和第三方代码进行比较

        平时阅读别人的代码的时候可能没什么感觉,可能认为功能就应该这么写。等到自己真正实践的时候,才会发现自己和别人的差距。在调试自己代码的时候,如果实在没有办法了,尝试去比较一下自己的代码以及别人的代码,寻找不同之处,往往会有很多意外的收获。也只有这样,才能让自己不断成长和进步。

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

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

相关文章

Faster RCNN网络源码解读(Ⅷ) --- RPN网络代码解析(下)RegionProposalNetwork类解析

目录 一、代码作用(rpn_function.py) 二、代码解析 2.1 RegionProposalNetwork类 2.1.1 正向传播过程forward 接着上篇博客的2.1.2节 2.1.2 assign_targets_to_anchors 2.1.3 det_utils.Matcher传入参数 2.1.4 compute_loss 2.1.5 smooth_l1_lo…

你真的会正确使用wait和notify么?

目录 wait和notify原理 API wait 与 sleep的区别 wait 和 notify的正确使用 step1 step2 step3 step4 step5 总结waitnotify wait和notify原理 当我们线程获取某个对象的monitor锁的时候就会成为owner线程,当owner线程条件不满足的时候,就会调用wait方法,该线程就会进…

惠州市政企信息化(互联网)市场调研报告

1.引言 1.1.编写目的 据广东省惠州市惠东县的政企信息化市场调研的客观性数据,分析相关数据,确定市场规模、市场潜力、市场需求,以及需求价值,为后续的市场决策、服务组合决策提供依据,也作为未来根据市场变化而调整…

Nacos 注册中心

Nacos 注册中心 目录概述需求:设计思路实现思路分析1.增加 Maven 依赖2.Client端配置注册中心3.Server端配置注册中心4.Nacos 注册中心参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c…

Java--Map接口详解

目录 Map接口的特点 代码实现 代码实现 Map的常用方法 代码实现 Map接口的4种遍历方法 代码实现 第一种方式 第二种方式 第三种方式 第四种方式 Map接口的特点 1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value 2)Map中的key和value可以…

如何在星巴克连接家中Windows台式机?(安卓,iOS, Windows, macOS配合frp穿透公网IP实现)

zhaoolee 最近热衷于和海外热心老哥们交换硬盘中的单机游戏资源(BT下载),家中有Windows台式机, 适合长时间挂机下载BT资源,zhaoolee希望能随时连接到Windows台式机新增下载任务,安装体积超大的主机游戏。 …

End-to-End Object Detection with Transformers论文阅读笔记

End-to-End Object Detection with Transformers 端到端,不需要NMS后处理了,直接出结果。 1、Abstract 将目标检测作为一个集合预测问题来解决。简化了检测的整体流程,有效的消除了许多人工设计的部分,比如NMS,anch…

数据库连接池(C++11实现)

目的: 因为对数据库的操作实质上是对磁盘的IO操作,所以如果对数据库访问次数过多,就会到导致大量的磁盘IO,为了提高MySQL数据库(基于C/S设计)的访问瓶颈,除了在服务器端增加缓存服务器缓存常用的…

还在用BERT做文本分类?分享一套基于预训练模型ERNIR3.0的文本多分类全流程实例【文本分类】

目录🍀一、前言🌱二、多分类场景简介🍃三、前期准备阶段🟥3.1 运行环境准备🟧3.2 文心ERNIE系列模型介绍🟨3.3 预训练模型加载⬜3.4 加载项目代码💐四、数据准备阶段🟩4.1 数据处理流…

变不可能为可能——记房产推销员佟鑫海

有勤奋,就会有所收获。傲人的成绩和背后的努力密切相关。俗话说得好,没卖不掉的房子,仅有卖不掉房子的艺人经纪人。关键是你是否有恒心。 在明升,总会有这样一群影子,他们每天精力旺盛,衣着光鲜&#xff0…

【C/C++ SOCKET编程】基于TCP协议实现服务器客户端的简单通信

什么是SOCKET Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 TCP/IP协议 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议…

unsafe.Pointer和uintptr的区别

unsafe 包 func Alignof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Sizeof(x ArbitraryType) uintptr type ArbitraryType int type Pointer *ArbitraryType在unsafe包中,只提供了3个函数,两个类型。就这么少的量&#xf…

【数据结构进阶】布隆(Bloom Filter)过滤器【哈希+位图的整合】

布隆(Bloom Filter)过滤器【哈希位图的整合】 1、什么是布隆过滤器? 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空…

物联网与射频识别技术,课程实验(四)

实验4—— 基于帧的时隙ALOHA(FSA)算法的实现与性能分析 实验说明: 利用Python或Matlab模拟基于帧的时隙ALOHA算法; 分析标签数量k、帧中所含时隙个数n对信道利用率的影响,其中, 信道利用率发送数据的时间/(发送数据的时间信道空…

【JavaEE】线程的状态转换

新年快乐! 祝新的一年万事胜意! 魅力无限! 随心所欲! 蒸蒸日上! 文章目录1. 线程的基本状态2.Java中线程的状态3. 线程的转换1. 线程的基本状态 操作系统中线程有三个基本状态,就绪状态,运行状态,阻塞状态. 就绪状态, 已经获得除CPU之外的所有资源,只要得到CPU,可立即执行. …

(二十五)大白话数据库无法连接故障的定位,Too many connections

文章目录 1、你是否遇到过Too many connections?2、linux的文件句柄数量被限制1、你是否遇到过Too many connections? 今天要给大家分析另外一个真实的大家都经常会碰到的数据库生产故障,就是数据库无法连接的问题。 大家会看到的异常信息往往是“ERROR 1040(HY000): Too …

ubuntu18.04下mysql数据库安装和C语言连接操作

数据库在应用系统开发中很常见,在众多的数据库中,mysql总是会占有一席之地。本篇说明一下如何在ubuntu18.04上安装mysql数据库。 目录 1.更新环境 2.安装mysql数据库系统 3.检测是否安装成功 4.启动、重启、关闭,删除 5.给root用户设置…

vue3+Ts使用vuex模块化和非模块化管理的2种方式(非pinia)

官网写的很清楚:https://vuex.vuejs.org/zh/guide/typescript-support.html 2种方式 (都不是使用pinia的) 1:复杂版本(不定义自己的 useStore 组合式函数) 使用的时候需要在vuex引入 useStore 在store文件引入导出的key import { useStore } from ‘vu…

CSS3新增的has伪类选择器,让你能轻松选择父元素

文章目录一、语法二、链式操作三、兼容性问题CSS现在新增了一个允许我们选择父元素的伪类:has选择器。可以将其当做父级选择器。 一、语法 选择器1:has(选择器2){} /* 表示选择包含有选择器2的所有的选择器1 比如:*/ div:has(p) {background: black; }…

计算机网络期末考试重点归纳

第 1 章 概述 1. 网络的基本特点 连通性共享性 2. internet 和 Internet 的含义 internetInternet中文名称互连网互联网/因特网名词性质通用名词专用名词名词解释指由多个计算机网络互连而成的计算机网络指当前全球最大的、开放的、由众多网络连接而成的特定互连网&#xff…