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

k16

Участник
  • Постов

    69
  • Зарегистрирован

  • Посещение

Весь контент k16


  1. Программа толковая конечно, но это не то что нужно тут, совсем не то. Ладно я уже сделал сегодня эту задачку по другому сам. Всем спасибо. пока.
  2. Сейчас буду анализировать этот код. Напишу ответ позже.
  3. Но работать-то я должен вначале с частотой 100 кГц, а потом должна действовать частота 50 Гц, мало того, потом частота должна быть опять 100 кГц, а потом 6,25 Гц????? Как быть с очерёдностью частот? Тут наверно надо делать процесс мультиплексора на 3 входа? и снимать частоты с мультиплексора? Как тогда процессы расположить в программе? В какой очерёдности идёт выполнение процессов?
  4. Что же тогда делать-то, а? Что частота должна из 100 кГц при приходе значения adres = 1 преобразоваться в 50 Гц что-ли, так? Но всё равно значение designation вормируется-то в 100 кГц частоте, а инкрементироваться должно в 50 Гц....???7 Как быть? Тег код где включается-то прикопировании текст в окошко темы? Копируется-ли отсюда веб страница? Возникает вопрос преобразования частот (деление и умножение), да? Надо ввести процесс пересинхронизации перед процессом считывания, да? В каком порядке идёт выполнение разных процессов? Дайте направление движения. Буду делать сам... Как найти тогда сделать задержку к примеру для умножения?
  5. Где этот тег код включается? А программу мне именно эту надо доработать. Сигнал signal designation : integer range 0 to 40000; используется в двух процессах. Как быть? Есть ли возможность скопировать HTML страницу с этого сайта? Она копируется, но не читается Эксплорером без интернета? Вообще если возможно, то как оптимизировать данную программу, чтоб работала она по этому же алгоритму? Как улучшить, чтоб места меньше занимала в микросхеме и т.д.? Очень прошу помочь... Если можно, то киньте текст программы на почту ...
  6. Такой вопрос. Есть ли возможность скопировать HTML страницу с этого сайта? Она копируется, но не читается Эксплорером без интернета?
  7. Хорошо. Всё сделал так как Вы советуете. Что делать с этими ошибками? Error (10028): Can't resolve multiple constant drivers for net "designation[15]" at KZU.vhd(48) Error (10029): Constant driver at KZU.vhd(130) Error (10028): Can't resolve multiple constant drivers for net "designation[14]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[13]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[12]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[11]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[10]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[9]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[8]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[7]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[6]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[5]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[4]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[3]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[2]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[1]" at KZU.vhd(48) Error (10028): Can't resolve multiple constant drivers for net "designation[0]" at KZU.vhd(48) Error: Can't elaborate top-level user hierarchy Error: Quartus II Analysis & Synthesis was unsuccessful. 18 errors, 13 warnings Error: Peak virtual memory: 175 megabytes Error: Processing ended: Mon Aug 17 17:15:28 2009 Error: Elapsed time: 00:00:06 Error: Total CPU time (on all processors): 00:00:03
  8. Всё. Вопрос закрыт. Всем оочень благодарен. Огромное спасибо...
  9. щас пойду посмотрю промоделирую. напишу позже
  10. Да, но значение R_A формируется и приходит из синхронного процесса, т.е. R_A используется в двух синхронных процессах. R_A - это синхронное "значение-сигнал" приравнивается к синхронной переменной c в данном случае, которая меняется по Hz_50. Как же быть? нужно наверно R_A внести в счётчик по сигналу load и счётчик уже по сигналу enable начнёт счёт уже своей частоты Hz_50 от сигнала-значения R_A и при достижении значения 40000 по схеме "И" счётчик сбросить и он начнёт считать с "0", потом закрыв enable - это если делать схему, но хотелось-бы написать это на VHDL, чтоб считать с "1", а не с "0".
  11. Хотя и алгоритмически всё правильно сделано, но программа эта вообще не делает сравнений и не даёт ввести клок типа rising_edge в условия, а сравнивать значения нужно с частотой 100кГц в каждом периоде... Программа ничего не сравнивает... Тут всё-таки наверно нужно вводить boolean тип... В общем не работает это... возникает путаница типов.... сам проверил и промоделировал...
  12. открыть тэг "code" - что это значит?????
  13. Здравствуйте. Как в данной программе сделать инкрементирование адресов по кольцу '+1' от приходящего на вход R_A значения. Всего должно сформироваться 40000 адресов. При достижении 40000, значение адреса должно перейти в 1 и начать инкрементироваться c 1 до R_A - 1. Не получается. Помогите. Разрешающую функцию надо наверно тут писать для c? library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; ENTITY KSU IS PORT ( Hz_50 : in std_logic; m : in std_logic; R_A : in integer range 0 to 40000; quit : OUT integer range 0 to 40000 ); END KSU; ARCHITECTURE div OF KSU IS BEGIN ------------------------------------------------------------------------------------------------------- process (Hz_50, m, R_A) variable c : integer range 0 to 40000 := 0; BEGIN c := R_A; if (Hz_50'event and Hz_50 = '0' and m = '1' ) then if c /= 40000 then c := c + 1; else c := 1; end if; quit <= c; end if; if m = '0' then quit <= 0; end if; end process; END div;
  14. Cейчас буду моделировать. да хоть 1000 раз, но нужно подряд всего 3. Длительность выходного импульса до канца работы платы (он постоянен). Арбитраж не нужен. достаточно 3 подряд сравнений-превышений в любом из каналов. Что вы понимаете под системной частотой? Я делаю блочок схемы в который поступает 100 кГц и системная частота мне не нужна тут... Ошибка при синтезе такая: Can't resolve multiple constant drivers for net "stroke_1" at <location> неа. не компилируется это. и по-моему это что-то не то....
  15. Да, но сравнение на >= должно пройти подряд 3 раз, а если сравнение было всего 2 раза подряд или 1 раз, то сигнал должен сброситься в '0' и опять начинать сравнивать до трёх подряд сранений на >= и r и а должны быть <= b_1 и соответственно d_1. Вообще зачем тут reset , он тут вообще не к месту. Чего ресетить-то? То есть можно обойтись и без boolean, да?
  16. Здравствуйте. Этот код вообще не делает никаких сравнений и абсолютно не пригоден. Тут надо сравнивать на "правду-ложь" как-то, вводить тип boolean... Что-то как-то вот так: Как не моделировал, как не ворочал этот код никак не получается??????????????? library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity STROKE is port ( clk : in std_logic; -- a, r, b_1, b_2, d_1, d_2: in bit_vector (15 downto 0); a, r, b_1, d_1: in bit_vector (15 downto 0); stroke_1: out std_logic:= '0'); -- stroke_2: out std_logic:= '0' ); end STROKE; architecture kod of STROKE is --constant s, k: integer := 3; --SIGNAL tmp_1 : std_logic:= '0'; --SIGNAL tmp_2 : std_logic:= '0'; --signal m, k: boolean; signal m: bit:='0'; --SIGNAL clk_100kHz : std_logic; begin process (clk) variable s: integer range 1 to 4:= 1; begin -- clk_100kHz <= not clk; --m <= (r >= b_1) or (a >= d_1); --k <= (r >= b_2) or (a >= d_2); if ((r >= b_1) or (a >= d_1)) then m <= '1'; end if; -- tmp_1 <= '1' if (rising_edge(clk) and m = '1' ) then s := s + 1; end if; --if ( rising_edge(not clk) and k = 3) then tmp_2 <= '1'; end if; if (s = 4) then stroke_1 <= '0'; end if; end process; --stroke_1 <= tmp_1; end kod; :smile3046:
  17. Я не силён в программировании, но наверно так надо? Помогите... library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity STROKE is port ( clk : in std_logic; a, r, b_1, d_1: in bit_vector (15 downto 0); stroke_1: out std_logic:= '0'; ); end STROKE; architecture kod of STROKE is signal m: bit:='0'; begin process (clk) variable s: integer range 1 to 4:= 1; begin if ((r >= b_1) or (a >= d_1)) then m <= '1'; if (rising_edge(clk) and m = '1' ) then s := s + 1; end if; end if; if (s = 3) then stroke_1 <= '1'; end if; end process; end kod;
  18. Здравствуйте. На входе компаратора установлены две 16-ти битные уставки (переменные, которые можно менять), которые сравниваются на >= c 16-ти битными данными, идущими от двух АЦП с частотой 100 кГц, соответственно с одной уставкой и с другой, т.е. два канала сравнения. Необходимо что-бы прошли подряд три сравнения >= в любом из двух каналов для формирования единичного строба выхода с компаратора. Помогите пожалуйста написать это на VHDL. Я не силён в программировании, но наверно так надо? Помогите... library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity STROKE is port ( clk : in std_logic; a, r, b_1, d_1: in bit_vector (15 downto 0); stroke_1: out std_logic:= '0'; ); end STROKE; architecture kod of STROKE is signal m: bit:='0'; begin process (clk) variable s: integer range 1 to 4:= 1; begin if ((r >= b_1) or (a >= d_1)) then m <= '1'; if (rising_edge(clk) and m = '1' ) then s := s + 1; end if; end if; if (s = 3) then stroke_1 <= '1'; end if; end process; end kod;
×
×
  • Создать...