无题
title: 2026 科研日志
tags: [科研日志]
password: 980528
message: 请输入密码查看文章
2026 科研日志
2026.05.28 - 06.02
艰巨任务:做一台能用的设备,并且给沈阳工大的课题组(可能黄了)封装好,至少能顺利传输RF数据,到这个级别。
现在要先测试一下新到的两块板卡,依次排查。
思路:
先测不上电情况电源对地阻抗
再测低压电源上电,不开 PHV/MHV 高压电路下的各个低压电源的情况
先只启用一颗 AFE5832,其他三颗保持 reset 或 power-down。不接 TX 高压,不接探头。AFE5832 支持 LVDS test pattern,包括 all-0、all-1、deskew、sync、custom、ramp、toggle 等,优先用这些码型验证 FPGA LVDS 接收链路
后面的先等等
4 颗 AFE5832 并行采集检查,单颗通过后,再启用 4 颗 AFE。此时重点不是验证模拟性能,而是验证多芯片同步
AFE 模拟接收链路检查,确认 LVDS 数字链路完全稳定后,再做模拟输入。TX 仍保持不发射。建议用低幅度、已知频率的安全低压信号,通过接收路径逐路注入,检查 128 路接收。AFE5832 的 TGC 模式包含输入衰减器、LNA、LPF 和 ADC,支持 12 dB 到 51 dB 总增益范围,LPF 可配置 5 MHz、7.5 MHz、10 MHz、12.5 MHz。
TX7316 低压 bring-up,不开高压,这一阶段仍然不开 PHV/MHV,只验证 TX7316 的低压电源、SPI、reset、状态脚、BF_CLK 和 T/R switch 低压侧行为。先逐颗 TX7316 做:SPI 写入/读回寄存器;确认 TR_EN1-4 可控。
T/R switch 低压检查,这一步的目标是先验证 OUT 到 RX 的低压通断关系,不验证高压发射能力。TX7316 的 T/R switch 导通电阻典型约 12 Ω,带宽 50 MHz,导通时间 0.5 µs,关断时间 1.75 µs。可以按通道做低压信号通断检查:TR_EN 关闭:OUT_x 到 RX_x 应隔离;TR_EN 打开:OUT_x 到 RX_x 应能传输低幅度测试信号;
高压发射检查,用示波器来抓发射
测试结束
1. 电源对地阻抗测试:√
| VIN_12V → PGND | 10MΩ 衰减 | √ |
|---|---|---|
| +5V → PGND | 6 MΩ 衰减 | √ |
| VCC_3V3 → GND | 15.2 kΩ | √ |
| DVDD_1.2 → GND | 164 Ω | √ |
| DVDD_1.8 → GND | 1.3 kΩ | √ |
| AVDD_1.8 → AGND | 9 MΩ 衰减 0.9 kΩ | √ |
| AVDD_1.9 → AGND | 10 MΩ 衰减 3 kΩ | √ |
| AVDD_3.15 → AGND | 7 MΩ 衰减 10 kΩ 衰减 | √ |
| AVDDP_LV5 → AGND | 1.4 kΩ 10 kΩ 跳变 | √ |
| AVDDM_LV5 → AGND | 8.5 kΩ | √ |
| +2.2V | 4.5 MΩ 衰减 1.6 kΩ | √ |
| +1.5V | 8 MΩ 衰减 1.5 kΩ | √ |
| PHV → HVGND/AGND | 4.8 MΩ | √ |
| MHV → HVGND/AGND | 13 MΩ 衰减 | √ |
如果你测的是 VIN_12V → GND,电阻档一直跳、从很低一路跳到几十 kΩ、100 kΩ,这种现象大概率是正常的,尤其是刚贴片回来的板子、电源入口后面挂了很多输入电容和 DC-DC 芯片。
原因是:万用表电阻档本质上会往被测对象里打一个小电流,然后根据电压算电阻。你测 VIN_12V 对地时,板上的输入电容会被万用表慢慢充电,所以一开始看起来像低阻,随后电容电压上升,万用表算出来的“等效电阻”就不断变大。再加上自动量程切换,所以读数会一直跳。
2. 低压上电测电压:√
| VIN_12V → PGND | 12.02V | √ |
|---|---|---|
| +5V → PGND | 5.20V | √ |
| VCC_3V3 → GND | 3.32V | √ |
| DVDD_1.2 → GND | 1.21 | √ |
| DVDD_1.8 → GND | 1.83 | √ |
| AVDD_1.8 → AGND | 1.84 | √ |
| AVDD_1.9 → AGND | 1.96V | √ |
| AVDD_3.15 → AGND | 3.20V | √ |
| AVDDP_LV5 → AGND | 5.09V | √ |
| AVDDM_LV5 → AGND | -5.01V | √ |
| +2.2V | 2.17 | √ |
| +1.5V | 1.49V | √ |
| PHV → HVGND/AGND | -0.476V | √ |
| MHV → HVGND/AGND | 0.449V | √ |
3. 通过读写SPI测试一片AFE5832:√
从0搭建一个最小系统吧,只需要SPI的IP核,xdc都保留,其他的都先不加,写一下AFE5832 和 TX7316的SPI,然后读一下,写的读的一致就行
4. 通过读写SPI测试所有的AFE和TX芯片 √
- AFE芯片通过读写Register 2h寄存器,给其写0x0100,再读回
- TX芯片通过读写 Register 1h。addr = 0x001 data = 0x00010001 这是个安全值
- 测试结果显示SPI写入好像有问题,对于AFE芯片,4片一起写没问题,写第一片也没问题,但是写2 3 4片出现bug,无法写入,SCS信号不拉低,SDATA信号也不升高,怀疑是SPI代码逻辑出现问题(之前写完SPI代码之后好像也没有测过单独给2 3 4AFE芯片的SPI写内容)
找到了问题,SPI代码里就没写关于单独写的事情,所以只能写第1片或者同时写4片,这个还是要改一下的,要改成可以支持单独写一片AFE。
| 目标 | select_chips_afe |
spi_en_wr_afe_t |
传进 spi_write 的 spi_en_afe[3:0] |
但 spi_wr_core 实际看到 |
结果 |
|---|---|---|---|---|---|
| 写第 1 片 | 4'b0001 |
4'b0001 |
4'b0001 |
spi_en_afe[0]=1 |
能启动 |
| 写第 2 片 | 4'b0010 |
4'b0010 |
4'b0010 |
spi_en_afe[0]=0 |
不启动 |
| 写第 3 片 | 4'b0100 |
4'b0100 |
4'b0100 |
spi_en_afe[0]=0 |
不启动 |
| 写第 4 片 | 4'b1000 |
4'b1000 |
4'b1000 |
spi_en_afe[0]=0 |
不启动 |
| 4 片一起写 | 4'b1111 |
4'b1111 |
4'b1111 |
spi_en_afe[0]=1 |
能启动 |
其实问题在spi_wr_core里面,给使能信号spi_en给的不对,应该是给spi_en_afe[i]

