有没有大神有vhdl电子中设计的语言,最好能加上备注的,有的话和我说一下,谢谢,还有1000财富值

2024-11-20 17:25:41
推荐回答(1个)
回答(1):

一、VHDL语言设计的基本单元及其构成
l         一个完整的VHDL语言程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library):
l         功能:
  实体  -—-  用于描述所设计的系统的外部接口信号;
构造体——  用于描述系统内部的结构和行为;
包集合——  存放各设计模块都能共享的数据类型、常数和子程序库;
配置  —— 用于从库中选取所需单元来组成系统设计的不同版本;
库    —— 存放已经编译的实体、构造体、包集合和配置。
l         基本组成:实体说明和构造体两部分
    实体说明(接口)
    构造体(实现)
1.  实体说明:
规定此实体输入与输出的数目与类型。
l         结构:
  entity 实体名 is
[generic(类属参数说明)];
[port(端口说明)];
end 实体名;
l         类属参数说明:
generic (
    常数名:数据类型 :=数值);
在端口说明前,用于指定参数。
l         端口说明:
    在entity语句的实体说明部分,常用port语句描述实体对外界连接的端口(数目、方向和数据类型)。
port (
  端口名:端口方向 端口数据类型;
  .
 .
 .
  端口名:端口方向 端口数据类型;
);
端口方向:
in (输入),只能读,用于:时钟输入、控制输入(装入、复位、使能)、单向数据输入;
out (输出),只能被赋值,用于不能反馈的输出;
inout(输入输出) ,既可读又可被赋值,被读的值是端口输入值而不是被赋值,作为双向端口。
buffer(缓冲),类似于输出,但可以读,读的值是被赋值,用做内部反馈用,不能作为双向端口使用。
l         例1):
entity  NAND2  is
  port(A,B: in  BIT;
      Z:   out   BIT);
end  NAND2;
l         例2):
--Define an entity (design) called COMP
  --that has 2 N-bit input and one output.
entity COMP is
  generic(N : INTEGER :=8 ) ; -- default is 8 bits
  port ( x, y :  in     BIT_VECTOR ( 0 to N-1);
       equal  : out     BOOLEAN );
end COMP;
2.  构造体
构造体定义实体功能的一种实现。
l         构造体的结构:
architecture  构造体名 of  实体名  is
 {块说明项}
begin
  {并发语句}
end 构造体名;
l         块说明项(或定义语句),位于architecture 和begin之间,对构造体内部的使用信号、常数、数据类型和函数进行说明,包括:
使用语句
子程序说明
子程序体
类型说明
子类型说明
常数说明
信号说明
元件说明
l         并行语句处于begin 与end之间,描述构造体的行为与连接关系。
l         构造体的描述方法:
      行为描述(按算法的路径来描述);
      数据流描述或RTL描述(采用寄存器传输描述);
      结构化描述(采用例化元件)
      例化(instantiation   ):在高层次的设计中调用低层次的实体作为元件的过程。
l         构造体的组织
l         例
entity COUNTER3 is
port( clk:    in bit;
      reset : in bit;
      count:  out integer range 0 to 7);
end COUNTER3;
 
architecture MY_ARCH of COUNTER3 is
signal count_tmp : integer range 0 to 7;
begin
  process
  begin
     wait until (clk'event and clk='1');
     if reset='1' or count_tmp =7 then
       count_tmp<=0;
     else
       count_tmp<=count_tmp + 1;
     end if;
  end process;
  count<=count_tmp;