jjzjj

基于ARM和FPGA的数字示波器设计——QMJ

Rehabilitation2018 2024-04-28 原文

文章目录

前言

  本设计是一个4通道便携式数字示波器,采用DE1-SOC双核心开发板进行设计。示波器的数模转换器采用LCT2308芯片实现。整个系统的设计由两部分完成,一是完成FPGA硬件电路的设计;二是使用ARM设计系统的软件功能。
  本便携式数字示波器具有体积小、重量轻及低功耗的优点。使用的工具包括:Quertus II 18.0,Modelism,逻辑分析仪,嵌入式linux -SD系统启动卡。
  目前实现的功能,可以调整波形信号在显示器中进行上下平移,时间轴缩放及纵轴缩放。

一、便携式数字示波器设计

1.1 设计原理及思路

  示波器设计如图1-1所示,DE1-SOC开发板通过板载LCT2308芯片采集模拟信号。使用ARM通过轻量级HPS-to-FPGA桥连接的IP核PIO,控制FPGA模块,此IP核PIO被定义为CFG端口。CFG端口会连续传输32bit数据,其中8bit用于识别FPGA模块,其余24bit属于FPGA模块的控制参数。
  adc.v模块通过SPI总线与LCT2308芯片连接,并从LCT2308芯片被设置的采样通道中获取波形数据。
  然后将这些波形数据送入到time_scaler.v模块,该模块以N个波形数据舍弃N-1个的方式实现所需的有效采样率。
波形数据传递到触发模块,这些波形数据也被传递到触发器模块,该触发模块将等待外界和来自触发器模块的触发信号。当两个触发信号发生时,触发模块开始存储接下来的640个数据点,并将波形数据写入到片上存储器SRAM。
  vga.v读取片上存储器中的波形数据,将波形数据转换成像素数据发送至VGA。

图1-1 示波器设计流程图

1.2 系统技术指标

波形电压:0V~4.096V
测量频率范围:0~500KHz
存储深度:640
采样通道:4通道
显示模式:640*480@60Hz
VGA时钟频率:25MHz
FPGA时钟频率:50MHz

二、示波器各模块作用

2.1 LCT2308介绍

  DE1-SOC开发板板载LCT2308(ADC)结构如图2-1所示,是一款12bit高精度逐次逼近型模数转换芯片,拥有 8 个模拟输入通道,具有高达 500 kSPS 的采 样速率以及一个兼容串行外设接口(SPI) 。

图2-1 LCT2308

图2-2 SPI总线

  SPI总线包括4条逻辑线,定义如下:
  CONVST:片选信号,由主机发送,以控制与从机的通信,低电平为有效信号;
  SCK:串行时钟信号,由主机产生发送给从机;
  SDI:主机输出,从机输入(数据来自主机),选择LCT2308的采样通道;
  SDO:主机输入,从机输出(数据来自从机),传输采样数据。
  注:产生时钟的一侧称为主机,另一侧称为从机。

2.2 adc.v模块介绍

  LCT2308对波形采样一个点,经量化编码为12bit数据,通过SPI总线传输给adc.v模块。adc.v模块将通过图2-3的FSM流程持续接收4个通道的波形数据,并整合为48bit。FSM处在WRITE状态会设置一个有效标志位data_val,将数据传输信号反馈给time_scaler.v模块。

图2-3 adc.v模块状态机

图2-4 adc.v模块时序图

  在FPGA开发板运行过程中,可通过逻辑分析仪检测FPGA模块中数据的变化。图2-4中test3端口表示adc.v模块状态机的变化;test1端口表示采样通道1的数据;test2端口表示采样通道2的数据;data_out端口从采样通道得到的数据整合成48bit。

2.3 time_scaler.v模块介绍

  该模块从adc.v模块中接收到的每N+1个样本中删除N个样本,实现显示器波形横向的缩放,N值可通过CFG配置寄存器进行配置。具体实现则是通过创建一个计数器来完成的,该计数器在adc.v模块每次传递样本时递增,并在达到N值时重置为0。样本仅在计数器为0时传递到下一阶段。

