makc 235 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба makc Если писать команды в теле самого модуля то они будут выполняться параллельно, чтобы команды выполнять последовательно нужно создать процесс и в нем писать команды. Нет, не так. Поскольку Вы описываете логику работы схемы, то понятие команд в данном случае вообще не применимо. Можно говорить только о конструкциях языка описания, которые бывают параллельные и последовательные. Но, при этом, их названия непосредственно не связаны с порядком выполнения этих конструкций, т.к. он в каждом случае определяется условиями использования каждой из этих конструкций. Поэтому несмотря на то, что у Вас присваивания LED_1 и LED_2 записаны в теле процесса последовательно, с точки зрения аппаратуры (и, естественно, симулятора) они будут выполнены одновременно, т.е. "параллельно". Вот такой парадокс. Учите матчасть. Разберитесь с осноными понятиями HDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nuts 0 28 июля, 2008 Опубликовано 28 июля, 2008 (изменено) · Жалоба Теперь понятно. Я действительно думал что ПЛИС-процессор, и что я программю а не конфигурирую железо. :05: Изменено 28 июля, 2008 пользователем Nuts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nuts 0 31 июля, 2008 Опубликовано 31 июля, 2008 (изменено) · Жалоба Что такое макроячейка? :05: Изменено 31 июля, 2008 пользователем Nuts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 31 июля, 2008 Опубликовано 31 июля, 2008 · Жалоба Что такое макроячейка? :05: Почитайте http://en.wikipedia.org/wiki/Field-programmable_gate_array для общего развития. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nuts 0 31 июля, 2008 Опубликовано 31 июля, 2008 · Жалоба Спасибо. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 31 июля, 2008 Опубликовано 31 июля, 2008 · Жалоба У меня тоже вопрос : "Как приделать к дешифратору Чип Селект?" Придумал добавить еще один разряд, а как правильно? entity decoder is Port ( ADR : in STD_LOGIC_VECTOR (3 downto 0); -- CS : in STD_LOGIC; REG_WR : out STD_LOGIC_VECTOR (7 downto 0)); end decoder; architecture Behavioral of decoder is begin with ADR select REG_WR <= "00000001" when "0000", "00000010" when "0001", "00000100" when "0010", "00001000" when "0011", "00010000" when "0100", "00100000" when "0101", "01000000" when "0110", "10000000" when "0111", "00000000" when others; end Behavioral; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 31 июля, 2008 Опубликовано 31 июля, 2008 · Жалоба У меня тоже вопрос : "Как приделать к дешифратору Чип Селект?" Придумал добавить еще один разряд, а как правильно? Фактически, чипселект это и есть дополнительный адресный разряд, который вырабатывают на основе старших разрядов адреса для упрощения декодирования адреса.Так что это решение вполне допустимо. Ваш код можно модифицировать таким образом: entity decoder is Port ( ADR : IN std_logic_vector (2 downto 0); CS : IN std_logic; REG_WR : OUT std_logic_vector (7 downto 0) ); end decoder; architecture Behavioral of decoder is begin process( ADR, CS ) variable i : integer; begin if CS='1' then for i in REG_WR'RANGE loop if i=CONV_INTEGER(ADR) then REG_WR(i) <= '1'; else REG_WR(i) <= '0'; end if; end loop; else REG_WR <= (others => '0'); end if; end process; end Behavioral; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nuts 0 5 августа, 2008 Опубликовано 5 августа, 2008 (изменено) · Жалоба Скажите пожалуста. Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов? :05: Ситуация вроде этой. Подскажите как быть :05: ----------------- signal s:bit; 1:process begin if falling_edge(CLK)then s<='1'; end if; end process; ------------------ 2:process begin if rising_edge(CLK)then s<='0'; end if; end process; ----------------- Изменено 5 августа, 2008 пользователем Nuts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Если сигнал один и тот же и CLK один и тот же, то зачем делать 2 независимых процесса? Я вообще плохо соображаю в разных там VHDL и иже с ними, и в конечном счёте всё равно перевожу мысленно в схематик. Чисто на пальцах у вас получается 2 источника сигнала, выведенных на 1 ногу. Надо их развязать как-то через логику (OR,AND,XOR,MUX и т.д.). Если действительно нужны 2 процесса (в чём я лично сомневаюсь) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nuts 0 5 августа, 2008 Опубликовано 5 августа, 2008 (изменено) · Жалоба Это простой пример. Я пишу чтото вроде асинхронного FIFO, там такая вещь очень пригодилась бы. Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. Изменено 5 августа, 2008 пользователем Nuts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Скажите пожалуста. Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов? :05: Ситуация вроде этой. Подскажите как быть :05: ----------------- signal s:bit; 1:process begin if falling_edge(CLK)then s<='1'; end if; end process; ------------------ 2:process begin if rising_edge(CLK)then s<='0'; end if; end process; ----------------- Что Вы хотите получить в результате? Если Вы хотите получить синтезируемое описание, то нужно исходить из ограничений целевой платформы (ПЛИС). Если целью является только моделирование, то можно написать так: ----------------- signal s:bit; process(CLK) begin if falling_edge(CLK)then s<='1'; end if; if rising_edge(CLK)then s<='0'; end if; end process; ----------------- Но это будет на 99% не синтезируемая конструкция, т.к. я не видел применения триггеров, работающих по обоим фронтам тактового сигнала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReedCat 0 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. Уухх... А выключаются когда? Это намёк, что в рамках одного такта такое вряд ли удастся сделать. А так - мультиплексор - есть такая штука, как раз для того, чтобы в один момент выдать один сигнал, а в другой - другой. Только не забывайте о том, что мультиплексору тоже нужно время, чтобы переключиться... А управляющим сигналам на нём - время, чтобы установиться... Вот и получится: 1 такт: поставили адрес входа 1 на мультиплексор 2 такт: переключили мультиплексор на вход 1 3 такт: выдали сигнал с входа 1 на выход 4 такт: поставили адрес входа 2 на мультиплексор 5 такт: переключили мультиплексор на вход 2 6 такт: выдали сигнал с входа 2 на выход ... и так далее... А вы говорите: "один по фронту, другой по спаду" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Это простой пример. Я пишу чтото вроде асинхронного FIFO, там такая вещь очень пригодилась бы. Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. С точки зрения языка - конфликт налицо, т.к. происходит присваивание значений одному и тому же сигналу в двух разных параллельных процессах. То, что Вы понимаете невозможность одновременного фронта и спада одного и тоже же сигнала вовсе не означает, что это понимает синтезатор/средство моделирования. Нужно уметь им правильно объяснять, что Вы хотите получить. Учите язык. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o-henry 0 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. такого лучше не делать. далеко не во всех семействах ПЛИС есть триггеры, работающие по обоим фронтам. и синтезатор Вас, скорее всего, не поймет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nuts 0 5 августа, 2008 Опубликовано 5 августа, 2008 (изменено) · Жалоба ReedCat спасибо. :) В FIFO данные записываются одним процессом с одной синхронизирующей частотой, а считываются другим процессом с другой синхронизирующей частотой. Причем эти частоты меняются. было бы замечательно если тот процесс который заполнил FIFo поставил флажок "1", а процесс который считывает, считал и убрал флажок в "0". :05: И желательно ПЛИС завести на этих синхронизирующих частотах, на какой нибудь из них. - такая задача. Изменено 5 августа, 2008 пользователем Nuts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться