VHDL Q?

Z

ZeleC

Guest
І. намагається зробити генератор імпульсів, щоб бути реалізовані в CPLD
Ідея полягає в отриманні вихідного імпульсу 280, отриманих нами від 25 кГц годинник
імпульсу починається фронту акуратний
Я написав це, і це працювало як expecteted коли імітується в ModelSim
особа є timer280us
Порт (Clk25k: у std_logic;
Сінхровивод: у std_logic;
Висновок: з std_logic);
timer280us кінця;

Поведінкові в архітектурі є timer280us
Сигнал лічильника: std_logic_vector (2 DOWNTO 0): = "000";
Сигнал Timer_on: std_logic: = '0 ';
Сигнал output_temp: std_logic: = '1 ';
починати
фото: процес (Clk25k, Тріг)
починати
якщо акуратний = '1 ', то
- Якщо Timer_On = '1 ', то
Лічильник <= "000";
Timer_on <= '1 ';
- END IF;
ELSIF Clk25k'event і (Clk25k = '1 '), то
якщо Timer_On = '1 ', то
Лічильник <= Counter 1;
Output_temp <= '0 ';
Якщо лічильник = "110", а потім
Timer_On <= '0 ';
Output_temp <= '1 ';

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

- Скинути: процес (акуратний)
- Почати
- Якщо rising_edge (акуратний), то
- Counter <= "000";
- Timer_On <= '1 ';

- END IF;
- Кінець процесу;
виході <= output_temp;Поведінкові кінця;

Але проблема в тому, що, коли тригер імпульсу відбулося, і поки акуратний = '1 'лічильник не почнеться, то, що я хочу зробити, це почати негайно по фронту акуратний
Так як же я переписувати код, щоб зробити це.

 
Я думаю, що ви можете зробити це просто змінити "Якщо акуратний = 1", а потім на "Якщо Трог = 0"
Ви так думаєте?

 
Спробуйте це:
особа є timer280us
Порт (Clk25k: у std_logic;
Скинути: у std_logic;
акуратний: у std_logic;
Висновок: з std_logic);
timer280us кінця;

Поведінкові в архітектурі є timer280us
Сигнал лічильника: Unsigned (2 DOWNTO 0);
Сигнал delay_Trig: std_logic;
Сигнал output_temp: std_logic;
починати
фото: процес (Clk25k, скидання)
починати
якщо скинути = '1 ', то
Лічильник <= "000";
delay_trig <= '0 ';
Output_temp <= '1 ';
ELSIF Clk25k'event і (Clk25k = '1 '), то
delay_trig <= акуратний;
If ((акуратний = '1 ') і (delay_trig = '0')) або ((Лічильник> 0) і (лічильник <7)), то
Лічильник <= Counter 1;
Output_temp <= '0 ';
ще
Лічильник <= "000";
Output_temp <= '1 ';
End If;
End If;
Наприкінці процесу;
виході <= output_temp;
Поведінкові кінця;<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
 
Thx багато Remy
Я змінив трохи коду шляхом видалення скидання
У результаті, як я хотіла, але будь ласка, прочитайте мою Q?Наприкінці
мій код
особа є Timer280us
Порт (Clk25k: у std_logic;
Сінхровивод: у std_logic: = '0 ';
- Скинути: у std_logic;
Висновок: з std_logic: = '1 ');
Timer280us кінця;Поведінкові в архітектурі є timer280us
Сигнал лічильника: Unsigned (2 DOWNTO 0);
Сигнал delay_Trig: std_logic;
Сигнал output_temp: std_logic;
починати
фото: процес (Clk25k)
починати
- Якщо скидання = '1 ', то
- Counter <= "000";
- Delay_trig <= '0 ';
- Output_temp <= '1 ';
якщо Clk25k'event і (Clk25k = '1 '), то
delay_trig <= акуратний;
If ((акуратний = '1 ') і (delay_trig = '0')) або ((Лічильник> 0) і (лічильник <7)), то
Лічильник <= Counter 1;
Output_temp <= '0 ';
ще
Лічильник <= "000";
Output_temp <= '1 ';
End If;
End If;
Наприкінці процесу;
виході <= output_temp;

Поведінкові кінця;Але є один я питання хочу запитати вас, насправді їм просто VHDL beginer і їм намагаються вчитися на себе
Я намагався зрозуміти, ур Код особливо два рядки
delay_trig <= акуратний;
If ((акуратний = '1 ') і (delay_trig = '0')) або ((Лічильник> 0) і (лічильник <7)), то

