Я не можу активувати сигнал після 12 циклів

A

aris12

Guest
Привіт всім,
Я новачок у VHDL і я прагну, щоб активувати сигнал після 12 циклів і потім ді-активувати його знову.Наприклад,
Початок-0-0-0-0-0-0-0-0-0-0-0-0-1-0-кінець

Я ці помилки в ModelSim,
Помилка: немає можливості для emtries інфіксних оператор " ".
Помилка: Тип помилки вирішенні інфіксних виразу " " як тип ieee.std_logic_1164.std_logic_vector.

може хто-небудь сказати мені, що відбувається PLS і як я можу це виправити?Код:

Бібліотеки IEEE;

використання IEEE.std_logic_1164.all;

використання ieee.numeric_std.all;- Interface Description =============== ===============особа є COUNTER_DECпорту (години: в std_logic; - позитивний край

Скинути: у std_logic;Початок: о std_logic; - запустити процесdone_count: з std_logic - кінець процесу);

COUNTER_DEC кінця;Архітектура COUNTER_DEC_RTL з COUNTER_DEC є- Сигнал Визначення =============== ===============Сигнал TMP: std_logic;

Сигнал активні: std_logic;

Сигнал лічильника: std_logic_vector (3 DOWNTO 0);- Дані руху =============== ===============починатиSTART_COUNTER: процес (години, скидання)починатиякщо скинути = '1 ', то

Лічильник <= (інші => '0 ');

TMP <= '0 ';

Активне <= '0 ';ELSIF (Start = '1 'або активний = '1'), тоякщо clock'event та години = '1 ', то

Лічильник <= (лічильник '1 ');

ще

Лічильник <= лічильника;

TMP <= TMP;

End If;

Активне <= активний початок XOR;

ще

Лічильник <= "0000";

TMP <= '0 ';

Активне <= '0 ';

End If;Якщо лічильник = "1100", а потім

TMP <= '1 ';

Лічильник <= "0000";

Активне <= '0 ';

ще

TMP <= '0 ';

End If;

done_count <= TMP;Наприкінці процесу;COUNTER_DEC_RTL кінця;
 
' ' Синтаксичні помилки легко.Ви можете додати числових значень, а не бітних значень.'1 'Трохи сигналу, то він не може бути додано.

Ви використовуєте numeric_std пакету, так що ви повинні визначити ваші лічильника як знак, а не як std_logic_vector.
Непідписані сигналів може бути збільшена шляхом додавання 1.
Код:

Лічильник <= Counter 1;
 
МКО подякувати U большое за ответ.
Ви маєте рацію.Я використав "знака" та компіляції complited успішно.Погано те, що він не робить те, що я хотіла ..

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />

<img src="http://images.elektroda.net/17_1214589189_thumb.jpg" border="0" alt="i can't activate a signal after 12 cycles" title="Я не можу активувати сигнал після 12 циклів"/> Код:- ================================================ ===========================

- Проект: COUNTER_DEC

- Мета: цей блок після 12 годин активувати вихід для одного імпульсу.

- ================================================ ===========================Бібліотеки IEEE;

використання IEEE.std_logic_1164.all;

використання ieee.std_logic_unsigned.all;

- Використання ieee.numeric_std.all;- Interface Description ================ ================особа є COUNTER_DECпорту (години: в std_logic; - позитивний край

Скинути: у std_logic;Початок: о std_logic; - запустити процесdone_count: з std_logic - кінець процесу);

COUNTER_DEC кінця;Архітектура COUNTER_DEC_RTL з COUNTER_DEC є- Сигнал Визначення ================ ================Сигнал TMP: std_logic;

Сигнал active1: std_logic;

Сигнал лічильника: std_logic_vector (3 DOWNTO 0);

- Сигнал new_counter: std_logic_vector (3 DOWNTO 0);- Дані руху ================ ================починатиSTART_COUNTER: процес (години, скидання)починатиякщо скинути = '1 ', тоякщо скинути = '1 ', то

Лічильник <= (інші => '0 ');

