1

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

4

2 回答 2

3

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 就会为您提供 SignalTap 的免费许可。最后我知道,Chipscope 不是免费的,这就是为什么我的爱好项目总是使用 Altera FPGA。

于 2014-10-21T16:11:30.260 回答
0

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

于 2020-05-22T22:56:41.973 回答