不可不知的FPGA设计妙招,使用Makerchip进行在线虚拟开发(附案例)

开发 前端
可视调试是如何构建的?可视调试是一个JavaScript画布,在其中使用了fabric.js,这是一个功能强大且简单的JavaScript HTML5画布库框架,它使我们能够在画布元素上使用交互式对象模型。

1 关于虚拟FPGA实验室

可编程门阵列(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为流水线和事务添加了强大的构造。

2 选择TL-Verilog的理由

简单 || 强大 || 灵活

2.1 可视化调试

使用TL-Verilog语言编写的设计进行调试时,可以通过可视化方式来观察和分析设计的行为。通过在设计中插入调试语句,并以可视化形式显示设计行为,帮助设计人员进行调试、验证和优化的过程。

2.2 有序波形

无需编写测试台即可查看模拟结果。IDE提供了内置的时钟,并在信号未被赋予任何值时为其分配随机值。

2.3 有序图表

设计以逻辑图形式表示。非常容易浏览设计层次结构、流水线和阶段。

2.4 更少的代码

  • 更快的开发
  • 更少的错误
  • 更容易维护

3 可视调试的威力

图片图片

首先将简单数字逻辑门的输出可视化。从上面的GIF中可以看到左侧是代码部分,可以看到门的逻辑;右侧是可视调试(VIZ)部分,可以看到每个逻辑门的可视化。我们可以在周期之间来回移动,并在右上角看到当前的周期。

可视调试是如何构建的?可视调试是一个JavaScript画布,在其中使用了fabric.js,这是一个功能强大且简单的JavaScript HTML5画布库框架,它使我们能够在画布元素上使用交互式对象模型。

4 虚拟FPGA实验室的特点

  • 简单学习:在没有实际开发板的情况下理解FPGA编程的基础知识。
  • 时光旅行:可以在周期之间前后移动,以便能够可视化每个周期中发生的情况。
  • 更快速:对于简单的设计,无需等待综合、实现和比特流生成过程。
  • 抽象化:TL-V所需的代码比标准HDL语言少,开发更快,错误更少,维护更容易,且硅片质量更好。它也- 支持System Verilog。
  • 可综合化:在虚拟实验室中的代码可以在真实的FPGA上运行!我们将在最后一节中介绍这一点。
  • 开源:采用MIT许可。

5 在Makerchip中展示的FPGA开发板

  • Zedboard Zynq-7000 ARM/FPGA SoC开发板(产品链接)
  • EDGE Artix 7 FPGA开发板(产品链接)
  • Basys 3 Artix-7 FPGA培训板(产品链接)
  • Icebreaker FPGA(产品链接)
  • Nexys A7(产品链接)

目前,仅展示这些开发板。

6 第一阶段

在第一阶段评估之前的编码工作主要是在VIZ画布屏幕上添加FPGA图像,并支持可视化FPGA的LED灯、七段数码管、LCD 16x2显示器和VGA显示器。下面是使用这些组件的示例演示:

7 LED灯

演示:https://makerchip.com/sandbox/0mZf5hLPG/0y8h64Z#

图片图片

上面的GIF演示了一个16位计数器的示例,其输出显示在LED灯上。在这里使用了Zedboard开发板。初始化可以在第26、27和28行中看到。m4+fpga_init将初始化开发板,m4+fpga_led将使LED灯工作。如果要使用其他开发板,请在第26行更改M4_BOARD的值。

8 七段数码管

演示:makerchip.com/sandbox/0mZf5hLPG/0zmh8rV

图片图片

这个演示是一个从0到15的计数器,以十六进制值显示在七段数码管的四个数字中。* digit是共阳信号。每个七段数码管包含段,基本上是可以通过发送低电平信号来打开的LED。要在七段数码管中显示数字8,需要通过低电平信号启用所有段。

9 LCD 16x2显示器

演示:makerchip.com/sandbox/0mZf5hLPG/0k5hYwz#

图片图片

这个程序在LCD 16x2显示器中打印以下内容:

第一行:FPGAs are fun!!!

第二行:—

完成后,将第一行和第二行向左移动一次。

10 VGA显示器

演示:makerchip.com/sandbox/0mZf5hLPG/0nZhlW1

图片图片

这是用于640* 480 VGA显示器的可视化。信号和sy分别表示显示光标的水平和垂直位置。当水平和垂直像素区域(和sy)小于64时,程序会绘制一个橙色的正方形,否则为蓝色。在480p分辨率下,需要约40万个周期来显示一个完整的帧,包括所有前后廊道的时间约束。为了进行可视化,我们将每个正方形框设置为32x32像素,因此可以在约470个周期内完成一帧,以便更好地理解。无论如何,可以使用M4_COUNTER宏变量定义来调整正方形框的大小。还可以使用M4_FRAMES宏变量的定义来更改要可视化的帧数。

11 第二阶段

对于第二阶段,开始可视化其他外设,如按钮、滑动开关、LED RGB、温度传感器、光传感器等。以下是使用这些可视化的演示。

12 按钮

演示:makerchip.com/sandbox/0mZf5hLPG/0pghQw2

图片图片

当按下特定的按钮时,此程序会点亮LED灯。按钮应从开发板上输入。不幸的是,Makerchip VIZ目前不支持交互功能。因此,为了使用这个外设,使用$pb信号手动给按钮输入。

13 滑动开关

演示:makerchip.com/sandbox/05yf0h91P/066hVzy

图片图片

逻辑与上述按钮示例相同。

14 温度传感器

演示:makerchip.com/sandbox/0mZf5hLPG/0mwh1MY

图片图片

温度和光传感器位于开发板的左下角。这里我们使用太阳图像作为热源。随着太阳图像远离温度传感器,相应的温度读数将显示在七段数码管中。用于显示传感器读数的时间为四个时钟周期。这是因为七段数码管的阴极是连接在一起的。因此,为了显示四个不同的数字,我们每个时钟周期只启用一个数字。由于一个周期的变化通常发生在几十纳秒的量级上,当在实际的FPGA中运行时,我们的肉眼会假装所有数字在同一时间更新。

15 光传感器

演示:makerchip.com/sandbox/0mZf5hLPG/0oYhlwR

图片图片

这里使用灯泡图像作为热源。上述温度传感器示例的逻辑在这里同样适用。

16 LED RGB

演示:makerchip.com/sandbox/0mZf5hLPG/0vghOl6

图片图片

该程序根据占空比值在RGB LED中输出不同的颜色,使用了脉宽调制(PWM)的概念。

17 在实际的FPGA中运行的步骤

SandPiper是一个代码生成器,可以根据给定的TL-Verilog代码生成可读性强、结构良好的Verilog或SystemVerilog代码。

SandPiper的SaaS版在云端作为微服务运行,以支持简便的开源开发。请安装SandPiper SaaS版用于此项目。

要在本地运行,可以从RedwoodEDA获取SandPiper教育版。

运行FPGA设置的步骤如下:

  • git clone https://github.com/BalaDhinesh/Virtual-FPGA-Lab.git
  • 从工作目录中运行shell脚本/<complete_path>/run.sh。

图片图片

  • shell脚本会要求输入三个内容:

a. TL-Verilog文件的输入文件名

图片图片

b. FPGA板名称(如果板卡不在给定选项中,请提供板卡的零件号)

如果板卡在给定选项中:

图片图片

如果板卡不在给定选项中:

图片图片

c.(可选)如果板卡不在给定选项中,则约束文件应该以<filename_partno>.xdc的形式存在于您的工作目录中。

例如:根据上面的图像,应该是design_xc7a100tcsg324-1.xdc

d. 时钟周期(以纳秒为单位)

图片图片

18 在Makerchip和实际的FPGA开发板上的输出

图片图片

图片 图片

责任编辑:武晓燕 来源: Java学研大本营
相关推荐

2010-06-11 14:46:38

可路由协议

2021-08-12 16:02:22

Jupyter NotPython命令

2023-06-08 13:10:04

2015-06-10 10:56:50

iOS开发技巧

2015-01-15 09:34:28

2020-11-30 13:12:04

Linux文本命令

2015-05-25 19:13:13

KPI开发者

2023-12-13 18:06:39

微服务设计模式

2010-08-16 10:22:00

虚拟化技术应用环境

2014-06-20 14:35:48

浪潮数据

2019-08-18 23:10:14

数据科学算法数学

2020-01-17 06:12:10

物联网IOT技术

2024-03-21 08:57:39

语言软件开发

2010-10-27 10:39:44

求职

2015-07-30 17:30:43

Linux命令

2021-01-27 09:45:17

负载均衡

2020-11-11 21:27:55

缓冲文件调用

2018-06-12 11:05:33

2014-06-09 13:21:27

2019-12-02 14:14:20

缓冲系统调用函数
点赞
收藏

51CTO技术栈公众号