VHDL入门学习-程序组成
1. VHDL程序的组成 一个完整的VHDL程序是以下五部分组成的:
2. 库(LIBRARY):比较好理解,调用系统已有的库,WORK库就是用户当前编辑文件所在的文件夹, IEEE库:由IEEE(美国电子电机工程师学会)制定的标准库 LPM库
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.math_real.all;
use IEEE.std_logic_arith.all;
3. 程序包(PACKAGE):声明在设计中将用到的常数、数据类型、元件及子程序
4. 实体(ENTITY):声明本设计的接口引脚,输入输出引脚,写法一般是引脚名字:接口方向:标准逻辑
entity TempSensorCtl is
Generic (CLOCKFREQ : natural := ); -- input CLK frequency in MHz
Port (
TMP_SCL : inout STD_LOGIC;
TMP_SDA : inout STD_LOGIC;
-- TMP_INT : in STD_LOGIC; -- Interrupt line from the ADT7420, not used in this project
-- TMP_CT : in STD_LOGIC; -- Critical Temperature interrupt line from ADT7420, not used in this project TEMP_O : out STD_LOGIC_VECTOR( downto ); ---bit two's complement temperature with sign bit
RDY_O : out STD_LOGIC; --'' when there is a valid temperature reading on TEMP_O
ERR_O : out STD_LOGIC; --'' if communication error CLK_I : in STD_LOGIC;
SRST_I : in STD_LOGIC
);
实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只是定义所需的全部输入/输出信号。实体格式如下:
ENTITY 实体名 IS [
GENERIC(常数名:数据类型[:设定值])] 类属说明
PORT
端口说明 (
端口信号名1: 模式 类型;
端口信号名2: 模式 类型;
端口信号名3: 模式 类型;
端口信号名4: 模式 类型);
TYPE语句或常量定义
实体申明 并行语句
实体语句 END 实体名;
端口信号名:端口信号名在实体之中必须是唯一的,信号名应是合法的标识符 端口模式:分别有IN、OUT、INOUT、BUFFER和LINKAGE,这五种类型在后面的章节将介绍到。
端口类型:常用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR,有待后面章节介绍。
5. 构造体(ARCHITECTUR):定义实体的实现,电路的具体描述,结构体 所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即结构体描述实体的结构或行为,一个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。结构体的任务是:定义结构体中的各项内部使用元素,如数据类型(TYPE),常数(CONSTAND),信号(SIGNAL),元件(COMPONENT),过程(POCEDURE),变量(VARIABLE)和进程(PROCESS)等。通过VHDL语句描述实体所要求的具体行为和逻辑功能。描述各元件之间的连接。
rchitecture Behavioral of TempSensorCtl is -- TWI Controller component declaration
component TWICtl
generic
//中间省略
end Behavioral;
元件就是其他文件定义好的模块,比如元件component TWICtl,就是其他文件的模块,这里只是调用
component TWICtl
generic
(
CLOCKFREQ : natural := ; -- input CLK frequency in MHz
ATTEMPT_SLAVE_UNBLOCK : boolean := false --setting this true will attempt
--to drive a few clock pulses for a slave to allow to finish a previous
--interrupted read transfer, otherwise the bus might remain locked up
);
port (
MSG_I : in STD_LOGIC; --new message
STB_I : in STD_LOGIC; --strobe
A_I : in STD_LOGIC_VECTOR ( downto ); --address input bus
D_I : in STD_LOGIC_VECTOR ( downto ); --data input bus
D_O : out STD_LOGIC_VECTOR ( downto ); --data output bus
DONE_O : out STD_LOGIC; --done status signal
ERR_O : out STD_LOGIC; --error status
ERRTYPE_O : out error_type; --error type
CLK : in std_logic;
SRST : in std_logic;
----------------------------------------------------------------------------------
-- TWI bus signals
----------------------------------------------------------------------------------
SDA : inout std_logic; --TWI SDA
SCL : inout std_logic --TWI SCL
);
end component;
调用的模块需要初始化一个实例
Inst_TWICtl : TWICtl
generic map (
ATTEMPT_SLAVE_UNBLOCK => true,
CLOCKFREQ =>
)
port map (
MSG_I => twiMsg,
STB_I => twiStb,
A_I => twiAddr,
D_I => twiDi,
D_O => twiDo,
DONE_O => twiDone,
ERR_O => twiErr,
ERRTYPE_O => open,
CLK => CLK_I,
SRST => SRST_I,
SDA => TMP_SDA,
SCL => TMP_SCL
);
6. 配置(CONFIGURATION):一个实体可以有多个构造体,可以通过配置来为实体选择其中一个构造体
7. VHDL的注释用的是--,如下
-- Uncomment the following library declaration if using
8. constant常量,全局变量,在结构体描述、程序包说明、实体说明、过程说明、函数调用说明和进程说明中使用,在设计中描述某一规定类型的特定值不变,如利用它可设计不同模值的计数器,模值存于一常量中,对不同的设计,改变模值仅需改变此常量即可,就如上一章所说的参数化元件。 定义格式: CONSTANT 常数名:数据类型:=表达式;
constant ADT7420_ADDR : std_logic_vector( downto ) := ""; -- TWI Slave Address
constant ADT7420_RID : std_logic_vector( downto ) := x"0B"; -- ID Register Address for the ADT7420
constant ADT7420_RRESET : std_logic_vector( downto ) := x"2F"; -- Software Reset Register
constant ADT7420_RTEMP : std_logic_vector( downto ) := x""; -- Temperature Read MSB Address
constant ADT7420_ID : std_logic_vector( downto ) := x"CB"; -- ADT7420 Manufacturer ID
9. 条件判断的写法
TEMP_O <= tempReg( downto );
RDY_O <= '' when fReady else
'';
ERR_O <= '' when state = stError else
'';
10. 信号的写法
signal initWord: std_logic_vector (DATA_WIDTH- downto );
signal initA : natural range to NO_OF_INIT_VECTORS := ; --init vector index
signal initEn : std_logic;
11. 数据类型定义,用户自定义的数据类型 有四种,分别是枚举类型、整数类型和实数类型、数组类型、记录类型 枚举类型: TYPE 数据类型名 IS (枚举文字,枚举文字,. . . .)
type state_type is (
stIdle, -- Idle State
stInitReg, -- Send register address from the init vector
stInitData, -- Send data byte from the init vector
stRetry, -- Retry state reached when there is a bus error, will retry RETRY_COUNT times
stReadTempR, -- Send temperature register address
stReadTempD1, -- Read temperature MSB
stReadTempD2, -- Read temperature LSB
stError -- Error state when reached when there is a bus error after a successful init; stays here until reset
);
12. 怎么把实体的信号和元件(COMPONENT)的信号连接起来,定义一个元件(COMPONENT)的实例化对象,用信号(signal)连接起来,其实在实体定义的port也是信号
VHDL入门学习-程序组成的更多相关文章
- 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构
VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...
- 微信小程序入门学习
前(che)言(dan): 近几天,微信小程序的内测引起了众多开发人员的热议,很多人都认为这将会成为一大热门,那么好吧,虽然我是一个小白,但这是个新玩意,花点时间稍稍钻研一下也是无妨的,谁让我没有女朋 ...
- C#程序入门学习
前言: C# (C sharp) 是微软对这一问题的解决方案.C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft . ...
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
随机推荐
- IT人们给个建议
开篇声明:我本身是中学老师,师范类大学计算机专业毕业,现在马上研究生学位就要拿上了,平时在学校搞网络维护什么的,事少,业余时间充足,也不想拘泥于做老师拿点工资,觉得白学计算机了,所以也搞些业余开发,如 ...
- kinect v2
http://www.tuicool.com/articles/NbmyyeU https://channel9.msdn.com/Blogs/raw-tech/Making-your-body-th ...
- redis介绍及常见问题总结
1.redis c语言编写的一个开源软件,使用字典结构存储数据,支持多种类型数据类型 数据类型:字符串,字典,列表,集合,有序集合 2.redis特点 速度快:c语言实现的,所有数据都存储在计算机内存 ...
- 课时15.DTD文档声明下(了解)
W3C的官方网站是W3School,我们可以去官方网站查询DTD文档声明. HTML4.01 Strict 非常严谨的 如果你写了这个DTD文档声明,你就不能写如下样式: <fon ...
- Xshell中使用FTP/SFTP工具下载文件
(1)sftp host_ip,输入用户名/密码 (2)通过cd命令找到远程服务器要拷贝的文件: 通过lcd命令指定本地保存地址. (3)通过get filename拷贝文件 (4)在本地查看,已经可 ...
- CentOS 7 安装oracle 11.2.0.4 Error in invoking target 'agent nmhs' of makefile
%86时出现报错 Error in invoking target 'agent nmhs' of makefile 解决方案在makefile中添加链接libnnz11库的参数修改$ORACLE ...
- djano-模板层基础知识
########模板层######## 模板层其实就是templates文件夹里的html文件 其实这里的每个html不是真正意义的上html代码,只有经过模板渲染过后才算的上真正的html页面. 一 ...
- Angularjs基础(二)
AngularJS 表达式 AngularJS 表达式写在双大括号内:{{expression}} AngularJS 表达式把数据绑定到HTML,这与ng-bind 指令有异曲同工之妙 Angula ...
- 20181009noip HZ EZ 两校联考trade(优先队列,贪心)
题面戳这里 思路: 裸的,贪心... 考场上写了一个数据分治(70ptsDP,30pts线段树优化贪心,GG了后30分) 这道题其实很简单的 我们看图: 我们在A时刻买一个东西,在B时刻卖出去,我们可 ...
- PostgreSQL异步主从流复制搭建
1 总体规划 Master库 Slave库 操作系统 CentOS Linux release 7.5.1804 CentOS Linux release 7.5.1804 处理器 1 1 内存 ...