干货 | 如何利用 7 系列 FPGA 中的 POST_CRC 试错

本文介绍了如何在FPGA配置过程中使用POST_CRC进行单粒子翻转(SEU)检测,以及如何通过编辑PRE_COMPUTEDCRC值来测试错误。然而,赛灵思推荐在新架构中使用SoftErrorMitigation(SEMIP)以提供更强的调试能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击蓝字关注我们

关注、星标公众号,精彩内容每日送达
来源:网络素材

注意:本博文介绍了利用 POST_CRC 试错的方法,但总体而言,赛灵思推荐在所有架构上使用 Soft Error Mitigation (SEM) IP。SEM IP 提供了一种可用于测试 SEU 检测与纠正能力的机制并提供了更强大的调试能力。

本博文中讨论的功能仅支持 7 系列器件。

43b1fd37d22454827f0e3e68111c359e.jpeg
  1. 一般 CRC 校验

在一般比特流加载过程中,CRC 校验利用 CRC 寄存器进行。该“CRC 寄存器”的描述详见《7 系列 FPGA 配置用户指南》(官网搜索 UG470)。

FPGA 在比特流被加载时计算 CRC 值,然后该值与在比特流加载结束时预期的 CRC 值进行比较。如果两个值匹配,则FPGA 成功加载。

一般情况下默认启用 CRC 校验。比特流属性为 BITSTREAM.GENERAL.CRC,其中有效选项包括“ENABLE”(启用)或“DISABLE”(禁用)。

  1. 回读 CRC/POST CRC 校验

POST_CRC 校验在配置 FPGA 之后,设计运行过程进行。

一般情况下,比特流 CRC 校验是一种独立功能,具有其自己的 CRC 校验寄存器。POST_ CRC 校验具有用于存储校验值的不同以上比特流 CRC 的寄存器。

启用 POST_CRC 校验的目的

启用 POST_CRC 校验的目的是检测单粒子翻转 (SEU)。SEU 导致配置存储器中的数位翻转。POST_CRC 可与 FRAME_ECCE2 原语配合使用,以便提供针对此等错误的额外功能和更好的可见性。我们可利用 FRAME_ECCE2 的输出监控错误检查和纠正 (ECC) 和回读 CRC 电路的状态。

如需了解更多有关 FRAME_ECCE2 原语的详细信息,请参阅《Vivado Design Suite 7 系列 FPGA 和 Zynq-7000 SoC 库指南》(官网搜索 UG953)。

用户通常想要测试这种崩溃发生时的实例,以便确保此等错误被成功检测到。测试插入错误的一种方法是编辑 PRE_COMPUTED CRC 值。

测试插入错误的步骤

将以下设置放置在设计 XDC 中:

set_property POST_CRC ENABLE [current_design]

#Enables the Post CRC checking


set_property POST_CRC_SOURCE PRE_COMPUTED [current_design]

#Determines an expected CRC value from the bitstream


set_property POST_CRC_ACTION CONTINUE [current_design]

#Even if a CRC error is detected, continue CRC checking.

#Other options include HALT, CORRECT_AND_CONTINUE and CORRECT_AND_HALT

set_property POST_CRC_INIT_FLAG ENABLE [current_design]

#Leaves the INIT_B pin enabled as a source of the CRC error signal. Useful especially if FRAME_ECC is not used

如需了解更多有关这些设置的详细信息,请参阅《Vivado Design Suite 属性参考指南》(官网搜索 UG912)。

运行设计流程并生成比特流。在生成了比特流之后,PRE_COMPUTED CRC 的值可在 .bit 文件中校验。该值会是非零值。

26388768496161ee047f49bf13774f46.png

若要确定 PRE_COMPUTED CRC 值在比特流中的哪个位置,可查阅《7 系列 FPGA 配置用户指南》(UG470) 中的示例 7 系列比特流。

882ef12aab30e06725ee132d4cf3b976.png

若要测试插入错误,您就要禁用一般 CRC 校验,以便让比特流成功载入。切记,如果对位于正常 CRC 覆盖范围内的比特流进行了任何编辑,即会标注 CRC 错误并阻止比特流加载。

若要禁用一般 CRC 校验,您应使用以下设置:

set_property BITSTREAM.GENERAL.CRC DISABLE [current_design]

#Disables the general CRC checking


set_property POST_CRC ENABLE [current_design]

#Enables the Post CRC checking


set_property POST_CRC_SOURCE PRE_COMPUTED [current_design]

#Determines an expected CRC value from the bitstream


set_property POST_CRC_ACTION CONTINUE [current_design]

#Even if a CRC error is detected, continue CRC checking.

#Other options include HALT, CORRECT_AND_CONTINUE and CORRECT_AND_HALT


set_property POST_CRC_INIT_FLAG ENABLE [current_design]

