1. 用4位二进制计数器74HC161实现一个六十七进制计数器。 用VHDL层次结构设计方法设计程序并仿真,底层器件是74HC161和逻辑门。

--第一个底层设计实体  74HC161
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity v74x161 is
port(
    clk,clr_l,ld_l,enp,ent:in std_logic;
    d:in unsigned(3 downto 0);
    q:out unsigned(3 downto 0);
    rco:buffer std_logic);
end v74x161;
architecture v74x161_arch of v74x161 is
signal iq:unsigned(3 downto 0);
begin
process(clk,ent,iq)
 begin
  if clr_l='0' then iq<=(others=>'0');--异步清零
  elsif clk'event and clk='1' then
    if ld_l='0' then iq <= d;--置数
    elsif rco='1' then iq<=(others=>'0');
    elsif(ent and enp)='1' then iq<=iq+1;--计数
    end if;
  end if;
  if (iq=15) and (ent='1') then rco<='1';
  else rco<='0';
  end if;
  q<=iq;
 end process;
end v74x161_arch;
--第二个底层设计试实体 与非门
library ieee;
use ieee.std_logic_1164.all;
entity and_not_gate is
port(
    op1,op2:in std_logic;
    and_not_result:out std_logic);
end and_not_gate;
architecture behave of and_not_gate is
begin
 and_not_result<=not (op1 and op2);
end behave;

--第三个底层设计实体 非门
library ieee;
use ieee.std_logic_1164.all;
entity not_gate is
port(
A:in std_logic;
not_result:out std_logic);
end not_gate;
architecture behave of not_gate is
begin
not_result <= not A;
end behave;

 

--第四个底层设计实体 与门
library ieee;
use ieee.std_logic_1164.all;
entity and_gate is
port(
A,B:in std_logic;
and_result:out std_logic);
end and_gate;
architecture behave of and_gate is
begin
and_result <= A and B;
end behave;


--顶层设计实体  67进制计数器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity counter67 is
port(
     Clk67,Clr_l67,Ld_l67,Ent67,Enp67:in std_logic;
     D67:in unsigned(7 downto 0);
     Q67:buffer unsigned(6 downto 0);
     co:buffer std_logic);
--端口说明:Clk67是时钟脉冲信号输入端,Clr_l67,Ld_l67分别为清零端和置数端,
--Ent67,Enp67为使能控制端,两者都为1时,计数器工作,D67置数输入端,Q67状态输--出端,co进位输出端
end counter67;
architecture c67 of counter67 is
signal a,b,c:std_logic;--说明设计实体中使用的信号
 component and_not_gate--说明元件“与非门”
  port(
    op1,op2:in std_logic;
    and_not_result:out std_logic);
end component;
component not_gate--说明元件“非门”
port(
A:in std_logic;
not_result:out std_logic);
end component;
component and_gate--说明元件“与门”
port(
A,B:in std_logic;
and_result:out std_logic);
end component;
component v74x161--说明元件“74HC161”
  port(
    clk,clr_l,ld_l,enp,ent:in std_logic;
    d:in unsigned(3 downto 0);
    q:out unsigned(3 downto 0);
    rco:out std_logic);
end component;
begin
  G1:and_not_gate port map--对“与非门”的一次例化
     (op1=>Q67(1),--当Q67(1)为1时,说明第一个74HC161计数器计到了2
      op2=>Q67(6),--当Q67(6)为1时,说明第一个74HC161计数器计到了4
      and_not_result=>a);--此时,a信号为1的时候就是该进位的时候
  G2:v74x161 port map    --对“74HC161”的一次例化
     (clk=>Clk67,--时钟信号接到外部框图的时钟信号输入端
      clr_l=>Clr_l67,--清零端接到外部框图的清零端
      ld_l=>c,    --c信号为0代表置数端置数
      ent=>Ent67,
      enp=>Enp67,
      rco=>b,     --第一个74HC161输出端控制下一个74HC161计数
      q(0)=>Q67(0),
      q(1)=>Q67(1),
      q(2)=>Q67(2),
      q(3)=>Q67(3),
      d(0)=>D67(0),
      d(1)=>D67(1),
      d(2)=>D67(2),
      d(3)=>D67(3));
G3:v74x161 port map--对“74HC161”的第二次例化
     (clk=>Clk67,--时钟信号接到外部框图的时钟信号输入端
      clr_l=>Clr_l67,--清零端接到外部框图的清零端
      ld_l=>c,      --c信号为0代表置数端置数
      ent=>b,       --第二个74HC161计数器要受上一个74HC161进位输出的控制
      enp=>b,     
      q(0)=>Q67(4),
      q(1)=>Q67(5),
      q(2)=>Q67(6),
      d(0)=>D67(4),
      d(1)=>D67(5),
      d(2)=>D67(6),
      d(3)=>D67(7));
G4:not_gate port map--对“非门”的一次例化
(A=>a,
not_result => co     --该进位的时候,与非门的输出为0,
--反相器输出为1,代表进一位
);
G5:and_gate port map--对“与门”的一次例化
(
A=>a,
B=>Ld_l67,--外部框图中也有一个置数控制端,与门就是为它设计的
and_result=>c--置数端是否有效,受进位和外部框图中的控制端两者影响
);
end c67;

 

 

你可能感兴趣的:(二进制)