老古开发网首页
导航:老古开发网首页文章索引文章分类EDA/IC设计→[VHDL学习之组合逻辑电路]
| -文章搜索 - 最新文章 - |

VHDL学习之组合逻辑电路

发布时间:2006年10月15日 点击次数:1545
来源:   作者:
 

第二章、组合逻辑电路

1、监视交通信号工作状态的逻辑电路

library ieee;
use ieee.std_logic_1164.all;

entity hld is
   port(r,a,g:in std_login;
        z:out std_logic);
end hld;

architecture rtl of hld is
begin
     process(r,a,g)
     variable conb:std_logic_vector(2 downto 0);
     begin
       comb:=r&a&g;
       case comb is
         when"000"=>z<=''''1'''';
         when"001"=>z<=''''0'''';
         when"010"=>z<=''''0'''';
         when"011"=>z<=''''1'''';
         when"100"=>z<=''''0'''';
         when"101"=>z<=''''1'''';
         when"110"=>z<=''''1'''';
         when others=>z<=''''1'''';
      end case;
    end process;
   end rtl;

2、8线---3线编码器的设计

library ieee;
use ieee.std_logic_1164.all;

entity bm8_3 is
       port(a:in std_logic_vector(7 downto 0);
            b:out std_logic_vector(2 downto 0));
end bm8_3;
architecture rtl ofbm8_3 is
begin
   process(a)
   begin
   case a is
   when"00000001"=>b<="000";
   when"00000010"=>b<="001";
   when"00000100"=>b<="010";
   when"00001000"=>b<="011";
   when"00010000"=>b<="100";
   when"00100000"=>b<="101";
   when"01000000"=>b<="110"; 
   when others=>b<="111";
   end case;
    end process;
end rtl;

3、8线---3线优先编码器的设计

library ieee;
use ieee.std_logic_1164.all;

entity yxbm8_3 is
   port(i:in std_logic_vector(7 downto 0);
        s:in std_logic;
        y:out std_logic_vector(2 cownto 0);
        ys,yex:out std_logic);
end yxbm8_3

architecture rtl of yxbm8_3 is
begin
  process(i,s)
  begin
      if s=''''1''''then
      y<="111";
      ys<=''''1'''';
      ysx<=''''0'''';
    else
       if i(7)=''''0''''then
          y<="001";
          ys<=''''1'''';
          ysx<=''''0'''';
     else
       if i(6)=''''0''''then
          y<="001";
          ys<=''''1'''';
          ysx<=''''0'''';
      else
       if i(5)=''''0''''then
          y<="010";
          ys<=''''1'''';
          ysx<=''''0'''';
       else
       if i(4)=''''0''''then
          y<="011";
          ys<=''''1'''';
          ysx<=''''0'''';
       else
       if i(3)=''''0''''then
          y<="100";
          ys<=''''1'''';
          ysx<=''''0'''';
       else
       if i(2)=''''0''''then
          y<="101";
          ys<=''''1'''';
          ysx<=''''0'''';
       else
       if i(1)=''''0''''then
          y<="110";
          ys<=''''1'''';
          ysx<=''''0'''';
       else
       if i(0)=''''0''''then
          y<="111";
          ys<=''''1'''';
          ysx<=''''0'''';
       else
       if i=''''11111111''''then
          y<="111";
          ys<=''''1'''';
          ysx<=''''0'''';
       end if;
      end if;
     end process;
   end rtl;

4、二---十进制编码器的设计

library ieee;
use ieee.std_logic_1164.all;

entity bmq is
     port(i:in std_logic_vector(8 downto 0);
          yLout std_logic_vctor(3 downto 0));
end bmq;

architecture rtl of bmq is
begin
process(i);
begin
        if i(8)=''''0''''then
               y<="0110";
       
        elsif i(7)=''''0''''then
               y<="0111";
        elsif i(6)=''''0''''then
               y<="1000";
        elsif i(5)=''''0''''then
               y<="1001";
        elsif i(4)=''''0''''then
               y<="1010";
        elsif i(3)=''''0''''then
               y<="1011";
        elsif i(2)=''''0''''then
               y<="1100";
        elsif i(1)=''''0''''then
               y<="1101";
        elsif i(0)=''''0''''then
               y<="1110";
        elsif i=''''11111111''''then
               y<="1111";
      end if;
     end process;
   end rtl;

5、译码器(3线---8线)的设计

library ieee;
use ieee.std_logic_1164.all;
 
entity ym3_8 is
   port(A0,A1,A2:in bit;
        s1,s2,s3:in bit;
        y0,y1,y2,y3,y4,y5,y6,y7:out bit);
end ym3_8;

architecture rtl of ym3_8 is
     signal s:bit;
     signal A:bit_vector(2 downto 0);
     signal y:bit_vector(7 downto 0);
