Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюки при симуляции в Quartus
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
PoReX
Доброго времени суток!
Совсем недавно начал разбираться с ПЛИСинами, в частности CPLD MAXII, и с VHDL'ем. Понадобилось создать элемент результат работы которого удовлетворяет таблице истинности. Составил СДНФ, минимизировал ее с помощью программы. В итоге получилась сокращенная ДНФ
Код
(!X1 & X2) | (X1 & !X2 & !X3 & !X4)
. Написал элемент на VHDL'е и приступил к симуляции. Вот тут и полезли непонятные вспески/провалы на выходе. Пробовал собрать тоже самое на логике, результат один и тот же. В чем может быть проблема, ума не приложу?
VHDL код, таблица и скриншот симуляции во вложении.
des00
то что голова работает в булевой алгебре это хорошо, теперь еще немного пусть поработает что бы найти логическое объяснение этих иголок. Это же очевидно, особенно если Chip editor посмотреть wink.gif
naliwator
Цитата(PoReX @ May 6 2011, 10:12) *
Доброго времени суток!
Совсем недавно начал разбираться с ПЛИСинами, в частности CPLD MAXII, и с VHDL'ем. Понадобилось создать элемент результат работы которого удовлетворяет таблице истинности. Составил СДНФ, минимизировал ее с помощью программы. В итоге получилась сокращенная ДНФ
Код
(!X1 & X2) | (X1 & !X2 & !X3 & !X4)
. Написал элемент на VHDL'е и приступил к симуляции. Вот тут и полезли непонятные вспески/провалы на выходе. Пробовал собрать тоже самое на логике, результат один и тот же. В чем может быть проблема, ума не приложу?
VHDL код, таблица и скриншот симуляции во вложении.

Так бывает, когда логика асинхронная.
Если вы начинаете разбираться с языком, то учебник вам в помощь.
Почитайте Каршенбойма. В самом низу страницы - ссылки на статьи по HDL-кодированию.
Maverick
Цитата(PoReX @ May 6 2011, 09:12) *
Доброго времени суток!
Совсем недавно начал разбираться с ПЛИСинами, в частности CPLD MAXII, и с VHDL'ем.

Рекомендую начать с этой книги
литература
PS Вы не могли бы выложить код прямо в сообщение. Просто на работе какой-то глюк не могу скачивать прикрепленные файлы.
PoReX
Собственно код:
Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
entity mod_Y is
    Port (     X1: in STD_LOGIC:='0';
            X2: in STD_LOGIC:='0';
            X3: in STD_LOGIC:='0';
            X4: in STD_LOGIC:='0';
            Y:out STD_LOGIC:='0');
end mod_Y;

architecture Y of mod_Y is
begin
Y<=((not X1) and X2)or (X1 and (not X2) and (not X3) and (not X4));
end Y;


Цитата(naliwator @ May 6 2011, 10:35) *
Так бывает, когда логика асинхронная.
Если вы начинаете разбираться с языком, то учебник вам в помощь.
Почитайте Каршенбойма. В самом низу страницы - ссылки на статьи по HDL-кодированию.


А если сделать синхронизацию от какого-либо источника с частотой намного большей частоты изменения сигналов X1,X2...., наприме так:
Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
entity mod_Y is
    Port (     X1: in STD_LOGIC:='0';
            X2: in STD_LOGIC:='0';
            X3: in STD_LOGIC:='0';
            X4: in STD_LOGIC:='0';
            CLK: in STD_LOGIC:='0';
            Y:out STD_LOGIC:='0');
end mod_Y;

architecture Y of mod_Y is
begin
    process(CLK)
    begin
        if (CLK'event and CLK='1') then
            Y<=((not X1) and X2)or (X1 and (not X2) and (not X3) and (not X4));
        end if;
    end process;
end Y;

Такое решение имеет право на жизнь?

Цитата(des00 @ May 6 2011, 10:31) *
то что голова работает в булевой алгебре это хорошо, теперь еще немного пусть поработает что бы найти логическое объяснение этих иголок. Это же очевидно, особенно если Chip editor посмотреть wink.gif

Мне как новичку не понятноsm.gif Не могли бы Вы пояснить?
bogaev_roman
Цитата(PoReX @ May 6 2011, 11:21) *
А если сделать синхронизацию от какого-либо источника с частотой намного большей частоты изменения сигналов
Такое решение имеет право на жизнь?

Имеет, только лучше засинхронизировать еще и входы.
Иголки возникают, т.к. Вы, видимо, проводите не функциональное моделирование, а временное. Соответственно, все элементы имеют определенную задержку + есть задержка на распространение сигнала.
bav
Цитата
А если сделать синхронизацию от какого-либо источника с частотой намного большей частоты изменения сигналов X1,X2...., наприме так:

главное, чтобы CLK и X1...X4 были синхронны и фронт CLK чуть сдвинут относительно фронтов X1...X4

Цитата
Мне как новичку не понятноsm.gif Не могли бы Вы пояснить?

синтезатор не настолько тупой, чтобы за него делать минимизацию функции...
на языках HDL обычно пишут поведенческую модель, перебросив оптимизацию, трассировку и т.п. соответствующему пакету
des00
Цитата(PoReX @ May 6 2011, 02:21) *
Мне как новичку не понятноsm.gif Не могли бы Вы пояснить?

это же логика здравого смысла. что такое плис : набор цифровых, конфигурируемых элементов (выясняется за 5 минут чтением документации). Что присуще всем логическим элементам ? задержка сигнала. Ну а дальше логика первого класса средней школы.
PoReX
Цитата(bogaev_roman @ May 6 2011, 11:23) *
Имеет, только лучше засинхронизировать еще и входы.
Иголки возникают, т.к. Вы, видимо, проводите не функциональное моделирование, а временное. Соответственно, все элементы имеют определенную задержку + есть задержка на распространение сигнала.



Цитата(bav @ May 6 2011, 11:28) *
главное, чтобы CLK и X1...X4 были синхронны и фронт CLK чуть сдвинут относительно фронтов X1...X4


А вот синхронизировать входы не получится т.к. у них нет определенной частоты.

Цитата(bav @ May 6 2011, 11:28) *
синтезатор не настолько тупой, чтобы за него делать минимизацию функции...
на языках HDL обычно пишут поведенческую модель, перебросив оптимизацию, трассировку и т.п. соответствующему пакету

Согласитесь, было бы не удобно читать код без минимизации функции.

Цитата(des00 @ May 6 2011, 11:33) *
это же логика здравого смысла. что такое плис : набор цифровых, конфигурируемых элементов (выясняется за 5 минут чтением документации). Что присуще всем логическим элементам ? задержка сигнала. Ну а дальше логика первого класса средней школы.

Что элементы имеют задержки я понимаю, но думал в такомм случае просто сдвинутся фазы сигналов.
des00
Цитата(PoReX @ May 6 2011, 02:49) *
Что элементы имеют задержки я понимаю, но думал в такомм случае просто сдвинутся фазы сигналов.

а вы думаете что элементы в фпга безразмерные что ли? %)
bav
Цитата
А вот синхронизировать входы не получится т.к. у них нет определенной частоты.

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