як ця умова буде зустрітися "(тригонометричні = '1 ') і (delay_trig = '0')", якщо завжди раніше, delay_trig отримує значення акуратний так що, якщо це акуратний 1 delay_trig становить 1
і якщо 0 dlay акуратний дорівнює нулю.Я просто хочу знати, якщо їм щось непорозумінням.Thx U Again r_e_m_y

 
Привіт,

Ніколи не забувайте, що ви описуєте, фліп-флоп зареєструватися і комбінації логіки воріт, коли ви пишете synthesisable VHDL.

Коли я пишу delay_trig <= акуратний, це значить, що я хочу, щоб вхідний D моїх фліп-флоп повинен бути приєднаний до Тригонометричний сигнал.
З метою RTL, ви отримаєте:
delay_trig.D <= акуратний
коли я пишу, якщо delay_trig = '0 'і акуратний = '1', що означає, що я хочу, щоб мати своїм результатом і воротами з виходом добротність flip_flop і акуратний сигналу.
З метою RTL, ви отримаєте:
якщо delay_trig.Q = '0 'і акуратний = '1'

Таким чином, delay_trig, як сказано в його назві, є акуратним затримкою сигналу 1 такт.по фронту акуратний, акуратний = 1, але delay_trig ще не '1 '.
Виконайте пост-макет моделювання цей код, щоб зрозуміти це.

І, до речі, Ви повинні тримати сигнал скидання для Вашого дизайну ...

 
Дякую вам багато r_e_m_y за вашу допомогу, може бути, проблема їм не думав RTL
Чи є у вас зв'язок або електронна книга, яка дає мені краще зрозуміти, яким synthesisable VHDL працює?
THK U Again

 
Я знайшов одну річ, що це неправильно
якщо імпульс менші що Clk25k цикл це не спрацює, тому я цим і додав він працював

особа є Timer280us
Порт (Clk_40us: у std_logic;
Width_Trig: у std_logic: = '0 ';
Скинути: у std_logic;
Pulse_End: з std_logic;
Pulse280us: з std_logic: = '1 ');
Timer280us кінця;
Поведінкові в архітектурі є timer280us
Сигнал лічильника: Unsigned (2 DOWNTO 0);
Сигнал delay_Trig: std_logic;
Сигнал Pulse_End_Temp: std_logic;
Сигнал Температура: std_logic: = '0 ';
Сигнал output_temp: std_logic: = '1 ';
починати
процес (Clk_40us, скидання)
починати
якщо скинути = '0 ', то
Лічильник <= "000";
delay_trig <= '0 ';
Output_temp <= '1 ';
Темп <= '0 ';
ELSIF Width_Trig = '1 ', то
Темп <= '1 ';
ELSIF Clk_40us'event і (Clk_40us = '1 '), то
delay_trig <= Width_Trig;
If ((Width_Trig = '1 ') і (delay_trig = '0')) або ((Лічильник> 0) і (лічильник <7)) OR ((Temp = '1 ') і (Counter = "000")) тоді
Лічильник <= Counter 1;
Output_temp <= '0 ';
Pulse_End_Temp <= '0 ';
ще
Лічильник <= "000";
Output_temp <= '1 ';
Pulse_End_Temp <= '1 ';
Темп <= '0 ';
End If;
End If;
Наприкінці процесу;
Pulse280us <= output_temp;
Pulse_End <= Pulse_End_Temp;
Поведінкові кінця;

 
Привіт всім,

Я намагаюся зробити генератор імпульсів, щоб бути реалізовані в CPLD
Ідея полягає в отриманні вихідних імпульсів, отриманих від 80MHz годинник.

Частота вихідного виводиться на 16-розрядні дані та години.
наприклад, 0000000000000001 вказує 12.5ns вихідний частоти
0000000000000010 вказує 25ns вихідний частоти.

Pulse Width виходу виводиться з 10 бітної
наприклад, 0000000001 вказує 12.5ns Pulse Width
0000000010 вказує 25ns Pulse Width

і там буде 6 біт на вході, через яке ми можемо вибрати 8 вихідних портів.
коли ми вибираємо інший сигнал, сигнал повинен зберегти попередні дані.особа є pulse_gen
Порт (CLK: у std_logic;
freq_data: у std_logic_vector (15 DOWNTO 0);
pulse_width_data: у std_logic_vector (9 DOWNTO 0);
wave_sel: у std_logic_vector (5 DOWNTO 0);
out_wave: з std_logic_vector (7 DOWNTO 0));
мети організації;

 

Welcome to EDABoard.com

Sponsor

Back
Top