原创 VHDL基础知识

2010-6-8 18:46 2542 3 3 分类: 软件与OS

VHDL基础知识


Very High Speed Hardware Description Language)超高速硬件描述语言


VHDL设计实体的组成:库和程序包(Library,Package),实体(Entity),结构体(Architecture),配置(Configuration).


例:用VHDL语言设计一个2选1的数据选择器


entity mux21 is


port(a,b:in bit;


   s:in bit;


   y:out bit);


end entity mux21;


architecture one of mux21 is


signal d,e:bit;


begin


d<=a and (not s);    --左边三行可以用下面的语句代替。


e<= b and s;          --y<= a when s=’0’ else


y<= d or e;        ---   b;


end architecture one;


 


1:实体的语句格式


名称            内容


引导语句      ENTITY 实体名 IS


类属表       GENERIC(------);


端口表        PORT(------);


结束语句      END 实体名;


类属说明的书写格式是:


GENERIC(常数名:数据类型:设定值;


        常数名:数据类型:设定值);


端口语句的格式:


PORT(端口信号名:端口模式 数据类型;


     端口信号名:端口模式 数据类型);


IN 输入


OUT 输出


INOUT 双向


BUFFER 缓冲


2.结构体


结构体的任务是:定义结构体中的各项内部使用元素,如数据类型(TYPE),常数(CONSTAND),信号(SIGNAL),元件(COMPONENT),过程(POCEDURE),变量(VARIABLE)和进程(PROCESS)等。通过VHDL语句描述实体所要求的具体行为和逻辑功能。描述各元件之间的连接。


结构体格式:


结构体名  OF 实体名 IS


定义语句法


BEGIN


功能描述语句法


END 结构体名称


结构体的三种描述方式:行为描述,数据流(或寄器传输)描述(RTL).


例:用行为描述方式设计的全加器


LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;


ENTITY onebitadder IS


PORT(a,b,cin:IN BIT;


   Sum,count:OUT BIT);


 END onebitadder;


ARCHITECTURE behavior OF onebitadder IS


BEGIN


 PROCESS(a,b,cin)


  BEGIN


  Sum<= a XOR b XOR cin;


  Count<=(a AND b) OR ((a XOR b) AND cin);


   END PROCESS;


END behavior;


 


块语句结构:


块结构名:


   BLOCK


   端口说明  类属说明


   BEGIN


   并行语句


  END BLOCK 块结构名;


进程语句结构:


进程名:


   PROCESS(敏感信号表) IS


   进程说明


  BEGIN


 顺序描述语句


END PROCESS 进程名;


 


能被主程序反复调用并能将处理结果传送到主程序的程序模块,子程序分为过程语句(Procedure)和函数(Functure)两种。子程序中的参数说明是局部的,只能在子程序体内起作用。


PROCEDURE 过程名(参数1;参数2;----) IS


定义语句;


BEGIN


顺序处理语句;


END 过程名;


 


 


FUNCTION 函数名(参数1;参数2;----)


RETURN 数据类型 IS


定义语句;


BEGIN


顺序处理语句;


RETURN 返回变量名;


END 函数名;


 


 


 


库的使用语句格式是:


USE 库名.程序包名.项目名;


USE 库名.程序包名.ALL;


 


包集合


包的结构包括包首和包体两部分:


PACKAGE 包集合名  IS


            说明语句


END      包集合名;--包首


 


PACKAGE BODY 包集合名  IS


               说明语句


END BODY;    --包体


 


配置语句的格式是:


CONFIGURATION 配置名 OF  实体名 IS


   配置说明


END 配置名;


 


数字:123E2即12300,12_345_67即1234567,1.0, 12.98-2即0.1298,  254表示成十六进制数是16#FE#, 表示成二进制数是2#1111_1110#,表示成八进制是8#376#,表示成十进制数是10#254#,


字符串:字符是能用ASCII码表示的数字,字母或符号,加单引号。字符串是字符的一维数组,加双引号。


标识符:表示常数,变量,信号,端口,子程序或参数的名字,有效字符包括全部大小写英文字母且不区分大小写,数字0—9及单一下划线,且下划线只能放在字母或数字之间。


还有如下标识符规则:


应以英文字母开头


允许包含图形符号如回车符,换行符,空格符


不能使用VHDL中的关键字


标识符的下标加括号表示


 


 


VHDL的数据对象分为:常量,变量和信号


常量定义的格式:


CONSTANT 常数名:数据类型:=表达式;


信号的格式:


SIGNAL 信号名:数据类型


      <=  --赋值符


变量的格式:


