访问电脑版页面

导航:老古开发网手机版其他

VHDL学习之门电路

导读:
关键字:

 第一章门电路     


      门电路
一,与非门电路
1,二输入与非门
    源程序:
法一:
     library ieee;
     use ieee.std_logic_1164.all;
     entity nand2 is
   port(a,b:in std_logic);
           y:out std_logic);
       end nand2;
    architecture nand2_1 of nand2 is
    begin
    y<=a nand b;
    end nand2_1;
法二:
library ieee;
use ieee.std_logic_1164.all

entity nand2 is
   port(a,b:in std_logic;
          y:out std_logic);
end nand2;

architecture nand2_2 of nand is
begin
p1:process(a,b)
   variable comb:std_logic_cector(1 downto 0);
begin
  comb:=a&b;
  case comb is
  when"00"=>y<='1';
  when"01"=>y<='1';
  when"10"=>y<='1';
  when"11"=>y<='0';
  when others=>y<='x';
   end case;
  end process p1l
end nand2_2;
  

2.四输入与非门电路
  法一:

library ieee;
use ieee.std_logic_1164.all;

entity nand4 is
   port(a,b,c,d:in std_logic;
              y:out std_logic;
end nand4;
  
architecture nand4_1 of nand4 is
  begin
  y<=not(a and band c and d);
end nand4_1;


   法二:

library ieee;
use ieee.std_logic_1164.all
   

entity nand4 is
  port(a.b,c,d:in std_logic;
             y:out std_logic);
end nand4;


architecture nand4_2 of nand4 si
  begin
  p1:process(a,b,c,d)
   variable tmp:std_logic_vector(3 downto 0);
begin
   tmp:=a&b&c&d;
case tmp is
     when"0000"=>y<='1';
     when"0001"=>y<='1';
     when"0010"=>y<='1';
     when"0011"=>y<='1';
     when"0100"=>y<='1';
     when"0101"=>y<='1';
     when"0110"=>y<='1';
     when"0111"=>y<='1';
     when"1000"=>y<='1';
     when"1001"=>y<='1';
     when"1010"=>y<='1';
     when"1011"=>y<='1';
     when"1100"=>y<='1';
     when"1101"=>y<='1';
     when"1110"=>y<='1';
     when"1111"=>y<='1';
     when others=>y<='x';
end case;
end process;
end nand4_2;


   法二:

library ieee;
use ieee.std_logic_1164.all;


entity nand4 is
  port(a,b,c,d:in std_logic;
             y:out std_logic);
end nand4;

architecuture nand4_3 of nand4 is
component nand2
port(a,b:in std_logic;
       y:out std_logic);
end component;
component or2
port(a,b:in std_logic;
       y:out std_logic);
end component;
signal yy1,yy2:std_logic:
  begin
   u1:nand2 port map(a,b,yy1);
   u2:nand2 port map(c,d,yy2);
   u3:or2 port map (yy1,yy2,y);
end nand4_3;

 

2。二输入 或非门电路


法一:
  
library ieee;
use ieee.std_logic_1164.all;

entity nor2 is
    port(a,b:in std_logic:
           y:out std_logic);
end nor2;

architectuer nor2_1 of nor2 is
begin
  y<=a nor b;
end nor2_1;


法二:
   

library ieee;
use ieee.std_logic_1164.all;
 
entity nor2 is
    port(a,b:in std_logic;
           y:out std_logic);
end nor2;
architecture nor2_2 of nor2 is
begin
   p1:process(a,b)
  variable comb:std_logic_vector(1 downto 0);
begin
   comb:=a&b
case comb is
   when"00"=>y<='1';
   when"01"=>y<='1';
   when"10"=>y<='1';
   when"11"=>y<='1';
   when others=>y<='x';
 
end case;
  end porcess p1;
end nor2_2;

 

3.二输入异或门电路

 

法一;
   
library ieee;
use ieee.std_1164.all;

entity xor2 is
       port(a,b:in std_logic;
            y:out std_logic);
end xor2;


architecture xor2_1 of xor2 is
begin;
    y<=a xor b;
end xor2_1;

方法二;
library ieee;
use ieee.std_logic_1164.all;

entity xor2 is
       port(a,b:in std_logic;
            y:out std_logic);
end xor2;
architecture xor2_2 of xor2 is
begin
p:process(a,b)
  variable comb:std_logic_vector(1 downto 0);
begin
 comb:=a&b;
 case comb is
      when"00"=>y<='0';
      when"01"=>y<='1';
      when"10"=>y<='1';
      when"11"=>y<='0';
      when others=>y<='X';
  end case;
 end process;
end xor2_2;

 

4.反向器门电路

方法一:

library ieee;
use ieee.std_logic_1164.all
 
entity inv is
       port(a:in std_logic;
            y:out std_logic);
end inv;

architeture inv_1 of inv is
begin
     y<=not a;
   end inv_1;

方法二:

library ieee;
use ieee.std_logic_1164.all

entity inv is
       port(a:in std_logic;
            y:out std_logic);
end inv;

architecture inv_2 ofinv is
begib
  p:pricess
    begin
     if a='1' then
        y<='0';
        else
        y<='1';
       end if;
     end provess p;
   end inv_2;


5.三态门

library ieee;
use ieee.std_logic_1164.all;

entity tri_gate is
port(din,en:in std_logic;
     dout:out std_logic);
end tri_gate;

architecture arch of tri_gate is
begin
process(bin,en)
begin 
  if en='1'then
     dout<='Z';
    end if;
  end process;
end arch;


6.单向总线缓冲器

library ieee;
use ieee.std_logic_1164.all;

entity tri_buff8 is
       port(din:in std_logic_vector(7 downto 0);
            dout:out std_logic_vector(7 downto 0);
            en:in std_login);
end tri_buff8;


architecture behav of tri_buff8 is
begin
  p:process(en,din)
begin
  if en='1'then
     dout<=din;
   else
     dout<="ZZZZZZZZ"
   end if;
  endprocess;
end behav;


7.双向总线缓冲器
 

library ieee;
use ieee.std_logic_1164.all;

entity tri_bigate is
       port(a,b:inout std)logic_vector(7downto0);
            en:in std_logic;
            dr:in std_logic);
end tri_bigate;

architecture rtl of tri_bogate is
       signal aout,bout:std_logic_vector(7 downto 0);
begin 
     process(a,dr,en)
     begin
        if(en='0')and(dr='1')then
           bout<='a'
        else
          bout<="ZZZZZZZZ";
        end if;
        b<=bout;
        end process;
        process(b,dr,en)
        begin
         if(en='0')and(dr='0')then
            aout<=b;
         else
            aout<="ZZZZZZZZ";
          end if;
         a<=aout;
        end process;
      end rtl;


来源:   作者:  2006/9/25 16:50:53
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!