FPGA-VHDL课堂学习笔记*01
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
双击图标: 
2.新建文本文件



3.代码结构
整体代码包括一个实体和多个结构体(至少一个结构体),代码不区分大小写。以一个二选一数
据选择器为例,介绍代码组成。
实体部分:(代码实体部分在上,结构体部分在下)
entity mux21is -- entity引导实体开始,mux21是实体名(自定义,要求无汉字,开头非数字,
末与库文件中关键词重复),is固定结构关键词。
port(a,b,s:inbit; --port定义端口关键词,端口a,b,s是输入端口,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:
端口描述:
a,b,s,y是端口名,任意取,s是数据选择端,y是输出端,根据s的值选择输出a或b的值;
in,out是端口模式,常用的端口模式有in(单向输入)、out(单向输出)、inout(双向I/O口,
在某一时刻是单向的,其传输方向需要先设置)、buffer(缓冲输出,该模式下有一个反馈信号,
用于检测输出的状态值,常用于计数器等设计)。
数据类型:
bit表示是位数据,表明其取值范围为0或1;
常用的数据类型有bit(只有0和1两种状态,较少使用)、std_logic(标准逻辑位,有9种状态)、
bit_vector(位矢量)、std_logic_vector(标准逻辑矢量,可以表示多个数值,比如3 downto 0或0 to 3,
说明有4个数值,每个都是标准逻辑位)、integer(整数型,要限定整数的范围,以便系统提供数据线,
如H:integer range 0 to 99,系统会提供7条线)
并行语句:
结构体中的语句不想C语言那样具有顺序性的执行,而是不分先后,同时进行的,对于结构体中出
现的条件语句,判断条件时具有顺序性,但在进行赋值时是同时赋值,所以对于一个变量值要考虑其在
同一时刻会被赋予不同值的情况。
4.文本文件存盘及代码输入

在代码输入前,先将文本文件命名后存盘,这样在输入代码时,软件会自动检测关键词,使得其变色,
这样就可以看出来有没有把关键词代码打错了。需要注意,文本文件名是代码中的实体名+后缀.vhd。

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

若编译后有错误,需要从错误提示的第一条开始更改错误,这个和在学习C语言时的检错是一致的步骤。
6.仿真波形
在代码编译通过后,进行波形仿真,也就是常见的时序图分析。给输入变量在不同时刻设置初值,
进行软件仿真后,就可以看到输出端的时序逻辑,以判读代码是否达到设计要求。





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


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

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

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




到此仿真结束。
FPGA-VHDL课堂学习笔记*01的更多相关文章
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- [原创] linux课堂-学习笔记-目录及概况
本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...
- xml基础学习笔记01
注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象.element应称作元素,毕竟这更符合英文的本意.至于标 ...
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...
随机推荐
- [蓝桥杯]PREV-25.历届试题_城市建设
问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有n个比较重要的地点,市长希望这些地点重点被考虑.现在 ...
- 双网卡单IP实现网卡冗余与负载均衡
WINDOWS下: 所谓双网卡,就是通过软件将双网卡绑定为一个IP地址,这个技术对于许多朋友来说并不陌生,许多高档服务器网卡(例如intel8255x系列.3COM服务器网卡等)都具有多网卡绑定功能, ...
- 7.4 electirc.c -- 计算电费
// 7.4 electirc.c -- 计算电费 #include <stdio.h> #define RATE1 0.13230 // 首次使用 360 kwh 的费率 #define ...
- Busybox镜像
使用docker多少还是要知道一些Busybox的知识,下面转载自https://blog.csdn.net/chengqiuming/article/details/79313539 一 简介 Bu ...
- 打印上三角或下三角矩阵(9x9) - perl, R
欲打印矩阵位置示意图 #!/usr/bin/perl -w use strict; ## bottom left ..) { ..) { if($col <= $row) { print $ro ...
- PROC IMPORT 选项
GETNAMES=YES;导入源文件字段名作为SAS数据集的字段名MIXED=NO;若某一列中包含数值型和字符型变量,将数值型按照缺省值处理.若选的是YES则是将数值型转换成字符型存储,默认为NOSC ...
- fontFamily 'Ionicons' is not a system font and has not been loaded through Expo.Font.loadAsync的问题
import * as React from "react";import { Provider } from "mobx-react/native";impo ...
- mvc开发中DTO,DO,FROM的区别
DO:数据库实体类映射到model里的实体类,每个字段都和数据库相对应,一般来说开发的时候不要去添加或者修改里面的实体 DTO:与前台交互的时候(一般来说是查询操作)有一些数据字段是那一张表里面没有囊 ...
- OGG-01091 Unable to open file "./dirdat/cs001481" (error 2, No such file or directory)
记一次ogg报错ogg-01091的处理过程 现场有一套RAC数据库的服务器异常重启,其中一个节点上部署了OGG,机器开机之后,发现OGG所有应用进程abended状态,查看日志,发现报错如下图: 分 ...
- redis-大key寻找
使用redis-rdb-tools 项目地址 https://github.com/sripathikrishnan/redis-rdb-tools 生成csv命令 rdb -c memory //d ...