Jump to content

    

slkhome

Участник
  • Content Count

    27
  • Joined

  • Last visited

Community Reputation

0 Обычный

About slkhome

  • Rank
    Участник

Recent Profile Visitors

616 profile views
  1. Цитата(rloc @ Oct 2 2017, 16:46) Год назад покупали в СПК в Москве за 7300р (курс 62.63). Если у Вас есть деловое предложение - можем обсудить?
  2. Продаю отладочную плату Artix-7 35T Arty FPGA Evaluation Kit (AES-A7MB-7A35T), СПб, цена 10 000 р., торг, тел. +7952-371-86-88
  3. В общем все получилось!!! Поставил по 2 триггера по входу внешних сигналов (miso и miosio), по котрым есть некоторые переходы, и подравил немного автомат, чтобы учесть эти триггеры, и все заработало стабильно! Спасибо всем большое! Цитата(Golikov A. @ Jun 2 2014, 08:50) Более того если вы не поставите галочку создавать безопасный автомат, то ваше default состояние будет упразднено оптимизатором, во всяком случае в ISE об этом честно написано. Как называется этот пункт с этой галочкой?
  4. Цитата(Golikov A. @ Jun 1 2014, 19:49) if (miso = '0') then next_state <= s21; спокойно можете попасть куда угодно проскочив 21 состояние, потому что в тот момент когда вы должны были перейти в 21 состояние, вы можете перейти в любое. Для этого достаточно сигналу мисо стать 0 поближе к клоку и все... Т.е. даже если есть строчки для дефолта и выше описан синхронный переход в текущее состояние? process(cur_state, rdy, miso, miosio) begin next_state <= cur_state; и if rising_edge(clk) then .... elsif ce = '1' then ---------- cur_state <= next_state; ---------------
  5. Цитата(iosifk @ Jun 1 2014, 13:33) Обычное дело. Если входной сигнал имеет пологие фронты или дребезг на фронтах, то автомат их чудесно сожрет... Все дело в том, что за "Лет 15 работаю с этими девайсами" ПЛИСы стали на порядок быстрее. И то, что раньше не воспринималось, то теперь прекрасно ловится... Смотрите, какие сигналы дают лишние переходы и их фильтруйте небольшим цифровым фильторм... В том то и дело, что по внешним сигналам КА может перейти дальше по порядку состояний и дойти до проверки сигнала rdy, который синхронный, и по внутренним синхронным сигналам (rdy) он всеравно должен пойти по порядку, т.е. проскочить проверку сигнала rdy он не может ни как, но это происходит (наприме состояния s21 и s22, в которых проверяется только сигнал rdy, синхронный, внутренний сигнал ПЛИС).
  6. Цитата(Golikov A. @ May 30 2014, 15:17) я чего-то не понимаю, у вас смена состояний автомат асинхронная что ли, по изменению входных сигналов? Смена состояний вообще задумывал синхронную да и описал вроде все именно как для синхронного варианта, тем более что конечный автомат без сихронности рассматривать, думаю, не возможно в дикой природе! Почему вы решили что он асинхронный? Может у меня там на самом деле так написано, но я не догоняю. Цитата(olegras @ May 30 2014, 15:19) Я бы все же состояние s31 явно бы описал. А входные rdy, miosio, miso у Вас асинхронные относительно clk? Вообще описывал s31 и явно и так как в коде указано, но разницы никакой! Тем более что в вышенаписанных постах рекомендовали использовать и дефолтное условие. А вот сигналы miosio и miso действительно асинхронные - приходят с наружи от внешней микрухи. Сигнал rdy синхронный, приходит от интерфейсного блочка (компонента), так же написанного на VHDL и прикрученного между этим автоматом и внешней микрухой. Цитата(Golikov A. @ May 31 2014, 02:09) если автомат асинхронный и меняется по изменению сигналов без клока, то 2 триггера на входе не помогут, еще дребезг надо устранять да и кучу всего делать, почему в автомате нет клока? Автомат синхронный по сигралу clk, да еще есть и сигнал се. Цитата(tdocs.su @ May 31 2014, 08:35) Так до сих пор и не разобрались? Обаме бы ваши проблемы... не разобрался, и вообще склоняюсь к мыли что либо у меня крышка поехала уже либо это разработчики ПЛИС специально такие баги компилят для конечных автоматов, чтобы люди начали активнее использовать корки компилируемых процессоров типа пикоблейза или микроблейза. Цитата(des00 @ May 31 2014, 17:03) не внимательно читаете код, автомат не асинхронный. Автор использует классическое двухпроцессное описание КА (один процесс регистровая логика, второй комбинационная), правда он еще слишком явно добавил аналог сигнала clock_enable в регистровую часть. По факту его вопроса, судя по сигналам используется асинхронная работа FTDI, что требует синхронизаторов по ее сигналам и учет дополнительных задержек при работе с ней. Вообще, года 2 назад, когда это все было написано и применялось в первый раз, все было замечательно. Да и сейчас вся информация по интерфейсу передается без искажений, т.е. корректно вырабатываются ЧИП селект, клоки и данные под них для микросхемы ФТДИ, вот только некоторые байты повторяются по нескольку раз, либо выпадают. Т.е. КА перескакивает некотроые состояния напроч, совершенно в хаотичном порядке, или вообще влетает в какие-то левые состояния и виснет. Написал достаточно много констрейнтов, и авомат стал работать стабильнее - пересатл влетать в неописанные, видимо, состояния, но среди описанных состояний перескакивает всеравно! Что делать вообще ума не приложу. Описывал этот автомат и через CASE и IF Then - результат один. А без таких простеньких КА более менее законченные не тривиальные устройства не сделать! Всетаки вдимо Абама тут приложился. Да и самое страшное что результат один - независимо от того Альтера это или Ксилинкс. Лет 15 работаю с этими девайсами - а с такой фигней встретился впервые! Может у кого еще есть какие-нибудь мысли этот счет?? Прошу поделитесь!
  7. Уважаемые форумчане, прошу хотябы бегло просмотреть мой код на предмет корректного написания и дать свои комментарии. Этот конечный автомат моделируется идельно, но когда загружую в ПЛИС - иногда влетает не в те состояния, которые были задуманы по поряюку работы. Анализатор максимальной частоты говорит что автомат может работать на частотах даже выше 300 МГц, но реально хоть на 80 хоть на 40 МГц работает со сбоями, и для примера, может из состояния S22 перепрыгнуть в состояние S2, а не в S3. Все это безобразие котролирую на осциллографе по выходным сигналам автомата. Меняю стратегию компилятора, меняется немного стабильность работы, но лиш меняется комбинации неправильных переходов. Констрейнты на клоки выполняются. Пробовал и в Ква и ИСЕ, поведение примерно одинаково - есть неожиданные переходы. Автомат простой как 2 рубля, понимаю, писал и на много более сложные, но сейчас какая-то чертовщина. Может это производители ПЛИС спец баг влепили - чтобы пользовались их ИП ядрами! CODE---------------------------------------------------------------------------------- -- -- -- Машина состояний для работы с модулем FTDI -- -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; entity sm_ft1248_to_modem_f is generic ( CMD_WR : std_logic_vector(7 downto 0) := "01101001"; CMD_RD : std_logic_vector(7 downto 0) := "01101011"; CMD_RD_MOD_ST : std_logic_vector(7 downto 0) := "01101101"; CMD_WR_MOD_ST : std_logic_vector(7 downto 0) := "01101111"; CMD_RD_USB_ST : std_logic_vector(7 downto 0) := "11101001" ); Port ( -- INPUTS clk : in STD_LOGIC := '0'; -- ce : in STD_LOGIC := '0'; -- sclr : in std_logic := '0'; -- clk_en : in STD_LOGIC := '0'; -- rdy : in STD_LOGIC := '0'; -- miosio : in STD_LOGIC := '0'; -- miso : in STD_LOGIC := '0'; -- -- OUTPUTS cmd : out STD_LOGIC_VECTOR (7 downto 0); -- команда для передачи модулю FTDI wr_rd : out STD_LOGIC; -- чтения или записи 0 записи 1 чтерия valid : out STD_LOGIC; -- начала транзакции -- TESTES -- OUTPUT test : out STD_LOGIC_VECTOR (7 downto 0) -- составной (композитный) сигнал для тестов ); end sm_ft1248_to_modem_f; architecture Behavioral of sm_ft1248_to_modem_f is type state_type is (s1, s2, s21, s22, s3, s31); -- , s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16); signal cur_state : state_type; -- текущие состояния signal next_state : state_type; -- следующие состояния signal N_wr_rd : std_logic; -- следующее состояние сигнала 1 записи 0 чтерия signal rg_wr_rd : std_logic; -- текущее состояние сигнала signal N_valid : std_logic; -- следующее состояние сигнала signal rg_valid : std_logic; -- текущее состояние сигнала signal N_cmd : STD_LOGIC_VECTOR (7 downto 0); -- следующее состояние сигнала signal rg_cmd : STD_LOGIC_VECTOR (7 downto 0); -- текущее состояние сигнала signal EN_cmd : std_logic; -- сигнал разрешения изменения значение команды signal N_test : STD_LOGIC_VECTOR (7 downto 0); -- следующее состояние порта signal rg_test : STD_LOGIC_VECTOR (7 downto 0); -- текущее состояние порта attribute syn_encoding : string; attribute syn_encoding of state_type : type is "SEQUENTIAL"; -- SEQUENTIAL ONE-HOT JOHNSON GRAY COMPACT begin -------------------------------------------------------------- ---======= смена текущего состояния с.машины -------------------------------------------------------------- process(clk, sclr, next_state, N_valid, N_test, cur_state, rg_valid, rg_test) begin if rising_edge(clk) then if sclr = '1' then ---------- cur_state <= s1; rg_valid <= '0'; rg_wr_rd <= '0'; rg_test <= (others => '0'); rg_cmd <= (others => '0'); ---------- elsif ce = '1' then ---------- cur_state <= next_state; --------------- rg_valid <= N_valid; --------------- --------------- rg_test <= N_test; --------------- if EN_cmd = '1' then rg_cmd <= N_cmd; rg_wr_rd <= N_wr_rd; else rg_cmd <= rg_cmd; rg_wr_rd <= rg_wr_rd; end if; ---------- else ---------- cur_state <= cur_state; --------------- rg_valid <= rg_valid; --------------- rg_wr_rd <= rg_wr_rd; --------------- rg_test <= rg_test; --------------- rg_cmd <= rg_cmd; ---------- end if; end if; end process; --============================================================ --============================================================ -------------------------------------------------------------- ---======= выбор нового состояния -------------------------------------------------------------- process(cur_state, rdy, miso, miosio) begin next_state <= cur_state; case cur_state is when s1 => -- if (rdy = '1') then next_state <= s2; end if; when s2 => if (miso = '0') then -- ------------------- next_state <= s21; -- end if; when s21 => -- if (rdy = '0') then next_state <= s22; end if; when s22 => -- if (rdy = '1') then next_state <= s3; end if; when s3 => if (miosio = '0') then -- --------------------- next_state <= s31; end if; when others => -- if (rdy = '0') then next_state <= s1; end if; end case; end process; --============================================================ --============================================================ -------------------------------------------------------------- ---======= формирование выходных сигналов -------------------------------------------------------------- process(cur_state, rdy, miso, miosio, rg_cmd, rg_test) begin if cur_state = s2 and (miso = '0') then -- ------------------- EN_cmd <= '1'; N_cmd <= CMD_RD; N_wr_rd <= '1'; N_valid <= '1'; elsif cur_state = s3 and miosio = '0' then EN_cmd <= '1'; N_cmd <= CMD_WR; N_wr_rd <= '0'; N_valid <= '1'; else N_valid <= '0'; N_wr_rd <= rg_wr_rd; EN_cmd <= '0'; N_cmd <= rg_cmd; -- end if; end process; --============================================================ --============================================================ -------------------------------------------------------------- ---======= выходы -------------------------------------------------------------- wr_rd <= rg_wr_rd; valid <= rg_valid; cmd <= rg_cmd; test <= rg_test; --============================================================ --============================================================ end Behavioral;
  8. Там в DSP Builder есть такая функция - вставить HDL код, но потом всеравно порт назначается через вставление стандартного порта Билдера. А в перечне портов есть только входы или выходы, двунаправленных портов нет. И когда назначаешь к модулю с двунаправленным портом порт Билдера, он генерит код для компиляции, вставляет между модулем и пином компонент, у котого есть вход и выход, а внутри компонента они просто соединены. И получается в итоге пин с 3-м состоянием, но без обратного входного свойства. В итоге пока решения так и не нашел. У кого-нибудь получалось вообще чего-нибудь подобное делать в Симулинке?
  9. Прикинул несколько вариантов. Первый вариант - использовать 2 порта. 1 - как выход с третьим состоянием, 2 - как вход. В этом случае придется использовать 2 шара на плисине, которые будут соединяться по печати и совместно идти к внешнему устройству. Другой вариант, второй - ручками править проект, конвертированный в Ква. И так каждый раз, как захочется чего-нибудь поменять в проекте и перекомпилить. Третий вариант - вставлять проект первого варианта как модуль в проект в Ква и уже там добавлять буфер с 3-мя состояниями. Но так подозреваю тоже будет не удобно сильно. Лично для меня самый простой пока вариант - первый. Но неужели нет других вариантов? Более удобных и простых.
  10. Решил приделать к своему устройству на ПЛИС Altera устройство с двунаправленным портом. Весь проект для ПЛИС собран в Симулинке, но вот двунаправленный порт впихнуть туда ни как не получается. Вообще в библиотеке нет двунаправленного порта, есть только либо вход либо выход. Знаю что для Ксилинкса есть решение, описано в мануале сисген_юзер, а вот для Альтеры ни как найти не могу решения. Может кто поделиться опытом по такой трудности?
  11. Разобрался. Надо было обьединить отдельным проводом экраны USB кабелей и на плате UMFT220, где и стоит собственно FT220x, сигнальные цепи посадить на зеплю через конденсаторы несколько десятков пик.
  12. Найдутся специалисты которые работали с микросхемами FTDI FT220x ? Написал мастер-а для интерфейса FT1248 на ПЛИС и в однобитовом режиме подключился к платке UMFT220. В общем все режими и команды выплняются адекватно кроме команды чтения. Читает все что угодно, короме того что передаю. А передаю простые нажатия в Терминалке. Контролирую на таком же свистке, только который работает в режиме записи. Запись работает адекватно, проверено многократно. То что на самом деле передается по УСБ - по понятным причинам посмотреть не могу. Драйвера последние, самые свежие с сайта скченные и насильно установленные. Что делаю не так, подскажите? А может чип битый? Или драйвера кривые?
  13. USB-COM и windows

    Найдутся специалисты которые работали с микросхемами FTDI FT220x ? Написал мастер-а для интерфейса FT1248 на ПЛИС и в однобитовом режиме подключился к платке UMFT220. В общем все режими и команды выплняются адекватно кроме команды чтения. Читает все что угодно, короме того что передаю. А передаю простые нажатия в Терминалке. Контролирую на таком же свистке, только который работает в режиме записи. Запись работает адекватно, проверено многократно. То что на самом деле передается по УСБ - по понятным причинам посмотреть не могу. Драйвера последние, самые свежие с сайта скченные и насильно установленные. Что делаю не так, подскажите? А может чип битый? Или драйвера кривые?
  14. Цитата(Koluchiy @ Aug 19 2011, 16:26) Что Вы подразумеваете под основной программой? Имел в виду не бутлоадер, а программку, которую он грузит. Но вообще я во всем разобрался. Так что не стоит беспокойств.
  15. Всем огромное спасиба! Все заработало. Скачал, все получилось, только в конце концов нашел еще другой вариант. Можно Все это сделать и в иМпакте, но надо подкидывать ему не .elf файл, а например .srec, который можно сделать с помощью data2mem. Если иМпакту подкидывать .srec то он не вылетате и спокойно его добавляет к .bit и генерит .mcs файл. В этом случае можно спокойно использовать стандартный бутлоадер с небольшими поправками. А для пущей простоты исходники можно скачать на Авнете для платки ЛиКс9.