почему при моделировании выход JK flip flop красный?

Я публикую код для JK Flip flop на языке VHDL. код правильный в соответствии со схемой триггера JK. но я получил вывод в виде красной линии. Может ли кто-нибудь сказать мне, в чем проблема только с шлепками JK.

  • Программа: JK Flip Flop

---------- ======= NAnd Gate с тремя входами ===== ---------------

library ieee;
 use ieee.std_logic_1164.all;
 entity nand_gate3 is port(
       A, B, C : in std_logic;
             F : out std_logic);
 end nand_gate3 ;


 architecture nandfunc3 of nand_gate3 is
  signal x : std_logic ;
 begin
      x <= A nand B ;
      F <= x nand C ;
end nandfunc3;

------====== END NANd GATE  with three inout ======--------

----=========NANd Gate with Two inputs==========------------
 library ieee;
use ieee.std_logic_1164.all;
 entity nand_gate2 is port(
          A, B : in std_logic;
             F : out std_logic );
end nand_gate2;

architecture nandFunc2 of nand_gate2 is
begin
      F <= A nand B ;
end nandFunc2;
------====== END NANd GATE  with three inout ======-
library ieee;
 use ieee.std_logic_1164.all;
 ENTITY  JK_flipflop IS PORT ( 
                     clk , J, K : IN  std_logic; 
                     Q , Q_bar  : OUT std_logic );
 END JK_flipflop ;  

 architecture JK_structure OF JK_flipflop  IS 
 ----===Compnents 
    COMPONENT nand_gate3 IS PORT (
                       A, B ,C  : IN std_logic ; 
                       F        : OUt std_logic );
    End Component ; 

    COMPONENT nand_gate2 IS PORT (
                       A, B   : IN std_logic ; 
                       F        : OUt std_logic );
    End Component ; 

    Signal X, Y , Qback ,Qbar_back: std_logic ; 
----== Structure
  Begin 

   U1: nand_gate3 PORT MAP ( J, clk, Qbar_back, X ); 
   U2: nand_gate3 PORT MAP ( K, clk, Qback    ,Y );
  U3: nand_gate2 PORT MAP ( X, Qbar_back  ,Qback); 
  U4: nand_gate2 PORT MAP ( Y, Qback  ,Qbar_back); 

   Q <= Qback;
    Q_bar <= Qbar_back;

END JK_structure ; 

-------------------- Испытательный стенд для шлепанцев JK ---- ===

 library ieee;
 use ieee.std_logic_1164.all; 

 entity jk_flipflop_tb is 
 end jk_flipflop_tb ;

   architecture tb of jk_flipflop_tb is
   ---====Jk_flipflop 
    component   JK_flipflop is  port(
                 clk,J , K  : in std_logic;
                 Q, Q_bar   : out std_logic);
   end component;
---===signals
   signal clk,J ,K , Q, Q_bar : std_logic;

   begin
    mapping:   JK_flipflop port map(clk, J, K, Q, Q_bar);

-------=========Process for Clcok ===========---------------
    process

 begin
    clk <= '1';
    wait for 5 ns;
    clk <= '0';
    wait for 5 ns;
   end process;
 --------===========Process for j,k inputs values=======--------------
 process

 begin
 -------===TEST 1
  J <= '0';
  K <= '1';
    wait for 20 ns;
  -------====TEST 2
   J <= '1';
   K <= '1';
   wait for 20 ns;
 -------====TEST 3
  J <= '1';
  K <= '0';
   wait for 20 ns;
 -------====TEST 4
   J <= '0';
   K <= '0';
  wait for 20 ns;

  end process;
end tb;
--------------------------------------------
 configuration cfg_tb of jk_flipflop_tb is
  for tb
  end for;
end cfg_tb;

---------======------

введите описание изображения здесь


person Misal313    schedule 03.03.2015    source источник
comment
значение не определено, а не 0 или 1!   -  person 23ars    schedule 03.03.2015


Ответы (2)


Кажется, ваша логика ошибочна. Правильная логика: Q = (J и Qbar_back) nand clk nand Qbar_back Qbar = (K and Q_back) nand clk nand Q_back

Операция and - это операция nand в вашей логике.

person omgBob    schedule 03.03.2015
comment
если вы знаете, в чем проблема, пожалуйста, исправьте ее для меня ... спасибо. @ omgBob - person Misal313; 03.03.2015

Триггеры JK должны иметь порт сброса для инициализации выходов. В противном случае, поскольку выходы (Q, Qbar) устанавливаются сами по себе (обратная связь), если у них нет начального значения, они всегда не определены. Затем вы должны добавить в свой дизайн порт сброса.

Вы можете использовать следующий код, чтобы получить правильный результат:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity JK_FF is
    port( 
        Reset  : in  std_logic;
        Clock  : in  std_logic;
        J,K    : in  std_logic;
        Q,Qbar : out std_logic
    );
end JK_FF;

architecture Behavioral of JK_FF is
    signal temp : std_logic;
begin
    process (Clock) 
    begin
        if rising_edge(Clock) then                 
            if Reset='1' then   
                temp <= '0';
            else
                if (J='0' and K='0') then
                    temp <= temp;
                elsif (J='0' and K='1') then
                    temp <= '0';
                elsif (J='1' and K='0') then
                    temp <= '1';
                elsif (J='1' and K='1') then
                    temp <= not (temp);
                end if;
            end if;
        end if;
    end process;

    Q <= temp;
    Qbar <= not temp;

end Behavioral;
person Amir    schedule 03.03.2015
comment
Спасибо, амир ,, Пожалуйста, исправь код уровня ворот. - person Misal313; 03.03.2015
comment
VHDL не подходит для уровня гейта, вам действительно следует использовать код @amir или аналоговый симулятор. Кроме того, ваш nand3 должен читать x ‹= not (A, B и C); - person Jonathan Drolet; 03.03.2015
comment
Мои мысли тоже (@Jonathan Drolet), но если вам действительно нужно использовать логические ворота, вы можете синтезировать мой код в каком-нибудь инструменте синтеза (например, Xilinx Synthesis Tool) и щелкнуть по технологии просмотра схемы. Вывод содержит некоторые LUT, DFF, .... (LUT могут быть преобразованы в базовые логические вентили) Затем вы можете написать свой код со всем, что вы видите в окне Schematic Technology. - person Amir; 03.03.2015