FPGA-VHDL课堂学习笔记*01

时间:2022-07-29 18:41:20

FPGA-VHDL课堂学习笔记

记录说明:本文档主要记录大学期间,老师FPGA授课课堂笔记。

代码语言:VHDL

编程软件:MAX+plus II

FPGA硬件:FLE-843

03月05日  理论课

wo先唠点:

   FPGA硬件中有百万个逻辑门,我们可以通过编程将各种门组合连接,并将编程下载到FPGA中,以实现设计功能。

编程分为文本编辑和图行编辑,图形编辑就是通过数电逻辑原理图,进行逻辑门间的线路连接。而文本编辑,是通过描

述性代码,将设计者想要实现的功能转换成机器语言,使得FPGA根据机器语言,将内部的各种逻辑门进行搭建,以实现

最终功能。需要注意的是,各种逻辑门的搭建方式完全由FPGA自己优化实现搭建,因而,我们控制的只是去描述下想要

实现的最终功能即可。文本编辑主要由VHDL和Verilog两种,Verilog在工程上用的较多,但是由于其太灵活,有些想要实

现的功能并不能由Verilog语言直接进行描述实现,还需要VHDL来解决。所以,我觉得VHDL和Verilog 的关系就像汇编语

言和C语言的关系一样。不管哪个好,老师教的是VHDL,我的FPGA学习之路就由VHDL开始。但是我觉得在学习了单片

机以后再来学习FPGA的最先要干的事是先把思想从单片机的顺序循环执行调到FPGA的并行运行模式,这样在学习FPGA

时就不会限于原有的惯有思想了。

laoshi课堂:

         以1997年电子设计大赛中题目频率计,说明了FPGA应用的必要性(理解起来有点难,以后再写):

先介绍MAX+Plus II软件的使用界面:

下载和使用网站: http://www.bokeboke.net/articles/46960.html

1. 打开软件max+plusII

 

双击图标: FPGA-VHDL课堂学习笔记*01

2.新建文本文件

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

 FPGA-VHDL课堂学习笔记*01

3.代码结构

  整体代码包括一个实体和多个结构体(至少一个结构体),代码不区分大小写。以一个二选一数

据选择器为例,介绍代码组成。

实体部分:(代码实体部分在上,结构体部分在下)

entity mux21is     -- entity引导实体开始,mux21是实体名(自定义,要求无汉字,开头非数字,

末与库文件中关键词重复),is固定结构关键词。

port(a,b,s:inbit;    --port定义端口关键词,端口abs是输入端口,bit表示是位数据

            y:out bit);  --端口y是输出端口,位数据类型。有关端口模式和数据类型见tip1.

end entity mux21;  --end entity 实体名,结束实体部分

 

结构体部分:

architecture one ofmux21is       --architecture关键词结构体开始

begin                          --begin关键词开始功能描述

y<=a when s='0' else              --<=是赋值符号,y=a(端口a的值)当端口s为低电平,

b;                          --else,否则y=b(端口b的值)

end;                           --结束结构体

*tip1

端口描述:

absy是端口名,任意取,s是数据选择端,y是输出端,根据s的值选择输出ab的值;

inout是端口模式,常用的端口模式有in(单向输入)、out(单向输出)、inout(双向I/O口,

在某一时刻是单向的,其传输方向需要先设置)、buffer(缓冲输出,该模式下有一个反馈信号,

用于检测输出的状态值,常用于计数器等设计)。

数据类型:

         bit表示是位数据,表明其取值范围为01

         常用的数据类型有bit(只有01两种状态,较少使用)、std_logic(标准逻辑位,有9种状态)

bit_vector(位矢量)std_logic_vector(标准逻辑矢量,可以表示多个数值,比如3 downto 00 to 3

说明有4个数值,每个都是标准逻辑位)integer(整数型,要限定整数的范围,以便系统提供数据线,

H:integer range 0 to 99,系统会提供7条线)

并行语句:

         结构体中的语句不想C语言那样具有顺序性的执行,而是不分先后,同时进行的,对于结构体中出

现的条件语句,判断条件时具有顺序性,但在进行赋值时是同时赋值,所以对于一个变量值要考虑其在

同一时刻会被赋予不同值的情况。

4.文本文件存盘及代码输入

FPGA-VHDL课堂学习笔记*01

在代码输入前,先将文本文件命名后存盘,这样在输入代码时,软件会自动检测关键词,使得其变色,

这样就可以看出来有没有把关键词代码打错了。需要注意,文本文件名是代码中的实体名+后缀.vhd

FPGA-VHDL课堂学习笔记*01

 

按照上图,把文本文件设置成工程文件,才能在编写好代码后进行编译。

5.代码编译

FPGA-VHDL课堂学习笔记*01

若编译后有错误,需要从错误提示的第一条开始更改错误,这个和在学习C语言时的检错是一致的步骤。

 6.仿真波形

在代码编译通过后,进行波形仿真,也就是常见的时序图分析。给输入变量在不同时刻设置初值,

进行软件仿真后,就可以看到输出端的时序逻辑,以判读代码是否达到设计要求。

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

保存好波形文件后,首先对时序仿真信号的总时间[End time]进行设定,默认值太小,根据需要设置放置的长度:

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

设置好仿真时间段后,对输入端s/a/b不同时刻进行赋值:

FPGA-VHDL课堂学习笔记*01

按照上述方法,对不同时间段的a/b端口依次赋值:

FPGA-VHDL课堂学习笔记*01

对输入端口赋完初值后,就可以进行仿真:

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

FPGA-VHDL课堂学习笔记*01

到此仿真结束。