状态机——FPGA设计的灵魂、核脉冲数据处理谱线生成的核心

状态机——FPGA设计的灵魂、核脉冲数据处理谱线生成的核心

状态机FPGA设计的核心

FPGA作为一种并行处理的数字器件,在进行FPGA复杂的数字系统设计时,需要我们去掌握和理解他的设计思路,因为其并行的处理方式,在设计时候我们脑海中应该有一种并行的处理思想,及同一时刻,该阶段我们做了些什么操作、发生了什么,由此我们也引出了状态机的设计和使用,通过状态机能够很好的去控制我们所需要的操作,如核脉冲数字化后双口RAM谱线的生成等。

搞核脉冲数字化处理,为什么要学状态机?

首先我们要搞清楚的是不是说搞核脉冲数字化处理为什么要学状态机,而是你只要涉及到FPGA你就要搞懂状态机,因为状态机就是FPGA设计的核心,它可以让我们通过不同的状态迁移来完成一些特定的顺序逻辑。网上也有很多讲解,在此我直奔主题,推荐大家使用三段式状态机,顾名思义分三段:

  1. 第一段:时序逻辑——用于描述状态的转移。
  2. 第二段:组合逻辑——用于描述逻辑状态跳转需要满足的条件。
  3. 第三段:时序逻辑——用于描述在本逻辑状态的条件下,你需要做什么操作。
    对于那些核物理方向或者以前没有接触过FPGA的小伙伴推荐大家购买一本 吴厚航老师的深入浅出玩转FPGA,让你更清楚的去了解和认识FPGA,当然学FPGA你也需要一块开发板,不能光说不练。
    在这里插入图片描述

状态机和我们核脉冲数字化处理有何关系?

我们都知道FPGA是并行执行的,所以当我们需要一定的控制流时就需要状态机的控制,比如在处理核脉冲信号时,对谱线的处理控制中的设计,对双端口RAM的存储控制。

为什么要使用双端口RAM

双端口RAM具有A、B两个端口,具备完全独立的数据线、地址线、读写控制端口。由于FPGA数字多道系统获取的幅度信息数据量较大且需要上传到上位机进行进一步处理,而两种系统的工作时钟不同,属于异步时钟工作状态,因此使用双端口RAM能够有效实现跨时钟域数据传输问题,从而实现数据的无丢失传输,有效避免了异步时钟传输造成的亚稳态问题,并且解决了死时间的问题。谱线形成及存储的原理如下图所示,即谱线的形成及存储是将FPGA片内提取到的脉冲幅值信息按照值的大小进行统计计数的过程,通常以最大测量幅度为基准划分出若干个幅度小区间并将其映射到RAM存储器的地址上进行加一计数统计,测量过程中不断检测脉冲幅值,不断重复这个过程,最后每个记录到的脉冲都会在对应的道址上进行计数,得到的“道址-计数”分布曲线即为能谱谱线。
在这里插入图片描述

怎么用FPGA实现谱线处理

本文采用FPGA片内的真双端口RAM来存储谱线数据,这种存储方式具有较高的存取速度和可靠性,可以有效地解决跨时钟域数据传输时亚稳态和死时间数据丢失的问题。为了实现谱线的形成和存储,本论文在Vivado中编写了双端口RAM谱线形成存储的Verilog HDL代码。下图展示了谱线形成及存储算法逻辑的RTL原理图:
在这里插入图片描述
图中RAM存储器的存储地址空间为2^12=4096,由amplitude[11:0]信号传入幅值采集模块的值,read_en_a信号为获取到一个有用幅值后的信号,sclk为A端口的读写操作提供时钟信号,rst_n为模块复位信号,由幅值提取模块提供,addr_b[11:0]为B端口的地址线,clear_command为用来接收上位机命令的能谱清空信号,clear_spectrum_done为能谱清空完成后的使能信号,uart_clk是为双端口RAM中的B端口提供与上位机通信的时钟信号,read_b为最终传输到上位机的能谱数据信号,按照0-4095道进行传输。下图为利用Vivado中Simulation进行的功能仿真(前仿真)波形显示结果。
在这里插入图片描述
由图分析可知,幅值提取模块提取到的氡脉冲幅度值最终将存入到寄存器BRAM_addr[11:0]中,正确的实现了模拟脉冲幅度到能谱道址的转换,最终将寄存器中的值写入对应真双端口RAM中的写地址amplitude[11:0]和读地址addr_b[11:0],准确对相应道址上的数据进行了累加计数。
部分代码展示如下所示:
在这里插入图片描述
状态机如下图所示:
在这里插入图片描述
普线生成代码,需要配合一个明令解析模块,使用双口RAM有效的降低了核脉冲信号中数据流的处理,所以对该模块的设计和使用变得尤为重要,如果对代码感兴趣可联系我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

777你猜猜777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值