сложно согласиться. удобно читать тот код, где видно что хочется получить.
PoReX
Цитата(bogaev_roman @ May 6 2011, 11:23) *
Имеет, только лучше засинхронизировать еще и входы.
Иголки возникают, т.к. Вы, видимо, проводите не функциональное моделирование, а временное. Соответственно, все элементы имеют определенную задержку + есть задержка на распространение сигнала.

Да, Вы правы. А в функциональном все отлично работает.

Цитата(bav @ May 6 2011, 11:56) *
тогда входы надо перестробировать на CLK. иначе будут ложные срабатывания.

Что значит перестробировать входы на CLK, если в последнем предложенном мной варианте есть синхронизация по CLK? Что-то я не пойму.
bav
Цитата
Что значит перестробировать входы на CLK, если в последнем предложенном мной варианте есть синхронизация по CLK? Что-то я не пойму.

посмотрите это
PoReX
Цитата(des00 @ May 6 2011, 11:51) *
а вы думаете что элементы в фпга безразмерные что ли? %)

Нет конечно, причем здесь это? Насколько я понимаю, из-за задержек становятся разными фазы сигналов..........................Все, кажется понял, задержки-то не везде одинаковые, по-этому и происходят всплески.
des00
Цитата(PoReX @ May 6 2011, 03:32) *
Все, кажется понял, задержки-то не везде одинаковые, по-этому и происходят всплески.

бинго 1111493779.gif , ну разве не счастье понять это самому biggrin.gif
PoReX
Цитата(des00 @ May 6 2011, 12:37) *
бинго 1111493779.gif , ну разве не счастье понять это самому biggrin.gif


Счастье sm.gif , сейчас еще про асинхронные частоты дочитаюsm.gif......

А в Quartus'у есть специальный элемент синхронизатор или самому делать нужно?
Maverick
Цитата(PoReX @ May 6 2011, 12:58) *
А в Quartus'у есть специальный элемент синхронизатор или самому делать нужно?


нужно самому делать wink.gif
PoReX
Спасибо всем за ответы!
stu
переписывал код с AHDL -> SV. переписал. не работает. начал проверять. нашел, что строка
Код
Ttt[] = (Val[8] & (Cmd[2..0] == 1)) xor Val[7..0];

на верилоге как
Код
assign Ttt = (Val[8] & (Cmd[2:0] == 1)) ^ Val[7:0];

не обрабатывается правильно.
переписал как
Код
assign Ttt = (Val[8] && (Cmd[2:0] == 1'b1)) ? ~Val[7:0] : Val[7:0];

все ок. не пойму, где у меня ошибка с xor?
sazh
Цитата(stu @ Dec 20 2011, 12:55) *
Код
assign Ttt = (Val[8] & (Cmd[2:0] == 1)) ^ Val[7:0];

assign Ttt = {8{(Val[8] & (Cmd[2:0] == 1))}} ^ Val[7:0];
stu
Цитата(sazh @ Dec 20 2011, 13:27) *
assign Ttt = {8{(Val[8] & (Cmd[2:0] == 1))}} ^ Val[7:0];

ой. я к этим массивам после ahdl привыкнуть не могу =(.
понятно. а до этого я один бит получается сравнивал
ViKo
Цитата(stu @ Dec 20 2011, 15:24) *
понятно. а до этого я один бит получается сравнивал

не сравнивал, а инвертировал (исключающее или)
sazh
Цитата(ViKo @ Dec 20 2011, 16:17) *
не сравнивал


А почему, собственно
Код
genvar i;
generate for (i = 0; i < 8; i = i + 1)
    begin : bit_a
    assign Ttt[i] = ( (Val[8] && (Cmd[2:0] == 3'h1)) != Val[i]);
    end
endgenerate

ViKo
Цитата(sazh @ Dec 20 2011, 20:26) *
А почему, собственно

Мне кажется, stu отнес операцию реплицирования не к результату после логических операторов && и ==, а к чему-то внутри них. Вот и сделал замечание. Если это не так, извиняюсь.
А у вас-то все мастерски выходит! sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.