当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]我们都经历过这种情况:模拟器看起来完美无缺,比特流第一次加载就成功了,可板子却……静止不动,做着奇怪的事,又不肯解释。这时你只能拿起厂商的调试工具,接受被绑在他们IDE上的命运,或者干脆在设计上撒满LED灯,像撒 breadcrumbs 一样。

我们都经历过这种情况:模拟器看起来完美无缺,比特流第一次加载就成功了,可板子却……静止不动,做着奇怪的事,又不肯解释。这时你只能拿起厂商的调试工具,接受被绑在他们IDE上的命运,或者干脆在设计上撒满LED灯,像撒 breadcrumbs 一样。

两者都不太有趣。

我们非常激动地宣布,我们的 BRS-100-GW1NR9 FPGA 开发板现已原生支持 fpgacapZero — 由 Leonardo Capossio 开发的开源、跨厂商的 FPGA FPGA FPGA 调试内核。如果你之前未曾了解过,fpgacapZero(简称“fcapZ”)可将一个小巧精悍的嵌入式逻辑分析器和嵌入式 I/O/O/O 块直接集成到你的 FPGA FPGA FPGA 硬件中,并通过 OpenOCD 的 JTAGTAG 接口让你轻松访问。无需任何厂商专有代码,也无需复杂的图形界面操作——只需开放工具与开放工具之间通信即可。

发展

为BRS-100-GW1NR9添加对fpgacapZero的支持的第一步,是确定如何将JTAG连接到通用的FPGA结构上。为了保持与BRS-100-GW1NR9示例项目中“完全脚本化工作流”的理念一致,必须以纯HDL的方式实现这一功能。我们了解到一些工具,例如GoWIN分析仪示波器(GAO),虽然需要用户通过图形界面操作,但或许可以利用它来确定如何让GoWIN FPGA进行JTAG通信……

沿着这条路径,我们创建了一个虚拟项目,添加了基本计数器,连接并配置了一个GAO探针,然后对项目进行了综合。浏览生成的文件后,我们发现了一个名为GW_JTAG的IP模块!其接口定义如下:

考虑到其他JTAG IP核,这个设计看起来相当熟悉……主要区别似乎是将“移位”和“捕获”功能合并为一个脉冲信号,并需要确定如何连接*_pad_*接口,因为实际的JTAG引脚/位置并未在约束文件中定义。因此,下一步是实例化该模块,将脉冲输出到一个引脚头,然后使用示波器或逻辑分析仪进行采样(为了确保准确性,JTAG时钟频率设置为一个合理的数值)。

遗憾的是,最初尝试使用“GW_JTAG”合成项目时失败了——该项目中未找到该模块。这让我们一度感到困惑:起初我们以为它是GoWIN默认库的一部分,会自动包含进来。于是我们重新翻阅之前创建的示例项目,结果发现了一个声明为“synthesis syn_black_box”的模块占位符。GoWIN EDA在PnR阶段必须能自动神奇地连接JTAG IP核……事实证明,确实如此!

因此,下一阶段的工作已完成,并确定了GW_JTAG的闪烁模式。这促使我们开发出专用的GoWIN JTAG TAP模块“jtag_tap_gowin.v”,该模块将“GW_JTAG” IP与(相对)通用的JTAG寄存器接口模块连接起来。这个模块是JTAG TAP与fpgacapZero调试核心之间的数据流水线!

之后,我们进入了最后阶段!剩下的工作只剩下一些样板代码(例如切换构建开关以启用ELA、将修改内容迁移至Windows、将“fpgacapZero”设置为Git子模块以避免HDL重复等),以及按照下方“尝试一下”部分中的要求进行测试。

我们遇到的另一个问题只是 OpenOCD 不支持默认的 FTDIII 驱动,于是我们用 Zadigig 将其替换为 WINUSB,一切顺利。

尝试一下

从用户的角度来看,整个过程就是一个构建标志。只需拉取仓库,初始化 fpgaCapZeroZero 子模块,然后运行以下命令,即可将 ELAA 核心烧录到比特流中:

