由多路选择器的VHDL描述入门VHDL

二选一多路选择器
二选一多路选择器真值表:
a b s y
* * 1 b
* * 0 a

VHDL描述:
1、顺序语句结构:

library ieee;
use ieee.std_logic_1164.all;

entity mux21a is
 port(a,b:in bit;
        s:in bit;
        y:out bit);
end entity mux21a;

architecture one of mux21a is
    begin
    y <= a when s = '0' else b;
end architecture one;

2、并行语句结构:

library ieee;
use ieee.std_logic_1164.all;

entity mux21a IS
  port (a,b:in bit;
          s:in bit;
          y:out bit);
end entity mux21a;

architecture one of mux21a is
    signal d,e:bit;
begin
  d <= a and (not s);
  e <= b and s;
  y <= d or e;
 end architecture one;

3、if_then_else语句结构:

library ieee;
use ieee.std_logic_1164.all;

entity mux21a is
  port (a,b,s:in bit;
            y:out bit);
end entity mux21a;

architecture one of mux21a is
  begin
    process(a,b,s)
      begin
      if s = '0' then
         y <= a; else
         y <= b;
      end if;
    end process;
end architecture one;

程序分析:
关键字:
1、实体表达:
vhdl完整的、可综合的程序结构,必须完整地表达一片专用集成电路ASIC器件的端口结构和电路功能,即无论什么芯片都必须包含实体和结构体两个基本的语言结构。把含有完整的程序结构的vhdl表述称为设计实体。基本结构如下:

entity e_name is
  port(p_name1:port_m data_type;
             ......
       p_namei:port_mi data_type);
end entity e_name;
实体描述电路器件外部情况及信号端口的基本性质。

2、实体名:
上述基本结构的e_name为实体名,为标识符,具体有设计者取定,实体实际上表达的是该设计电路的器件名,所以最好根据电路的功能来确定。特别注意:不应用中文定义实体名,不应将实体名定义为全是数字,不应用EDA工具库中已定义好的元件名作为实体名,不能用数字开头的实体名。

3、端口语句与端口信号名:
描述电路的端口及其端口信号必须用端口语句port()引导,并在语句结尾处加分号”;”。
4、端口模式:
in:输入端口,定义的通道为单向只读模式。规定数据只能通过此端口被读入实体中。
out:输出端口,定义的通道为单向输出模式。规定的数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。
inout:定义的通道确定为输入输出双向端口。
buffer:缓冲端口,其功能与inout类似,区别在于当需要输入数据时,只允许内部回读输出的信号,即允许反馈。
5、数据类型:
bit:逻辑位,取值为’0’,’1’;此处0和1必须加单引号”,否则VHDL综合器将把0和1视作integer类型。
6、结构体表达:
基本结构如下:

architecture arch_name of e_name is
    [说明语句]
begin
    (功能描述语句)
end architecture arch_name;

说明语句:包括在结构体中,用以说明和定义数据对象、数据类型、元件调用声明等,非必须语句;可以是顺序语句、并行语句或者他们的混合;
7、赋值符号和功能比较符号:
“<=”:例y <= a;将输入端口a的数据向输出端口y传输;也可以解释为将输入端口a的值赋给信号y。在vhdl时序仿真中,赋值操作并非立即发生,而是要经历一个模拟器的最小分辨时间后才能将a的值赋给y。vhdl要求赋值符号两端的数据类型必须一致;
“=”:比较运算符,输出结果的数据类型为Boolean数据类型,Boolean数据类型的取值为:true(真),fault(伪),vhdl仿真器用‘0’表示false,用‘1’表示true,Boolean数据类型不是数值,只能用于逻辑操作或者条件判断。
8、逻辑操作符:

AND:与
OR:或
NAND:与非
NOR:或非
XOR:异或
XNOR:同或
NOT:非

9、条件语句:
if_then_else表达的vhdl顺序语句的方式;
10、when_else条件信号赋值语句:
11、进程语句和顺序语句:
process([进程的敏感信号列表])
……
end process;
process旁边的()内的内容为敏感信号列表,通常要求将信号中所有输入信号都都放在敏感信号列表中。process语句的执行依赖于敏感信号的变化(或称事件的发生:event)若敏感信号发生变化后,就将启动进程语句,于是此process至end process;中间引导的语句被执行一遍,然后返回进程的起始端,等待敏感信号再次发生变化,再次进入启动—运行状态。

你可能感兴趣的:(VHDL)