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

Задержки в VHDL.

Здравствуйте. Изучаю VHD. Уже многое стало понятно, но никак не пойму как реализовать задерки в этом языке? Нужны задержки от 1 мкс до сотен мс.

Зарание всем спасибо.

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


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

Задержку описать можно только в Testbench-е, но не в синтезируемом коде.

 

Команда wait for 10 us; те ждать 10 us от какого-то события.

 

Не знаю помогло ли, тк сама задача совсем не описана...

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


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

Задержку описать можно только в Testbench-е, но не в синтезируемом коде.

 

Команда wait for 10 us; те ждать 10 us от какого-то события.

или для присваивания сигналу:

port1 <= '1' after 10ns;

 

(естественно тоже конструкция не синтезируемая)

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


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

Спасибо всем за ответы. Я просто думал что в этом языке существуют такие задержки как CVAVR типо

delay_ms и delay_us.

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


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

Спасибо всем за ответы. Я просто думал что в этом языке существуют такие задержки как CVAVR типо

delay_ms и delay_us.

Вот тут и есть главная ошибка новичка (ничего плохого не имею ввиду) - VHDL не есть язык программирования, а язык описания железа (Hardware Definition Language), поэтому какие в нем конструкции есть или нету - дело десятое, гораздо более важный вопрос следующий: "А как ЭТО будет выглядеть в виде набора NAND вентилей и триггеров?". Если Вы можете подобрать это соответствие - все ОК, а если не можете, то не приставайте к VHDL, все равно не поможет. Вот тот самый случай с "задержками" на уровне поведенческой модели (behaviour model) - вот я, например, не могу этого сделать, хотя занимаюсь цифровым проектированием уже без малого 30 лет :)

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


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

Вот тут и есть главная ошибка новичка (ничего плохого не имею ввиду) - VHDL не есть язык программирования, а язык описания железа (Hardware Definition Language), поэтому какие в нем конструкции есть или нету - дело десятое, гораздо более важный вопрос следующий: "А как ЭТО будет выглядеть в виде набора NAND вентилей и триггеров?". Если Вы можете подобрать это соответствие - все ОК, а если не можете, то не приставайте к VHDL, все равно не поможет. Вот тот самый случай с "задержками" на уровне поведенческой модели (behaviour model) - вот я, например, не могу этого сделать, хотя занимаюсь цифровым проектированием уже без малого 30 лет :)

Чисто из любопытства. Использую ISE-EDK 9.2. В EDK есть периферийное ус-во(входит в стандартный набор) XPS-EPC. Представляет оно собой преобразователь PLB шины в конфигурируемую шину(для подключения внешних микросхем, имеющих шинный доступ). Так вот при настройке этого ус-ва задается длительность сигналов Read, Write итд. Задается с точностью гораздо болшей чем позволяет имеющийся тактовый сигнал. А главное, в железе достаточно точно выдерживается. Как они это делают?

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


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

Никак. Для формирования длительностей управляющих сигналов используют счетчики.

Соотвественно все заданные вами задержки округляются до дискрета тактовой частоты

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


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

По жизненым обстоятельствам извините за долгое отсутствие меня в теме.

Как я раньше и говорил что начал только изучать этот язык, а в книге: VHDL справочное пособие по основам языка (авторы Бабак В. П, Корнченко А. Г.) нашел такой код:

 

library ieee;

use std.standard;

use ieee.std_logic_1164.all;

entity oscill is

port(z: out bit);

end oscill ;

architecture bevav_oscill of oscill is

begin

process

begin

z<='0';

wait for 50 ns;

z<='1';

wait for 50 ns;

end process;

end architecture bevav_oscill;

 

Смоделировал в квартусе, а код не работает. Вот и возникла мысль открыть тему.

А товарищ LeonY правильно указал мне на то что это язык описания железа, а не язык программирования как таковой.

Ещё раз всем Вам спасибо!!!

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


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

По жизненым обстоятельствам извините за долгое отсутствие меня в теме.

Как я раньше и говорил что начал только изучать этот язык, а в книге: VHDL справочное пособие по основам языка (авторы Бабак В. П, Корнченко А. Г.) нашел такой код:

 

library ieee;

use std.standard;

use ieee.std_logic_1164.all;

entity oscill is

port(z: out bit);

end oscill ;

architecture bevav_oscill of oscill is

begin

process

begin

z<='0';

wait for 50 ns;

z<='1';

wait for 50 ns;

end process;

end architecture bevav_oscill;

 

Смоделировал в квартусе, а код не работает. Вот и возникла мысль открыть тему.

А товарищ LeonY правильно указал мне на то что это язык описания железа, а не язык программирования как таковой.

Ещё раз всем Вам спасибо!!!

 

В чем вопрос? :1111493779:

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


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

Мне то же нужно придержать сигнал, но не на время, а на один такт относительно ведущего сигнала.

Проблема в том что с "1" в "0" он должен упасть на один такт clk позже ведущего,

а вот вернуться из "0" в "1" он должен одновременно с ведущим.

 

Как такое сделать на vhdl ? Толкните в нужном направлении, неделю уже гуглю и листаю буквари :(

P.S. В vhdl очень новичёк.

post-9544-1222388250_thumb.jpg

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


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

Мне то же нужно придержать сигнал, но не на время, а на один такт относительно ведущего сигнала.

Проблема в том что с "1" в "0" он должен упасть на один такт clk позже ведущего,

а вот вернуться из "0" в "1" он должен одновременно с ведущим.

где-то так:

entity test_module is
    Port ( input : in  STD_LOGIC;
           clk : in  STD_LOGIC;
           output : out  STD_LOGIC);
end test_module;

architecture Behavioral of test_module is

signal del_sig: std_logic;

begin

process(clk)
begin
    if (rising_edge(clk))
    then
      del_sig <= input; 
    end if;
end process;

process(clk,input)
begin
  if(input ='1')
  then
   output <= '1' 
  elsif (rising_edge(clk))
  then  
     output <= del_sig; 
  end if;    
end process; 

end Behavioral;

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


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

Спасибо огромное !!!

Чуть-чуть подрихтовал код(а то задержка была полтора такта) и получилось то что хотелось !

Ещё раз спасибо !

 

LIBRARY ieee;
USE ieee.std_logic_1164.all;

entity test_module is
    Port ( input : in  STD_LOGIC;
           clk : in  STD_LOGIC;
           output : out  STD_LOGIC);
end test_module;

architecture Behavioral of test_module is

signal del_sig: std_logic;

begin

process(clk)
begin
    if (rising_edge(clk))
    then
      del_sig <= input; 
    end if;
end process;

process(clk,input)
begin
  if(input ='1')
  then
   output <= '1'; 
  elsif (falling_edge(clk))
  then  
     output <= del_sig; 
  end if;    
end process; 

end Behavioral;

post-9544-1222428253_thumb.jpg

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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