为了方便您使用,我们已预先连接好几个在初始阶段就非常实用的信号:

•一个8位自由运行计数器

•按钮2的状态

•GPIOGPIOGPIO 端口组。

接下来,编程电路板:

使用附带的 brs_100_gw1nr9.cfg.cfg 启动 OpenOCD:

现在你可以让核心自我介绍一下:

它会输出一个JSON格式的数据块,告诉你核心的深度、通道数量、触发功能等所有需要用于规划采集的信息。接下来只需运行fcapz capture命令并设置你的触发参数,获取VCD文件,然后用你常用的波形查看器打开即可:

我们比较喜欢Surfer,但只要是能读VCD的设备都可以:

整个流程——构建、编程、调试、捕获、查看——只需在 Linux 或 Windows 上输入几个终端命令即可。无需使用 IDE,无需点击繁琐操作,也无需受限于特定的硅片厂商。这一点对我们至关重要:如果调试工具只能存在于某个厂商的图形界面中,那么每次更换电路板、共享项目或一年后重新打开项目时,它都会悄然失效。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在FPGA/ASIC设计中,跨时钟域(CDC,Clock Domain Crossing) 是时序违例与功能Bug的高发区。单比特信号、多比特总线、脉冲需采用不同同步策略。本文给出三种经典CDC方案的RTL实现,并对比S...

关键字: 跨时钟域 FPGA

在高速ADC采集系统中,数字下变频(Digital Down Converter, DDC) 负责将高中频采样信号搬移到基带(或低中频),并完成降采样(Decimation)与抗混叠滤波,是雷达、软件无线电接收链路的标配...

关键字: FPGA DDC

在FPGA中例化DDR4 SDRAM控制器(如Xilinx MIG或Intel UniPHY)后,正确的时序约束(SDC)是让控制器通过时序签核、稳定跑在目标频率(如2400MT/s)的前提。很多"初始化失败"或"校准不...

关键字: FPGA DDR4 时序约束

在FPGA开发中,“时序不收敛”(Timing Closure Failed)是让工程师最头疼的问题之一。当WNS(最差负余量)为负时,设计无法在目标频率下稳定运行。本文总结五大系统性排查思路,帮助你在Vivado/Qu...

关键字: FPGA 时序收敛

在Xilinx UltraScale+系列FPGA中,片上存储器分为BRAM(Block RAM)和URAM(Ultra RAM)两类。BRAM容量18/36Kb,URAM容量288Kb,但URAM延迟略高且占用更多布线...

关键字: FPGA BRAM URAM

在FPGA网络中,以太网MAC(Media Access Control)负责CSMA/CD退避、帧校验(FCS)、与PHY通过MII/RGMII/SGMII接口交互。根据项目对灵活性、开发周期、资源的要求,通常有三种实...

关键字: FPGA 以太网

我最初在博客上发布了这个项目。在这里,我将更详细地讲解每一步。边缘端的硬件加速正在彻底改变我们处理计算机视觉、机器学习和高性能计算的方式。然而,弥合软件开发与FPGA硬件之间的鸿沟,往往令人感到任务艰巨。

关键字: 硬件 加速器 AI FPGA

我们很高兴宣布,AMD Spartan UltraScale+ SU200P FPGA 将于 2026 年 7 月正式投入量产。SU200P 是 Spartan UltraScale+ 系列中规模最大、性能最强的器件,采...

关键字: FPGA GTH 收发器 交换机

Soan Papdidi 改变了这种体验。它是一款紧凑、易于上手的纯FPGA开发板——无需MCU,也无隐藏式微控制器,只需掌握原始的FPGA功能即可。该板配备8个DIP开关、8个LED灯和10个I/O引脚,非常适合用于学...

关键字: FPGA 开发板 数字电路 Python

当一个嵌入式项目进入方案设计阶段,工程师面临的第一个关键决策往往是:“该选什么芯片?” DSP、FPGA、MCU三者之间的边界在数据手册上看似清晰,但当面对中等算力场景——算力要求介于简单控制和超高性能计算之间的“灰色地...

关键字: DSP FPGA MCU
关闭