Kuznetsoff 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 (изменено) · Жалоба Здравствуйте, уважаемые товарищи Инженеры! Вчера отлаживал схему многоканального частотомера,а именно ту её часть, где производится получение пакета по 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.жпг во вложении. Смущает следующее - при записи принятых байтов в "переменные" типа 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 во вложении Но такой способ,мягко говоря, притянут за уши. Посоветуйте неграмотному,как строить схемотехнику в таких случаях. Перейти на vhdl/verilog не предлагать) Всем заранее благодарен! Изучение внутренностей lpm_ff показало,что асинхронная установка реализуется примитивом latch. Можно ли реализовать в таком случае вообще "переменные" через синхронные триггеры? Была попытка уменьшить частоту тактирования автомата относительно триггеров "переменных", результата это не дало.. Изменено 10 декабря, 2013 пользователем Кузнецофф Ю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Ваш DT защелкивает новое состояние каждый такт (по !CLK). Данные же для защелкивания вы ему подаете только в состоянии автомата CH_START, во всех остальных состояниях он защелкивает то, что компилятор AHDL захочет :) Вам нужно управлять входом EN (или как он там у DFF называется). PS. Возьмите язык посвежее - Verilog или VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuznetsoff 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба XVR, спасибо за оперативный ответ! Как же тогда реализовать такую вот секвенциальную "переменную"? Реализация на lpm_ff "работает", но компилятор с фиттером выдают 3000..5000 предупреждений =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Смущает следующее - при записи принятых байтов в "переменные" типа node или dff в одних состояниях автомата, не получается работать с ними в других состояниях, они чудесным для меня образом обнуляются. Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС. Посоветуйте неграмотному,как строить схемотехнику в таких случаях. Перейти на vhdl/verilog не предлагать) Дорогой товарищ Ю! Знаете, что самое странное в Вашем посте? Не коды и не диаграммы... Самое странное - это Вы сами. Складывается такое ощущение, что правильный ответ Вам собственно и не нужен. Смотрите сами. Вам нужен UART... Так полно открытых проектов UARTов, берите и пользуйтесь. Начиная от сайта открытых проектов и Альтеры, Ксайлинксы, Лэттисы, и кончая FPGA4Fan какие нибудь... Поиск simple UART выдаст десяток экранов записей... Но Вам они не нужны, потому как "не AHDL"... НО, скажите, кто будет в здравом уме разбирать Ваши каракули на AHDL? Это никому сегодня не интересно... А фраза "не предлагать", говорит о Вашей упертости... А здесь на форуме профессионалы, но не в компьютерной археологии... Так вот, у меня есть на сайте довольно старая статья - " Шпаргрлка"... Берите ее как руководство к действию и учите язык. Ибо это быстрее выучить и взять работающий проект, чем мудохаться вслепую, да еще и нас развлекать такими постами... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Мозг, засраный парадигмой структурного программирования контроллеров, отказывается понять концепцию программирования конфигурации ПЛИС. Синусоидальность дидукционнго индуктора некоэмутируется с хромофорной эфузией аксирогентно-адиквантного фотонного триангулятора Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuznetsoff 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Иосиф К, большое спасибо вам за конструктивную критику! С аппаратным UARTом на ПЛИС проблемы нет, он отлажен и в симуляторе и в железе! Есть проблема разобраться в парадигме "программирования" логики ПЛИС. А вы предлагаете вместо того,чтобы разобраться и закончить проект - учить знакомый и нравящийся вам язык. Пост не читал, но использование AHDL осуждаю)) Пару статей с вашего сайта схоронил когда-то, но особо не разбирался за ненадобностью. Ответ на интересующий меня вопрос очень интересует, буду рад выслушать любое мнение. Синусоидальность дидукционнго индуктора некоэмутируется с хромофорной эфузией аксирогентно-адиквантного фотонного триангулятора :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Пост не читал, но использование AHDL осуждаю))Вам на полном серьёзе говорят, что AHDL давно в могиле. В здравом уме им никто не пользуется. Хотите AHDL -- за ради бога, но "всё сама, всё сама". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Иосиф К, большое спасибо вам за конструктивную критику! С аппаратным UARTом на ПЛИС проблемы нет, он отлажен и в симуляторе и в железе! Есть проблема разобраться в парадигме "программирования" логики ПЛИС. А вы предлагаете вместо того,чтобы разобраться и закончить проект - учить знакомый и нравящийся вам язык. Дорогой товарищ Ю! Я всю жизнь и особенно в 80-е был обучен работать на результат. Именно поэтому, я предложил Вам наиболее простой способ выполнить Ваш проект. Вот Вы пишите: " при записи принятых байтов в "переменные" типа node"... А ведь "node" - это провод... Как можно "переменную" записать в провод? Для меня эта фраза говорит о том, что проблема есть в методике описания проектов, а не в языках... А что касается языков, то это только Миклуха-Маклай, когда оказался среди папуасов выучил их язык... Ни один нормальный англичанин не стал бы учить язык папуасов! Папуас должен выучить английский, потому что на нем говорит империя... И, что самое удивительное и папуасы и индусы и негры в африке да и китайцы все выучили язык империи... Так вот, я и Вам тоже самое объясняю! Хотите общаться с папуасами на их родном языке - ну так никто и спорить не будет, общайтесь! Беда только в том, что в этом форуме таких мало... Посмотрите поиском по форуму сколько есть вопросов об AHDL и сколько есть на них ответов... Ответов практически нет!!! Но если Вы хотите общаться со всеми остальными в империи - учите имперский язык... И далее, прикиньте, что займет больше времени, слепое ковыряние в проекте или изучение языка? Скажите, что "не предлагать"? Ну, так посчитайте. Месяц мучений с проектом на AHDL без нормального симулятора обойдется Вам в 1-2 тыс долл. Даже за половину этой суммы и за половину этого времени можно найти репетитора и выучить язык. И я Вас уверяю, что это и будет самый простой и самый быстрый способ разработки проектов... Я это сам прошел 10-15 лет назад, когда стал доступен МоделСим... А Вы, скорее всего даже не знаете для чего он нужен. Ну и как Вам это объяснить? Тяжело учить просто так, найдите репетитора... Так с ним будет проще... Что касается меня лично, то для меня AHDL - это слишком далекая история, поэтому я даже и смотреть ничего не буду, увы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuznetsoff 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Иосиф, ещё раз огромное спасибо вам за комментарий! Вы неправильно поняли меня, я не писал, что "не хочу-не буду" учить "нормальные" языки и симуляторы. Без этого никуда, хотелось бы мне это или нет) Имеется в виду,что я не буду этого делать прямо сейчас, бросив почти готовый проект и начиная с нуля. Уж не настолько я отчаяный,извините. "Лучше месяц потерять, потом за день долететь" (с) Кстати, кто в курсе, как корректно описать массив автоматов (ahdl)? Вам на полном серьёзе говорят, что AHDL давно в могиле. В здравом уме им никто не пользуется. Хотите AHDL -- за ради бога, но "всё сама, всё сама". Андрей, простите что вопрос возник по логике на старом языке, которым вы не пользуетесь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Кстати, кто в курсе, как корректно описать массив автоматов (ahdl)? Через generate... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuznetsoff 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Через generate... в секции variable использование этой конструкции компилятор не допускает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба в секции variable использование этой конструкции компилятор не допускает Хочу спросить, что вообще есть в Вашем проекте... Я помню, что Альтеровские мегафункции были на AHDL, но для VHDL у них была обертка... А вот можно ли в AHDL вставить вериложный или VHDL модуль - не помню... А так, чисто по жизни, если такое прокатит, то можно бы часть проекта, которая не переделывается оставить "как есть", а вот все новое сделать допустим верилогом и вставить как модуль... Параметризованные модули делать умеете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuznetsoff 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Проектик представляет собой многоканальный частотомер/фазометр. Сигналы в процессе цикла измерения меняют и фазу и частоту. Но поведенческая логика одинакова для всех каналов, так что был соблазн описать работу всех каналов массивом идентичных автоматов. На данный момент проектик описан и отлажен без использования автоматов, при переходе к реализации в железе принял решение запихнуть функционал в автомат. Спасибо за идею пихнуть автомат в параметризованный модуль (vhdl пока трогать не буду, чтобы не плодить зоопарк). UART как раз реализован на базе 3 модулей - приёмника, передатчика и делителя с произвольным коэффициентом. Какому языку лично Вы отдаёте предпочтение - VHDL или Verilog? Собираюсь переходить на современные средства разработки в наступающем году.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 11 декабря, 2013 Опубликовано 11 декабря, 2013 · Жалоба Какому языку лично Вы отдаёте предпочтение - VHDL или Verilog?За десяток лет существования портала на эту тему прогремела не одна война. Воспользуйтесь поиском. Несколько тем найдёте точно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuznetsoff 0 11 декабря, 2013 Опубликовано 11 декабря, 2013 · Жалоба За десяток лет существования портала на эту тему прогремела не одна война. Воспользуйтесь поиском. Несколько тем найдёте точно. Андрей, спасибо. Очевидно, выбор языка каждый решает сам для себя, исходя из личных приоритетов. Я же пока только нахватался субъективных отзывов с форумов, поэтому по данному вопросу в голове некоторый сумбур.. По теме: попытки использовать в качестве переменных примитивы 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 клоки триггеров.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться