FPGA入门笔记五 VHDL基本语法-框架

时间:2022-12-20 23:45:19

准备开始学习项目程序,XC7K325T,由于用到了VHDL,先学习一些简单的语法,能看懂程序就行,重点还是verilog。

1、引用库

library IEEE;    //表示打开IEEE库,因为IEEE库不属于VHDL的标准库,所以使用库的内容要先声明
use ieee.numeric_std.all;   //USE和ALL是关键词,表示允许使用IEEE库中numeric_std程序包中的所有内容,这个程序包主要是用来做数据类型转换
use ieee.std_logic_unsigned.all;  
use ieee.std_logic_misc.all;
use ieee.std_logic_1164.all;
library UNISIM;   //UNISIM是xilinx的库函数,为了仿真使用。Using this declaration, the simulator references the functional models for all device primitives. In addition to this declaration, you must compile the library and map the library to the simulator.
use UNISIM.VCOMPONENTS.ALL;

FPGA入门笔记五   VHDL基本语法-框架

程序包的使用都可以在EDIT->language templates->VHDL->Common Constructs->Convertion Functions中找到例子。


2、实体entity

实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只是定义所需的全部输入/输出信号。

举例:

entity GiGE_TopModule is
port (
SYSCLK_P : in std_logic;
SYSCLK_N : in std_logic;
);
end GiGE_TopModule;

套用EDIT->language templates->VHDL->Common Constructs->Architecture Components & entity的举例

entity <entity_name> is
generic (
<generic_name> : <type> := <value>;
<other generics>...
);
port (
<port_name> : <mode> <type>;
<other ports>...
);
end <entity_name>;


3、结构体architecture

所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即结构体描述实体的结构或行为,一个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。

结构体名是对本结构体的命名,它是该结构体的惟一名称,虽然可以由设计人员*命名,但一般都将命名和对实体的描述结合起来,结构体对实体描述有三种方式(括号中为命名):
1) 行为描述(BEHAVE):反映一个设计的功能和算法,一般使用进程PROCESS,用顺序语句表达;(下例中的情况)
2) 结构描述(STRUCT):反映一个设计硬件方面的特征,表达了内部元件间连接关系,使用元件例化来描述;
3) 数据流描述(DATAFLOW):反映一个设计中数据从输入到输出的流向,使用并行语句描述

举例:

architecture Behavioral of GiGE_TopModule is

component mb_control
port(
RESET : in std_logic;
clock_generator_0_CLKIN_pin : in std_logic;
clk_50m_i: out std_logic;
clk_100m_i: out std_logic;
clk_200m_i: out std_logic
);
end component;


component Bram_Expand_Module
port(
reg_clka : in std_logic;
reg_ena : in std_logic;
reg_wena : in std_logic
);
end component;
signal sys_clk_i: std_logic;
signal clk_50m_i: std_logic;
signal clk_100m_i: std_logic;
signal clk_200m_i: std_logic
begin

sysclk_ibuf : IBUFGDS
port map(
O => sys_clk_i,
I => SYSCLK_P,
IB => SYSCLK_N
);
Inst_Mb_Control : mb_control
port map(
RESET => '0',
clock_generator_0_CLKIN_pin => sys_clk_i,
clk_50m_i=> clk_50m_i,
clk_100m_i=> clk_100m_i,
clk_200m_i=> clk_200m_i
);
Inst_Bram_Expand_Module : Bram_Expand_Module
port map(
reg_clka => reg_clka,
reg_ena => reg_ena
);
process(clk_50m_i, dcm_lock)
begin
if dcm_lock = '0' then
heartbeat_cnt <= (others => '0');
elsif rising_edge(clk_50m_i) then
heartbeat_cnt <= heartbeat_cnt + '1';
end if;
end process;
end Behavioral;

套用EDIT->language templates->VHDL->Common Constructs->Architecture Components & entity的举例

architecture <arch_name> of <entity_name> is
-- declarative_items (signal declarations, component declarations, etc.)
begin
-- architecture body
end <arch_name>;

4、元件component

上面例子中有了component的例化,具体的:

component <component_name>
generic (
<generic_name> : <type> := <value>;
<other generics>...
);
port (
<port_name> : <mode> <type>;
<other ports>...
);
end component;

至此,基本了解了项目的顶层文件Top_Module框架,由于是举例说明问题,读者无需深究代码本身。


引用:

1、https://www.xilinx.com/itp/xilinx10/isehelp/ise_c_simulation_libraries.htm

2、http://blog.csdn.net/makebuaa/article/details/7843027