Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по SignalTape
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Fynjisx
Привет... Создал RS-latch, используя MegaWizard, далее подключил в свой проекты. На выходные ножки ПЛИС вывел сигналы s (set), r(reset), q(quit).

CODE
l: lp
port map
(
aclr => not r,
aset => not s,
data => '0',
gate => '0',
q => q
);


Далее подключил SignalTape и добавил туда ранее описанный сигналы. Вопрос такой: почему в SignalTape рисуется спад q раньше спада r?
yura-w
Цитата(Fynjisx @ Dec 1 2010, 09:30) *
CODE
l: lp
port map
(
aclr => not r,
aset => not s,
data => '0',
gate => '0',
q => q
);

имхо: не понятно ни чего
( "aclr" больше или равен "not r" ? кто такой "port" и "map"? и что за язык?
подозреваю, что SignalTape это SignalTap и остальные ошибки надо искать в синтаксисе)
Fynjisx
Цитата(yura-w @ Dec 1 2010, 15:03) *
имхо: не понятно ни чего
( "aclr" больше или равен "not r" ? кто такой "port" и "map"? и что за язык?
подозреваю, что SignalTape это SignalTap и остальные ошибки надо искать в синтаксисе)

это я привел кусок кода на VHDL, как я подключил модуль RS-защелку в проекте. aclr не больше или равен, а соединен напрямую с инвертированным r(reset).
yura-w
Цитата(Fynjisx @ Dec 1 2010, 14:52) *
это я привел кусок кода на VHDL, как я подключил модуль RS-защелку в проекте. aclr не больше или равен, а соединен напрямую с инвертированным r(reset).

sad.gif Извиняюсь, был не внимателен.
думаю поможет следующее:
data => '1'
gate => '1'
Fynjisx
Цитата(yura-w @ Dec 1 2010, 16:28) *
sad.gif Извиняюсь, был не внимателен.
думаю поможет следующее:
data => '1'
gate => '1'

Щас обьясню что я делаю. У меня есть автомат на 3 состояния: st0, st1, st2. При подаче rst(сброс), автомат переходит в состояние st0. Вот его код:
CODE

entity tops is

Port ( clk : in std_logic;
in1 : in std_logic;
rst : in std_logic;
out1 : out std_logic
);
end tops;



architecture Behavioral of tops is


type fsm is (st0, st1, st2);

signal st, nst: fsm:= st0;

begin

process(clk)
begin
if rst = '0' then
st <= st0;
elsif rising_edge(clk) then
st <= nst;
end if;
end process;



process(all)
begin
case st is
when st0=>
nst <= st1;
out1 <= '1';

when st1=>
if in1 = '1' then
nst <= st2;
else
nst <= st1;
end if;
out1 <= '0';

when st2=>
nst <= st2;
out1 <= '0';
end case;

end process;


Мне нужно подать внешний сброс (rst) на этот автомат. У меня есть плата с помощью которой я это намеревался сделать. Единственный вопрос возник как избавиться от дребезга контактов. ДЛя это я придумал не хитрую RS-защелку. Причем на плате разведено так, что по умолчанию на ножки плис, которые я использую в качестве контактов кнопки, подходят подтянутые высокие уровни. Т.е для перключения мне нужны активные низкие уровни. Отсюда и RS-защелка с инвертированными входами R и S.
Далее я хотел вывести все сигналы через SignalTap, затем нажать на мою кнопку и увидеть как меняются состояния и выходные сигналы автомата. ВСя запарка произошла из-за того, чтопри подаче активного низкого уровня на r или s защелки, в SignalTap я увидел что раньше меняется её выход(который у меня обозначе как q). Векторная диаграмма приложена в первом сообщении моего топика...
yura-w
Цитата(Fynjisx @ Dec 1 2010, 19:07) *
... Единственный вопрос возник как избавиться от дребезга контактов. ДЛя это я придумал не хитрую RS-защелку.

для избавления от дребезга обычно используют счетчик, считающий например до 10ms, в зависимости от кнопки (в вашем случае низкий - разрешение счета, высокий - сброс счетчика в ноль, если счетчик досчитал до конца - это и есть сигнал чистый от дребезга)

Цитата(Fynjisx @ Dec 1 2010, 19:07) *
....ВСя запарка произошла из-за того, чтопри подаче активного низкого уровня на r или s защелки, в SignalTap я увидел что раньше меняется её выход(который у меня обозначе как q). Векторная диаграмма приложена в первом сообщении моего топика...

входные сигналы, тем более с дребезгом, не используют без стробирования для асинхронных сброса или установки.

