在之间的博客中已经讲了如何阅读一本datasheet并编写Verilog驱动代码,而在这篇博客中就加以应用,为PCF8574 IO扩展板编写驱动并观察效果,至于为什么选择这个,一方面是因为这个芯片功能简单,可以作为初次实践的练习对象;另一方面是如果你使用过正点原子的阿波罗开发板的话,你就会看到上面的很多信号都连在这个扩展芯片上面的,因此编写驱动也对使用STM32有好处



有了上一篇的基础,我们就对datasheet和板子的分析做个简短些,重点在于驱动代码的编写和效果的验证

参考:

FPGA零基础学习:IIC协议驱动设计

I2C - 集成电路之间的同步、半双工数据传输

I2C Master

在编写代码前的分析

先看看芯片的引脚:



可以看到芯片有多种封装形式,不过功能都是一样的

  • A[2:0]:地址输入
  • INT:中断输出,当在输入模式下输入引脚有上升沿或下降沿时中断发生
  • P[7:0]:P端口输入输出
  • SCL,SDA:IIC时钟线和数据线

其次看一下一些参数,在使用中要注意一下:





一些供电参数,接Vcc的时候要注意一下

然后看一下时序图,编写驱动就是要参考这个:

最后看一下芯片的功能实现:





可以看到IIC的地址是由A[2:0]决定的,我们所采用的模块中是通过跳线帽来决定A[2:0]的高低电平的:

编写Verilog驱动

Verilog驱动代码编写如下:

程序的状态转移图如下:

逻辑分析仪的使用

逻辑分析仪可以用来分析时序,这里就介绍一下我使用的逻辑分析仪,并对上文中的编写的代码进行时序分析

我使用的逻辑分析仪是NanoDLA逻辑分析仪,比较便宜的同时可以分析一些基本时序,适用于初学者:

  • 最高24MHz采样率
  • 8通道可同时采样
  • 支持输入电压[-0.5v,5.25v],其中低电平为[-0.5v,0.8v],高电平为[2v,5.25v]

【FPGA学习】根据datasheet编写Verilog驱动(PCF8574 IO扩展板练习)的更多相关文章

  1. 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

    高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...

  2. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  3. 如何高效的编写Verilog HDL——进阶版

    博主之前写过一篇文章来谈论如何高效的编写Verlog HDL——菜鸟版,在其中主要强调了使用Notepad++来编写Verilog HDL语言的便捷性,为什么说是菜鸟版呢,因为对于新手来说,在还没有熟 ...

  4. FPGA学习的一些误区

    转载自网络,作者不详. 我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新入群的菜鸟们总是在重复的问一些非常简单但是又让新手困惑不解的问题.作为管理员经常要给这些菜鸟们普及基础知识,但是 ...

  5. FPGA学习之基本结构

    如何学习FPGA中提到第一步:学习.了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程.既然要开始学习FPGA,那么就应该从其基本结构开始.以下内容是我 ...

  6. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  7. 我的 FPGA 学习历程(12)—— 电子钟项目准备

    初学 FPGA 的时候,我们总是存在很多疑问,比如:xilinx 和 altera 的 FPGA 那种比较好.verilog 语言被如何综合成具体硬件电路.RTL 级电路是什么意思等等.现在我们就不会 ...

  8. 我的 FPGA 学习历程(09)—— 时序逻辑入门

    讲到这篇时,组合逻辑就告一段落了,下面是一些总结: 描述组合逻辑时,always 语句中的敏感信号列表中需要列出全部的可能影响输出的变量 描述组合逻辑时,always 语句中的赋值总是使用阻塞赋值符号 ...

  9. FPGA学习网站

    1.  OPENCORES.ORG这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到.进入后,选择project或者由 http//www.opencores.org/browse.c ...

  10. 树莓派(香橙派)通过.NET IoT 操作SPI编写屏幕驱动 顺手做个四足机器人(一)

    摘要 这片文章主要是记录自己的整活过程,涉及到的技术包括.NET IoT, .NET Web, .NET MAUI,框架采用的也是最新的.NET 7. 本人是用的树莓派Zero 2 W(ubuntu- ...

随机推荐

  1. [学习计划]mysql常用语句-随学随整理

    <>   不等于 三元表达式 select *, if (num=1, "第一", "其他") as 别名 from 表 COUNT 统计总数并按某 ...

  2. [CSS]背景图片很大,根据屏幕缩小适配后,div之间有空隙的问题

    RT.美术给的素材宽度是1080px的. 在不缩放的情况下,1080px宽度的屏幕显示div之间正常,没有空隙,但使用transform属性之后,div缩小,div之间有空隙(白线) 百度有人说给这些 ...

  3. make 编译笔记

    make 文件位置 默认的make install指令执行之后,会将程序安装到 /usr/local/bin , /usr/local/lib .也可以通过 参数 --prefix 自定义路径,例如 ...

  4. Java中静态方法和实例方法

    static修饰的方法可以直接用方法名.    访问 实例成员方法必须永实例成员调用

  5. 初学银河麒麟linux笔记 第九章 QEMU安装arm虚拟机

    arm虚拟机无法用vm进行安装,因此需要安装QEMU虚拟机 参考: WIndows下使用Qemu安装Arm版Kylin系统_h1007886499的博客-CSDN博客_windows qemu arm ...

  6. 对SQL CTE的一点个人理解

    /*执行顺序: 首先,执行按一.二,此时二输出的结果,可以理解为临时n 然后,按三.二.三.二循环执行 注意:,步骤三的where为递归终止条件,由于用的是substr函数.在最后一次递归的时候,如果 ...

  7. openGL 学习笔记 (二) 使用GL API 绘制出属于自己的矩形

    在OpenGL中所有的事物都是在3D空间中,但是我们所看到的屏幕成像却是2D的像素数组.这导致OpenGL的大部分工作就是把得到的3D坐标转换为适应屏幕的2D图像.转换的整个处理过程是由OpenGL的 ...

  8. docker+react+nginx部署

    一.准备工作 1.先确保项目可以正常运行. 2.如果拉代码到Linux下进行打包,注意node版本,我就是版本不同,yarn build一直不成功. 3.找一个nginx的配置文件nginx.conf ...

  9. Linux下添加启动项并简化操作命令-nginx为例

    1.添加nginx为启动项        1. vi /etc/rc.d/rc.local        2.将启动命令直接添加到最后即可 *注:通过下图可知  /etc/rc.d/rc.local和 ...

  10. class_task

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Task():     _cls_name = "cls name"     def ...