Как написать 8-битный счетчик в VHDL с кодированием потока данных (структурное)?

Я пытаюсь написать 8-битный счетчик от 0 до 99, а затем вернуться к 0, с JK триггером в VHDL, с активной программой HDL. но ничего не делать. в чем проблема?

jk триггер с асинхронным сбросом:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity JK is
port(
    J, K, clk, clr : in  std_logic;
    Q, Qbar     : out std_logic
);
end JK;

architecture arch of JK is
signal D : std_logic;
signal Dn : std_logic;
signal clkn : std_logic;
signal clrn : std_logic;
signal o1 : std_logic := '1';
signal o2 : std_logic := '0';
signal o3 : std_logic := '0';
signal o4 : std_logic := '1';
signal o5 : std_logic := '0';
signal o6 : std_logic := '1';
signal o7 : std_logic := '1';
signal o8 : std_logic := '0';


begin

D <= (o8 and (not K)) or (o7 and J);
Dn <= not D;
clkn <= not clk;
clrn <= not clr;
o1 <= Dn and clkn;
o2 <= D  and clkn and clrn;
o3 <= not (o4 or o1 or clr);
o4 <= o3 nor o2;
o5 <= o3 and clk;
o6 <= o4 and clk;
o7 <= o8 nor o5;
o8 <= o7 nor o6;
Qbar <= o7;
Q    <= o8;
end arch;

8-битный код счетчика:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity counter_8bit is
port(
    clk :in std_logic;
    output : out std_logic
);
end counter_8bit;

architecture arch of counter_8bit is
signal toninty : std_logic := '0';
signal Qout : std_logic_vector(7 downto 0) := "00000000";   
component jk
port(
    J : in STD_LOGIC;
    K : in STD_LOGIC;
    clk : in STD_LOGIC;
    clr : in STD_LOGIC;
    Q : out STD_LOGIC;
    Qbar : out STD_LOGIC);
end component;
for all: jk use entity work.jk(arch);

signal j1,j2,j3,j4,j5,j6,j7,j8,k1,k2,k3,k4,k5,k6,k7,k8:std_logic := '0';          
signal Qbar : std_logic;
signal clock : std_logic;
begin
toninty <= Qout(0) and Qout(1) and (not Qout(2)) and (not Qout(3)) and (not Qout(4)) and Qout(5) and Qout(6) and (not Qout(7));
clock <= not(clk);
j1 <= '1';
j2 <= Qout(0) after 1 ps;
j3 <= Qout(0) and Qout(1);
j4 <= j3 and Qout(2);
j5 <= j4 and Qout(3);
j6 <= j5 and Qout(4);
j7 <= j6 and Qout(5);
j8 <= j7 and Qout(6);

k1 <= '1';
k2 <= Qout(0) after 1 ps;
k3 <= (Qout(0) and Qout(1));
k4 <= (j3 and Qout(2));
k5 <= (j4 and Qout(3));
k6 <= (j5 and Qout(4));
k7 <= (j6 and Qout(5));
k8 <= (j7 and Qout(6));

a1 : jk
port map(
    J => j1,
    K => k1,
    clk => clock,
    Q => Qout(0),
    Qbar => Qbar,
    clr => toninty
);
a2 : jk
port map(
    J => j2,
    K => k2,
    clk => clock,
    Q => Qout(1),
    Qbar => Qbar,
    clr => toninty
);
.
.
.
.
a8 : jk
port map(
    J => j8,
    K => k8,
    clk => clock,
    Q => Qout(7),
    Qbar => Qbar,
    clr => toninty
);

output <= Qout;

end arch;

пример вывода:

0 1 2 3 4... 99 0 1 2... 99 0 1 2 3...

Я много искал, но не нашел решения. Он скомпилирован без ошибок, но я получил UU в выводе и не могу найти проблему.

0 ответов

Другие вопросы по тегам