|
Машина состояний и "переменные" (AHDL) |
|
|
|
Dec 10 2013, 08:26
|

Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 10 2013, 10:40
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Кузнецофф Ю. @ Dec 10 2013, 12:26)  Смущает следующее - при записи принятых байтов в "переменные" типа node или dff в одних состояниях автомата, не получается работать с ними в других состояниях, они чудесным для меня образом обнуляются. Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС.
Посоветуйте неграмотному,как строить схемотехнику в таких случаях. Перейти на vhdl/verilog не предлагать) Дорогой товарищ Ю! Знаете, что самое странное в Вашем посте? Не коды и не диаграммы... Самое странное - это Вы сами. Складывается такое ощущение, что правильный ответ Вам собственно и не нужен. Смотрите сами. Вам нужен UART... Так полно открытых проектов UARTов, берите и пользуйтесь. Начиная от сайта открытых проектов и Альтеры, Ксайлинксы, Лэттисы, и кончая FPGA4Fan какие нибудь... Поиск simple UART выдаст десяток экранов записей... Но Вам они не нужны, потому как "не AHDL"... НО, скажите, кто будет в здравом уме разбирать Ваши каракули на AHDL? Это никому сегодня не интересно... А фраза "не предлагать", говорит о Вашей упертости... А здесь на форуме профессионалы, но не в компьютерной археологии... Так вот, у меня есть на сайте довольно старая статья - " Шпаргрлка"... Берите ее как руководство к действию и учите язык. Ибо это быстрее выучить и взять работающий проект, чем мудохаться вслепую, да еще и нас развлекать такими постами... Удачи!
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Dec 10 2013, 10:53
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(Кузнецофф Ю. @ Dec 10 2013, 12:26)  Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС. Синусоидальность дидукционнго индуктора некоэмутируется с хромофорной эфузией аксирогентно-адиквантного фотонного триангулятора
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Dec 10 2013, 11:05
|

Участник

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

|
Иосиф К, большое спасибо вам за конструктивную критику! С аппаратным UARTом на ПЛИС проблемы нет, он отлажен и в симуляторе и в железе! Есть проблема разобраться в парадигме "программирования" логики ПЛИС. А вы предлагаете вместо того,чтобы разобраться и закончить проект - учить знакомый и нравящийся вам язык. Пост не читал, но использование AHDL осуждаю)) Пару статей с вашего сайта схоронил когда-то, но особо не разбирался за ненадобностью. Ответ на интересующий меня вопрос очень интересует, буду рад выслушать любое мнение. Цитата(Dmitriyspb @ Dec 10 2013, 14:53)  Синусоидальность дидукционнго индуктора некоэмутируется с хромофорной эфузией аксирогентно-адиквантного фотонного триангулятора
|
|
|
|
|
Dec 10 2013, 12:13
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Кузнецофф Ю. @ Dec 10 2013, 15:05)  Иосиф К, большое спасибо вам за конструктивную критику! С аппаратным UARTом на ПЛИС проблемы нет, он отлажен и в симуляторе и в железе! Есть проблема разобраться в парадигме "программирования" логики ПЛИС. А вы предлагаете вместо того,чтобы разобраться и закончить проект - учить знакомый и нравящийся вам язык. Дорогой товарищ Ю! Я всю жизнь и особенно в 80-е был обучен работать на результат. Именно поэтому, я предложил Вам наиболее простой способ выполнить Ваш проект. Вот Вы пишите: " при записи принятых байтов в "переменные" типа node"... А ведь "node" - это провод... Как можно "переменную" записать в провод? Для меня эта фраза говорит о том, что проблема есть в методике описания проектов, а не в языках... А что касается языков, то это только Миклуха-Маклай, когда оказался среди папуасов выучил их язык... Ни один нормальный англичанин не стал бы учить язык папуасов! Папуас должен выучить английский, потому что на нем говорит империя... И, что самое удивительное и папуасы и индусы и негры в африке да и китайцы все выучили язык империи... Так вот, я и Вам тоже самое объясняю! Хотите общаться с папуасами на их родном языке - ну так никто и спорить не будет, общайтесь! Беда только в том, что в этом форуме таких мало... Посмотрите поиском по форуму сколько есть вопросов об AHDL и сколько есть на них ответов... Ответов практически нет!!! Но если Вы хотите общаться со всеми остальными в империи - учите имперский язык... И далее, прикиньте, что займет больше времени, слепое ковыряние в проекте или изучение языка? Скажите, что "не предлагать"? Ну, так посчитайте. Месяц мучений с проектом на AHDL без нормального симулятора обойдется Вам в 1-2 тыс долл. Даже за половину этой суммы и за половину этого времени можно найти репетитора и выучить язык. И я Вас уверяю, что это и будет самый простой и самый быстрый способ разработки проектов... Я это сам прошел 10-15 лет назад, когда стал доступен МоделСим... А Вы, скорее всего даже не знаете для чего он нужен. Ну и как Вам это объяснить? Тяжело учить просто так, найдите репетитора... Так с ним будет проще... Что касается меня лично, то для меня AHDL - это слишком далекая история, поэтому я даже и смотреть ничего не буду, увы...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Dec 10 2013, 12:49
|

Участник

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

|
Иосиф, ещё раз огромное спасибо вам за комментарий! Вы неправильно поняли меня, я не писал, что "не хочу-не буду" учить "нормальные" языки и симуляторы. Без этого никуда, хотелось бы мне это или нет) Имеется в виду,что я не буду этого делать прямо сейчас, бросив почти готовый проект и начиная с нуля. Уж не настолько я отчаяный,извините. "Лучше месяц потерять, потом за день долететь" (с) Кстати, кто в курсе, как корректно описать массив автоматов (ahdl)? Цитата(andrew_b @ Dec 10 2013, 16:03)  Вам на полном серьёзе говорят, что AHDL давно в могиле. В здравом уме им никто не пользуется. Хотите AHDL -- за ради бога, но "всё сама, всё сама". Андрей, простите что вопрос возник по логике на старом языке, которым вы не пользуетесь
|
|
|
|
|
Dec 10 2013, 13:02
|

Участник

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

|
Цитата(iosifk @ Dec 10 2013, 16:51)  Через generate... в секции variable использование этой конструкции компилятор не допускает
|
|
|
|
|
Dec 10 2013, 13:11
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Кузнецофф Ю. @ Dec 10 2013, 17:02)  в секции variable использование этой конструкции компилятор не допускает Хочу спросить, что вообще есть в Вашем проекте... Я помню, что Альтеровские мегафункции были на AHDL, но для VHDL у них была обертка... А вот можно ли в AHDL вставить вериложный или VHDL модуль - не помню... А так, чисто по жизни, если такое прокатит, то можно бы часть проекта, которая не переделывается оставить "как есть", а вот все новое сделать допустим верилогом и вставить как модуль... Параметризованные модули делать умеете?
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Dec 11 2013, 11:10
|

Участник

Группа: Участник
Сообщений: 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 клоки триггеров..
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|