реклама на сайте
подробности

 
 
> Машина состояний и "переменные" (AHDL)
Кузнецофф Ю.
сообщение Dec 10 2013, 08:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 15-02-11
Из: мск
Пользователь №: 62 983



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

CODE
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.жпг во вложении.
Прикрепленное изображение


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

Худо-бедно удалось реализовать желаемое через lpm_ff:
CODE
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 во вложении
Прикрепленное изображение


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

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

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

Сообщение отредактировал Кузнецофф Ю. - Dec 10 2013, 08:26
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Кузнецофф Ю.
сообщение Dec 10 2013, 13:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 15-02-11
Из: мск
Пользователь №: 62 983



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

Какому языку лично Вы отдаёте предпочтение - VHDL или Verilog? Собираюсь переходить на современные средства разработки в наступающем году..
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 11 2013, 04:30
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Кузнецофф Ю. @ Dec 10 2013, 17:46) *
Какому языку лично Вы отдаёте предпочтение - VHDL или Verilog?
За десяток лет существования портала на эту тему прогремела не одна война. Воспользуйтесь поиском. Несколько тем найдёте точно.
Go to the top of the page
 
+Quote Post
Кузнецофф Ю.
сообщение Dec 11 2013, 11:10
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 15-02-11
Из: мск
Пользователь №: 62 983



Цитата(andrew_b @ Dec 11 2013, 08:30) *
За десяток лет существования портала на эту тему прогремела не одна война. Воспользуйтесь поиском. Несколько тем найдёте точно.


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

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

CODE
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 клоки триггеров..
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Кузнецофф Ю.   Машина состояний и "переменные" (AHDL)   Dec 10 2013, 08:26
- - XVR   Ваш DT защелкивает новое состояние каждый такт (по...   Dec 10 2013, 09:44
- - Кузнецофф Ю.   XVR, спасибо за оперативный ответ! Как же тогд...   Dec 10 2013, 09:52
- - iosifk   Цитата(Кузнецофф Ю. @ Dec 10 2013, 12:26)...   Dec 10 2013, 10:40
- - Dmitriyspb   Цитата(Кузнецофф Ю. @ Dec 10 2013, 12:26)...   Dec 10 2013, 10:53
|- - Maverick   Цитата(Dmitriyspb @ Dec 10 2013, 12:53) С...   Dec 11 2013, 21:07
- - Кузнецофф Ю.   Иосиф К, большое спасибо вам за конструктивную кри...   Dec 10 2013, 11:05
|- - andrew_b   Цитата(Кузнецофф Ю. @ Dec 10 2013, 15:05)...   Dec 10 2013, 12:03
|- - iosifk   Цитата(Кузнецофф Ю. @ Dec 10 2013, 15:05)...   Dec 10 2013, 12:13
- - Кузнецофф Ю.   Иосиф, ещё раз огромное спасибо вам за комментарий...   Dec 10 2013, 12:49
|- - iosifk   Цитата(Кузнецофф Ю. @ Dec 10 2013, 16:49)...   Dec 10 2013, 12:51
|- - Кузнецофф Ю.   Цитата(iosifk @ Dec 10 2013, 16:51) Через...   Dec 10 2013, 13:02
|- - iosifk   Цитата(Кузнецофф Ю. @ Dec 10 2013, 17:02)...   Dec 10 2013, 13:11
|- - Джеймс   Цитата(Кузнецофф Ю. @ Dec 11 2013, 14:10)...   Dec 11 2013, 11:44
|- - Кузнецофф Ю.   Цитата(Джеймс @ Dec 11 2013, 15:44) Вы мн...   Dec 11 2013, 21:02
- - Tiro   Цитата(Кузнецофф Ю. @ Dec 10 2013, 11:26)...   Dec 11 2013, 21:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 16:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016