#Leaves the INIT_B pin enabled as a source of the CRC error signal.Useful especially if FRAME_ECC is not used

再次运行设计流程并生成比特流。

在生成比特流之后,您应观察 PRE_COMPUTED CRC 的值是否为零。这是禁用 GENERAL.CRC 的结果,以便进行错误测试。

由于预计有前面的非零值,要配置器件并观察其行为。

INIT_B 引脚的监控应显示 CRC 错误。

FRAME_ECCE2 也可被用于接收连接到 ILA 上的 FRAME_ECCE2 发出的输出信号。然后它将有可能观察到 CRCERROR。

下文的例化可被用于 FRAME_ECCE2 原语的连接:

ed9826c86f158e9f171269cd5eec24ad.png

然后输出可被传输给 ILA。

当器件被编程后,通过校验 ILA 上的信号,它应有可能查看类似于以下示例的输出。例如,由于未找到预期的非零 PRE_COMPUTED 值,标注了 CRCERROR 错误。

62376a07dabe95c45ad2ed41045a74fa.png

可以理解的是,大部分用户都想要测试错误检测,以确定在此等错误被检测到时,将会以某种形式予以报告。该测试可让用户坚信,在真实的情景中,错误会被正确检测并报告。

如上文所述,由于 SEM IP 所提供的能力,赛灵思推荐使用 SEM IP,而不是 POST_CRC。POST_CRC 的功能在较新的架构中不受支持。

affae4fd1d4a8ea177540532a3597960.jpeg

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

### FPGA GPIO 到 USB 转换的实现 #### 实现概述 FPGA 的 GPIO 到 USB 转换是一种常见的设计需求,尤其是在嵌入式系统中。这种转换可以通过多种方式完成,具体取决于目标应用的需求以及可用资源。一种常见的方式是利用 FPGA 内部逻辑来模拟 USB 协议栈并将其连接至外部物理接口芯片(如 USB PHY)。另一种方法则是借助专用 IP 核或第三方解决方案简化开发流程。 在实际项目中,可以参考类似 CCI (Camera Control Interface) 的架构思路[^2],其中硬件模块负责处理复杂的协议交互,而软件仅需向命令队列发送简单的指令即可完成操作。这种方法不仅提高了系统的稳定性,还显著降低了驱动程序复杂度。 对于具体的实现细节,可以从以下几个方面入手: --- #### 1. **USB 协议支持** 为了使 FPGA 支持 USB 功能,通常需要引入 USB 控制器核心或者使用软核实现完整的 USB 协议栈。这涉及到数据包封装/解封、握手信号管理等功能。如果采用硬核控制器,则可以直接调用其寄存器访问 API 来构建通信链路;如果是纯 RTL 设计,则可能需要用到 RAL 函数库中的读写映射机制[^3]。 --- #### 2. **GPIO 接口适配** 针对输入输出端口部分,应考虑如何高效地将通用 IO 映射成符合 USB 数据格式的标准帧结构。例如,在某些情况下可通过 FIFO 缓冲区暂存待传输的数据流,并由状态机控制何时触发中断请求通知主机设备准备接收新信息。 此外还需注意电平匹配问题——由于大多数现代微处理器工作电压低于传统 TTL/CMOS 标准,因此建议加入额外缓冲电路确保兼容性良好。 --- #### 3. **综合设计方案推荐** 目前市面上已有成熟的商业产品可供选择作为参考案例之一便是 Xilinx 提供的技术文档《AR54350》描述了有关于7系列器件上FRAME_ECCE2端口的功能特性及其应用场景说明[^1] 。尽管该资料主要聚焦错误校正编码领域而非直接涉及USB-GPIO桥接技术本身 ,但它展示了如何灵活运用现场可编程门阵列内部丰富的资源配置能力去满足特定功能扩展的要求。 另外值得注意的是随着半导体工艺进步不断推陈出新的SoC平台往往集成了上述提到的各种必要组件从而大大减少了单独购买分立元件的成本同时也缩短了整体研发周期。 --- ```verilog // Verilog 示例:简单 GPIO 至 UART 模拟(基础概念) module gpio_to_uart ( input wire clk, input wire rst_n, // GPIO 输入 input wire [7:0] gpio_in, // UART 输出 output reg uart_tx ); reg [9:0] shift_reg; integer i; always @(posedge clk or negedge rst_n) begin : process_name if (!rst_n) begin shift_reg <= 10'b1_00000000; // Start bit + Data bits + Stop bit uart_tx <= 1'b1; // Idle state is high end else if (/* Some condition */) begin for(i=0;i<8;i=i+1)begin shift_reg[i] = gpio_in[i]; end /* Shift out logic */ ... end assign uart_tx = shift_reg[9]; endmodule ``` 以上代码片段展示了一个非常基本的概念验证模型用于演示目的并非最终生产级版本还需要进一步优化调整才能达到工业标准要求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值