Перейти к содержанию
    

Машина состояний и "переменные" (AHDL)

Здравствуйте, уважаемые товарищи Инженеры!

Вчера отлаживал схему многоканального частотомера,а именно ту её часть, где производится получение пакета по UART с технологического компьютера, и был повержен такой обьективной реальностью:

 

SUBDESIGN 1
(
clk				:	INPUT	=GND;	-- 33 МГц
IN, INP[7..0] : INPUT;
OUT, OUTP[7..0] : OUTPUT;
)

VARIABLE
SS: MACHINE WITH STATES (idle, INI, RX_START_BYTE, RX_CMD, RX_CHS, RX_CHECK, RX_STOP_BYTE, RX_ERR, CH_START, CH_123);
DT:DFF;

BEGIN

DT.CLK = !CLK;

Ss.clk = CLK;
CASE SS IS
	WHEN idle =>
		SS = ini;

	WHEN ini =>
		OUTP=0;
		SS = CH_START;

	WHEN CH_START =>
		OUTP=5;
		DT.D=VCC;
		SS = CH_123;

	WHEN CH_123 =>
		SS = CH_123;

	WHEN RX_ERR =>
		IF OUTP==5 THEN SS = IDLE; END IF;

	WHEN OTHERS =>
		SS = idle;
END CASE;

OUT=DT.Q;

END;

 

временная диаграмма сигналов - файл 1.жпг во вложении. post-62983-1386661307_thumb.jpg

 

Смущает следующее - при записи принятых байтов в "переменные" типа node или dff в одних состояниях автомата, не получается работать с ними в других состояниях, они чудесным для меня образом обнуляются. Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС.

 

Худо-бедно удалось реализовать желаемое через lpm_ff:

INCLUDE "LPM_FF.INC";

SUBDESIGN 1
(
clk				:	INPUT	=GND;	-- 33 МГц
IN, INP[7..0] : INPUT;
OUTP[7..0] : OUTPUT;
)

VARIABLE
SS: MACHINE WITH STATES (idle, INI, RX_START_BYTE, RX_CMD, RX_CHS, RX_CHECK, RX_STOP_BYTE, RX_ERR, CH_START, CH_123);
DTT:LPM_FF WITH (LPM_WIDTH=8);
CLR:NODE;

BEGIN

DTT.CLOCK = VCC;

Ss.clk = CLK;
CASE SS IS
	WHEN idle =>
		SS = ini;

	WHEN ini =>
		CLR=VCC;
		SS = CH_START;

	WHEN CH_START =>
		DTT.DATA=5;
		DTT.aload=VCC;
		SS = CH_123;

	WHEN CH_123 =>
		SS = CH_123;

	WHEN OTHERS =>
		SS = idle;
END CASE;

DTT.sclr = !CLR;
OUTP[]=DTT.Q;

END;

 

диаграмма сигналов - рис. 2 во вложении post-62983-1386662287_thumb.jpg

 

Но такой способ,мягко говоря, притянут за уши.

Посоветуйте неграмотному,как строить схемотехнику в таких случаях. Перейти на vhdl/verilog не предлагать)

 

Всем заранее благодарен!

 

Изучение внутренностей lpm_ff показало,что асинхронная установка реализуется примитивом latch.

Можно ли реализовать в таком случае вообще "переменные" через синхронные триггеры? Была попытка уменьшить частоту тактирования автомата относительно триггеров "переменных", результата это не дало..

Изменено пользователем Кузнецофф Ю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваш DT защелкивает новое состояние каждый такт (по !CLK). Данные же для защелкивания вы ему подаете только в состоянии автомата CH_START, во всех остальных состояниях он защелкивает то, что компилятор AHDL захочет :) Вам нужно управлять входом EN (или как он там у DFF называется).

 

PS. Возьмите язык посвежее - Verilog или VHDL.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

XVR, спасибо за оперативный ответ! Как же тогда реализовать такую вот секвенциальную "переменную"? Реализация на lpm_ff "работает", но компилятор с фиттером выдают 3000..5000 предупреждений =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смущает следующее - при записи принятых байтов в "переменные" типа node или dff в одних состояниях автомата, не получается работать с ними в других состояниях, они чудесным для меня образом обнуляются. Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС.

 

 

