
开源协议
:MIT License
(未经作者授权,禁止转载)描述
项目简介
起初是用来内部测试用的机器,后来索性直接开源了.
本设计是一款基于FPGA和STM32双核架构的高速脉冲发生器,专为多通道同步触发和高速脉冲生成需求设计。
项目功能
多通道脉冲生成:支持至少16通道独立/同步输出 ,脉冲宽度、频率、延时参数可编程,分辨率达纳秒级。
时钟自校准:通过辅助信号可以进行高精度时钟校准
通信:支持Console命令控制,SCPI控制,既可以直接使用串口命令行交互,也可以直接使用配套上位机交互.
项目参数
- 采用FPGA+STM32双核架构
- 输出通道:32通道高精度脉冲
- 高精度脉冲:
- 脉冲重复频率:0.5Hz - 50MHz*
- 输出脉冲重复频率:100Hz - 10MHz
- 通道延迟时间:500ps - 1/f
- 理论脉宽: 0* - 1/f
- 输出脉宽: 20ns - 1/f
- 时间精度: 500ps(理论值)
- 输出电压: 3.3V LVCMOS
- 工作电压: 12V
- 功耗: 12W
- 4L单面器件PCB,大幅降低成本
*:理论值,实际受到IO限制
接口列表

红框(网口旁边那个)是单片机的BOOT设置,记得找个跳线插上去
原理解析(硬件说明)
代码见附件(包括HDL和C)

本项目的核心是一个超高精度和时基的定时器.诚然有许多种不同的方法可以产生精度更好的脉冲,但本设计的限制(需要多通道合成)导致无法使用其他方法实现,便采用这种笨方法实现脉冲了.