begin
     process(A,s1,s2,s3)
     begin
       s<=s2 or s3;
      A<=A2&A1&A0;
         if s1=''''0''''then
     y<="11111111"
    elsif s=''''1''''then
    y<="11111111";
    else
  case A is
  when"000"=>y<="11111110";
  when"001"=>y<="11111101";
  when"010"=>y<="11111011";
  when"011"=>y<="11110111";
  when"100"=>y<="11101111";
  when"101"=>y<="11011111";
  when"110"=>y<="10111111";
  when others=>y<="01111111";
  end case;
  end if;
end process;
y0<=y(0);
y1<=y(1);
y2<=y(2);
y3<=y(3);
y4<=y(4);
y5<=y(5);
y6<=y(6);
y7<=y(7);
end rtl;

6、二---十进制译码器的设计

library ieee;
use ieee.std_logic_1164.all;

entity ym2_10 is
   port(a:in atd_logic_vector(3 downto 0);
        y:out atd_logic_vector(9 downto 0));
end ym2_10:

architecture rtl of ym2_10 is
bigin
    process(a)
    bigin
    case a is
   when"0000"=>y<="1111111110";
   when"0001"=>y<="1111111101";
   when"0010"=>y<="1111111011";
   when"0011"=>y<="1111110111";
   when"0100"=>y<="1111101111";
   when"0101"=>y<="1111011111";
   when"0110"=>y<="1110111111";
   when"0111"=>y<="1101111111";
   when"1000"=>y<="1011111111";
   when"1001"=>y<="0111111111";
   when pthers=>y<="11111111";
  end case;
 end process;
end rtl;

7、BCD七段显示译码器的设计

library ieee;
use ieee.std_logic_1164.all;

entity qdym is
    port(a:in atd_logic_vector(3 downto 0);
        y:out atd_logic_vector(6 downto 0));
end qdym;

architecture rtl of qdym is
begin
  process(a)
  begin
     case a is
         when"0000"=>Y<="0111111";
         when"0001"=>Y<="0000110";
         when"0010"=>Y<="1011011";  
         when"0011"=>Y<="1001111";
         when"0100"=>Y<="1100110";
         when"0101"=>Y<="1101101";
         when"0110"=>Y<="1111101";
         when"0111"=>Y<="0100111";
         when"1000"=>Y<="1111111";
         when"1001"=>Y<="1101111";
         when"1010"=>Y<="1110111";
         when"1011"=>Y<="1111100";
         when"1100"=>Y<="0111001";
         when"1101"=>Y<="1011110";
         when"1110"=>Y<="1111001";
         when OTHERS=>Y<="1110001";
        end case;
 end process;
end rtl;

8、代码转换

library ieee;
use ieee.std_logic_1164.all;

entity zhuanhuan is
    port(x0,x1,x2,x3:in std_logic;
         c:in std_logic;
         y0,y1,y2,y3:out std_logic);
end zhuanhuan;

