可编程门阵列(FPGA)是一种用户可以编程的硬件电路,用于执行逻辑操作。与特定应用集成电路(ASIC)或处理器相比,FPGA具有多个优点。FPGA具备高能效、灵活的重编程性、支持并行处理以及较低的延迟,因此在许多应用中被广泛使用。
然而,FPGA的灵活性需要面对电路重编程的挑战,对于初学者而言,这会增加学习成本和难度。
为了解决这个问题,虚拟FPGA实验室项目应运而生。该项目利用Makerchip平台中的VIZ可视化功能,提供FPGA基本外设的可视化,以模拟物理实验室的体验。
Makerchip是一款免费的基于Web的集成开发环境(IDE),同时也提供makerchip-app,一款用于开发高质量集成电路的虚拟桌面应用程序。您可以在浏览器中编写、编译、模拟和调试Verilog设计。代码、模块图和波形紧密集成在一起。Makerchip支持新兴的事务级Verilog( Transaction-Level Verilog)标准。事务级Verilog(TL-Verilog)是一个重大的进步,它消除了Verilog的传统语言特性,并引入了更简单的语法。与此同时,TL-Verilog为流水线和事务添加了强大的构造。
简单 || 强大 || 灵活
使用TL-Verilog语言编写的设计进行调试时,可以通过可视化方式来观察和分析设计的行为。通过在设计中插入调试语句,并以可视化形式显示设计行为,帮助设计人员进行调试、验证和优化的过程。
无需编写测试台即可查看模拟结果。IDE提供了内置的时钟,并在信号未被赋予任何值时为其分配随机值。
设计以逻辑图形式表示。非常容易浏览设计层次结构、流水线和阶段。
首先将简单数字逻辑门的输出可视化。从上面的GIF中可以看到左侧是代码部分,可以看到门的逻辑;右侧是可视调试(VIZ)部分,可以看到每个逻辑门的可视化。我们可以在周期之间来回移动,并在右上角看到当前的周期。
可视调试是如何构建的?可视调试是一个JavaScript画布,在其中使用了fabric.js,这是一个功能强大且简单的JavaScript HTML5画布库框架,它使我们能够在画布元素上使用交互式对象模型。
目前,仅展示这些开发板。
在第一阶段评估之前的编码工作主要是在VIZ画布屏幕上添加FPGA图像,并支持可视化FPGA的LED灯、七段数码管、LCD 16x2显示器和VGA显示器。下面是使用这些组件的示例演示:
演示:https://makerchip.com/sandbox/0mZf5hLPG/0y8h64Z#
上面的GIF演示了一个16位计数器的示例,其输出显示在LED灯上。在这里使用了Zedboard开发板。初始化可以在第26、27和28行中看到。m4+fpga_init将初始化开发板,m4+fpga_led将使LED灯工作。如果要使用其他开发板,请在第26行更改M4_BOARD的值。
演示:makerchip.com/sandbox/0mZf5hLPG/0zmh8rV
这个演示是一个从0到15的计数器,以十六进制值显示在七段数码管的四个数字中。* digit是共阳信号。每个七段数码管包含段,基本上是可以通过发送低电平信号来打开的LED。要在七段数码管中显示数字8,需要通过低电平信号启用所有段。
演示:makerchip.com/sandbox/0mZf5hLPG/0k5hYwz#
这个程序在LCD 16x2显示器中打印以下内容:
第一行:FPGAs are fun!!!
第二行:—
完成后,将第一行和第二行向左移动一次。
演示:makerchip.com/sandbox/0mZf5hLPG/0nZhlW1
这是用于640* 480 VGA显示器的可视化。信号和sy分别表示显示光标的水平和垂直位置。当水平和垂直像素区域(和sy)小于64时,程序会绘制一个橙色的正方形,否则为蓝色。在480p分辨率下,需要约40万个周期来显示一个完整的帧,包括所有前后廊道的时间约束。为了进行可视化,我们将每个正方形框设置为32x32像素,因此可以在约470个周期内完成一帧,以便更好地理解。无论如何,可以使用M4_COUNTER宏变量定义来调整正方形框的大小。还可以使用M4_FRAMES宏变量的定义来更改要可视化的帧数。
对于第二阶段,开始可视化其他外设,如按钮、滑动开关、LED RGB、温度传感器、光传感器等。以下是使用这些可视化的演示。
演示:makerchip.com/sandbox/0mZf5hLPG/0pghQw2
当按下特定的按钮时,此程序会点亮LED灯。按钮应从开发板上输入。不幸的是,Makerchip VIZ目前不支持交互功能。因此,为了使用这个外设,使用$pb信号手动给按钮输入。
演示:makerchip.com/sandbox/05yf0h91P/066hVzy
逻辑与上述按钮示例相同。
演示:makerchip.com/sandbox/0mZf5hLPG/0mwh1MY
温度和光传感器位于开发板的左下角。这里我们使用太阳图像作为热源。随着太阳图像远离温度传感器,相应的温度读数将显示在七段数码管中。用于显示传感器读数的时间为四个时钟周期。这是因为七段数码管的阴极是连接在一起的。因此,为了显示四个不同的数字,我们每个时钟周期只启用一个数字。由于一个周期的变化通常发生在几十纳秒的量级上,当在实际的FPGA中运行时,我们的肉眼会假装所有数字在同一时间更新。
演示:makerchip.com/sandbox/0mZf5hLPG/0oYhlwR
这里使用灯泡图像作为热源。上述温度传感器示例的逻辑在这里同样适用。
演示:makerchip.com/sandbox/0mZf5hLPG/0vghOl6
该程序根据占空比值在RGB LED中输出不同的颜色,使用了脉宽调制(PWM)的概念。
SandPiper是一个代码生成器,可以根据给定的TL-Verilog代码生成可读性强、结构良好的Verilog或SystemVerilog代码。
SandPiper的SaaS版在云端作为微服务运行,以支持简便的开源开发。请安装SandPiper SaaS版用于此项目。
要在本地运行,可以从RedwoodEDA获取SandPiper教育版。
运行FPGA设置的步骤如下:
a. TL-Verilog文件的输入文件名
b. FPGA板名称(如果板卡不在给定选项中,请提供板卡的零件号)
如果板卡在给定选项中:
如果板卡不在给定选项中:
c.(可选)如果板卡不在给定选项中,则约束文件应该以<filename_partno>.xdc的形式存在于您的工作目录中。
例如:根据上面的图像,应该是design_xc7a100tcsg324-1.xdc
d. 时钟周期(以纳秒为单位)
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删