繁体   English   中英

如何在 Quartus II 中调试 Cyclone II FPGA 板

[英]How to debug Cyclone II FPGA board in Quartus II

我正在用 Verilog 编写一个程序,并且有一些变量我想在程序在我的 Cyclone II 板上运行时看到它们的值,但我无法弄清楚控制台在哪里(如果有的话.. .) 有没有办法做到这一点? 我已经阅读了 $display 函数,但无法确定 Quartus II 中的输出位置。 不幸的是,我似乎无法找到很多关于此的信息。 谢谢你的帮助!

Verilog 有两个主要用途:

  • 它是一种用于描述可综合逻辑的 HDL(硬件描述语言)。 这是您用来制作 FPGA 或 ASIC 的部件。
  • 它是一种脚本语言,用于通过模拟测试和验证硬件设计。

出于某种原因,您会发现大多数在线教程都没有强调这种区别。 他们通常从第 2 部分(包括$display类的东西)开始,因为新手正在模拟器中尝试。 当代码经过综合以在 FPGA 中使用时,用于脚本编写的结构根本不起作用。 有一些轻微的重叠,但即使如此也无法按您的预期工作。 如果您在模拟器中编写for循环,它将像任何其他编程语言一样循环。 如果您将可合成代码放入该循环中,它将被循环复制(创建一大堆并行 FPGA 路径,每次通过循环一个路径)。 所以实际上影响综合的脚本部分可以被认为更像是元编程。

您可以实现(或找到一个现有的实现,在 HDL 中称为“IP”)一个 UART 并自己打印数据,但这是在 FPGA 中非常复杂和昂贵的(就 FPGA 面积而言)练习。 通常要调试 FPGA,您需要取出调试引脚并使用示波器或逻辑分析仪(甚至是像 Saleae 逻辑这样的便宜的分析仪)查看它们。 这在 FPGA 资源方面非常便宜。 另一种可能性是将 FPGA 内的调试数据记录在块 RAM 中,然后再将其读出。 Altera(带有SignalTap )和 Xilinx(带有 Chipscope)都提供了 FPGA 代码和 GUI,以通过 JTAG 端口驱动它。 只要您同意与 Quartus II 共享匿名统计数据,Quartus II 就会为您提供 SignalTap 的免费许可证。 最后我知道,Chipscope 不是免费的,这就是为什么我的爱好项目总是使用 Altera FPGA。

您可以使用微控制器(例如 Arduino)构建基本的数据采集和控制系统,特别是如果您的设计是流水线式的。 在 FPGA 上,使用输出的门控时钟将变量分配给输出总线或引脚。 启用命令(将总线/引脚输出设置为等于变量)可以从微控制器发送到 FPGA 输入引脚,并用作门控时钟输入。 这允许握手并确保采样和数据记录期间的数据完整性。 一旦将变量输出分配给 FPGA 输出引脚(例如,使用 4 个输出引脚表示 4 位变量或状态),另一个 FPGA 输出引脚将设置为高电平(我们称之为 SAMPLE_READY=1)。 SAMPLE_READY 引脚输出连接到微控制器的 ISR 引脚输入。 当 SAMPLE_READY=1 时,微控制器将 FPGA 输出引脚按顺序采样为二进制数据。 然后微控制器可以将此数据串行写入终端程序。 终端程序(例如在 Python 中)然后作为回报以串行命令响应微控制器以指示成功传输。 终端可以将每个连续接收的样本存储到一个文本文件中进行回顾分析,并在必要时进行二进制到十进制的转换。 从终端程序接收到握手命令后,微控制器切换 FPGA 门控时钟输入,循环重复。 如果您使用完全流水线设计,那么微控制器实际上可以用作全局时钟输入,让您完全控制。 然而,这在实践中非常缓慢。 您还可以为微控制器使用 FSM 设计,并使用输出引脚来控制 FPGA 设计实现的状态、变量和输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM