我的 FPGA 学习历程(01)—— 数字逻辑入门

       大概是在13年的时候,弟弟给我看了一段 verilog 代码,并且跟我说这东西很有用,于是网上查了查资料,大神们是这样说的:在大学,你只能学到 51单片机,作为电子的入门基础,但是实际上嵌入式市场上用的大多是更为高端的芯片,主要分为三类:ARM、DSP、FPGA。

       既然决定学下 FPGA,就一定要有一块开发板。淘宝上的板子有很多家,有黑金、特权、至芯科技等等好多家,最后选了黑金的一块学生版AX301。当时以为 FPGA 嘛,肯定要比 51 高级一些,板子上有个 VGA 接口,因为用的是笔记本,说不定调试的时候需要一个屏幕,于是又买了个 VGA 7寸的小显示器(-____-)买到现在还不会写 VGA 驱动。

       拿到开发板后,你需要做的事情:

       第一步,看看板子附带的光盘资料,包括用户手册、原理图等等。熟悉下资料。

       第二步,altera 官网注册一个账号,下载安装 quartus 软件。

    • quartus 有免费的 网络版本,免费版本与注册版本的区别如下:
  1. 免费版没有多线程编译的功能,如果是多核 CPU,免费版只会使用其中一个 CPU,编译速度会慢一些。
  2. 免费版如果使用了 IP 核,生成的烧录文件(.sof)只能在线使用(一直连着电脑),而(.pof)只能使用一个小时。
  3. 免费版中 Qsys 或者 SOPCBuilder中只能使用 NIOS 精简核,否则 quartus 编译报错。
    • quartus 版本区别:
  1. 9 ~ 10 版中包含 图形仿真输入工具,10 ~ 12 版中没有,13版中又添加了,没有图形输入就只能用 Modelsim 编写 testbench 来仿真了。图形仿真输入工具对于初学者而言是必须的。
  2. 11版之后 Qsys 会代替 SOPCbuilder。
  3. 14版之后只有 64 位机器的支持,而 Modelsim 只有 32位,也就是说,如果安装了 14 之后的版本,运行 Modelsim仿真软件,你的 CPU 要有虚拟化支持。

总的来说,对于入门而言免费的版本就足够了,我就用了一年的免费版,最后才用它制作了一个电子钟。

       第三步,看看光盘里的快速入门视频、入门资料、工程项目。

  1. 按照视频上的要求打开一个 quartus 工程(.qpf)文件结尾
  2. 装好 USB-Blaster 驱动连上开发板的 Jtag 口,下载一个(.sof)文件看看效果。
  3. 按照 PDF 教程里的说明转化(.sof)文件文件为(.jic)文件,烧录到 EPCS 里去。

       FPGA 的自学入门之路真的很曲折。(*>.<*)曾经三个月连个灯都点不亮。

       我用的是Altera 的 FPGA,使用的 HDL 语言是 verilog。

       要想入门前需要数字逻辑基础知识:

  1. 基本逻辑门
  2. 卡诺图和逻辑化简

       当时我在熟悉板子之后只会编译别人写好的工程,烧写文件,而 verilog 却一直无法入门。附带的 PDF 教程里有 Verilog 扫盲文,此外还有建模篇,我的天哪,第一个例程就是流水灯,第二个就是按键消抖,,verilog 一行我都看不懂。

回头想想也没什么难的,只不过是一个计数器而已。只是当时我没有任何基础罢了,做教程、做板子的大神自然不会教你那些最基础的东西,因为他们觉得 我的知道的东西也是你理所应当知道的

       黑金社区做整套教程确实不易,而且难得文笔轻松活泼。可是一本笔记性质的东西教不了初学者什么,知识零零散散,需要事先有硬件从业者的经历、VHDL 的知识,转行到这块板子上才能轻轻松松读的懂。我个人可能比较愚钝,大约一年之后我才看得懂这本建模篇。

       光盘上还有夏文宇老师的《数字逻辑设计》 PDF版,这本书从语法的角度讲了 verilog,语法讲的非常细致,没有区分可综合和不可综合的部分,此外没有实验方法,我不知道该用什么软件来练习书中的例子。

       网上几乎没有 verilog 的入门视频,只能去买本书了,很快就入了一本《FPGA数字逻辑设计教程——Verilog》,老外写的,国人翻译,确实质量不错。但是这本译作是以 Digilent 公司的 BASYS2 和 NEXYS2 开发板作为例程的,那两块板子用的都是 xilinx 公司的 FPGA。书里用的工具是 ISE。不过虽然是竞争公司的产品,但不同厂商之间 FPGA 区别不大、verilog 通用性强,只要把书中的开关输入改为常数、把多个LED灯改成不超过4个LED灯,其他的真还没什么问题。

时间: 2024-10-07 02:24:55

我的 FPGA 学习历程(01)—— 数字逻辑入门的相关文章

我的 FPGA 学习历程(01)&mdash;&mdash; FPGA 基础知识和 Quartus 的安装

高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大面积的应用与电话.DVD.通讯基站等领域.DSP 与 ARM 的区别在于,ARM 是通用 CPU,DSP 则是专用 CPU.FPGA 则与他们不同,FPGA 的名称的由来是由于 FPGA 功能的成型是在实验室等通常工作环境下进行的:区别与专有集成电路 (ASIC)在晶圆工厂的制造,所以 FPGA 被

我的 FPGA 学习历程(09)&mdash;&mdash; 实验点亮单个数码管

数码管是一种常见的用于显示的电子器件,根据数码管大致可以分为共阴极和共阳极两种,下图所示的是一个共阳极的数码管的电路图(摘自金沙滩工作室的 51 开发板电路图),我的 AX301 开发板与这张图的情况类似,几乎所有的教科书上都会讲到数码管的原理,这里我就不再详述了. 由于多个数码管的段选信号(下图中的 DB0~DB7)是共用的,想要显示多个数字需要用到动态扫描,动态扫描电路需要使用时钟.冒然的使用时钟会使得初学者不知所措,所以在这篇基础的组合逻辑电路中只点亮单个数码管,这样就不必涉及到时钟了.时

我的 FPGA 学习历程(02) &mdash;&mdash; 实验点亮 LED 灯

关于 Quartus 的操作可以使用 Quartus 自带的帮助,帮助中有全套的操作教程. 中文网络教程链接(链接至altera中文官网,点击观看) Quartus II 软件设计系列:基础 Quartus II 软件中的原理图设计 SignalTap II 嵌入式逻辑分析器 使用Nios II 处理器 系统控制台 Nios II 处理器开发软件:设计流程 Nios II 处理器开发软件:MMU和MPU 无论是英文帮助还是网络中文教程,他们的前提是你是有基础的,这些教程之会教给你我们的 quar

我的 FPGA 学习历程(10)&mdash;&mdash; 实验数码管驱动

根据黑金 AX301 手册,数码管位选信号命名为 SEL[5:0],其中 SEL[5] 对应最左边的数码管,而SEL[0] 对应最右边数码管:作为约定,在下面的描述中我们对应的称之为数码管 5 和数码管 0.数码管的段选信号被命名为 DIG[7:0]:DIG[7] 为小数点 DP,DIG[6] 为数码管 g 段,DIG[0] 为 a 段,其他类推即可. 由于数码管的段选信号是共用的,理论上是不可能同时显示六个不同字符的,但由于人眼的视觉残留现象,只要我们很快的依次显示每一个数字,就可以欺骗人眼达

我的 FPGA 学习历程(08)&mdash;&mdash; 多文件工程的建立

这篇的重点是讲解如何使用多文件工程.伴随着学习的深入,编写的代码量会变得越来越大,尤其是当工程中有相互调用的模块关系的时候,如果还使用一个文件描述整个工程,就会使得文件变得非常的长而且难以查阅. 这篇新建一个名为 add4 的工程,目标是设计一个由四个一位全加器构成的四位加法器.在 verilog 语法中可以直接使用 + 运算符来构建加法器,当然在实际工程中生成一个加法器既不需要这么多工作也不需要这么麻烦,但这篇存在的价值是作为多文件工程的练习. 一位全加器的代码如下: 在 Quaruts 工程

我的 FPGA 学习历程(14)&mdash;&mdash; PWM 脉冲宽度调制

PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置一个计数器,上图中的第一行就是个 4 位的计数器,每满 15 自动变为 0.那么可以得到输出频率等于时钟的 1/16. 当计数器的值小于某个值的时候输出 0,高于或者等于某个值的时候输出 1. 假设控制的是一个小灯为 1/8 功率输出,那么我们需要的值就是 13 (4'hD),当计数器小于等于 13

我的 FPGA 学习历程(13)&mdash;&mdash; 电子钟项目

在秒表上一些其他模块就可以变成电子钟了,使用以下约定: 使用 KEY[0] 作为复位按键,复位后显示 00:00. 使用 KEY[1] 作为调整/暂停按键,暂停时电子钟调整的两个灯管保持 1Hz 的频率闪烁. 使用 KEY[2] 作为调整左移按钮,KEY[3] 作为调整右移. 具体看原理图,太大了分成四块: 代码如下: 代码大家应该大致看得懂了,这里就不多做讲解了,祝大家成功. 最后附上 tcl 脚本文件(根据黑金光盘提供修改):

我的 FPGA 学习历程(06)&mdash;&mdash; 二进制转格雷码

格雷码是一种无权码,它的特点是相邻的两数之间只有一个位不同,像这样:         000-->001-->011-->010-->110-->111-->101-->100 而二进制码是这样的:         000-->001-->010-->011-->100-->101-->110-->111         显然格雷码的顺序显然不是唯一的,而且格雷码十分不便于阅读,但它有它的优点:对比使用二进制编码的逻辑电路

JavaWeb学习总结-01 JavaWeb开发入门

一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:HTML 常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 在Java中,动态web资源开发技术统称为J