图2-5 time_scaler.v模块时序图

  图2-5中,使用test1端口检测计数器变化;out_msg端口接收来自adc.v模块的48bit波形数据。当计数器为0时,将对应的波形数据传递到下一个trigger.v模块。

2.4 trigger.v模块介绍

  在ARMED状态下,缓冲区left_buffer需要保存320个数据点。当缓冲区保存到320个数据点,FSM会进入READY状态,等待两个触发信号,在等待触发条件时,缓冲区left_buffer持续更新数据点。当满足触发条件时,另有320个数据点在TRIGGERED状态被送入缓冲区right_buffer。
  当缓冲区right_buffer保存320个数据点,将在FLUSH_LEFT状态和FLUSH_RIGHT状态把缓冲区left_buffer和right_buffer的数据点写入到片上存储器SRAM。FSM进入SEND_REFREESH状态,会向vga.v模块指示有新数据。

图2-6 trigger.v的状态机

  trigger.v模块在READY状态等待接收两个触发条件,分别来自triggerer.v模块和外界信号。其中外界信号由按键触发,triggerer.v模块能够进行边沿和脉冲触发,支持的五种模式是上升沿、下降沿、脉冲大于、脉冲小于和脉冲等于。

图2-7 trigger.v模块时序图

  图2-7中test1检测该模块的状态机;test2检测两种触发信号同时存在的情况;test3和test4检测状态机在FLUSH_LEFT和FLUSH_RIGHT状态下,片上存储器存储通道1和通道2的640个波形数据点。

2.5 vga.v模块介绍

  vga.v模块接收来自trigger.v模块的“go_val”的信号,开始从片上存储器提取数据。FSM的FETCH状态将接收48bit数据分离成4个12bit,并分别进行按比例放大。PRCOESS和DRAM状态将波形数据转换成rgb,实现的方式,准备两个置零的计数器,计数器A从0计数到479,计数器B加1,直到计数器B等于639。
  这个过程计数器B每变化一次,向计数器A送入一个由12bit转换成11bit波形数据,将波形数据与计数器A数值比较,相等情况rgb为通道波形的rgb,否则rgb为0,即黑色。

图2-8 vga.v的状态机

图2-9 vga.v模块时序图

  图2-9中test1表示vga.v模块的状态机变化;test2检测计数器A;test3检测计数器B;test4表示得到rgb数据。

三、VGA两种像素数据传递方式

  对于本设计中,vga.v模块的rgb数据传递到显示器的过程,分别应用PIO模式和DMA模式来实现。

图3-1 两种方式显示波形

  DMA模式下,CPU并不全程参与数据的传送工作,只需下达命令即可。DMA方式下有控制器和通道,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。
  PIO模式下通过CPU来控制硬盘和内存之间的数据传输,是一种通过CPU执行I/O端口指令来进行数据的读写的数据交换模式。
  DMA模式与PIO模式的区别就在于,DMA模式不过分依赖CPU,可以大大节省系统资源,二者在传输速度上的差异并不十分明显。

四、硬件介绍及结果分析

  由STM32开发板产生正弦波和锯齿波两种模拟信号,信号频率为15hz,引脚使用如图4-1所示。

图4-1 信号源

  DE1-SOC开发板工作频率是50Mhz,图4-2中方框1表示按键,用于对 FPGA模块初始化;方框2表示LTC2308连接信号源;方框3表示VGA连接显示器。

图4-2 DE1-SOC开发板


  图4-3的实验结果是在设置开发板的时钟频率是10KHz,VGA的时钟频率是25MHz的情况下得到的。这种时钟频率分配的状况下,显示器呈左右扫描的方式显示波形。并且在观察实验现象时,显示器会间断显示波形的情况。
  原因分析,VGA的25MHz时钟频率下获取开发板10KHz处理得到的数据,这种条件下,VGA显示一组像素数据之后,需要等待开发板对下一组波形数据的处理。若是将开发板的时钟频率调到25MHz或者50MHz,则VGA不能准确的接收到像素数据,将在显示器上呈现黑屏现象。
  然而,通过调用VGA_controller和DMA 等IP核,将被用来解决上面遇到的问题,其实验结果如图4-4所示。DMA(Direct Memory Access,直接内存存取),它允许不同速度的硬件装置来沟通,而不需要CPU的大量中断负载。
  PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送。并且在DMA模式下,存在SRAM与FIFO等IP核,起到DMA和外设或存储器之间的缓冲器的作用。
  IP核VGA_contronller可以设置的显示器扫描方式为上下扫描。

