VHDL学习2

关于VHDL语言的学习

一.一个系统用VHDL描述,整体上包括程序包实体结构体

实体:就是整个系统,如果给整个系统取个名字的话,那么这个名字就是实体名。实体描述有固定的语句:

entity 实体名  is

                           Port(端口表);

                         end 实体名;

结构体:就是描述实体所完成的功能,整个系统所要完成的功能,在结构中描述出来。

      结构也有固定的语句:architecture 结构名  of  实体名 is

                             【说明语句】

                           begin

                             【功能描述】

                           end结构名;

备注:这一项是VHDL语言的一个整体概括,每一个用VHDL描述出来的工程都是这种模式:实体,结构。

实例    库和程序包          

library  ieee;

use  ieee.std_logic_1164.all;

 

实体部分:

entity  nand_2   is

port(a:in std_logic;

b:in std_logic;

c:out std_logic

);

end  nand_2;

 

architecture  one  of  nand_2  is

begin

y<=a  nand  b;

end one;

    结构体部分:  

 

  

二.

IEEE是最常见的一个库,每个VHDL程序开头都要调用该库:

调用语句:library  库名;

库里又有一些程序包,IEEE库中的4个程序包:

std_logic_1164; std_logic_arith;std_logic_signed;std_logic_unsigned;

调用程序包的语句:

             调用语句:use 库名.程序包名.all

例如调用IEEE库中的std_logic_1164程序包:use  ieee.std_logic_1164.all;

 

三.端口

共有5种类型的端口:分别是In, Out, Inout, BufferLinkage

常用的是前3个,buffer最好不要使用,Linkage几乎不用。端口这一块的重点和难点是inout模式

四.            VHDL的语言要素

1.VHDL语言中的:①文字规则;②数据对象;③数据类型;④操作运算符等基础知识。(这些都是最基本的东西,可自己看资料消化)

这一部分知识里有一个数据类型转换:数据类型转换都是调用转换函数,程序包提供转换函数。

std_logic_1164程序包的转换函数有:

            to_std_logic_vector(a)   --bit_vector转成std_logic_vector;

            to_bit_vector(a)        --std_logic_vector转成bit_vector;

            to_std_logic(a)         --bit转成std_logic;

            to_bit(a)              --std_logic转成bit;

std_logic_arith程序包的转换函数有:

            conv_std_logic_vectora,位长)--integer, signed, unsigned转成std_logic_vector;

            conv_integer(a)               --signedunsigned转成integer

            conv_unsigned(a)             --signedinteger转成unsigned

std_logic_unsigned程序包的转换函数有:

            conv_integer(a)     --std_logic_vector转成integer;

备注:如果程序中用到了相关的转换函数,必须要调用相应的程序包。

  2.顺序语句(常用的语句)

IF语句

                第一种结构:if 条件句  then

                               顺序语句

                            end  if

                第二种结构:if 条件句  then

                               顺序语句

                            else

                               顺序语句

                            end  if

                第三种结构:if 条件句1  then

                               顺序语句

                            elsif 条件句2  then

                               顺序语句

                               …………

                            else

                               顺序语句

                            end  if

 

 

CASE语句

  语句结构:case 表达式 is

             when 选择值=>顺序语句;

             when 选择值=>顺序语句;

             ………………

             when others=>顺序语句;

            end case;

LOOP语句(循环语句)

  语句结构1:[loop标号:] loop

                       顺序语句

                       exit [loop 标号] when 条件语句

                       end loop [loop 标号:]

   

            实例:ff: loop

                      a:=a+1;

                      exit  ff  when a>10;

                    end loop ff;   --a大于10时推出循环

 

  语句结构2[loop标号:] for 循环变量 in循环次数范围 loop

                            顺序语句

                         end loop [loop 标号:]

                       

 

  语句结构3[标号:] while循环控制条件 loop

                         顺序语句

                     end loop [标号]

 3.并行语句(常用的语句)

   ①进程语句

   ②并行信号赋值语句

     第一种结构:赋值目标<=表达式 when赋值条件 else

                           表达式 when 赋值条件 else

                                  ……

                           表达式;

     第二种结构:with选择表达式 select

                 赋值目标<=表达式 when选择值,

                           表达式 when  选择值,

                                  ……

                           表达式 when  选择值;

 

        

③元件例化语句

 

 

五.            状态机(状态机的三种类型编码与速度)

状态机的编码方式有:二进制,枚举,格雷码,独热码

①二进制:状态序列如同计数器序列,S1 = 001, S2=010, S3=011, S4=100,……

②枚举:状态有指定的值,S1=100, S2=110, S3=101, S4 = 111,…

One Hot(独热):每个状态只有一个寄存器有效,S1=00000001,               S2=00000010, S3=00000100, etc…

备注:在状态机从当前状态跳到下一状态时,二进制和枚举类型有大量的反馈输入。这对CPLD来说是比较合适的。

FPGA,使用二进制和枚举类型可能会占用较少资源——但肯定比one-hot 编码慢。

One Hot每个状态只需提供一位反馈输入

对于较大的状态机,使用One Hot编码

二进制或者枚举编码,对于较小的状态机合适。

记住四输入查找表!状态机可能会有很多的扇入,和大量的反馈,对速度不利

使用One Hot, 并限制输入状态数,使输入限制到4-5,可以达到最高的速度

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值