sun_of_the_midnight 0 September 6, 2008 Posted September 6, 2008 · Report post Здравствуйте. Изучаю VHD. Уже многое стало понятно, но никак не пойму как реализовать задерки в этом языке? Нужны задержки от 1 мкс до сотен мс. Зарание всем спасибо. Quote Share this post Link to post Share on other sites More sharing options...
makc 322 September 6, 2008 Posted September 6, 2008 · Report post Опишите задачу более конкретно. Quote Share this post Link to post Share on other sites More sharing options...
LeonY 0 September 6, 2008 Posted September 6, 2008 · Report post Задержку описать можно только в Testbench-е, но не в синтезируемом коде. Команда wait for 10 us; те ждать 10 us от какого-то события. Не знаю помогло ли, тк сама задача совсем не описана... Quote Share this post Link to post Share on other sites More sharing options...
Uuftc 0 September 6, 2008 Posted September 6, 2008 · Report post Задержку описать можно только в Testbench-е, но не в синтезируемом коде. Команда wait for 10 us; те ждать 10 us от какого-то события. или для присваивания сигналу: port1 <= '1' after 10ns; (естественно тоже конструкция не синтезируемая) Quote Share this post Link to post Share on other sites More sharing options...
sun_of_the_midnight 0 September 7, 2008 Posted September 7, 2008 · Report post Спасибо всем за ответы. Я просто думал что в этом языке существуют такие задержки как CVAVR типо delay_ms и delay_us. Quote Share this post Link to post Share on other sites More sharing options...
LeonY 0 September 7, 2008 Posted September 7, 2008 · Report post Спасибо всем за ответы. Я просто думал что в этом языке существуют такие задержки как CVAVR типо delay_ms и delay_us. Вот тут и есть главная ошибка новичка (ничего плохого не имею ввиду) - VHDL не есть язык программирования, а язык описания железа (Hardware Definition Language), поэтому какие в нем конструкции есть или нету - дело десятое, гораздо более важный вопрос следующий: "А как ЭТО будет выглядеть в виде набора NAND вентилей и триггеров?". Если Вы можете подобрать это соответствие - все ОК, а если не можете, то не приставайте к VHDL, все равно не поможет. Вот тот самый случай с "задержками" на уровне поведенческой модели (behaviour model) - вот я, например, не могу этого сделать, хотя занимаюсь цифровым проектированием уже без малого 30 лет :) Quote Share this post Link to post Share on other sites More sharing options...
tolik1 0 September 15, 2008 Posted September 15, 2008 · Report post Вот тут и есть главная ошибка новичка (ничего плохого не имею ввиду) - VHDL не есть язык программирования, а язык описания железа (Hardware Definition Language), поэтому какие в нем конструкции есть или нету - дело десятое, гораздо более важный вопрос следующий: "А как ЭТО будет выглядеть в виде набора NAND вентилей и триггеров?". Если Вы можете подобрать это соответствие - все ОК, а если не можете, то не приставайте к VHDL, все равно не поможет. Вот тот самый случай с "задержками" на уровне поведенческой модели (behaviour model) - вот я, например, не могу этого сделать, хотя занимаюсь цифровым проектированием уже без малого 30 лет :) Чисто из любопытства. Использую ISE-EDK 9.2. В EDK есть периферийное ус-во(входит в стандартный набор) XPS-EPC. Представляет оно собой преобразователь PLB шины в конфигурируемую шину(для подключения внешних микросхем, имеющих шинный доступ). Так вот при настройке этого ус-ва задается длительность сигналов Read, Write итд. Задается с точностью гораздо болшей чем позволяет имеющийся тактовый сигнал. А главное, в железе достаточно точно выдерживается. Как они это делают? Quote Share this post Link to post Share on other sites More sharing options...
Kedin 0 September 15, 2008 Posted September 15, 2008 · Report post Никак. Для формирования длительностей управляющих сигналов используют счетчики. Соотвественно все заданные вами задержки округляются до дискрета тактовой частоты Quote Share this post Link to post Share on other sites More sharing options...
sun_of_the_midnight 0 September 20, 2008 Posted September 20, 2008 · Report post По жизненым обстоятельствам извините за долгое отсутствие меня в теме. Как я раньше и говорил что начал только изучать этот язык, а в книге: 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 правильно указал мне на то что это язык описания железа, а не язык программирования как таковой. Ещё раз всем Вам спасибо!!! Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 September 22, 2008 Posted September 22, 2008 · Report post По жизненым обстоятельствам извините за долгое отсутствие меня в теме. Как я раньше и говорил что начал только изучать этот язык, а в книге: 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: Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 23 September 22, 2008 Posted September 22, 2008 · Report post В чем вопрос? :1111493779: Это приквел к теме. :) Quote Share this post Link to post Share on other sites More sharing options...
Larionov 0 September 26, 2008 Posted September 26, 2008 · Report post Мне то же нужно придержать сигнал, но не на время, а на один такт относительно ведущего сигнала. Проблема в том что с "1" в "0" он должен упасть на один такт clk позже ведущего, а вот вернуться из "0" в "1" он должен одновременно с ведущим. Как такое сделать на vhdl ? Толкните в нужном направлении, неделю уже гуглю и листаю буквари :( P.S. В vhdl очень новичёк. Quote Share this post Link to post Share on other sites More sharing options...
o-henry 0 September 26, 2008 Posted September 26, 2008 · Report post Мне то же нужно придержать сигнал, но не на время, а на один такт относительно ведущего сигнала. Проблема в том что с "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; Quote Share this post Link to post Share on other sites More sharing options...
Larionov 0 September 26, 2008 Posted September 26, 2008 · Report post Спасибо огромное !!! Чуть-чуть подрихтовал код(а то задержка была полтора такта) и получилось то что хотелось ! Ещё раз спасибо ! 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; Quote Share this post Link to post Share on other sites More sharing options...