五、工具使用

5.1 运用逻辑分析仪及Modelism

  使用Modelism对FPGA模块进行仿真,以理解FPGA模块的状态机。
  图5-1的测试文件中,通过读取自己设计的波形数据以及CFG的配置信息,并依靠多个测试端口(test1、test2、test3)来检测FPGA模块中状态机和关键参数的变化,以此充分的理解verilog程序的设计框架。

图5-1 FPGA模块的测试文件

  运用逻辑分析仪对FPGA模块在开发板运行过程中检测状态机及端口变化,便于筛查出波形数据出错的位置。
  详细的步骤讲解可参考下面链接对应的视频。
  https://www.bilibili.com/video/BV1o54y1L7ut?vd_source=bf69d71b17066eefdcd36c6207919226

图5-2 逻辑分析仪

5.2 制作嵌入式linux-SD系统启动卡

  实现示波器软件功能,需要linux系统通过linux-SD系统启动卡控制开发板ARM芯片,达到FPGA和ARM的联合应用。
  对于linux-SD系统启动卡的制作,需要在SD卡的a2、ext3和fat3分区,准备以下的文件,制作的流程请参考SoC-FPGA Design Guide DE1-SoC Edition.pdf的第13章节以及第11.1章节。
sdcard/
├── a2
│ └── preloader-mkpimage.bin
├── ext3_rootfs.tar.gz
└── fat32
├── socfpga.dtb
├── socfpga.rbf
├── u-boot.img
├── u-boot.scr
└── zImage
  通过linux系统的minicom终端控制DE1-SOC设备,如图5-3所示。

图5-3 minicom终端

5.3 学习HPS和FPGA的地址映射

  将开发板中存储器的物理地址映射为应用程序软件可以访问的虚拟地址,需要进行以下操作。

图5-4 地址映射

  首先,open 通过系统调用打开内存设备驱动程序" /dev/mem "。
  然后mmap通过系统调用用于将HPS物理地址映射为由void指针变量virtual_base表示的虚拟地址。代码将外围区域的物理基地址(HW_REGS_BASE = 0xfc000000)映射为一个基于虚拟地址的virtual_base。对于任何外围区域的控制器,用户可以通过其相对于外围区域的偏移量与基于的虚拟地址virtual_base进行叠加来计算任何外围区域的控制器的虚拟地址。
  详细的操作步骤可参考下面链接对应的文档。
  https://blog.csdn.net/liluxiang333/article/details/113626965

5.4 将电脑与开发板通过NFS进行挂载

  通过网线连接电脑和开发板,便于将软件代码得到的可执行文件放入到SD卡中执行。
  操作步骤:
  第一步
  https://blog.csdn.net/thisway_diy/article/details/111474111

  第二步
  确保开发板可以 ping 通 Ubuntu
   minicom终端 使用ifconfig命令
  自动出现:inet addr:10.42.0.98 (开发板的IP)
  在终端使用 hostname -I
  出现两个IP 分别是ubuntu 开发板的
  使用ping 确保开发板和ubuntu能传输信号

  第三步
  在minicom终端挂载
  https://blog.csdn.net/LMmcu_2012/article/details/78566067

  第四步 实验结果

图5-5 NFS挂载完成

  第五步 取消挂载
  退出minicom终端

六、设计过程中方向上出现的问题

  (1)面对ARM和FPGA联合应用,首先应该找一个例程,运用例程来快速的理解地址映射的问题;
  (2)忽略逻辑分析仪工具的使用范畴;
  (3)过于纠结示波器文字信息编译问题。

有关基于ARM和FPGA的数字示波器设计——QMJ的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  4. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  5. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  8. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

随机推荐