Посоветуйте неграмотному,как строить схемотехнику в таких случаях. Перейти на vhdl/verilog не предлагать)

 

Дорогой товарищ Ю!

 

Знаете, что самое странное в Вашем посте? Не коды и не диаграммы... Самое странное - это Вы сами. Складывается такое ощущение, что правильный ответ Вам собственно и не нужен.

Смотрите сами. Вам нужен UART... Так полно открытых проектов UARTов, берите и пользуйтесь. Начиная от сайта открытых проектов и Альтеры, Ксайлинксы, Лэттисы, и кончая FPGA4Fan какие нибудь... Поиск simple UART выдаст десяток экранов записей...

Но Вам они не нужны, потому как "не AHDL"... НО, скажите, кто будет в здравом уме разбирать Ваши каракули на AHDL? Это никому сегодня не интересно... А фраза "не предлагать", говорит о Вашей упертости... А здесь на форуме профессионалы, но не в компьютерной археологии...

Так вот, у меня есть на сайте довольно старая статья - " Шпаргрлка"... Берите ее как руководство к действию и учите язык. Ибо это быстрее выучить и взять работающий проект, чем мудохаться вслепую, да еще и нас развлекать такими постами...

Удачи!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС.

 

Синусоидальность дидукционнго индуктора некоэмутируется с хромофорной эфузией аксирогентно-адиквантного фотонного триангулятора

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иосиф К, большое спасибо вам за конструктивную критику! С аппаратным UARTом на ПЛИС проблемы нет, он отлажен и в симуляторе и в железе! Есть проблема разобраться в парадигме "программирования" логики ПЛИС.

А вы предлагаете вместо того,чтобы разобраться и закончить проект - учить знакомый и нравящийся вам язык.

Пост не читал, но использование AHDL осуждаю))

Пару статей с вашего сайта схоронил когда-то, но особо не разбирался за ненадобностью.

Ответ на интересующий меня вопрос очень интересует, буду рад выслушать любое мнение.

 

Синусоидальность дидукционнго индуктора некоэмутируется с хромофорной эфузией аксирогентно-адиквантного фотонного триангулятора

:cranky:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пост не читал, но использование AHDL осуждаю))
Вам на полном серьёзе говорят, что AHDL давно в могиле. В здравом уме им никто не пользуется. Хотите AHDL -- за ради бога, но "всё сама, всё сама".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иосиф К, большое спасибо вам за конструктивную критику! С аппаратным UARTом на ПЛИС проблемы нет, он отлажен и в симуляторе и в железе! Есть проблема разобраться в парадигме "программирования" логики ПЛИС.

А вы предлагаете вместо того,чтобы разобраться и закончить проект - учить знакомый и нравящийся вам язык.

 

Дорогой товарищ Ю!

 

Я всю жизнь и особенно в 80-е был обучен работать на результат. Именно поэтому, я предложил Вам наиболее простой способ выполнить Ваш проект. Вот Вы пишите: " при записи принятых байтов в "переменные" типа node"... А ведь "node" - это провод... Как можно "переменную" записать в провод? Для меня эта фраза говорит о том, что проблема есть в методике описания проектов, а не в языках...

А что касается языков, то это только Миклуха-Маклай, когда оказался среди папуасов выучил их язык... Ни один нормальный англичанин не стал бы учить язык папуасов! Папуас должен выучить английский, потому что на нем говорит империя... И, что самое удивительное и папуасы и индусы и негры в африке да и китайцы все выучили язык империи... Так вот, я и Вам тоже самое объясняю! Хотите общаться с папуасами на их родном языке - ну так никто и спорить не будет, общайтесь! Беда только в том, что в этом форуме таких мало... Посмотрите поиском по форуму сколько есть вопросов об AHDL и сколько есть на них ответов... Ответов практически нет!!!

Но если Вы хотите общаться со всеми остальными в империи - учите имперский язык...

И далее, прикиньте, что займет больше времени, слепое ковыряние в проекте или изучение языка?

Скажите, что "не предлагать"? Ну, так посчитайте. Месяц мучений с проектом на AHDL без нормального симулятора обойдется Вам в 1-2 тыс долл. Даже за половину этой суммы и за половину этого времени можно найти репетитора и выучить язык. И я Вас уверяю, что это и будет самый простой и самый быстрый способ разработки проектов... Я это сам прошел 10-15 лет назад, когда стал доступен МоделСим... А Вы, скорее всего даже не знаете для чего он нужен. Ну и как Вам это объяснить?

Тяжело учить просто так, найдите репетитора... Так с ним будет проще...

Что касается меня лично, то для меня AHDL - это слишком далекая история, поэтому я даже и смотреть ничего не буду, увы...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иосиф, ещё раз огромное спасибо вам за комментарий! Вы неправильно поняли меня, я не писал, что "не хочу-не буду" учить "нормальные" языки и симуляторы. Без этого никуда, хотелось бы мне это или нет) Имеется в виду,что я не буду этого делать прямо сейчас, бросив почти готовый проект и начиная с нуля. Уж не настолько я отчаяный,извините. "Лучше месяц потерять, потом за день долететь" (с)

Кстати, кто в курсе, как корректно описать массив автоматов (ahdl)?

 

Вам на полном серьёзе говорят, что AHDL давно в могиле. В здравом уме им никто не пользуется. Хотите AHDL -- за ради бога, но "всё сама, всё сама".

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, кто в курсе, как корректно описать массив автоматов (ahdl)?

Через generate...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через generate...

 

в секции variable использование этой конструкции компилятор не допускает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в секции variable использование этой конструкции компилятор не допускает

Хочу спросить, что вообще есть в Вашем проекте... Я помню, что Альтеровские мегафункции были на AHDL, но для VHDL у них была обертка... А вот можно ли в AHDL вставить вериложный или VHDL модуль - не помню... А так, чисто по жизни, если такое прокатит, то можно бы часть проекта, которая не переделывается оставить "как есть", а вот все новое сделать допустим верилогом и вставить как модуль...

Параметризованные модули делать умеете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проектик представляет собой многоканальный частотомер/фазометр. Сигналы в процессе цикла измерения меняют и фазу и частоту. Но поведенческая логика одинакова для всех каналов, так что был соблазн описать работу всех каналов массивом идентичных автоматов. На данный момент проектик описан и отлажен без использования автоматов, при переходе к реализации в железе принял решение запихнуть функционал в автомат.

Спасибо за идею пихнуть автомат в параметризованный модуль (vhdl пока трогать не буду, чтобы не плодить зоопарк). UART как раз реализован на базе 3 модулей - приёмника, передатчика и делителя с произвольным коэффициентом.

 

Какому языку лично Вы отдаёте предпочтение - VHDL или Verilog? Собираюсь переходить на современные средства разработки в наступающем году..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какому языку лично Вы отдаёте предпочтение - VHDL или Verilog?
За десяток лет существования портала на эту тему прогремела не одна война. Воспользуйтесь поиском. Несколько тем найдёте точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За десяток лет существования портала на эту тему прогремела не одна война. Воспользуйтесь поиском. Несколько тем найдёте точно.

 

Андрей, спасибо. Очевидно, выбор языка каждый решает сам для себя, исходя из личных приоритетов. Я же пока только нахватался субъективных отзывов с форумов, поэтому по данному вопросу в голове некоторый сумбур..

 

По теме: попытки использовать в качестве переменных примитивы NODE, DFF, DFFE и мегафункцию lpm_ff не увенчались успехом, т.к. не хочется отдаваться на волю компилятора. Не буду расплываться здесь мыслью по древу, кому интересно - пишите,пообщаемся, но для себя принял решение и реализовал автомат (фазо- и частотомера) с явным описанием всех выходов, благо логика уместилась в 10 состояний:

 

	SS: MACHINE OF BITS (CLR, Ph, NOT_clr_T,.......)
WITH STATES (
	S0=b"100",
	S1=b"000",
	S2=b"011",
	S3=b"011",
	S4=b"001",
	S5=b"000",
...................
);

 

В автомате приёма и отправки пакетов по UART всё-таки реализованы "переменные" на lpm_ff и это даже работает, хоть компилятор и матюгается на посаженные на VCC клоки триггеров..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...