title: 2026 科研日志
tags: [科研日志]
password: 980528
message: 请输入密码查看文章

2026 科研日志

2026.05.28 - 06.02

艰巨任务:做一台能用的设备,并且给沈阳工大的课题组(可能黄了)封装好,至少能顺利传输RF数据,到这个级别。

现在要先测试一下新到的两块板卡,依次排查。

思路:

  1. 先测不上电情况电源对地阻抗

  2. 再测低压电源上电,不开 PHV/MHV 高压电路下的各个低压电源的情况

  3. 先只启用一颗 AFE5832,其他三颗保持 reset 或 power-down。不接 TX 高压,不接探头。AFE5832 支持 LVDS test pattern,包括 all-0、all-1、deskew、sync、custom、ramp、toggle 等,优先用这些码型验证 FPGA LVDS 接收链路


    后面的先等等

  4. 4 颗 AFE5832 并行采集检查,单颗通过后,再启用 4 颗 AFE。此时重点不是验证模拟性能,而是验证多芯片同步

  5. AFE 模拟接收链路检查,确认 LVDS 数字链路完全稳定后,再做模拟输入。TX 仍保持不发射。建议用低幅度、已知频率的安全低压信号,通过接收路径逐路注入,检查 128 路接收。AFE5832 的 TGC 模式包含输入衰减器、LNA、LPF 和 ADC,支持 12 dB 到 51 dB 总增益范围,LPF 可配置 5 MHz、7.5 MHz、10 MHz、12.5 MHz。

  6. TX7316 低压 bring-up,不开高压,这一阶段仍然不开 PHV/MHV,只验证 TX7316 的低压电源、SPI、reset、状态脚、BF_CLK 和 T/R switch 低压侧行为。先逐颗 TX7316 做:SPI 写入/读回寄存器;确认 TR_EN1-4 可控。

  7. 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 应能传输低幅度测试信号;

  8. 高压发射检查,用示波器来抓发射

  9. 测试结束

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芯片 √

  1. AFE芯片通过读写Register 2h寄存器,给其写0x0100,再读回
  2. 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_writespi_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]

image-20260602143606427

改好了,现在已经可以随意写任何AFE芯片了,不会只能4片一起写了。

并且还问到了一个问题,就是SCLK一直不显示时钟跳变,只显示拉高:是因为ILA吃的input时钟和SCLK时钟频率相同,或者说是一个时钟,就会导致这个问题,他们是同源时钟,会有每次采样都采1的情况,想要这个变化,就把ILA换一个时钟频率即可。

  • 我把ila的时钟选用了100MHz,并选了第一个afe芯片,写寄存器0x2h,写了 0x0010,但是不知道为什么SCLK分成了三块,并且SCS也是fefefef,并且rdata_valid_afe信号也有一次使能,很奇怪。image-20260602190054251

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

image-20260602193703354

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

image-20260602194413505

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

image-20260602195652996

下面来测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
2
3
4
5
6
SPI_START: begin
addr_r <= 16'd0;
data_r <= 32'h2;
...
rd_wr_flag <= 2'd1;
end

这段的含义就是:

1
2
写地址:0x00
写数据:0x00000002
  • 发现了一个重要问题,TX芯片内部由两个DIE芯片组成,他们两个写入可以同时写入,但是读取需要分开读取。这应该就是导致之前我读的一直少一半内容的原因。下面是手册的描述原文:

    1
    2
    3
    4
    5
    6
    8.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的数据读出来了。

image-20260603153028935

发射应该是对的image-20260603162022257

又做了一下测试:给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:

连上线测一下数据回环。

实验思路:

  1. spi主:上位机电脑;spi从:esp32 使用最高40MHz时钟来进行数据传输,从1MHz开始测,一路测到40MHz,看误码率
  2. 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

image-20260428105650575

硬件描述图按照这样画挺不错的,可以清楚地看到所有的内容,可以学一下。

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是让英伟达显卡并行的:决定先做做试试,看看能不能做出来

目前我准备先干下面几个事:

  1. 可穿戴设备直接开始做,不纠结,把wifi芯片这边看好,然后直接做
  2. 两个设备贴片直接贴,回来就开始烧程序测试
  3. 上位机C语言重构,完全自己重新写一下,学习并优化
  4. 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个月,正好半年的时间,我确定了两个关键方向:

  1. 可穿戴超声设备
  2. 基于ZYNQ的便携式超声设备

并且了解了我这个方向发论文需要先做出硬件,然后结合硬件去发算法的论文,因此我既要会硬件,又要会算法,至少要会在FPGA中部署的算法。

在这期间因为一场骨折打乱了近两个月的进度,我需要理解并接纳自己,这并不丢人。但是因为师兄马上要毕业了,接下来我要卯足了劲把FPGA先啃下来,一定要做到尽量学习完cc所有的知识库,为将来做准备。