Перейти к содержанию
    

Ругается синтезатор ISE 14.7

Добрый день, уважаемые товарищи.

Проектирую на VHDL блок, который по спаду одного сигнала (hf) устанавливает выход(o) в 1, а по фронту другого ® - в 0. Симуляция в iSim проходит на ура, а синтезатор ругается :

" Signal o cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release."

что в переводе означает:

"Сигнал о не могут быть синтезированы, плохая синхронное описание. Описание стиля вы используете для описания синхронного элемента (регистр, память и т.д.) не поддерживается в текущей версии программного обеспечения."

 

Помогите, пожалуйста, обойти проблему. У меня не хватает опыта.

 

entity hf_spad is
    Port ( hf : in  STD_LOGIC;
            r : in  STD_LOGIC;
           o : out  STD_LOGIC);
end hf_spad;

architecture Behavioral of hf_spad is

begin
process (hf,r)
begin
  if (hf'event and hf='0') then o<='1';
  elsif (r'event and r='1') then o<='0';
  end if;
end process;
end Behavioral;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто в железе нет таких элементов, у которых бы были два входа, чувствительные к фронту. Как вариант обхода этого - сделать синхронный вариант: на неком клоке выделять нужные фронты и потом на том же клоке сделать ваш процесс синхронным.

Изменено пользователем Herz
Избыточное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо

 

HF - внешний несинхронный сигнал.

R - внутренний сигнал, который через определенное время останавливает обработку до следующего спада HF.

Как это можно реализовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

HF - внешний несинхронный сигнал.

R - внутренний сигнал, который через определенное время останавливает обработку до следующего спада HF.

Как это можно реализовать?

При такой постановке задачи - никак.

Если почитать книжки по VHDL, то можно ввести в систему тактовый сигнал CLK, "протянуть" через него и входной сигнал HF, чтобы стал синхронным, и внутренний R - на всякий случай ибо автор есть зело непредсказуем. И построить регистр с разрешением записи и сбросом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При такой постановке задачи - никак.

Если почитать книжки по VHDL, то можно ввести в систему тактовый сигнал CLK, "протянуть" через него и входной сигнал HF, чтобы стал синхронным, и внутренний R - на всякий случай ибо автор есть зело непредсказуем. И построить регистр с разрешением записи и сбросом.

Добавлю...

1. Сначала прочитать про пересечение клоковых доменов.

2. Прочитать про синхронное проектирование.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получилось решить проблему с помощью стандартного FDRS -триггера. на вход s подал сигнал hf, на вход сброса - сигнал r, выход триггера замкнул на вход d и с него же беру нужны сигнал управления.

post-86484-1463402602.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получилось решить проблему с помощью стандартного FDRS -триггера. на вход s подал сигнал hf, на вход сброса - сигнал r, выход триггера замкнул на вход d и с него же беру нужны сигнал управления.

Хреново одним словом!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

лучше тогда следующим образом:

JK триггер

 

library IEEE;
use IEEE.std_logic_1164.all;
entity JK_tr is

      port (J: in STD_LOGIC;
            K:in STD_LOGIC;
            CLK:in STD_LOGIC;
            Reset: in STD_LOGIC;
            Q: out STD_LOGIC);

end JK_tr;
architecture JK_tr of JK_tr is

      begin
      process(clk, reset) is
      variable Qint: STD_LOGIC;
      begin
      if (reset ='0') then Qint:='0';
      elsif (CLK'event and CLK ='1') then
      if (J='1' and K='1') then Qint := not(Qint);
      elsif (J='0' and K='0') then Qint:=Qint;
      elsif (J='1' and K='0') then Qint:='1';
      elsif (J='0' and K='1') then Qint:='0';
      end if; end if;
      Q<=Qint;
      end process;

end JK_tr;

 

+ детектор переднего и заднего фронта входных импульсов/сигналов

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity det is
    Port ( clk : in  STD_LOGIC;
           input : in  STD_LOGIC;
           stroba  : out  STD_LOGIC;
           strobb : out  STD_LOGIC);
end det;

architecture Behavioral of det is

signal input_1, input_2 : STD_LOGIC;

begin

process(input, CLK, input_1, input_2)
begin
if (rising_edge(CLK)) then --- falling_edge(clk)
input_1 <= input;
input_2 <= input_1;
end if;
end process;

stroba <= input_1 and (not input_2);
strobb <= (not input_1) and input_2;

end Behavioral;

 

+ синхронизация входных сигналов/импульсов, если эти сигналы/импульсы приходят из вне в ПЛИС или формируются на другой тактовой частоте

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity synchronizer is
    generic ( stages : natural := 3 );
    Port ( clk : in STD_LOGIC;
           i : in STD_LOGIC;
           o : out STD_LOGIC);
end synchronizer;

architecture Behavioral of synchronizer is
    signal flipflops : std_logic_vector(stages-1 downto 0):= (others => '0');
    attribute ASYNC_REG : string;
    attribute ASYNC_REG of flipflops: signal is "true";
begin

    o <= flipflops(flipflops'high);

clk_proc: process(clk)
    begin
        if rising_edge(clk) then
            flipflops <= flipflops(flipflops'high-1 downto 0) & i;
        end if;
    end process;

end Behavioral;

 

Как соединить предлагаю Вам подумать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое! но не могли бы Вы прокомментировать последний код? как он работает в железе? а то на этапе задания атрибутов я запутался.

Изменено пользователем Herz
Избыточное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое! но не могли бы Вы прокомментировать последний код? как он работает в железе? а то на этапе задания атрибутов я запутался.

рисунок 6 и 8 и читаем статью от уважаемого iosifk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Залил в железо. Работает на FDRS триггере стабильно. Может я неправильно описал используемые мной сигналы. HF и R изменяются всего один раз за цикл обработки, то есть каждый из сигналов представляет собой один импульс, которые никогда не пересекаются.

Изменено пользователем aleshanoff

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итогом всех изысканий стал просто автомат на два состояния. Спасибо, iosifk.

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity vxod_automat_1 is
   Port ( clk : in  STD_LOGIC;
      hf : in  STD_LOGIC;
          stop : in  STD_LOGIC;
               r : in  STD_LOGIC;
              o : out  STD_LOGIC);
end vxod_automat_1;

architecture Behavioral of vxod_automat_1 is
 type state_type is (st0, st1);
 signal state: state_type;
begin

state_proc:
process (clk, r)
 begin
   if r='1' then state <= st0;
 elsif (rising_edge(clk)) then
   case state is 
	  when st0 => 
	          if (hf='1' and stop='0')then state <= st1;
		  else state <= st0;
		  end if;
                when st1 =>
                         if (hf='0' and stop='1') then state <= st0;
                         else state <= st1;
		  end if;
	       when others =>
                                state <=st0;
     end case;
end if;	

end process ;


out_proc:
process (state)
  begin
  case state is
     when st0=> o <= '0';
	  when st1=> o <= '1';
     when others => o<= '0';
  end case;
end process ;	  

end Behavioral;

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...