改好了,现在已经可以随意写任何AFE芯片了,不会只能4片一起写了。
并且还问到了一个问题,就是SCLK一直不显示时钟跳变,只显示拉高:是因为ILA吃的input时钟和SCLK时钟频率相同,或者说是一个时钟,就会导致这个问题,他们是同源时钟,会有每次采样都采1的情况,想要这个变化,就把ILA换一个时钟频率即可。
- 我把ila的时钟选用了100MHz,并选了第一个afe芯片,写寄存器0x2h,写了 0x0010,但是不知道为什么SCLK分成了三块,并且SCS也是fefefef,并且rdata_valid_afe信号也有一次使能,很奇怪。

我把ILA的时钟调到了300MHz,好像ok了,没有再出现上面那种情况。写第一块AFE是对的

- 但是读好像又不对了,虽然读出来的数据是对的,但是SCLK好像有问题,SCS也是。但是我还没有具体看读的代码,所以先搁置一下,后面要再确认一下,另外,我需要把尽量多的线接到ila里

读的代码应该是对的,测了一遍AFE,都是没问题的,那关于AFE单芯片及多芯片写入应该就告一段落了。以后要注意ila的时钟一定要设的时钟高一些,尽量是所测信号的频率的整数倍,并且3倍以上。

下面来测TX芯片的读写:
- 写的逻辑是对的,但是读出来的数据是错的:我现在给0x1h寄存器写00010001,读出来的是00000001
分频DIV_FACTOR = 10,(DIV_FACTOR / 2) - 1 = 4,也就是 counter 从 0 数到 4,一共 5 个 clk_in 周期,然后 clk_out 翻转一次。翻转一次只等于半个周期。因此:clk_out = 60MHz / 10 = 6MHz
章曦工程里写的DIV_FACTOR = 50,且High Speed Tx=0,那这种情况下,clk是多少Hz呢?
clk_out = clk_in / 50 = 60MHz / 50 = 1.2MHz
HIGH_SPEED_TX = 0不改变这个频率,只影响spi_rd_core.v里 读 SDOUT 的采样边沿:HIGH_SPEED_TX = 1:在 SCLK 下降沿采样 SDOUT
HIGH_SPEED_TX = 0:在 SCLK 上升沿采样 SDOUT
手册里AFE5832和TX7316规定的SPI的读写速度是多少呢?
AFE5832 SPI:最高约 20 MHz
TX7316 SPI 写:最高约 100 MHz
TX7316 SPI 读:最高约 20 MHz
这是AI通过分析手册要求的时序,得出的结论,所以现在章曦的代码中AFE的时钟是60MHz,其实是超了的,而TX7316写的时钟可以很快,只不过读的时候要降一下速度,不管如何,TX7316读有20MHz,理论上来说我之前测试的6MHz其实是ok的,不知道为什么采回来的不正确。
- 读TX有没有每次先打开读使能?
有,当前工程在每次读之前,确实会先写TX7316的0x00h寄存器,把读使能打开。不光是TX7316,AFE5832也有这个0寄存器的读使能,所以读这两个芯片,流程都是要先写,读完再写。
具体位置在spi_read_data.v里面:
1 | SPI_START: begin |
这段的含义就是:
1 | 写地址:0x00 |
发现了一个重要问题,TX芯片内部由两个DIE芯片组成,他们两个写入可以同时写入,但是读取需要分开读取。这应该就是导致之前我读的一直少一半内容的原因。下面是手册的描述原文:
1
2
3
4
5
68.5.1.3 寄存器回读
该器件支持回读内部寄存器内容的选项。此回读功能可作为诊断测试,用于验证外部控制器与器件之间的串行接口通信。SPI读操作涉及读取可能位于两个晶粒或其中一个晶粒中的寄存器。因此,回读需要进行两次——每个晶粒各一次——并按以下方式逻辑合并其输出。SPI读操作应按以下4线和6线模式进行:
1. 4线模式:使用FPGA的SCLK、SDATA、SEN和SDOUT信号,除寄存器地址0外,器件所有寄存器均可回读;参见图64。寄存器0始终保持写入模式,无法回读。任意寄存器地址的完整读操作包括以下步骤:
– 步骤1:将READ_EN位设为"01"以从die1回读。然后启动串行接口周期,指定需读取内容的寄存器地址(A[9:0])。SDATA线上的数据位为无关项,将被忽略。器件在SDOUT引脚上输出所选寄存器的32位数据(DOUT1[31:0])。
– 步骤2:将READ_EN位设为"10"以从die2回读。然后启动串行接口周期,指定需读取内容的寄存器地址(A[9:0])。SDATA线上的数据位为无关项,将被忽略。器件在SDOUT引脚上输出所选寄存器的32位数据(DOUT2[31:0])。
– 步骤3:步骤1和2中读取的寄存器地址的最终数据由DOUT1[31:0]与DOUT2[31:0]进行 或 运算得到。然而章曦目前的SPI代码,只写了DIE1读取的代码,在读之前,先写了将READ_EN位设为”01”,然后读,然后再讲0x0h寄存器设置为0x00000000以关闭读取状态。如果需要完整的读取功能,我还需要做一下步骤2和步骤3。目前整个设备能用的原因是因为一直用的是里面的写和突发写,并没有用读取功能,下一步我准备先验证是否能只读die1,看看写和读对不对,如果对的话,那就后面考虑要不要写一下这个SPI代码,补齐里面DIE2的读取功能。
对以上进行了测试,又发现了问题,可以看到,1bh可以给所有通道进行关断,那我写0x00ff00ff,然后如果读出来的是0x00ff0000,那就验证了我的想法,可经过测试,读出来的是000000ff,这是什么鬼,反而把die2的数据读出来了。

