zoukankan      html  css  js  c++  java
  • 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也是信号

  • 相关阅读:
    Windows 7 Phone 文档数据库Rapid Repository正式发布
    Adobe展示HTML5动画制作IDE
    详解Android实现全屏正确方法
    qtform.com计划
    Adobe加速布局移动开发:Flash Builder+Flex+AIR+Catalyst
    预览:Visual Basic与C#中的异步语法
    Windows 7主题中的壁纸从哪里来?
    F#的编译器及标准库使用Apache 2.0协议开源(暂时还没有看到未来)
    开发者谈Symbian、iPhone、Android、MeeGo平台
    MeeGo 1.1发布
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/8908427.html
Copyright © 2011-2022 走看看