|
|
  |
Освоение ISE |
|
|
|
Jul 28 2008, 08:49
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(Nuts @ Jul 28 2008, 08:51)  makc Если писать команды в теле самого модуля то они будут выполняться параллельно, чтобы команды выполнять последовательно нужно создать процесс и в нем писать команды. Нет, не так. Поскольку Вы описываете логику работы схемы, то понятие команд в данном случае вообще не применимо. Можно говорить только о конструкциях языка описания, которые бывают параллельные и последовательные. Но, при этом, их названия непосредственно не связаны с порядком выполнения этих конструкций, т.к. он в каждом случае определяется условиями использования каждой из этих конструкций. Поэтому несмотря на то, что у Вас присваивания LED_1 и LED_2 записаны в теле процесса последовательно, с точки зрения аппаратуры (и, естественно, симулятора) они будут выполнены одновременно, т.е. "параллельно". Вот такой парадокс. Учите матчасть. Разберитесь с осноными понятиями HDL.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Jul 31 2008, 18:12
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
У меня тоже вопрос : "Как приделать к дешифратору Чип Селект?" Придумал добавить еще один разряд, а как правильно? Код 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;
|
|
|
|
|
Jul 31 2008, 18:43
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(muravei @ Jul 31 2008, 22:12)  У меня тоже вопрос : "Как приделать к дешифратору Чип Селект?" Придумал добавить еще один разряд, а как правильно? Фактически, чипселект это и есть дополнительный адресный разряд, который вырабатывают на основе старших разрядов адреса для упрощения декодирования адреса.Так что это решение вполне допустимо. Ваш код можно модифицировать таким образом: Код 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;
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Aug 5 2008, 11:20
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 21-07-08
Пользователь №: 39 128

|
Скажите пожалуста. Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов?  Ситуация вроде этой. Подскажите как быть Код ----------------- 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; -----------------
Сообщение отредактировал Nuts - Aug 5 2008, 11:23
|
|
|
|
|
Aug 5 2008, 11:30
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 21-07-08
Пользователь №: 39 128

|
Это простой пример. Я пишу чтото вроде асинхронного FIFO, там такая вещь очень пригодилась бы. Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно.
Сообщение отредактировал Nuts - Aug 5 2008, 11:33
|
|
|
|
|
Aug 5 2008, 11:38
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(Nuts @ Aug 5 2008, 15:20)  Скажите пожалуста. Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов? Ситуация вроде этой. Подскажите как быть Код ----------------- 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% не синтезируемая конструкция, т.к. я не видел применения триггеров, работающих по обоим фронтам тактового сигнала.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Aug 5 2008, 11:38
|

Частый гость
 
Группа: Свой
Сообщений: 109
Регистрация: 14-01-08
Из: Москва
Пользователь №: 34 069

|
Цитата(Nuts @ Aug 5 2008, 15:30)  Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. Уухх... А выключаются когда? Это намёк, что в рамках одного такта такое вряд ли удастся сделать. А так - мультиплексор - есть такая штука, как раз для того, чтобы в один момент выдать один сигнал, а в другой - другой. Только не забывайте о том, что мультиплексору тоже нужно время, чтобы переключиться... А управляющим сигналам на нём - время, чтобы установиться... Вот и получится: 1 такт: поставили адрес входа 1 на мультиплексор 2 такт: переключили мультиплексор на вход 1 3 такт: выдали сигнал с входа 1 на выход 4 такт: поставили адрес входа 2 на мультиплексор 5 такт: переключили мультиплексор на вход 2 6 такт: выдали сигнал с входа 2 на выход ... и так далее... А вы говорите: "один по фронту, другой по спаду"
|
|
|
|
|
Aug 5 2008, 11:41
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(Nuts @ Aug 5 2008, 15:30)  Это простой пример. Я пишу чтото вроде асинхронного FIFO, там такая вещь очень пригодилась бы. Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. С точки зрения языка - конфликт налицо, т.к. происходит присваивание значений одному и тому же сигналу в двух разных параллельных процессах. То, что Вы понимаете невозможность одновременного фронта и спада одного и тоже же сигнала вовсе не означает, что это понимает синтезатор/средство моделирования. Нужно уметь им правильно объяснять, что Вы хотите получить. Учите язык.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Aug 5 2008, 11:42
|

Местный
  
Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069

|
Цитата(Nuts @ Aug 5 2008, 13:30)  сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно. такого лучше не делать. далеко не во всех семействах ПЛИС есть триггеры, работающие по обоим фронтам. и синтезатор Вас, скорее всего, не поймет.
|
|
|
|
|
Aug 5 2008, 11:48
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 21-07-08
Пользователь №: 39 128

|
ReedCat спасибо. В FIFO данные записываются одним процессом с одной синхронизирующей частотой, а считываются другим процессом с другой синхронизирующей частотой. Причем эти частоты меняются. было бы замечательно если тот процесс который заполнил FIFo поставил флажок "1", а процесс который считывает, считал и убрал флажок в "0".  И желательно ПЛИС завести на этих синхронизирующих частотах, на какой нибудь из них. - такая задача.
Сообщение отредактировал Nuts - Aug 5 2008, 11:55
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|