vhdl入门(一)-vhdl的代码结构

2019-07-21  本文已影响0人  今日你学左米啊

vhdl入门(一)-vhdl的代码结构

@(study)[Maxe, markdown_study, LaTex_study]
[TOC]

序言

因为最近的涉及到了一些通信和传统dsp的开发,虽然现在比较火verilog,但是大部分轮子都是建立在vhdl上面的.那就在verilog的基础上拓展一下VHDL的技术栈

代码

talk is cheap , show me the code
这次由于是小小拓展一下,所以就不系统写教程了.所有知识点和细节都在注释里面.

--是注释,vhdl不区分大小写,教程一般是全部大写的,那我就全部小写吧
-------------------------------------------------------------------------
--首先是vhdl的库声明,有三个常用的库:
library ieee;
use ieee.std_logic_1164.all;
--  库名 .包名           .引用部分

--以下两个库在程序中都是默认"包含"的,所以可以不写
library standard;
use std.standard.all;

library work;
use work.all;
--------------------------------------------------------------------------
--接下来是实体(entity)声明,相当于verilog里面的module声明
entity D_NAND is 
    port (
        a,b,clk : IN  BIT;
        q       : OUT BIT
    );
end D_NAND;
--vhdl有些时候语法看起来就像是英语一样. 
--里面涵盖的信息,相当于verilog里面的外部端口声明.
--可以看出有三个端口,ab是输入端口,c是输出端口,数据类型都是BIT.
--端口类型有四种:in(输入),out(输出),inout(双向引脚),buffer(反馈引脚)
--信号类型有比较多种,常见的有:BIT,STD_LOGIC,INTEGER等
---------------------------------------------------------------------------

--接下来是结构体(architecture)部分,用来描述电路功能.
--多封装了一层architecture我个人觉得可以便捷地进行电路的版本管理吧,综合器只会选用一个结构体.
architecture d_a_b of D_NAND is 
    signal temp : BIT ;
begin
    temp <= a nand b ;
    process (clk)
    begin 
        if(clk'event and clk = '1') 
            then q <= temp ;
        end if;
    end process;
end d_a_b;
--d_a_b是architecture的名字
--注意: <= 不再是verilog里面的阻塞赋值,在这里是信号的赋值而已
-- nand是RTL级电路描述,与非
-- process是顺序执行语句,括号里面是敏感信号,类比verilog里面always后面的括号
--程序中,除了process之外,其它的都是并行在走的.相当于always
--在vhdl里面会分清楚触发process的事件,如代码便表示在时钟上升沿时触发if
------------------------------------------------------------------------------

结语

博学笃行,与时俱进

想我尽早更新的方法之一

上一篇下一篇

猜你喜欢

热点阅读