基于紫光同创(Pango)MES1KG-LPG100开发板的FPGA的基础入门开发教程

1.前期软件下载准备:

①紫光同创的 FPGA 不是用 Vivado/Quartus,而是用:

Pango Design Suite(PDS)

PDS软件需要去紫光同创官网创建账号后才能下载,还需要申请License文件才能使用。比较麻烦,而我使用的这块开发板其实是生态合作厂商小眼睛FPGA做的板子,故可以去小眼睛FPGA的微信公众号联系工作人员,告诉他你的用途后,他会给你发PDS软件包和License文件,里面有pdf文档会一步步教你License文件怎么使用,同时可以去小眼睛FPGA的官网逻辑矩阵技术社区下载该开发板的例程demo以及开发板硬件开发说明书。

②仿真软件Modelsim

这个软件的下载大家可以csdn搜一下其它博主的下载教程,这里就不细说了。

③代码编辑软件Notepad++

这个软件的下载就更简单了,也不细说了。

2.Verilog基础语法介绍:

①module(模块)

Verilog 的基本单位,相当于“电路模块”。

②wire/reg(信号类型)

wire(连线):表示“物理导线”,用于组合逻辑连接。

特点:

  • 不能在 always 中赋值

  • 必须由 assign 或模块驱动

reg(寄存器变量):表示“可以保存值的变量”(不一定真的综合成寄存器)

特点:

  • alwaysinitial 中赋值

  • 可表示时序逻辑或组合逻辑

③assign(连续赋值):用于组合逻辑。

等价于:

  • 一个一直存在的电路

  • 输入变化 → 输出立刻变化

④always块(行为描述):描述“电路行为”,可以写组合逻辑或时序逻辑。

1️⃣ 组合逻辑 always:

  • @(*) 表示输入变化就触发

  • 阻塞赋值 (=)

2️⃣ 时序逻辑 always:

  • 时钟触发

  • 非阻塞赋值 (<=)

⑤阻塞赋值(=)/非阻塞赋值(<=):

类型符号用途特点
阻塞=组合逻辑按顺序执行,像单片机
非阻塞<=时序逻辑并行执行,同时更新

⑥时钟触发(时序逻辑):

always @(posedge clk)      表示:👉 在时钟上升沿触发。(negedge为下降沿)

⑦case语句:

类似 switch,用于多分支逻辑。例:

always @(*) begin
     case(sel)
        2'b00: y = a;
        2'b01: y = b;
        2'b10: y = c;
        default: y = 0;
     endcase
end

👉 用途:

  • 多路选择器(MUX)

  • 状态机判断


⚠️ 注意:

  • 一定要写 default

  • 避免综合出锁存器(latch)

⑧状态机(FSM):

1️⃣ 基本结构(三段式):① 状态定义 ② 状态寄存器(时序逻辑)③ 状态转移(组合逻辑)

2️⃣ 两种FSM类型

类型特点
Moore输出只与状态有关
Mealy输出与状态 + 输入有关

💡 黄金法则总结表:

赋值位置应该用什么类型?举例
assign 语句等号左边必须是 wireassign led_out = a & b;
always 块等号左边必须是 regalways @(...) begin led_out <= 1; end
作为模块的 input 端口必须是 wireinput wire clk
作为模块的 output 端口wirereg 均可取决于你在模块内部是用 assign 还是 always 驱动它。

3.点亮你的第一颗FPGA的LED:

首先打开PDS软件创建一个新工程,然后点击Next

给工程创建一个名字和选择工程的存放位置,然后点击Next

后面几页的配置不用管,保持默认点击Next即可,直到这一步选择你的芯片型号和综合工具,然后点击Next,最后点击Finish,工程即创建完成

接下来我们需要将我们的代码编辑软件换成notepad++,

然后我们就可以开始创建我们的源代码了,

接下来按下图所示操作,文件名和工程名保持一致即可,然后一直点击OK即可

然后notepad++就会自动打开如下图所示

接下来我们编写verilog代码,如下所示,然后点击保存,

然后我们返回PDS软件,右键左下角编译(compile)点击run,出现绿色√即为编译成功

接下来我们继续右键design,点击Add sources,这次创建一个simulation文件

如下图所示创建仿真文件,然后一直点击OK就会打开notepad++

然后编写仿真代码,点击保存后返回PDS。

附:大家可能会想为什么源代码和仿真代码的输入输出类型的反的,你这样想哈,源代码是我们通过外部输入让FPGA来控制输出,而仿真文件我们要做的是控制输入来看我们的输出正不正确,这逻辑不正是反过来的嘛。

接下来我们还不能直接仿真,我们得先把我们的仿真路径设置为我们的Modelsim,如下图所示操作即可。

接下来就可以开始仿真了,

然后开始仿真,modelsim软件就会自动打开开始运行了,

上图介绍了一些modelsim软件的简单用法,

下图时钟信号每10ns翻转一次,复位信号无效后拉高led电平,仿真波形图没有问题。

接下来我们进行硬件约束,也就是管脚绑定,如下图所示点击工具选择第一个,点击pre synthesize uce,

然后会出现下面的界面,按照下图进行操作

然后继续按下图进行操作,最后点击okok即可,这样时钟就配置好了。

接下来进行管脚映射,

管脚确定好后,点击保存,如下图所示

经历完上述最重要的三步(源文件编写,仿真文件编写,硬件管脚约束)后,我们就可以进行最后的验证的环节了

接下来给大家介绍一下框里这些步骤的作用:

① Compile(编译)

  • 解析 Verilog / VHDL 代码

  • 语法检查(语法错误、未定义信号等)

  • 建立设计层次结构

② Synthesize(综合)

把你的 RTL 代码变成逻辑门级电路

③ Device Map(器件映射)

把“抽象逻辑门”映射到 FPGA 的实际资源

④ Place & Route(布局布线)

把“逻辑电路图”变成“物理电路”

🔹 Place(布局)

  • 每个逻辑块放在 FPGA 的哪个位置


🔹 Route(布线)

  • 信号如何在芯片内部走线连接

⑤.1 Report Timing(时序分析)必选

检查电路是否满足时序约束(Timing Constraint)

⑤.2 Report Power(功耗分析)可选

估算 FPGA 功耗

⑤.3 Generate Netlist(生成网表)可选

导出最终网表文件

⑥Generate Bitstream(生成比特流)⭐最终步骤

生成 FPGA 可下载文件


接下来即可进行最后一步将比特流文件下载进FPGA板子中,这一步记得给板子上电,否则扫描不到板子

接着进行比特流文件的选择,

最后按下图所示操作即可将比特流文件下载进板子,

最后进行现象的观察,可见下图蓝色框中的led已被点亮

自此,你就已经点亮的你的FPGA的第一颗led,同时也熟悉了FPGA的开发流程,接下来就可以自行进行更高级的开发了!

简介 GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以你可以用它来开发开源软件、自由软件,甚至是 封闭源代码的商业软件,而不用花费任何钱来购买许可证和使用权。 GTK 被称为 GIMP 工具包是因为最初写它是用来开发 GIMP (GNU 图像处理程序) 的,但是它现在已经被用于很多软件项目了,包括 GNOME (GNU 网络对象模型环境)。GTK 是在 GDK (GIMP Drawing Kit) 和 gdk-pixbuf 的基础上建立起来的,GDK 基本上是对访问窗口的 底层函数 (在 X 窗口系统中是 Xlib) 的一层封装,gdk-pixbuf 是一个用于客户端图像处理的库。 GTK 的创建者是: · Peter Mattis petm@xcf.berkeley.edu · Spencer Kimball spencer@xcf.berkeley.edu · Josh MacDonald jmacd@xcf.berkeley.edu GTK 的当前维护者是: · Owen Taylor otaylor@redhat.com · Tim Janik timj@gtk.org GTK 实质上是一个面向对象的应用程序接口 (API)。尽管完全用 C 写成的,但它是基于类和回调函数 (指向函数的指针) 的思想实现的。 还 有一个名为 GLib 的第三个组件,包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强 GTK 的可移植性,因为它们所实现的一些函数在其它 Unix 系统上未实现或不符合标准,比如 g_strerror()。一些是对 libc 的对应函 数的增强,比如 g_malloc() 具有增强的调试功能。 在 2.0 版中,GLib 又加入这样一些新内容:构成 GTK 类层次基础的类型系统 (type system),在 GTK 中广泛使用的信号系统,对各 种不同平台的线程 API 进行抽象而得的一个线程 API,以及一个加载模块的工具。 作为最后一个组件,GTK 使用了 Pango 库来处理国际化文字输出。 本 教程讲述 GTK 的 C 接口。还有许多其它语言的 GTK 绑定如 C++、Perl、Python、TOM、Ada95、Objective C、Free Pascal、Eiffel、Java 和 C#。如果你想使用 GTK 其它语言的绑定,请先查看该绑定的文档。有时这些文档会讲一些重要的概念,然后你再来参考本教程。还有一 些跨平台的 API (如 wxWindows 和 V),它们把 GTK 作为一个支持的平台。同样,先参考它们的文档。 如果你用 C++ 来开发 GTK 应用程序,有以下几点需要注意。已有一个 GTK 的 C++ 绑定叫做 GTK-- (译者注:现在叫做 gtkmm),提供 一个更符合 C++ 规范的接口,你可以先看看这个接口。如果你由于种种原因不喜欢这种方法,还有另外两种使用 GTK 的方法。首先,你 可以只使用 C++ 中的 C 子集来调用 GTK,这样就可以使用本教程描述的 C 接口。其次,你可以用下述方法同时使用 GTK 和 C++:把所 用的回调函数定义为 C++ 类中的静态成员函数,然后仍然使用 C 接口来调用 GTK。如果你选择后一种方法,你可以把指向要操作的对象 3 / 258 的指针 (即所谓的 "this")作为回调函数的 data 参数。选择哪一种方法仅仅是个人的喜好问题,因为不管用哪一种方法,你都会得到 C++ 和 GTK。它们都不需要特殊的预处理程序,因此你可以同时使用标准 C++ 和 GTK。 本教程试图尽可能详细地描述 GTK,但是肯定不能面面俱到。本教程假设你能够较好的理解 C 语言,并且了解怎样编写一个 C 程序。有 X 编程经验会很有帮助,但不是必要条件。如果 GTK 是你学习的第一个构件工具包,请告诉我们你怎样找到这个教程,以及学习时有什 么困难。还有其它一些语言的绑定,如 C++、Objective C、ADA、Guile 等,但我不了解这些。 本教程仍在不断完善中。请到 http://www.gtk.org/ 查看更新情况。 我非常乐意听到你在使用本教程学习 GTK 时遇到的各种困难,并欢迎对怎样改进此文档提出建议。更多信息请参阅投稿这一章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰pid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值