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