VARIABLE 变量名:数据类型


     :=  --赋值符


 


信号可以在实体,结构体和程序包中均可定义,变量只能在进程或子程序中定义。


 


VHDL的操作符:&并置,  /=不等于,  =等于,  <=小于等于,  >=大于等于,  /除,  **指数,*乘,  +加, -减, MOD求模,  REM求余,   ABS取绝对值


AND逻辑与,OR逻辑或,NAND逻辑与非,NOR逻辑或非,XOR逻辑异或,NOT取反


 


 


VHDL的基本语句分为顺序语句(sequential statements)和并行语句(concurrent statements)两类。


顺序语句


1.       赋值语句(ASSIGNMENTS STATEMENTS)


2.       条件语句


IF 条件 THEN


     顺序语句


END IF;


 


IF 条件 THEN


     顺序语句


      ELSE


   顺序语句


END IF;


 


IF 条件1 THEN


     顺序语句1;


      ELSIF 条件2 THEN


     顺序语句2


      .


      .


ELSE 顺序语句n


END IF;


 


 


IF 条件1 THEN


     IF 条件2 THEN


      .


      .


END IF;


END IF;


 


 


CASE 条件表达式  IS


WHEN 条件选择值=>顺序语句;


WHEN 条件选择值=>顺序语句;


       --------


END CASE;


其中符号=>没有实际操作意义,相当于THEN


若CASE语句中的选择值不能覆盖条件表达式的值,则用“OTHERS”作为最后一个条件取值,“OTHERS”的选择值只能出现一次。


 


循环语句


1.       标号:FOR 循环变量 IN 循环次数范围 LOOP


        顺序语句


      END LOOP 标号;


2.       标号:WHILE 条件 LOOP


      顺序语句


      END LOOP 标号;


循环控制语句(NEXT)


1.NEXT 标号 WHEN 条件;


如果条件成立,则执行NEXT语句,跳转到标号指定语句,否则继续向下执行


2.NEXT;


执行到NEXT语句时,无条件终止向下执行,跳转到LOOP语句处开始下一个循环。


3.       NEXT LOOP标号;


执行到NEXT语句时,终止向下执行,跳转到LOOP标号语句处开始下一次循环。


 


循环控制语句(EXIT)


EXIT也有三种格式:


EXIT                                --- 格式1


EXIT    LOOP标号                   ----格式2


EXIT    LOOP标号  条件表达式子     --- 格式3


注意:NEXT语句的跳转方向是LOOP标号指定的语句,在没有LOOP标号时,则跳转到当前LOOP语句的循环起点。而EXIT的跳转方向则不同,当执行到EXIT语句时会完全跳出循,即跳转到LOOP循环语句的结束处。


 


等待语句(WAIT)


WAIT;     --格式1,无限等待


WAIT ON 信号表;    --格式2,直至敏感信号变化


WAIT  UNTIL 条件表达式;  --格式3,直至条件满足


WAIT  FOR 时间表达式;  --格式4,直至时间到


进程语句(PROCESS)


进程标号;


   PROCESS(敏感信号表)IS


   说明部分


   BEGIN


   顺序语句;


END PROCESS 进程标号;


--其中标号可以省去。


例:用进程语句设计一个D触发器


LIBRARY IEEE;


USE IEEE.STD_LOGIC_1164.ALL;


ENTITY dff1 IS


  PORT(CLK:IN STD_LOGIC;


       d:IN STD_LOGIC;


       Q:OUT STD_LOGIC);


END;


ARCHITECTURE bhv OF dff1 IS


  SIGNAL Q1:STD_LOGIC;


BEGIN


  PROCESS(CLK)


    BEGIN


   IF CLK’EVENT AND CLK=’1’    --检测CLK的上升沿


      THEN Q1<=d;


   END IF;


 Q<=Q1;


END PROCESS;


END bhv;


 


元件例化语句(COMPONENT INSTANTIATIONS)


  COMPONENT 元件名 IS


     GENERIC(类属表)


     PORT(端口名表);


END COMPONENT;    -----元件定义


例化名:元件名 PORT MAP(端口名=>连接端口名,…….);------元件例化


  其中端口名指被调用元件的端口,连接端口名指当前设计系统准备接入元件的对应端口。


 


生成语句(GENERATE STATEMENTS)


标号 FOR 循环变量 IN 取值范围


GENERATE


   说明


  BEGIN


  并行语句


END GENERATE 标号;


标号 IF 条件 GENERATE


  说明


  BEGIN


并行语句


END GENERATE 标号;


除生成语句嵌套情况外,标号可不要。

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /2 下一条