если длительность входных сигналов меньше (в вашем случае это практически гарантированно) тактовой частоты используемой в signaltap, то на временной диаграмме вы и не увидите их изменение, что и видно на вашей картинке
Fynjisx
Цитата(yura-w @ Dec 2 2010, 01:05) *
для избавления от дребезга обычно используют счетчик, считающий например до 10ms, в зависимости от кнопки (в вашем случае низкий - разрешение счета, высокий - сброс счетчика в ноль, если счетчик досчитал до конца - это и есть сигнал чистый от дребезга)

хорошо, но тогда получается, что сигнал "Count Enable" я должен подавать от той же кнопки, которая у меня дребезжит. И получается, что счетчик у меня в течении дребезга, сам будет "дребезжать".
yura-w
что значит
Цитата(Fynjisx @ Dec 5 2010, 08:54) *
сам будет "дребезжать"
, хотя это и не важно rolleyes.gif

повторюсь (перечитайте пост):
для избавления от дребезга обычно используют счетчик, считающий например до 10ms, в зависимости от кнопки (в вашем случае низкий - разрешение счета, высокий - сброс счетчика в ноль, если счетчик досчитал до конца - это и есть сигнал чистый от дребезга).

т.е. достаточно одного сигнала, когда он переключается в диапазоне менее 10ms счетчик сбрасывается (если угодно - значение счета "дребезжит"),
если длительность сигнала более 10ms , то счетчик досчитал и на выходе получаем сигнал свободный от дребезга (если время выбрано правильно)
например на verilog это как-то так
Код
reg [31:0] cnt_srt;
reg get_str;
wire end_cnt_rst = 'h_ffff;
always @(posedge clk)
begin
  if ( rst)
  begun
   cnt_srt <= 0;
   get_str <= 0;
  end
  else
  begin
   if ( cnt_srt < end_cnt_rst)
    cnt_srt <= cnt_srt + 1;
   else
    get_str <= 1;
  end
end

на rst подайте сигнал с дребезгом (при низком rst - счетчик начинает считать),
get_str равен высокому при наличии входного сигнала (в данном случае низкого входного сигнала) свободного от дребезга
Fynjisx
Цитата(yura-w @ Dec 5 2010, 23:05) *
если угодно - значение счета "дребезжит",

да, я это просто назвал по другому))) Главное я понял что к чему)) Спасибо...
Ещё одна проблемка... Есть fsm:

CODE

process(clk)
begin
if rst_i = '1' then
st <= st0;
elsif rising_edge(clk) then
st <= nst;
end if;
end process;

process(all)
begin
case st is
when st0=>
nst <= st1;

when st1=>
if rdy = '1' then
nst <= st2;
else
nst <= st1;
end if;

when st2=>
nst <= st2;


when others=>
nst <= st2;

end case;
end process;

rst_i - это сигнал от моей кнопки, уже через счетчик. Т.е нажимаю на кнопку, запускается счетчик, отсчитывает 10ms и утсанавливает rst_i.
Так вот, как мне в SignalTap подловить только изменения состояния автомата?
yura-w
Цитата(Fynjisx @ Dec 7 2010, 13:42) *
....Так вот, как мне в SignalTap подловить только изменения состояния автомата?

если частота сигналтапа и автомата это одно и тоже, тогда можно только вывести состояния автомата и смотреть их, а не изменения.
если частота сигналтапа в больше частоты автомата (лучше более чем в два раза, чтоб не возиться с синхронизацией), то можно извратиться добавив в автомат сигнал с комбинационной логикой

но зачем? wacko.gif
Может стоит потратить время и обратиться к средствам моделировования, например modelsim. это гораздо удобнее... rolleyes.gif
Fynjisx
Цитата(yura-w @ Dec 7 2010, 16:52) *
Может стоит потратить время и обратиться к средствам моделировования, например modelsim. это гораздо удобнее... rolleyes.gif

Я сначало так и сделал - всё отладил в MOdelSim. Ну а потом уже захотел посмотреть, что такое SignalTap и с чем его едят. Так что особо не взыщите, если вопросы покажутся кое-где глуповатыми)
Мне б толковую литературу по SignalTap найти, с примерами - было б хорошо. Но оную не нашел, поэтому пытаюсь здесь спросить)
vadimuzzz
Цитата(Fynjisx @ Dec 9 2010, 21:12) *
Мне б толковую литературу по SignalTap найти, с примерами - было б хорошо. Но оную не нашел, поэтому пытаюсь здесь спросить)

так в талмуде по квартусу целая глава про него, все расписано
Fynjisx
Почему в режиме Transition,когда у меня убраны галки в полях address и writedate захват все равно по ним происходит???
Тактовая частота с3 - 400MHz...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.