您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > VHDL语言设计入门
VHDL入门需掌握的基本知识一、信号(signal)的含义和信号的2种最常用类型:std_logic和td_logic_vector二、四种常用语句的基本用法赋值语句、if语句、case语句和process语句三、实体(entity)、结构体(architecture)和一个实体和一个结构体组成的设计实体。四、层次结构的设计掌握元件(component)语句和端口映射(portmap)语句。五、库(library)和程序包(pachage)的基本使用。有了上述的入门知识,一般的设计没有什么问题。信号和变量信号(signal)是硬件中连线的抽象描述,信号在元件的端口连接元件。变量(varable)在硬件中没有类似的对应关系,它们主要用于硬件特性的高层次建模所需的计算中。信号在逻辑电路设计中最常用的数据类型在VHDL语言中有10种数据类型,但是在逻辑电路设计中最常用的是std_logic和std_logic-vector提供的数据类型。Std_logic类型分为布尔(boolean)型、位(bit)型、位矢量(bit_vector)型。信号在逻辑电路设计中最常用的数据类型Std_logic有9种状态,常用的是三种状态:‘0’高电平‘1’低电平‘z’高阻高阻状态是为了双向总线的描述信号的说明一个信号只有说明语句说明后才能使用。用VHDL语言进行设计就是写一系列语句。一个语句用分号结束。设计说明形式如下:Signalclock,T1,T2:std_logic;Signalr0,r1,r2,r3:std_logic_vector(15downto0);Signalr0,r1,r2,r3:std_logic_vector(0upto15);信号的说明整数不能看作矢量,不能按位运算。整数不能进行逻辑运算,只能进行算术运算。从信号说明看不出一个信号是组合逻辑还是时序逻辑(例如寄存器),这与ABEL语言是不同的。逻辑运算符有6种逻辑运算符:NOT、OR、AND、NAND、NOR、XOR。常用的为前三种。signala,b:std_logic;signalc,d:std_logic_vector(7downto0);aandbaorbnota正确canddcxordnotc正确aandc错误2个进行逻辑运算的信号,类型必须相同。这些逻辑运算符优先级相同。算术运算符常用的算术运算符有:+-Signala,b:std_logic_vector(15downto0);a+ba+‘1’A+“01”并置运算符&并置运算符用于位的连接,形成矢量。也可连接矢量形成更大的矢量。Signala,b:std_logic_vector(3downto0);Signalc,d:a,b:std_logic_vector(2downto0);aand(‘1’&c)c&a关系运算符关系运算符有下列几种:=等于/=不等于小于大于=小于等于=大于等于等于、不等于运算符适用于所有的数据类型,其他的运算符适用于整数、位及矢量等。在进行关系运算时,两边的数据类型必须相同,但位长度可以不同。关系运算的结果为“真”或者“假”。常用的4种语句VHDL有许多类型的语句,我们这里讲4种。一、赋值语句signala,b,c:std_logic;signald,e,q:std_logic_vector;c=not(aandb);q=dorq;常用的4种语句二、if语句1、if语句的三种形式•if条件then若干语句endif;•if条件then若干语句else若干语句endif;常用的4种语句二、if语句1、if语句的三种形式•if条件1then若干语句elsif条件2then若干语句┆else条件nthen若干语句endif;常用的4种语句二、if语句2、例子1—16位寄存器--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto0);Ifreset=‘0’thenq=x”0000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq=d;elseq=q;endif;Endif;说明:--是注释开始的标志,signal语句的存在只是为了说明这些信号的类型,供阅读方便使用。常用的4种语句二、if语句3、例子2—16位寄存器的另一种形式--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto--0);Ifreset=‘0’thenq=x”0000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq=d;endif;Endif;常用的4种语句二、if语句4、例子3—16位寄存器的第三种形式--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto--0);Ifreset=‘0’thenq=”0000000000000000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq=d;endif;Endif;常用的4种语句二、if语句5、信号沿的几种表示方法clock’eventandclock=‘1’上升沿clock’eventandclock=‘0’下降沿rising_edge(clock)上升沿falling_edge(clock)下降沿常用的4种语句二、if语句6、例子4—时钟下降沿触发的16位寄存器--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto--0);Ifreset=‘0’thenq=X”0000”;Elsiffalling_edge(clock)thenifwen=‘1’thenq=d;endif;Endif;常用的4种语句二、if语句7、例子5—二选一多路开关--Signalsel:std_logic;--Signala,b,c:std_logic_vector(15--downto0);Ifsel=‘0’thenc=a;Elsec=b;Endif;常用的4种语句三、进程(process)语句PROCESS语句是VHDL语言中描述硬件系统行为的最基本的语句。本质上描述了一个功能独立的电路块。1、process语句的基本形式PROCESS[(敏感信号1,敏感信号2,…)]BEGIN┇ENDPROCESS;常用的4种语句三、process语句2、说明敏感信号表中的任何一个发生变化,都启动process语句工作。敏感信号表中的信号是一部分输入信号,或者在process语句中形成的反馈信号;纯粹输出的信号或者在本语句中不发生变化的信号不能放入敏感信号表。常用的4种语句三、process语句我们在if语句中介绍的电路如果不和PROCESSS语句结合起来,不能构成一个功能独立的电路,编译时就会出错。下面是改造后的16位寄存器和2选1多路开关。3、改造后的16位寄存器--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto0);register_pro:process(reset,clock)beginIfreset=‘0’thenq=x”0000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq=d;endif;Endif;endprocess;注意:敏感信号表中没有信号D,因为只需要reset和clock启动这个process语句;信号q是个输出信号,因此不能放入process语句的敏感信号表中。Register_pro:表示一个标号,标号可有可无。常用的4种语句三、process语句4、改造后的2选一多路开关--Signalsel:std_logic;--Signala,b,c:std_logic_vector(15--downto0);process(sel,a,b)beginIfsel=‘0’thenc=a;Elsec=b;Endif;endprocess;常用的4种语句三、process语句5、程序计数器PC的一种设计--signalpc,zjmp_pc,cjmp_pc:--std_logic_vector(15downhto0);--signalt,zj_flag,cj_flag,dw_flag,reset:std_logic;pc_proc:process(pc,zjmp_pc,cjmp_pc,t,zj_flag,cj_flag,dw_flag,reset)beginifreset=‘0’thenpc=x”0000”;elsift’eventandt=‘1’thenifzj_flag=‘1’thenpc=zjmp_pc;elsifcj_flag=‘1’thenpc=cjmp_pc;elsifdw_flag=‘1’thenpc=pc+“10”;elsepc=pc+‘1’;endif;endif;endprocess;常用的4种语句三、process语句6、1000000计数器设计--signalcounter:std_logic_vector(19downto0);--signalcounterclk,reset:std_logic;--16进制f423f等于10进制999999process(reset,clk)beginifreset=‘0’thencounter=x”00000”;elsifclk’eventandclk=‘1’thenifcounter/=x”f423f”thencounter=counter+‘1’;elsecounter=x”00000”;endif;endif;endprocess;常用的4种语句三、process语句7、锁存器设计--signalreset,set,clk:std_logic;--siganld,q:std_logic_vector(15downto0);process(reset,set,clk)ifreset=‘0’thenq=x”0000”;elsifset=‘0’thenq=x”ffff”;elsifclk=‘1’thenq=d;endif;endprocess;常用的4种语句四、CASE语句1、CASE语句的书写格式CASE条件表达式ISWHEN条件表达式值1=〉若干语句┆WHEN条件表达式n=〉若干语句WHENOTHERS=〉若干语句ENDCASE;常用的4种语句四、CASE语句2、例子1—运算器设计一个有加、减、与、或功能的16位运算器。其中,cin是原来的进位值,cout是运算后的进位值,q是运算的结果,a和b是2个操作数,sel是个2位的运算选择码。--signala,b,q:std_logic_vector(15downto0);--signalsel:std_logic_vector(1downto0);--signalcin,cout:std_logic;--signalresult:std_logic_vector(16downto0);process(a,b,sel,cin)begincaseseliswhen“00”=result=‘0’&a+‘0’&b;q=result(15downto0);cout=result(16);when“01”=result=‘0’&a+‘0’&b;q=result(15downto0);cout=result(16);when“10”=q=aandb;cout=cinwhenothers=q=aorb;cout=cin;endcase;endprocess;常用的4种语句四、CASE语句3、例
本文标题:VHDL语言设计入门
链接地址:https://www.777doc.com/doc-3993868 .html