DSP

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

2019-07-13 20:04发布

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

文章目录

序言

因为最近的涉及到了一些通信和传统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 ------------------------------------------------------------------------------

结语

博学笃行,与时俱进 如果你想请我吃个南五的话