## 硬禾仪器用数据传输及控制协议
本逻辑用于将高速ADC采集到的数据进行缓存,并根据上位机的需要,从缓存的数据中选出用于显示的部分进行传输,传输的方式可以是:
* 串口UART
* BLE
* WiFi
* SPI
FPGA的作用负责解析控制器发来的控制字,并根据控制字的内容从缓存中选取需要的数据
- 由ADC获取的数据或送往DAC的数据:LVDS:250MHz/8bits/4Lanes, 并行:100MHz/14bits
- 需要显示的数据:20帧/秒 * 1KPoints/帧 * 10bit/points = 200kbps
- 存储深度:ADC - 8K * 10bits * 2(通道)= 20KBytes, DAC - 4K * 12bits * 2 = 12KByte,总计32KBytes
未来在FPGA里面可以扩展的数据处理功能:
- FFT
- 数字滤波
- 模式识别
- 机器学习
FPGA内部的框图如下:
{{drawio>instru_control_data_protocol}} 数据采集FPGA逻辑功能
#### 参考文档:
* [[scope_verilog|基于FPGA逻辑的示波器设计]]
* [[up5k_scope|双通道50Msps/10MHz口袋示波器]]
### 示波器部分的功能
主要分为两部分:
#### 双口RAM
根据FPGA的内部Block RAM或外扩的RAM的实际情况设定双口RAM的大小,一般我们使用的Lattice XO2系列的FPGA内带的Block RAM为96kbits,如果采用双通道8位的高速ADC,则每个通道可以使用的RAM空间为48Kbits ~ 6KByte,考虑到高速ADC可以采用更高分辨率,比如12bit,96Kbits ~ 12bits * 2 * 4K,每个通道为4KB的存储深度。
#### 并/串变换及控制逻辑
### 任意波形发生器部分
### 直流稳压电源部分
### Waveformlive的仪器控制协议参考
* 下面的JSON数据已扩展以提高可读性。在传输之前,应将所有JSON缩小(删除空白).
* 除非另有说明,否则使用HTTP时,所有命令均使用POST方法发送.
* 所有Digilent Instrumentation协议命令必须是JSON对象或分块传输:
* **JSON对象**
* 必须以'{'字符开头,并以'}'字符结尾.
* 可能后跟一个或多个'\ r \ n'.
* **大块转移**
* 由一个或多个块组成.
* 每个块必须以ASCII十六进制格式的块中的字节数开头,后跟一个'\ r \ n',二进制数据和一个'\ r \ n'.
* 块长度在块长度和数据之间不包含'\ r \ n'.
* 块长度不包含二进制数据后的尾随'\ r \ n'.
* 每个分块传输都以零长度的分块终止.
* Ex.
6\r\n
chunk1\r\n
8\r\n
somedata\r\n
E\r\n
in\r\n\r\nchunks.\r\n
0\r\n
\r\n
#### 多命令
----
可以使用多命令在单个事务中发送多个命令。
##### 举例:
**Command**
{
"dc":{
"1":[
{
"command":"setVoltage",
"voltage":3300
},
{
"command":"getVoltage"
}
],
"2":[
{
"command":"setVoltage",
"voltage":5000
}
]
}
}
**Response**
{
"dc":{
"1":[
{
"command":"setVoltage",
"statusCode":0,
"wait":500
},
{
"command":"getVoltage",
"statusCode":0,
"wait":100,
"voltage":3300
}
],
"2":[
{
"command":"setVoltage",
"statusCode":0,
"wait":500
}
]
}
}
\\
\\
#### 波形发生器部分
提供访问任意波形发生器的数据和功能的命令
##### 获得当前状态
获得仪器通道的当前状态、
##### 命令
* ** awg ** - (Object) - 任意波形发生器的目标.
* ** # ** - (Array