十路逻辑分析仪设计b
Tags
Logic Analyzer Development
State Machine Modeling
Hardware Architecture Design
Last edited by
AI summary
设计了一种十路逻辑分析仪,具有实时信号采集、支持高频信号和独立电路设计的优点,但成本较高。逻辑分析仪通过PS2键盘进行人机交互,采样率为80MHz,支持单次和连续采样。设计包括信号采集电路、波形显示和VGA接口驱动,确保模块间功能独立。通过特定规则将采集数据转换为波形图像,并实现键盘按键功能分析以控制电路状态。
Last edited time
Nov 5, 2024 01:59 PM
第一节:认识逻辑分析仪1.1 逻辑分析仪的工作原理1.2 基于ZX-1开发板的逻辑分析仪设计1.2.1 需求分析1.2.2 架构设计第二节:程序设计与实现2.1 信号采集电路设计与实现2.1.1 端口信号说明2.2 波形显示2.2.1 构图程序设计2.2.2 vga接口驱动程序设计2.3 人机交互2.3.1 基本设备(PS2键盘)交互的电路设计2.3.2 程序设计2.3.2.1 PS2接口驱动电路设计2.3.2.2 键盘译码电路实现2.3.2.3 按键功能分析电路实现
第一节:认识逻辑分析仪
逻辑分析仪就是用来抓取数字电路电路中的信号,对抓取的信号进行逻辑分析电路,从应用设计角度可将逻辑分析分为以下2种:
嵌入式逻辑分析:就是将逻辑分析仪电路嵌入到数字电路设计电路中的一种方式
优点:
- 实时抓取数字电路中任何信号
- 当我们设计电路的时候,前期需要调试电路,作为调试电路的一部分的。
缺点:
- 一般用于观测低频信号
- 占用设计电路的设计资源
由于FPGA的高度灵活性,很适合将逻辑分析嵌入到其中,作为调试电路使用,因此各大厂商都会提供相关的IP核以及分析软件。
在实际使用的时候我们只需要产生参数配置文件,不需要在源程序中例化IP核,就可以使用逻辑分析仪的IP核。
非嵌入式逻辑分析仪:逻辑分析仪电路和数字电路设计电路分离,各自独立。
优点:
- 实时采集信号,并且一定程度上可以采集高频信号
- 一般可以在电路设计的任何阶段使用
- 不占用设计资源
缺点:
- 严格上来说只能采集引脚的信号
- 造价高
1.1 逻辑分析仪的工作原理
逻辑分析仪主要用来采集信号,分析信号之间逻辑关系,它的工作可以用一下图表示:
N:逻辑分析仪通道数,例如N=10就是十路逻辑分析仪
DEPTH:采样深度,即采样点数,理论上采样点数越多,所能分析的波形范围越广
1.2 基于ZX-1开发板的逻辑分析仪设计
1.2.1 需求分析
由于我们无法编写配套的上位机软件,人机交互我们使用PS2键盘,不采用JTGA上传采样数据,直接通过VGA显示波形。
设计需求:
采样率:规定原始参考采样率为时钟80mhz采样时钟,采样支持抽取
通道数:规定N=10
采样点数:规定1024个点
人机交互:使用PS2键盘
采样控制:支持单次采样,连续采样
触发:支持单通道触发,不支持多通道触发,原6种触发方式
波形分析:使用vga直接显示波形,规定分别分辨率为640*480
1.2.2 架构设计
硬件设计一般采用自定向下设计,先设计架构,从架构层层往下设计,架构指的是顶层电路的设计。
第二节:程序设计与实现
设计采用自定向下设计,逐个模块往下设计,各个模块之间保持功能独立性
2.1 信号采集电路设计与实现
功能:在人机交互的控制下,采集各个通道的数字信号的数据,将采集到的所有数据存入存储器。
2.1.1 端口信号说明
信号名 | 描述 |
系统相关 | ㅤ |
clk_s | 采样参考时钟,默认80mhz |
rst_n | 系统复位 |
采样通道输入 | ㅤ |
ch[9:0] | 采样通道,默认10路 |
双端口ran写相关 | ㅤ |
wr_clk | 双端口ram写时钟 |
wr_en | 双端口ram写使能 |
wraddr[9:0]
| 双端口ram写地址 |
wrdata[9:0] | 双端口ram写数据 |
人机交互相关 | ㅤ |
run | 当run==1表示开始信号采集 |
msel[2:0] | 触发方式选择msel[2:0]触发方式图形示意0无条件触发 1低电平 2下降沿 3上升沿 4高电平 5双沿
|
chsel[3:0]
| 0:0通道
1:1通道
… |
en_sap | 当en_sap==1抽取数据 |
2.2 波形显示
功能:将采集到的待分析的信号的数据通过vga接口直接显示到现实设备上,默认采集数据1024点,vga分辨率640*480.
分析:根据目前电路功能要求,我们不难看出整个可以划分为2个子电路(包含2个独立的功能),分别是vga接口驱动,波形构图。
Vga接口 :驱动vga接口,模拟vga的时序和协议
波形构图:由于待观测的信号的采集到的是数据,数据本身并非可以直接显示为波形,所以我们需要通过设计转化为图像,然后显示在显示设备上。
按照自定向下设计方法,按功能划分,保持模块独立性等原则,我们将该电路模块相下划分2个子模块。
2.2.1 构图程序设计
功能:将采集到的待分析的信号的数据按照一定的规则形成图像
- 端口描述
信号名 | 描述 |
系统相关 | ㅤ |
clk_v | 像素时钟 |
rst_n | 系统复位,低电平有效 |
双端口ram读有关信号 | ㅤ |
rd_clk | 双端口ram读时钟 |
rdaddr[9:0] | 双端口ram读地址 |
rddata[9:0] | 双端口ram读数据 |
显示平面有相 | ㅤ |
x_cdt[9:0] | 显示平面水平坐标 [0:639] |
y_cdt[8:0] | 显示平面垂直坐标 [0:479] |
color[7:0] | 显示平面像素点的颜色
理论上最多显示256色 |
人机交互控制 | ㅤ |
mark[9:0] | 时间刻线水平移动坐标 |
scop[8:0] | 波形水平移动坐标 |
- 如何构图?
构图就是按照一定的规则把采集的数据转换为波形图像,这个规则完全自己定义,也可以参考其它,比如modelsim波形显示,….
本设计参考modelsim波形显示,按照它的规则构图,显示效果如下:
水平:显示波形
垂直:将不同的波形分割
显示平面垂直480行,可以选择一部分显示波形,另外一部分当做空白区域,也可以全部显示,假如全部显示,每路波形占用480/10=48行,为了避免各路信号之间粘连,我们需要对每路信号进行分割,假如全部显示,并且每路上下预留8行分割带,显示区域只有32行,具体显示范围如下:
ch[9:0] | 显示范围 | ch[9:0] | 显示范围 |
ch[0] | ((48*0) + 8) : ((48*1) - 9) | ch[5] | ((48*5) + 8) : ((48*6) - 9) |
ch[1] | ((48*1) + 8) : ((48*2) - 9) | ch[6] | ((48*6) + 8) : ((48*7) - 9) |
ch[2] | ((48*2) + 8) : ((48*3) - 9) | ch[7] | ((48*7) + 8) : ((48*8) - 9) |
ch[3] | ((48*3) + 8) : ((48*4) - 9) | ch[8] | ((48*8) + 8) : ((48*9) - 9) |
ch[4] | ((48*4) + 8) : ((48*5) - 9) | ch[9] | ((48*9) + 8) : ((48*10) - 9) |
全屏显示通道分割表(上下预留8行分隔带)
图层 :共4个图层
3:时间刻线图层
2:波形图层
1:栅格线图层
0:背景图层
2.2.2 vga接口驱动程序设计
- 端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk_v | 像素时钟=总像素点个数*刷新率
60*800*525= 25.2mhz |
rst_n | 系统复位,低电平有效 |
Vga接口相关 | ㅤ |
hs | 行同步信号 |
vs | 场同步信号 |
red[2:0] | 红色分量 |
green[2:0] | 绿色分量 |
blue[1:0] | 蓝色分量 |
显示平面有相 | ㅤ |
x_cdt[9:0] | 显示平面水平坐标 [0:639] |
y_cdt[8:0] | 显示平面垂直坐标 [0:479] |
color[7:0] | 显示平面像素点的颜色
理论上最多显示256色 |
2.3 人机交互
在数字电路设计中正常情况下电路上电之后自动运行,当我们需要改变运行状态的时候可以通过2种方式实现,如下:
状态机 :如果电路运行状态切换的条件是由电路本身决定,我们把这种电路设计叫做状态机。
人机交互:在正常电路运行状态的情况下,我们通过外部输入干扰因素控制改变内部电路运行状态,我们这种应用的电路设计叫做人机交互。
人机交互在数字电路设计和状态机一样是一种比较常见的电路设计,在一些应用场景会用到,一般交互方式有2种:
- 命令参数解析法
这种大部分用在硬件(下位机)和软件(上位机)之间实现交互,简单说就是软件控制硬件的电路运行状态,如sigtap通过上位机给下位机发送命令或者参数实现状态控制。
这种方法咋具体电路实现的时候通过寄存器配置实现
- 设备交互法
一般通过中断类设备(键盘,鼠标,游戏句柄….)交互,终端类设备发送中断数据,咱们解析中断数据(数据类型由设备本身决定),从而控制电路运行状态。
按照嵌入式逻辑分析仪的工作原理可以看出,本身需要人机交互的参与,因此我们需要设计这样的电路,基于ZX-1开发板,我们选择PS2键盘(属于中断类设备)作为我们的交互设备,采用以上第2种方式实现人机交互。
2.3.1 基本设备(PS2键盘)交互的电路设计
设计的基本思路是我们选择部分按键(我们自己选择)作为我们的功能按键,给我们选择的按键分别赋予一定的功能(需要我们自己定义功能),通过按键控制改变当前点运行状态。
- 选择部分按键
单次触发 :O (one )
连续触发 :C (Continu)
停止连续触发:S(Stop)
触发方式选择 :M(mode)
触发通道选择 :H(CH)
抽取 :B(bleed)
时间刻线左移:<-
时间刻线右移:->
波形左移 :A
波形左移 :D
- 按键功能定义
PS2键盘的按键采用国际通用编码,用键值表示按键
按键 | 按键值
Key[8:0]
Key[8]==0:表示普通按键
Key[8]==1:表示扩展按键
Key[7:0]:按键值 | 相关电路状态控制信号 | 描述 |
O | 8’h044 |
run | 单次触发
每按一次按键采集一次数据 |
C | 8’h021 | ㅤ | 连续触发
每按一次按键连续采集数据 |
S | 8’h01B | ㅤ | 连续触发停止
每按一次按键停止当前练习采集数据 |
M | 8’h03A | msel[2:0] | 每按一次按键改变一次触发模式 |
H | 8’h033 | chsel[3:0] | 每按一次按键改变一次触发通道 |
B | 8’h032 | fsel[2:0] | 默认预设8种抽取操作fsel[2:0]抽取采样率(单位HZ)080mhz140mhz220mhz310mhz45mhz51mhz6800khz7500khz
|
<- | 8’h16B | mark[9:0] | 按一次按键时间刻线水平左移K列 |
-> | 8’h174 | ㅤ | 按一次按键时间刻线水平右移K列 |
A | 8’h01C | scop[8:0]
| 按一次按键波形水平左移J列 |
D | 8’h023 | ㅤ | 按一次按键波形水平右移J列scop[8:0]
|
2.3.2 程序设计
本设计采用PS2键盘,按照当前要求我们可以看出有3分布功能,分别是:
- PS2接口驱动
模拟PS2接口时序,接收PS2数据
- 键盘译码
因为当前使用的键盘,因此需要译码,确定按键
- 按键功能分析
对功能按键进行分析,从而产生相应的电路运行状态控制信号
2.3.2.1 PS2接口驱动电路设计
2.3.2.2 键盘译码电路实现
功能:按照键盘编码规则对按键进行译码,输出按键的码值(默认9位表示)
编码规则:
通码: 按键被按下发送的码值
普通码:码值
扩展码:8’HE0 + 码值
断码 :按键被抬起发送的码值
普通码:8’HF0 + 码值
扩展码:8’HE0 + 8’HF0 + 码值
译码本质上就是输出每个按键的键值(区分扩展码和普通码),在实际应用中输出通码的键值。
- 端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk_s | 默认80mhz |
rst_n | 系统复位 |
pS2接收数据 | ㅤ |
rvdata[7:0] | Ps2接收的数据 |
flag_rvdata | 当flag_rvdata==1表示rvdata[7:0]有效 |
键盘译码输出 | ㅤ |
flag_key | 当flag_key==1表示key[8:0]有效 |
key[8:0] | 键盘译码输出
Key[8]==0:表示普通码
Key[8]==1:表示扩展码
Key[7:0]:通码的键值 |
- 译码电路状态机设计
2.3.2.3 按键功能分析电路实现
功能:根据我们已经功能按键产生响应的控制条件信号,从而控制电路运行状态
信号名 | 描述 |
系统相关 | ㅤ |
clk_s | 默认80mhz |
rst_n | 系统复位 |
键盘译码 | ㅤ |
flag_key | 当flag_key==1表示key[8:0]有效 |
key[8:0] | 键盘译码输出
Key[8]==0:表示普通码
Key[8]==1:表示扩展码
Key[7:0]:通码的键值 |
人机交互控制相关 | ㅤ |
run | 当run==1表示逻辑分析仪开始采集信号 |
msel[2:0] | 逻辑分析仪采集信号触发方式选择
0:5 |
chsel[3:0]
| 逻辑分析仪采集信号触发通道选择
0:9 |
mark[9:0] | 逻辑分析仪波形显示时间刻线水平移动坐标值
0:639 |
scop[8:0] | 逻辑分析仪波形显示波形水平移动坐标值
0:383 |
Loading...