реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Освоение ISE
makc
сообщение Jul 28 2008, 08:49
Сообщение #16


Гуру
******

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



Цитата(Nuts @ Jul 28 2008, 08:51) *
makc
Если писать команды в теле самого модуля то они будут выполняться параллельно, чтобы команды выполнять последовательно нужно создать процесс и в нем писать команды.


Нет, не так. Поскольку Вы описываете логику работы схемы, то понятие команд в данном случае вообще не применимо. Можно говорить только о конструкциях языка описания, которые бывают параллельные и последовательные. Но, при этом, их названия непосредственно не связаны с порядком выполнения этих конструкций, т.к. он в каждом случае определяется условиями использования каждой из этих конструкций. Поэтому несмотря на то, что у Вас присваивания LED_1 и LED_2 записаны в теле процесса последовательно, с точки зрения аппаратуры (и, естественно, симулятора) они будут выполнены одновременно, т.е. "параллельно". Вот такой парадокс. Учите матчасть. Разберитесь с осноными понятиями HDL.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Nuts
сообщение Jul 28 2008, 10:25
Сообщение #17


Участник
*

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



Теперь понятно. Я действительно думал что ПЛИС-процессор, и что я программю а не конфигурирую железо. 05.gif

Сообщение отредактировал Nuts - Jul 28 2008, 10:31
Go to the top of the page
 
+Quote Post
Nuts
сообщение Jul 31 2008, 03:31
Сообщение #18


Участник
*

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



Что такое макроячейка? 05.gif

Сообщение отредактировал Nuts - Jul 31 2008, 03:33
Go to the top of the page
 
+Quote Post
makc
сообщение Jul 31 2008, 05:56
Сообщение #19


Гуру
******

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



Цитата(Nuts @ Jul 31 2008, 07:31) *
Что такое макроячейка? 05.gif


Почитайте http://en.wikipedia.org/wiki/Field-programmable_gate_array для общего развития.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Nuts
сообщение Jul 31 2008, 15:49
Сообщение #20


Участник
*

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



Спасибо. smile.gif
Go to the top of the page
 
+Quote Post
muravei
сообщение Jul 31 2008, 18:12
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post
makc
сообщение Jul 31 2008, 18:43
Сообщение #22


Гуру
******

Группа: Админы
Сообщений: 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
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Nuts
сообщение Aug 5 2008, 11:20
Сообщение #23


Участник
*

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



Скажите пожалуста.
Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов? 05.gif
Ситуация вроде этой. Подскажите как быть 05.gif
Код
-----------------
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
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 5 2008, 11:28
Сообщение #24


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Если сигнал один и тот же и CLK один и тот же, то зачем делать 2 независимых процесса?
Я вообще плохо соображаю в разных там VHDL и иже с ними, и в конечном счёте всё равно перевожу мысленно в схематик. Чисто на пальцах у вас получается 2 источника сигнала, выведенных на 1 ногу. Надо их развязать как-то через логику (OR,AND,XOR,MUX и т.д.). Если действительно нужны 2 процесса (в чём я лично сомневаюсь)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Nuts
сообщение Aug 5 2008, 11:30
Сообщение #25


Участник
*

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



Это простой пример. Я пишу чтото вроде асинхронного FIFO, там такая вещь очень пригодилась бы. Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно.

Сообщение отредактировал Nuts - Aug 5 2008, 11:33
Go to the top of the page
 
+Quote Post
makc
сообщение Aug 5 2008, 11:38
Сообщение #26


Гуру
******

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



Цитата(Nuts @ Aug 5 2008, 15:20) *
Скажите пожалуста.
Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов? 05.gif
Ситуация вроде этой. Подскажите как быть 05.gif
Код
-----------------
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
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
ReedCat
сообщение Aug 5 2008, 11:38
Сообщение #27


Частый гость
**

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



Цитата(Nuts @ Aug 5 2008, 15:30) *
Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно.


Уухх... А выключаются когда? Это намёк, что в рамках одного такта такое вряд ли удастся сделать.

А так - мультиплексор - есть такая штука, как раз для того, чтобы в один момент выдать один сигнал, а в другой - другой.

Только не забывайте о том, что мультиплексору тоже нужно время, чтобы переключиться... А управляющим сигналам на нём - время, чтобы установиться...

Вот и получится:
1 такт: поставили адрес входа 1 на мультиплексор
2 такт: переключили мультиплексор на вход 1
3 такт: выдали сигнал с входа 1 на выход
4 такт: поставили адрес входа 2 на мультиплексор
5 такт: переключили мультиплексор на вход 2
6 такт: выдали сигнал с входа 2 на выход
... и так далее...

А вы говорите: "один по фронту, другой по спаду" smile.gif
Go to the top of the page
 
+Quote Post
makc
сообщение Aug 5 2008, 11:41
Сообщение #28


Гуру
******

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



Цитата(Nuts @ Aug 5 2008, 15:30) *
Это простой пример. Я пишу чтото вроде асинхронного FIFO, там такая вещь очень пригодилась бы. Да и сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно.


С точки зрения языка - конфликт налицо, т.к. происходит присваивание значений одному и тому же сигналу в двух разных параллельных процессах. То, что Вы понимаете невозможность одновременного фронта и спада одного и тоже же сигнала вовсе не означает, что это понимает синтезатор/средство моделирования. Нужно уметь им правильно объяснять, что Вы хотите получить. Учите язык.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
o-henry
сообщение Aug 5 2008, 11:42
Сообщение #29


Местный
***

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



Цитата(Nuts @ Aug 5 2008, 13:30) *
сигналы выводятся на одну ножку в разное время, один на спаде фронта, другой на подъеме- т.е. вроде конфликта быть не должно.

такого лучше не делать. далеко не во всех семействах ПЛИС есть триггеры, работающие по обоим фронтам.
и синтезатор Вас, скорее всего, не поймет.
Go to the top of the page
 
+Quote Post
Nuts
сообщение Aug 5 2008, 11:48
Сообщение #30


Участник
*

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



ReedCat спасибо. smile.gif

В FIFO данные записываются одним процессом с одной синхронизирующей частотой, а считываются другим процессом с другой синхронизирующей частотой. Причем эти частоты меняются. было бы замечательно если тот процесс который заполнил FIFo поставил флажок "1", а процесс который считывает, считал и убрал флажок в "0". 05.gif И желательно ПЛИС завести на этих синхронизирующих частотах, на какой нибудь из них. - такая задача.

Сообщение отредактировал Nuts - Aug 5 2008, 11:55
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 19:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016