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 := 100); -- 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(12 downto 0); --12-bit two's complement temperature with sign bit
        RDY_O : out STD_LOGIC;    --'1' when there is a valid temperature reading on TEMP_O ERR_O : out STD_LOGIC; --'1' 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 := 50;  -- 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 (7 downto 0); --address input bus D_I : in  STD_LOGIC_VECTOR (7 downto 0); --data input bus D_O : out  STD_LOGIC_VECTOR (7 downto 0); --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 => 100 ) 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(7 downto 1)     := "1001011"; -- TWI Slave Address constant ADT7420_RID : std_logic_vector(7 downto 0)      := x"0B"; -- ID Register Address for the ADT7420 constant ADT7420_RRESET : std_logic_vector(7 downto 0)   := x"2F"; -- Software Reset Register constant ADT7420_RTEMP : std_logic_vector(7 downto 0)    := x"00"; -- Temperature Read MSB Address constant ADT7420_ID : std_logic_vector(7 downto 0)       := x"CB"; -- ADT7420 Manufacturer ID

9. 條件判斷的寫法

TEMP_O <= tempReg(15 downto 3); RDY_O <= '1' when fReady else
            '0'; ERR_O <= '1' when state = stError else
            '0';

10. 信號的寫法

    signal initWord: std_logic_vector (DATA_WIDTH-1 downto 0); signal initA : natural range 0 to NO_OF_INIT_VECTORS := 0; --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也是信號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM