2015-05-18 2 views
0

В этом коде, когда reset равен s становится и когда reset равен s становится затем затем и он начинает все сначала с как начальное значение, только если часы установлены вверх.Поведенческие в FlipFlop Structural

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


entity clock_behav is 
    port (clock : in std_logic; 
      reset : in std_logic; 
      s : out std_logic_vector (3 downto 0)); 
end clock_behav; 

architecture behav of clock_behav is 
begin 
process(clock,reset) 
variable shift_counter: integer := 0; 
begin 
if (reset='1') then 
    s<="1000"; 
    shift_counter := 1; 
else 
    if(clock'event and clock='1') then 
     if(shift_counter =1) then 
      s<="0100"; 
      shift_counter := 2; 
     elsif(shift_counter =2) then 
      s<="0010"; 
      shift_counter := 3; 
     elsif(shift_counter =3) then 
      s<="0001"; 
      shift_counter := 0; 
     else 
      s<="1000"; 
      shift_counter := 1; 
     end if; 
    end if; 

end if; 
end process; 
end behav; 

Я хочу, чтобы создать этот enter image description here С Flipflops, как вы можете видеть, один Set и 3 Reset. Но я изо всех сил стараюсь переходить от поведенческих к структурным, потому что в VHDL мы не можем иметь в своем составе портовые карты. Конечно, я пробовал много вещей, как вы можете видеть ниже, но воссоздать его с помощью flipflops невозможно, если карты портов не находятся внутри процесса. Как вы можете ясно понять, мои знания о VHDL это не так уж и здорово. Кроме того, я хочу, чтобы вы сказали мне, если я сделал правильно, когда я изменил триггеры D и Q, это было std_logic, и я изменил его на std_logic_vector. Я сделал это для этого упражнения.

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


entity clock_structural is 
    port (clock : in std_logic; 
      reset : in std_logic; 
      s : out std_logic_vector (3 downto 0)); 
end clock_structural; 


architecture behavior of clock_structural is 
signal t,t1,t2,t3 : std_logic_vector (3 downto 0); 
component flipflop_new 
port 
(D : in std_logic_vector (3 downto 0); 
CLK : in std_logic; 
CLR : in std_logic; 
Q : out std_logic_vector (3 downto 0)); 
end component; 

component flipflop_set 
port 
(D_s : in std_logic_vector (3 downto 0); 
CLK_s : in std_logic; 
CLR_s : in std_logic; 
Q_s : out std_logic_vector (3 downto 0)); 
end component; 
begin 
process(clock,reset) 
variable shift_counter: integer := 0; 
begin 
if (reset='1') then 
    t<="1000"; 

    shift_counter := 1; 
else 
    if(clock'event and clock='1') then 
     if(shift_counter =1) then 
      shift_counter := 2; 
     elsif(shift_counter =2) then 
      shift_counter := 3; 
     elsif(shift_counter =3) then 
      shift_counter := 0; 
     else 
      shift_counter := 1; 
     end if; 
end if; 

end if; 

end process; 

FFS1: flipflop_set port map(t,clock,reset,t1); 
s<=t1; 
FFR1: flipflop_new port map(t1,clock, reset,t2); 
s<=t2; 
FFR2: flipflop_new port map(t2,clock, reset,t3); 
s<=t3; 
FFR3: flipflop_new port map(t3,clock, reset,s); 

end behavior ; 



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

entity flipflop_new is 
port (D : in std_logic_vector (3 downto 0); 
CLK : in std_logic; 
CLR : in std_logic; 
Q : out std_logic_vector (3 downto 0) 
); 
end flipflop_new; 


architecture behavior of flipflop_new is 
begin 
process(CLK) 
begin 
if CLR='0' then null; 
elsif RISING_EDGE(CLK) then 
Q <= D; 
end if; 
end process ; 
end behavior ; 

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

entity flipflop_set is 
port (D_s : in std_logic_vector (3 downto 0); 
CLK_s : in std_logic; 
CLR_s : in std_logic; 
Q_s : out std_logic_vector (3 downto 0) 
); 
end flipflop_set; 


architecture behavior of flipflop_set is 
begin 
process(CLK_s) 
begin 
if CLR_s='1' then null; 
elsif RISING_EDGE(CLK_s) then 
Q_s <= D_s; 
end if; 
end process ; 
end behavior ; 

ответ

1

Есть несколько вещей, которые нужно изменить или улучшить. Структурная модель VHDL должна описывать вашу схему, чего вы действительно не делаете.

Во-первых, почему у вас есть shift_counter в вашей конструкции? Вам не нужен этот процесс.

Во-вторых, вы создаете экземпляр 4 вашего флип-флоп-сущности, каждый из которых имеет ширину 4 бита, а у вашей схемы 4 флип-флопа. В основном, вы создаете 16 регистров, когда вам нужно 4. Почему ваша триггерная модель имеет 4 бита? Это должен быть один бит.

В-третьих, обратите внимание на ваше описание флип-флоп:

process(CLK) 
begin 
    if CLR='0' then 
     null; 
    elsif RISING_EDGE(CLK) then 
     Q <= D; 
    end if; 
end process ; 

ли это, кажется, что флип-флоп делать? Q <= D, когда часы поднимаются нормально, но делает ничего бывает, когда активен clr из триггера? В этом случае ваш выход должен быть сброшен/установлен, что не соответствует вашему VHDL.

Еще одна ошибка заключается в том, что вы назначаете свой выход s 3 раза. s должен назначаться один раз, но вы можете назначить бит отдельно, как s(0) <= t1.

И, наконец, вы не описываете обратную связь. Выход вашего последнего триггера - s, а вход первого триггера - t. Из вашей схемы они должны быть соединены вместе.

+0

Перед тем, как продолжить, нужен ли мне вообще этот процесс или мне нужно использовать только карту портов? – valkon

+0

Вам не нужен процесс в структуре. Вы, конечно, нуждаетесь в одном в описании триггера. –

+0

У меня проблема с flipflop, потому что мой учитель дал сущности с этими переменными, и нам пришлось написать архитектуру. И вы сказали, что мне нужно установить/сбросить, чего у меня нет. – valkon

Смежные вопросы