发射应该是对的
又做了一下测试:给1B寄存器,写0x00ff00fe,读回0x000000fe,写0x00fe00ff,读回0x000000ff,看来是往后16位写数据写进去了,这就很奇怪了,按理说我写的SPI代码应该是读die1的,但是反而现在只能读出die2了。
现在我们的读就是一个3步走,先写0x0h使能读die1,然后再发地址读寄存器,然后再写0x0h给0。
手册里完整的读应该是6步走,先写0x0h使能读die1,然后再发地址读寄存器,再写0x0h使能读die2,然后再发地址读寄存器,然后再把这两个数据做一个或输出,最后再写0x0h给0。
我觉得可以先这么用着,其实只要写是对的,读可以后面有空慢慢调。
把SPI IP核里面的0x0h寄存器写从0x2h改成0x4h,同样写1B寄存器,并读:
0x0h寄存器写 最后一位的二进制 手册上 实际 0x0000 0002 0010 die1使能 die2使能 0x0000 0004 0100 die2使能 die1使能 得出一个结论,应该是手册里写反了,还是要按照实际的来读SPI,但是我现在不准备改这个读SPI的逻辑了,这个就当成一个小bug先留在这把。
5. 测试高压电路
先测试0编程状态下的默认电压,章曦说是10+V
| 引脚 | 电压 |
|---|---|
| PHV-AGND | 3.91V |
| MHV-AGND | -3.955V |
6. 整理上位机代码、CTRL IP核与通过SPI下的各种指令
以yueyang的test_df_2MHz_8MHz.m为例 ,整理里面所有要用的代码与函数。
整理一下吧,放在 超声上位机 那篇文章
7. 测试整个系统在现有工程里工作
8. 写一个上位机代码,实现一键启动与保存
2026.05.25
今天看章曦三篇文章
看完了第一篇,第二篇看到了一半
2026.05.12 13
WIFI:
连上线测一下数据回环。
实验思路:
- spi主:上位机电脑;spi从:esp32 使用最高40MHz时钟来进行数据传输,从1MHz开始测,一路测到40MHz,看误码率
- spi主:esp32 ;spi从:上位机电脑 使用最高80MHz时钟来进行数据传输,从1MHz开始测,一路测到80MHz,看误码率
实验步骤:
- 接线
- 配置usb转qspi模块,包括上位机,速率,数据包等等
- 配置wifi模块,包括更改引脚复用定义,调模式,写读取qspi后的数据转发,写udp发送协议。
2026.05.11
WIFI:
定了一下wifi模块QSPI测试的实验流程:用这个qspi转usb模块做一下数据传输测试,用电脑写数据通过QSPI送到wifi芯片中,然后wifi芯片通过udp协议传输到上位机手机端,数据量先从比较小的开始,一点点测试。
今天确定了可以用esp32模块作为SPI主机,主动从FPGA的FIFO中读数据这一方法,时钟80MHz。
我将来用的其实是ESP32-C5-WROOM-1,因此引脚
现在有一些问题:
- 搞懂用哪些引脚(FSPI那边确定了,就剩其他的了:比如供电、flash、PSRAM、UART,其余还要考虑一下要不要接,这些直接抄ESP-C5的设置就可以,只是去掉不需要的线)
- spi转usb模块的上位机软件怎么用,怎么设
- esp32的寄存器怎么设置能达到我这个引脚复用的规则(看芯片手册)
FPGA:
准备重新看一下mlk的手册,学一下uifdma_dbuf,做一下仿真,还要在CPU工作站上隔离一下章曦的IP和官方的IP,减少引起冲突。
学完以后,写一下笔记。
2026.04.29
今天做一下组会的ppt,其他内容看的差不多了,剩下的时间去继续研究xillybus,尤其是上位机的代码,FPGA的代码简单过一遍就行,现在这个阶段不用过分纠结。
wifi芯片买了一个QSPI转换器,等到了测试一下链路。
2026.04.28
硬件描述图按照这样画挺不错的,可以清楚地看到所有的内容,可以学一下。
WIFI芯片可以正常使用,用IDF软件可以实现各种操作的烧写。
实现了UDP测速和UDP 256x256x8的数据包的发送
2026.04.27
目前的作息,白天看FPGA代码,各种IP核,普通采集FPGA代码要在5.5日结束,不能拖,然后DAS版本代码要在5.25结束。
2026.04.24
xillybus回环实验——成功
2026.04.23
- 跟章曦师兄聊了一下,感觉可以抽时间做一下上位机所有代码的重构解构。将matlab→C语言。感悟:代码就算是AI生成的,只要是你的盲区,还是要自己学一下,写一下,哪怕抄一下,记忆都会深刻一些。
因为matlab是顺序执行的,不是并行的,按理说应该是读写数据+成像分开执行,这样成像帧率会高,并且读取数据也会快,如果把matlab换成C语言运行,那理论上就可以提高整体的质量,成像帧率看上去也高(但是不影响采集帧率),读取速度也会变快。
和章曦师兄畅聊2h,基本规划下来了我这几年的主要路线:
*用KU5P这种不太合适的fpga先做一个32通道的可穿戴设备,就做的非常小,主要是要用SPI传输给ESP芯片,通过WIFI传到手机,然后结合商用和自研探头发论文(MST 3.9分)1。
用ZYNQ结合AFE58JD28+TX7316做一个便携式设备,把超快做在ZYNQ里面,做点算法在里面,再发一篇TIM。
- 把可穿戴优化一下,发IUS。
- 可穿戴申专利(博二上)。
- 最后还想再发一篇Q1,但是目前还没完全想好怎么弄。
- 其余就是教我了一下怎么水论文:
- 拿波束形成方法举例子,尽可能多读论文里面的最新方法,先学习一遍,快速阅读,不需要全部复现,但是要知道大概怎么流程实现,优缺点是什么→移花接木即可,好不好由自己说了算。
- 如果不知道该怎么办,也想不到别的什么方法,可以用正则化方法,总能用上。
- 如果还是不够,还可以花一个月学一下深度学习相关的东西,包括网络,各种层,然后让AI帮我提出一个新的方法,水进去即可。
齐圣:multiprocessing这个py的库可以让CPU多核做并行,cupy是让英伟达显卡并行的:决定先做做试试,看看能不能做出来
目前我准备先干下面几个事:
- 可穿戴设备直接开始做,不纠结,把wifi芯片这边看好,然后直接做
- 两个设备贴片直接贴,回来就开始烧程序测试
- 上位机C语言重构,完全自己重新写一下,学习并优化
- FPGA代码继续看,尤其是章曦第二篇文章DAS代码
第一个任务比较艰巨,需要多花时间确认wifi芯片是否ok,还是有很多变化的,尽量多付出精力
第四个任务一定要在章曦退场之前结束掉,因此这个是主线,5.20之前必须结束。
第二个任务不太需要太多时间,问题不大。
第三个任务应该只需要一个星期就可以完成,我觉得今天做完之后,后面可以作为调味剂,有空就弄弄,但是这个事是和第四个任务有一定交叉的。
2026.04.22
做xillybus的回环实验,最基础的8bit 32bit读写fifo
- 已经做好初步准备工作,4.23来了接上线就测试
做xillybus XXL版本256位的回环测试实验(没必要做了)
- 已经做好初步准备工作,4.23来了接上线就测试
2026.03.11
今天粗略结束了A_Chip_Decode并整理
2026.03.04
- 整理uiData_Fifo
2026.03.03
今天需要整理总结之前这半年的科研学习经过,捋清接下来的思路:
从去年9月到今年3月,已经过去6个月,正好半年的时间,我确定了两个关键方向:
- 可穿戴超声设备
- 基于ZYNQ的便携式超声设备
并且了解了我这个方向发论文需要先做出硬件,然后结合硬件去发算法的论文,因此我既要会硬件,又要会算法,至少要会在FPGA中部署的算法。
在这期间因为一场骨折打乱了近两个月的进度,我需要理解并接纳自己,这并不丢人。但是因为师兄马上要毕业了,接下来我要卯足了劲把FPGA先啃下来,一定要做到尽量学习完cc所有的知识库,为将来做准备。
