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

时间:2014-10-21 15:22:20

标签: debugging verilog quartus

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

2 个答案:

答案 0 :(得分:3)

Verilog有两个主要用途:

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

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

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

答案 1 :(得分:0)

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