FPGA入門筆記五 VHDL基本語法-框架

FPGA入門筆記五   VHDL基本語法-框架

準備開始學習專案程式,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;

程式包的使用都可以在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