Программа VHDL для JK Flip Flop с использованием Case Case - PullRequest
0 голосов
/ 08 сентября 2018
library ieee;
use ieee. std_logic_1164.all;
 entity JKFF is
PORT( j,k,clock: in std_logic;
q,qbar: out std_logic);
end JKFF;
Architecture behavioral of JKFF is
signal jk : std_logic_vector(1 downto 0);
signal temp : std logic;
begin

process(clock,j,r)

begin
jk <= j & k;
if(clock= '1' and clock'event) then
 case (jk) is
   when "00" => temp<= temp;
   when "01" => temp <= '0';
   when "10" => temp <= '1';
   when "11" => not temp;
   when others => temp <= 'X'
end case;
end process;
q <= temp;
qbar <= not temp;

end behavioral;

Когда я скомпилировал эту программу, используя ghdl, она показывает ошибку «когда» вместо «нет».Пожалуйста, помогите мне найти проблему с этим кодом.

1 Ответ

0 голосов
/ 09 сентября 2018

ты забыл эти вещи:

1) when "11" => not temp; до when "11" => temp <= not temp;

2) when others => temp <= 'X' должен иметь точку с запятой в конце when others => temp <='X';

3) вы пропустили end if в конце if

4) список чувствительности процесса содержит необъявленный сигнал с именем 'r'

Я исключил сигналы j и k из процесса, потому что весь код, который вы выполняете в операторе if, обусловлен только часами, поэтому нет необходимости выполнять процесс, когда j и k изменяют свое значение и часы не на переднем крае.

library ieee;
use ieee. std_logic_1164.all;
 entity JKFF is
PORT( j,k,clock: in std_logic;
q,qbar: out std_logic);
end JKFF;
Architecture behavioral of JKFF is
signal jk : std_logic_vector(1 downto 0);
signal temp : std logic;
begin

process(clock)

begin
jk <= j & k;
if(clock= '1' and clock'event) then
   case (jk) is
     when "00" => temp<= temp;
     when "01" => temp <= '0';
     when "10" => temp <= '1';
     when "11" => temp <= not temp;
     when others => temp <= 'X';
    end case;
end if;
end process;
q <= temp;
qbar <= not temp;

end behavioral;
...