每个脉冲通道原理是使用多个并行比较器合成,而后使用oserdes输出脉冲信号.理论上可以使用GT输出更高频率的脉冲,但是我没做,而是使用了SelectIO实现.本设计使用8个子定时器,这样脉冲输出速度可以达到子定时器的八倍.
根据不同的FPGA,可以实例化16个或者32个通道(这玩意很吃资源和P&R,虽然一个通道只需要1000个CLB,但是极占布线资源.因此35t只建议实现16通道,而100t建议实现32通道.
上文的定时器位宽都是32位,若你不需要这么高的精度,可以自行在源码修改(如24位),可以降低资源消耗.
FPGA和上位机使用SPI通信,类似内存映射模式.
对于FPGA来说,本系统的时钟有多个,一个是外部输入时钟,一个是STM32的PLL2输出时钟给FPGA,最后一个是MS5351输出的时钟给FPGA.一般STM32的PLL作为主要时钟输入.时钟可以通过指令切换源.
STM32与FPGA通过SPI通信,其实是另一种内存映射.

电源输入部分使用12V DC2.1插座,而后使用MOS管做电子开关,使用前面板的开关来控制系统电源,而后使用L6滤波后作为系统主电源.

系统电源也是非常简单,由于这个只有一个A7和一个H5,吃不了多少功耗,随便上了几个sot23-6的电源芯片作为主供电,LDO给GT供电即可.
端口线序如下所示

其余的硬件设计不再阐述,是非常基本的FPGA最小系统设计和STM32系统设计.
最终装配指南见"减配指南"文档,这个文档编辑了最后符合本系统的装配图,以及对应的BOM表,用户可以使用这个文档的BOM表匹配哪些元器件需要装配.
SDRAM非必需,本项目也用不了,纯粹是我为了测试功能不浪费引脚上的.
以太网本来是想用的,芯片上错了,上成了STM32H562,这个没以太网就不实现了.
项目内部还有一个选件的遗留项目,选件由于脑抽画错了导致不能使用,而连接板由于铝壳卖完了(非标品)也用不了.不过大部分情况有这个主板就好了,别的只是Addiction.
这个选件的目的是动态高压输出,基于TPS61170的动态调压特性实现.相信懂的人都懂.
使用方法
本设备的前面板有一个开关,两个插槽,一个USB接口.USB接口用于和上位机连接,也支持SCPI指令.
后面板有电源开关,复位按钮,参考时钟输入和输出,以及串口.串口用于连接console页面,通过console页面来操作设备更为简单.
console操作方法:
连接后面板USB口,波特率2000000,八位无校验,重启后按TAB可以见到如下指令表

你只需要关注rsplg开头的函数即可,操作顺序为:
pulseconfig(配置脉冲输出)->pulsesync(多通道同步)->timsave(若需要下次上电保留参数)
指令操作方法可以输入rsplg.man搜寻
若需要微调时钟,示波器测量RF3 SMA接口,使用rsplg.osctrim来微调频点即可
reboot可以快速复位系统
上位机操作方法:
连接前面板USB口,打开上位机软件,进入主面板,点击RSPLG,选择参数(串口号,型号)

点击进入页面

剩下的任君自由修改.注意应用只是预览,要点击设置才能正确配置到下位机
SCPI操作方法:
注意,这部分未测试,仅做拓展用途
连接前面板USB口,波特率460800,八位无校验,打开串口软件输入指令即可.
需要注意的是所有指令前需要加':'(ANSI冒号),设备才能正确识别,这一点和标准的SCPI指令不一样.
支持以下指令
1.*RST - 系统复位
指令格式: *RST
功能描述: 执行系统硬复位,将设备恢复到初始状态
参数: 无
说明: 该指令会触发NVIC系统复位,相当于硬件重启设备
示例:
*RST
2.PULSer:CONFig - 脉冲配置
指令格式: PULSer:CONFig <通道>,<频率>,<延迟>,<脉宽>,<极性>
参数说明:
<通道>:脉冲通道编号
<频率>:脉冲频率(Hz)
<延迟>:脉冲延迟时间
<脉宽>:脉冲宽度
<极性>:脉冲极性(0=正脉冲,1=负脉冲)
功能描述: 配置指定通道的脉冲参数
返回值: 成功返回OK,参数错误返回错误
示例:
PULSer:CONFig 0,1000000,100,50,0 # 配置通道0:1MHz频率,100ns延迟,50ns正脉冲
PULSer:CONFig 1,5000000,200,100,1 # 配置通道1:5MHz频率,200ns延迟,100ns负脉冲
3.PULSer:SAVE / TIMer:SAVE - 保存配置
注:这两个指令功能一样,只是方便使用重命名
指令格式: PULSer:SAVE <通道> 或 TIMer:SAVE <通道>
参数说明:
<通道>:要保存配置的通道编号
功能描述: 将指定通道的脉冲/定时器配置保存到非易失性存储器
返回值: 成功返回OK,参数错误返回错误
示例:
PULSer:SAVE 0 # 保存通道0配置
TIMer:SAVE 1 # 保存通道1配置
4.TIMer:CONFig - 定时器配置
指令格式: TIMer:CONFig <通道>,,,,<模式>,<触发>
参数说明:
<通道>:定时器通道编号
:自动重载值
:比较值A
:比较值B
<模式>:定时器工作模式
<触发>:触发使能(0=禁用,1=启用)
功能描述: 直接配置定时器硬件寄存器参数
返回值: 成功返回OK,参数错误返回错误
示例:
text
TIMer:CONFig 0,399,300,400,6,1 # 配置通道0定时器
TIMer:CONFig 1,49,0,100,6,0 # 配置通道1定时器
注意事项
- vivado运行环境为Ubuntu20.04,vivado 2020.2,MDK运行环境为Windows10,AC6编译器,其他环境出问题恕不解答
- 输出没有下拉电阻,连接到DUT时记得加下拉电阻吸收振铃.
- 记得给BOOT找个跳线插上去
- FPGA的FLASH要改为xxQ128,不能用xxQ256
- RF4是单片机的32768输出,由于没有合适的超级电池,这部分弃用
- 单片机的EEPROM要选用24C16,不可太大(地址模式不一样)也不可太小(东西写不进去)
- 不同通道在下文此处更改,最多支持32通道,约束已做好
//dir:user/rsplg101_top.v
module rsplg101_top #(
parameter VERSION = 16'h8002,
parameter ADDR_BITS = 3,
parameter AW = 8*ADDR_BITS-1,
parameter PWM_CH = 'd16,//<-here
parameter DO_INT_W = 17,
parameter PWM_WIDTH = $clog2(PWM_CH)
)(
- 由于上传限制,不上传完整vivado工程,请根据脚本构建
- vivado工程芯片为7a100t,其余版本请自行适配,仅提供100t工程16通道的固件
- 综合后不知为何在impl版本会失败,再综合一次就好了
- 100t版本32通道会极其拖延综合时间,慎用
测试图
注:受到测量方法和端口匹配的限制,脉宽可能不是很准,仅供参考

输入: tpw:95ns,f=50kHz.

输入: tpw:810ns,f=19.198kHz(Actual=19,198.279Hz).

输入:
ch 00: freq = 250.000kHz, tpw = 2.250us, tdelay = 0.000ns, Polar : NEG.
ch 01: freq = 250.000kHz, tpw = 900.000ns, tdelay = 50.000ns, Polar : POS.

输入: tpw:50ns,f=2.5MHz.

输入: tpw:25ns,f=10MHz.
实物图


视频见附件
开源工程和引用链接
MIT License
Copyright (c) 2019 Letter
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
BSD 2-Clause License
Copyright (c) 2012-2018, Jan Breuer
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










