发新帖我要提问
123
返回列表
打印

VHDL语言简单的教程

[复制链接]
楼主: GoldSunMonkey
手机看帖
扫描二维码
随时随地手机跟帖
41
GoldSunMonkey|  楼主 | 2011-12-11 13:51 | 只看该作者 回帖奖励 |倒序浏览
在结构定义中,一个程序里的语句是以一种顺序流程的方式赋值给信号。程序中所有语句是按顺序编译
的,因此语句出现的顺序非常重要。虽然process作为所有顺序性语句的外包语句,但其本身却与其他并行
语句同时执行,故本身是一种并行语句。
p1:process(x,y,z)
    [说明]
  begin
   [顺序性语句]
  end process pl;

使用特权

评论回复
42
GoldSunMonkey|  楼主 | 2011-12-11 13:54 | 只看该作者
block是一种并行性执行的程序模块,块间可以是层级关系。利用块将相关功能的并行语句收容、封包起来或将相
关的信号流组集成群。

alu:  block
...x<=y+1;... --产生一个输出信号x
end block  alu;


reg:block--外层
    d(1 downto 0)<=w and q;
    regl:block--层1
    z<=x+p;  --输入x,输出z
    end block regl;
    reg2:block--内层2
    t<=x+5;  --输入x,输出t
    end block reg2;
    abc<=z+t;--输入z与t;输出abc
end block reg;

使用特权

评论回复
43
GoldSunMonkey|  楼主 | 2011-12-11 13:55 | 只看该作者
直接调用程序(一个预先定义的算法流程)实现硬件结构式的连接,可将IC输出(out)、输入(in)与双向(inout)端口信
号传递给主程序。


package  my_pkg is
  procedure  dff(signal d: bit_vector(7 downto 0);
  signal clk: bit;
  signal q : out bit_vector(7 downto 0));
begin
   wait until clk = '1';
   q<= d;
end dff;
end my_pkg;
然后在主程序内由use work.my_pkg.all引用后,即可直接调用。

使用特权

评论回复
44
GoldSunMonkey|  楼主 | 2011-12-11 13:55 | 只看该作者
元件的引用为并行语句,元件代表IC设计中的一个结构化模块,属于结构化设计,在my_pkg的程序包中,mux2
被当做一个元件来定义。

package my_pkg is
  component mux2
  port ( a, b, s: in std_logic;
               y: out std_logic);
  end component;
end my_pkg;


library ieee;
use ieee.std_logic_l164.all;
entity mux2 is
       port (a, b, s: in std_logic;
                   y: out std_logic);
end mux2;
architecture a of mux2 is
begin
   process(s,  a,  b)
   begin
      if s =  '0'  then y <= a;
      else y <= b;
      end if;
   end process;
end a;

使用特权

评论回复
45
GoldSunMonkey|  楼主 | 2011-12-11 13:59 | 只看该作者
由use work.my_pkg.all调用后,即可直接调用元件mux2来设计mux8。
library ieee;
use ieee.std_logic_l164.all;
use work.my_pkg.all;
entity mux8 is
           port (d : in std_ logic_vector(7 downto 0);
                 s : in std_logic_vector(2 downto 0);
                 y : out std_logic);
end mux8;
architecture a of mux8 is
      signal yl,  y2: std_logic;
   begin
   ul:mux4 port map(d=>d(7 downto 4), s=>s(1 downto 0), y => yl);
   u2:mux4 port map(d=>d(3 downto 0), s=>s(1 downto 0), y => y2);
   u3:mux2 port map (a => yl, b => y2, s => s(2), y => y);
end a;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则