architecture rtl of zhuanhuan is
begin
  y3<=x3;
  y2<=(x3 and(not x2))or((not x3)and x2);
  y1<=((not c)and((x3 and x2 and x1)or((not x3)and(not x2)andx1)or((not x3)and x2 and(not
x1))or(x3 and(out x2)and(out x1))))or(c and((x2 and(notx1))or((not x2)and x1)));
  y0<=((not c)and(((not x3)and(not x2)and(not x1)and x0)or((not x3)and(not x2)and(not x0)
and x1)or((notand(not x0)and(not x1)and x2)or((not x3)and x2 and x1 and x0)or(x3 and x2 and
(not x1)and x0)or((not x0)and x2 and x1 and x3)or((not x0)and(not x2)and(not x1)and x3)0r(x3
 and(not x2)and x1 and x0)))or(c and((x1 and(not x0))or((not x1)and x0)));
end rtl;

9、四选一数据选择器的设计

library ieee;
use ieee.std_logic_1164.all;

entity cxy is
    port(d0,d1,d2,d3,a0,a1,s:in std_logic;
         y:out std_logic);
end cxy;
architecture rtl of cxy is
signal a:std_logic_vector(1 downto 0);
begin
  process(a0,a1)
  begin
     a<=a1&a0;
     if(s=''''0'''')then
          case a is
            when"00"=>y<=d0;
            when"01"=>y<=d1;
            when"10"=>y<=d2;
            when others=>y<=d3;
      end case;
   end if;
 end process;
end rtl; 

10、八选一数据选择器的设计

library ieee;
use ieee.std_logic_1164.all;

entity 1334 is
       port(d0,d1,d2,d3,d4,d5,d6,d7,a0,a1,a2:in std_logic;
         y:out std_logic);
end 1334;

architecture rtl of 1334 is
signal a:std_logic_vector(2 downto 0);
begin
    process(a0,a1,a2)
     begin
       a<=a2&a1&a0;
     case a is
         when"000"=>y<=d0;
         when"001"=>y<=d1;
         when"010"=>y<=d2;
         when"011"=>y<=d3;
         when"100"=>y<=d4;
         when"101"=>y<=d5;
         when"110"=>y<=d6;
         when others=>y<=d7;
            end case;
 end process;
end rtl;

11、4位全加器的设计
   (1)1位全加器

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity qjq is
    port(a,b:in std_logic;
         ci:in std_logic;
         co:out std_logic;
         s:out std_logic);
end qjq;

architecture rtl of qjq is
begin
process(a,b,ci);
begin
   if(a=''''0''''and b=''''0''''and ci=''''0'''')then
      s<=''''0'''';
      so<=''''0'''';
  elsif(a=''''1''''and b=''''0''''and ci=''''0'''')then
      s<=''''1'''';
      so<=''''0'''';
  elsif(a=''''0''''and b=''''1''''and ci=''''0'''')then
      s<=''''1'''';
      so<=''''0'''';
  elsif(a=''''1''''and b=''''1''''and ci=''''0'''')then
      s<=''''0'''';
      so<=''''1'''';
  elsif(a=''''0''''and b=''''0''''and ci=''''1'''')then
      s<=''''1'''';
      so<=''''0'''';
     elsif(a=''''0''''and b=''''1''''and ci=''''1'''')then
      s<=''''0'''';
      so<=''''1'''';
  elsif(a=''''1''''and b=''''0''''and ci=''''1'''')then
      s<=''''0'''';
      so<=''''1'''';
     else
    s<=''''1'''';
    co<=''''1'''';
  end if;
 end process;
end rtl; 

12、8位加法器的设计

程序一:

library ieee;
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all;

entity adder4b is
        port (cin:in std_logic;
              a,b:in std_logic_vector(3 downto 0);
              s:out std_logic_vector(3 downto 0);
             cout:out std_logic);
end adder4b;

architecture behav of adder4b is
       signal sint:std_logic_vector(4 downto 0);
       signal aa:std_logic_vector(4 downto 0);
begin
   aa<=''''0''''&a(3 downto 0);
   bb<=''''0''''&b(3 downto 0);
   sint<=aa+bb+cin;
   s(3 downto 0)<=sint(3 downto 0);
  cout<=sint(4)
end behav;

程序二:

library ieee;
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all;

entity adder8b is
        port (cin:in std_logic;
              a,b:in std_logic_vector(7 downto 0);
              s:out std_logic_vector(7 downto 0);
             cout:out std_logic);
end adder8b;

architecture behav of adder8b is
component adder4b
 port (cin:in std_logic;
              a,b:in std_logic_vector(3 downto 0);
              s:out std_logic_vector(3 downto 0);
             cout:out std_logic);
end component;
      signal carry_out:std_logic;
      begin
        u1:adder4b  port  map(cin=>cin,a=>a(3 downto 0),b=>b(3 downto 0),s=>(3 downto 0),
        cout=>carry_out);
        u2:adder4b  port  map(cin=>carry_out,a=>a(7 downto 4),b=>b(7 downto 4),s=>s(7 downto 4),cout=>cout);
end struc;

13、多位数值比较器的设计

library ieee;
use ieee.std_logic_1164.all;
 
entity cc14585 is
        port(a,b:in std_logic_vector(3 downto 0); 
              cc14585y1,y2,y3:out std_logic);
end cc14585;

architecture rtl of cc14585 is
begin
process(a,b)
   begin
     if(a>b)then
        y1<=''''1'''';
        y2<=''''0'''';
        y3<=''''0'''';
     elsif(a=b)then
        y1<=''''0'''';
        y2<=''''1'''';
        y3<=''''0'''';
     else
        y1<=''''0'''';
        y2<=''''0'''';
        y3<=''''1'''';
          end if;
 end process;
end rtl; 



欢迎进入老古论坛进行讨论
[EDA/IC设计] 相关文章:
VHDL学习之时序逻辑电路
简介:
第四章节 时序逻辑电路 4.1 寄存器的设计 源程序: library ieee; usr ieee.std_logic_1164.all; entity jcq is port(clk:in std_logic; r:in std_logic; d:in std_logic_vector(3 dowmto 0)......

硅统参与AMD笔记型计算机技术论坛并展出新款芯片
印政府推迟颁发投资许可,华为进军印度软件业受阻
Cadence与IBM深入EDA合作
美国国半新推高度集成的电源管理单元,
Rabbit半导体推出植入PLC应用套件
智原科技向StorLink提供双核网络处理器SoC设计
Freescale和ELMOS加强汽车领域半导体合作
英飞凌推出基于双核架构的高度集成的SoC解决方案
TI携手Brix将提供广泛深入的IP端点服务保障管理
 
下一个:[EDA/IC设计]VHDL学习之触发器
简介:
第三章节 触发器 3。1。RS触发器的设计 library ieee; use ieee.std_logic_1164.all; entity rsff is port(r,s:in std_logic; q,qb:out std_logic); end rsff; architecture rtl of rsff is signal q_temp,qb_tempLstd_logic; begin process(r,s) be......
 

上一个:[EDA/IC设计]VHDL学习之门电路

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:172毫秒