今天给大侠带来的是一周掌握 FPGA VHDL Day 2,今天开启第二天,带来VHDL的基本结构,话不多说,上货。每日十分钟,坚持下去,量变成质变。
VHDL的基本结构
二、VHDL的基本结构
实体(Entity):描述所设计的系统的外部接口信号,定义电路设计中所有的输入和输出端口;
结构体 (Architecture):描述系统内部的结构和行为;
包集合 (Package):存放各设计模块能共享的数据类型、常数和子程序等;
配置 (Configuration):指定实体所对应的结构体;
库 (Library):存放已经编译的实体、结构体、包集合和配置。
VHDL的基本设计单元结构:程序包说明、实体说明和结构体说明三部分。
LIBRARY IEEE; -- 库、程序包的说明调用 USE IEEE.Std_Logic_1164.ALL;
ENTITY FreDevider IS -- 实体声明 PORT
(Clock: IN Std_logic;
Clkout: OUT Std_logic
);
END;
ARCHITECTURE Behavior OF FreDevider IS -- 结构体定义
SIGNAL Clk:Std_Logic;
BEGIN
PROCESS(Clock)
BEGIN
IF rising_edge(Clock) THEN
Clk<=NOT Clk;
END IF;
END PROCESS;
Clkout<=Clk;
END;
2.1 实体(Entity)
实体描述了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。
ENTITY 实体名 IS
[ GENERIC(常数名:数据类型:设定值)]
PORT
( 端口名1:端口方向 端口类型;
端口名2:端口方向 端口类型;
..
端口名n:端口方向 端口类型 );
END [实体名];
实体名由设计者自由命名,用来表示被设计电路芯片的名 称,但是必须与VHDL程序的文件名称相同。要与文件名一致;
类属说明
类属为设计实体与外界通信的静态信息提供通道,用来规定端口的大小、实体中子元件的数目和实体的定时特性等。
格式:
GENERIC(常数名:数据类型:设定值;∶常数名:数据类型:设定值)
例如:
GENERIC(wide:integer:=32);--说明宽度为32
GENERIC(tmp:integer:=1ns);--说明延时1 ns
端口方向:IN, OUT,INOUT,BUFFER
“OUT”和“BUFFER”都可定义输出端口;
若实体内部需要反馈输出信号,则输出端口必须被 设置为“BUFFER”,而不能为“OUT”。
同方向、同类型的端口可放在同一个说明语句中。
ENTITY Full_adder IS
PORT( a, b, c: IN BIT;sum, carry: OUT BIT
);
END Full_adder;
2.2 结构体(Architecture)
结构体定义了设计单元具体的功能,描述了该基本设计单元的行为、元件和内部的连接关系。
ARCHITECTURE 结构体名 OF 实体名 IS
[声明语句] BEGIN
功能描述语句
END [结构体名];
[声明语句]--用于声明该结构体将用到的信号、数据类型、常数、子程序和元件等。声明的内容是局部的。
功能描述语句--具体描述结构体的功能和行为。
一个实体可对应多个结构体,每个结构体代表该实体功能的不同实现方案或不同实现方式。同一时刻只有一个结构体起作用,通过CONFIGURATION决定用哪个结构体进行仿真或综合。
在结构体描述中,具体给出了输入、输出信号之间的逻辑关系。
ARCHITECTURE Behavior OF FreDevider IS -- 结构体定义
SIGNAL Clk:Std_Logic; --信号声明
BEGIN
PROCESS(Clock)
BEGIN
IF rising_edge(Clock) THEN
Clk<=NOT Clk;
END IF;
END PROCESS;
Clkout<=Clk;
END;
IF rising_edge(Clock) THEN
Clk<=NOT Clk;
END IF;
表示顺序语句;
PROCESS(Clock)
BEGIN
IF rising_edge(Clock) THEN
Clk<=NOT Clk;
END IF;
END PROCESS;
表示进程;
BEGIN
PROCESS(Clock)
BEGIN
IF rising_edge(Clock) THEN
Clk<=NOT Clk;
END IF;
END PROCESS;
Clkout<=Clk;
END;
表示功能描述语块。
2.3 库、程序包的调用
LIBRARY 库名; USE 库名.程序包名.项目名;
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;//调用此程序包中所有的资源
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
USE IEEE.Std_Logic_Arith.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;
Day 2 就到这里,Day 3 继续开始VHDL语句相关内容。