TMP <= '0 ';

active1 <= '0 ';ELSIF (Start = '1 'або active1 = '1'), тоякщо clock'event та години = '1 ', то

Лічильник <= Counter 1;

ще

Лічильник <= лічильника;

TMP <= TMP;

End If;

active1 <= active1 або почати;- Інше

- Counter <= "0000";

- TMP <= '0 ';

- Active1 <= '0 ';

End If;

End If;Якщо лічильник = "0001", а потім

TMP <= '1 ';

Лічильник <= "0000";

active1 <= '0 ';

ще

TMP <= '0 ';

End If;

done_count <= TMP;Наприкінці процесу;COUNTER_DEC_RTL кінця;

 
Ви використовуєте поведінковий код, який не синтезуються в ПЛІС.Вона може бути використана при моделюванні Ony.Книги, ви радилися, мабуть, не акцентується увага на це важлива відмінність.

Ні годинами чекати чутливої заявою в циклі ні години заявою чутливі до протилежного краю є синтезованого коду, на жаль.(Ви можете використовувати різні краю в процесі або в spearate процеси, а не встановити однаковий сигнал).

Причиною цього обмеження є досить простим і зрозумілим на мій погляд.ПЛІС основний логіка заснована на воротах і шльопанці.Є менші відмінності між сім'ями, FPGA, але в основному, фліп-флоп мають асинхронні (завжди скинути, а іноді і набір синхронних навантаження) і синхронних функцій.Синхронна є можливість використання чутливих край вхідного годин, шляхом інверсії годин, вона може працювати в іншому світлі краю.Там немає нічого, що дозволить отримати вибірку сигналу на обох краях.

Насправді логіка дуже проста.Воно може бути написано просто:

Код:

якщо скинути = '1 ', то

Лічильник <= (інші => '0 ');

done_count <= '0 ';

ELSIF rising_edge (години), то

Якщо лічильник> = 12 тоді

Лічильник <= "0000";

done_count <= '1 ';

ELSIF Лічильник> 0 або почати = '1 ', то

Лічильник <= Counter 1;

done_count <= '0 ';

ще

Лічильник <= "0000";

done_count <= '0 ';

End If;

End If;
 
МКО Ура мій герой

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />

Thank U чоловік.він працює.
Я все зрозуміла U сказав.Thank u.Я витрачати стільки часу на те, щоб зробити процедури, функції та багато багато інших речей, щоб вони працювали

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />
<img src="http://images.elektroda.net/38_1214609049_thumb.jpg" border="0" alt="i can't activate a signal after 12 cycles" title="Я не можу активувати сигнал після 12 циклів"/> U також може запропонувати мені гарним орієнтиром для VHDL, тому що я намагаюся використовувати оператори зсуву, і я знову помилками

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />я використовую,
ieee.numeric_std.all;
IEEE.NUMERIC_BIT;
і я пишу, наприклад,
Test <= 1 лічильник роль;
Якщо випробувальні та counder є "std_logic_vector (3 DOWNTO 0);".
Помилка: не можу визначити визначення оператора "" роль "" - 0 Знайдено можливих визначень

 
Я не знаю ту чи іншу книгу VHDL, хоча є звичайно багато.Особисто я використовую Підсумок посібник для посиланням http://www.cse.unsw.edu.au/ ~ cs3211/refs/vhdl1.pdf
http://www.cse.unsw.edu.au/ ~ cs3211/refs/vhdl2.pdf,
Іноді навіть у специфікаціях IEEE, хоча це не зручно літературі, але деякі корисні конструкції, не згадуються в іншій літературі.

Що стосується операторів зсуву, вони визначаються в пакетах, синтаксис та наявність залежить ввозяться на якому.Особисто я віддаю перевагу загальних виразах VHDL замість:
Код:

Test <= COUNT (2 DOWNTO 0) & COUNT (3);
 
Спасибо еще раз.Я робив це з вашим чином.
і керівництвом виглядає докладно.
Thnx

 

Welcome to EDABoard.com

Sponsor

Back
Top