одночасне використання висхідної і спадної край

A

arshad_mir

Guest
Привіт,

Я хочу зробити будь-якої діяльності на обох зростання і падіння краю сигналу (скажімо tick_ip) і що-небудь іншу діяльність, коли немає зростання або падіння крайякщо (tick_ip 'події та tick_ip = '1'), то
next_clockout <= '1 ';
ще
next_clockout <= '0 ';

End If;

якщо (tick_ip 'події та tick_ip = '0'), то
next_clockout_new <= '1 ';
ще
next_clockout_new <= '0 ';

End If;

Але компілятор не в змозі синтезувати його.Хто-небудь може допомогти мені

 
Ви хочете використовувати "tick_ip" як годинник Ура!
Тоді що ур намагається зробити це з поточною immpossible інструменти синтезу.
Ви повинні намагатися робити деяким цифрових асинхронних
Дизайн, який не підтримується поточними інструмент синтезу!
Надії ви отримали мою точку

 
У моїх попередніх запитів, що я хотів би згадати, це:

якщо (tick_ip'event), то
clock_out <= '1 ';
ще
clock_out <= '0 ';
End If;

Я не в змозі синтезувати його.

 
arshad_mir пише:

У моїх попередніх запитів, що я хотів би згадати, це:якщо (tick_ip'event), то

clock_out <= '1 ';

ще

clock_out <= '0 ';

End If;Я не в змозі синтезувати його.
 
arshad_mir пише:

У моїх попередніх запитів, що я хотів би згадати, це:якщо (tick_ip'event), то

clock_out <= '1 ';

ще

clock_out <= '0 ';

End If;Я не в змозі синтезувати його.
 
Це можливо, але ви повинні розділити його на 2 різних процесів.Один процес буде відповідати за операції по краях зростання.А по-друге - для закоханих краю.

 
Привіт arshad_mir,

Пам'ятайте, що ви пишете в VHDL опис логічних елементів або фліп-флоп.
При використанні my_signal'event аргумент, sysnthesiser завжди карті my_signal на годинник вхід flilp флоп (або перевернуті годинник для падіння краю ...).
Те, що Ви, здається, хоче зробити це для виявлення зростання або падіння краю сигналу.
Якщо ваш сигнал йде повільно, а що у вас є глобальний сигнал часу у вашому дизайні (наприклад: сигнал на частоті 1 кГц і годинник на 10 МГц ...), ви можете зробити це для виявлення:

Цитата:Процес (CLK, reset_n)

починати

якщо reset_n = '0 ', то

signal_d <= '0 ';

ELSIF clk'event і CLK = '1 ', то

signal_d <= сигнал;

якщо signal_d / = сигнал потім - край виявлення

виході <= '1 ';

ще

виході <= '0 ';

End If;

End If;

Наприкінці процесу;

 
Хочу також зазначити, що не тільки coolrunnerII, які мають подвійне FF годинник, Virtex-II, Spartan3 і Virtex-4 мають подвійне FF годинник, який DDR FF по парних.

 
Якщо ви використовуєте VHDL, я думаю, це не може бути зроблено.
Я використовую @ ltera ради, але, моя книга і текст рада підтверджує це.

Проблема Ви намагаєтесь використовувати той самий сигнал в два рази.

Приклад:
процесу (години)
якщо (clock'event та години = '1 ') - Rising край
тоді ...
End If;
Наприкінці процесу;

процесу (години)
якщо (clock'event та години = '0 '), - пов'язані з краю
тоді ...
End If;
Наприкінці процесу;

цей код не буде працювати, тому що ви можете використовувати тільки години в одному процесі.так що ваші compiller буде генерувати помилку, як правило, він буде дивитися на одне тільки й disreguard іншим процесом, а не синтезувати другого процесу.

намагаються зробити це таким чином, не зможе також
Приклад:
процесу (години)
якщо (clock'event та години = '1 ') - Rising край
тоді ...
ELSIF (clock'event та години = '0 ') --
тоді ...
ще
нічого не робити;
End If;
Наприкінці процесу;

Проблема ви можете використовувати clock'event раз.знову проблеми є першою подією є зростаюче краю, але компілятор буде скаржитися на другому випадку.

Можливо, є спосіб обійти це, але я не знайшов ще одного.Я сподіваюся, що деякі члени можуть і знайшов спосіб, тому що, це допомогло б мені.

Знову ж таки це використовував байт бластером 2.У мене був проект, щоб зробити в школі (побудувати міні процесор) з використанням VHDL і я мав ті ж проблеми, також.

Мій внесок у допомогу і для подальшого обговорення.
WA

 
WA пише:

Якщо ви використовуєте VHDL, я думаю, це не може бути зроблено.

....

Проблема Ви намагаєтесь використовувати той самий сигнал в два рази.

 
Ас-X пишеЦитата:

Тепер про вашу проблему - Я цілком впевнений, що це тому, що ви намагаєтеся привласнити той же самий сигнал у різних процесах.
Це може призвести до проблем, тому що той же самий сигнал примусової кілька водіїв.
 
Знову ж таки, ви повинні використовувати різні процеси, якщо ви хочете використовувати годинник в два рази.

statement on clock.

В інших словах, в один процес, вам дозволяється використовувати тільки одну, якщо
заяву про годинник.

is not analyzed/synthesized as logic construction by compiler - it is just recognized as prefix that the rest of process represents synchronous part.

Це відбувається тому, VHDL, якби будівництво (clk'event і CLK = '1 ')
не аналізується / синтезовані, як і логіка будівництва компілятор - це тільки визнані в якості префікса, що інша частина процесу являє собою синхронну частини.І так щодня фліп-флоп в FPGA / CPLD як правило, має тільки одного вхідного тактового сигналу, тому ми не можемо прийняти заходи по обох краях з тією ж FF (фліп-флоп), але ми можемо зробити одну дію з FF на позитивний краю, з другий за негативним, а потім якимось чином приєднатися результат на логічному рівні.Я сподіваюся, що поправки ваші приклади нижче будуть чітко це.

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

Код:ПРОЦЕС (CLK)

BEGIN

ЯКЩО (clk'EVENT і CLK = '1 ') THEN

ЯКЩО (навантаження = '1 ') THEN

Q <= P;

END IF;

END IF;

Завершити процес;

ПРОЦЕС (CLK)

BEGIN

ЯКЩО (clk'EVENT і CLK = '1 ') THEN

ЯКЩО (count_ena = '1 ') THEN

P <= Q 1;

END IF;

END IF;

Завершити процес
 
Ви можете використовувати "NCLK <= НЕ CLK", і два "(CLK)" і "процес (NCLK)"

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />
 
Краще рішення для цієї проблеми полягає в написанні трьох окремих процесів - одне в залежність від зростання краю, інші залежать від падаючих краю і третя незалежна такого сигналу

 
Я згоден з Crazyman, U повинні використовувати різні процеси.

 
Всім привіт,
Це може спрацювати ... спробуйте це ... і дайте мені знати ...
Процес: 1
починати
якщо (tick_ip'event), то
Сигнал <= pre_Signal_state;
ще
Сигнал <= current_signal_state;
End If;
Завершити процес 1;

Процес: 2
починати
якщо (tick_ip'event і tip_ip = '0 '), тоEnd IfВи також можете спробувати використовувати державну машину ..., Що також може служити

 

Welcome to EDABoard.com

Sponsor

Back
Top