Перейти к содержанию
    

makc

Если писать команды в теле самого модуля то они будут выполняться параллельно, чтобы команды выполнять последовательно нужно создать процесс и в нем писать команды.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем Nuts

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня тоже вопрос : "Как приделать к дешифратору Чип Селект?"

Придумал добавить еще один разряд, а как правильно?

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня тоже вопрос : "Как приделать к дешифратору Чип Селект?"

Придумал добавить еще один разряд, а как правильно?

 

Фактически, чипселект это и есть дополнительный адресный разряд, который вырабатывают на основе старших разрядов адреса для упрощения декодирования адреса.Так что это решение вполне допустимо.

 

Ваш код можно модифицировать таким образом:

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите пожалуста.

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

Изменено пользователем Nuts

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если сигнал один и тот же и CLK один и тот же, то зачем делать 2 независимых процесса?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем Nuts

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите пожалуста.

Нужно менять один и тот же сигнал в разных процессах. В результате вылазит ошибка, чтото вроде"много источников на данный сигнал"- это то понятно. А есть какие механизмы с помощью которых можно управлять сигналом, из разных процессов? :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% не синтезируемая конструкция, т.к. я не видел применения триггеров, работающих по обоим фронтам тактового сигнала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

Вот и получится:

1 такт: поставили адрес входа 1 на мультиплексор

2 такт: переключили мультиплексор на вход 1

3 такт: выдали сигнал с входа 1 на выход

4 такт: поставили адрес входа 2 на мультиплексор

5 такт: переключили мультиплексор на вход 2

6 такт: выдали сигнал с входа 2 на выход

... и так далее...

 

А вы говорите: "один по фронту, другой по спаду" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

такого лучше не делать. далеко не во всех семействах ПЛИС есть триггеры, работающие по обоим фронтам.

и синтезатор Вас, скорее всего, не поймет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ReedCat спасибо. :)

 

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

Изменено пользователем Nuts

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...