M_A 0 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; -- Entity Declaration ENTITY Timer IS -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! PORT ( clk : IN STD_LOGIC; clr : IN STD_LOGIC; microseconds : OUT STD_LOGIC_VECTOR(9 downto 0); mks : OUT STD_LOGIC ); -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END Timer; -- Architecture Body ARCHITECTURE Timer_architecture OF Timer IS signal Counts: integer range 0 to 20; signal m: std_logic; BEGIN process(clk, clr, Counts) begin if (clr = '1' and clk = '1') then Counts <= 0; elsif(Counts = 20) then Counts <= 0; m <= not m; elsif(rising_edge(clk)) then Counts <= Counts + 1; end if; end process; microseconds <= conv_std_logic_vector(Counts, 10); mks <= m; END Timer_architecture; Типа делитель частоты на число, которое не 2 в степени n. Когда счетчик насчитает столько, сколоко я ему сказал, mks должен перейти в другое состояние. Тока не работает. Квартус дает ворнинг: Warning: VHDL Process Statement warning at Timer.vhd(58): signal or variable m may not be assigned a new value in every possible path through the Process Statement. Signal or variable m holds its previous value in every path with no new value assignment, which may create a combinational loop in the current design. И при симуляции нога висит постоянно в 1. А как правильно сделать не знаю. Поможите плз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба Типа делитель частоты на число, которое не 2 в степени n. Когда счетчик насчитает столько, сколоко я ему сказал, mks должен перейти в другое состояние. Тока не работает. Проще всего использовать готовую функцию Tools/MegaWizard arithmetics/LPM_COUNTER Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_A 0 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба Типа делитель частоты на число, которое не 2 в степени n. Когда счетчик насчитает столько, сколоко я ему сказал, mks должен перейти в другое состояние. Тока не работает. Проще всего использовать готовую функцию Tools/MegaWizard arithmetics/LPM_COUNTER <{POST_SNAPBACK}> Спасибо, мне хотелось бы именно руками, это тока начало, я к нему потом еще много чего прикручу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба ARCHITECTURE Timer_architecture OF Timer IS signal Counts: integer range 0 to 20; signal m: std_logic; BEGIN process(clk, clr, Counts) -- зачем в процессе столько сигналов чувствительности ? begin if (clr = '1' and clk = '1') then -- хмм странное условие Counts <= 0; elsif(Counts = 20) then -- у счетчика 2 сброса ? асинхронный и синхронный ? не есть гут Counts <= 0; m <= not m; -- лучше вынестив либо в отдельный процес, либо расписать по всем условиям elsif(rising_edge(clk)) then Counts <= Counts + 1; -- ну а сам счет вроде пральный end if; end process; имхо лучше так ARCHITECTURE Timer_architecture OF Timer IS signal Counts: integer range 0 to 20; signal m: std_logic; signal cnt_clr : std_logic; BEGIN cnt_clr <= '1' when (counter = 20) else '0'; -- выделено в отдельный сигнал, что бы можно было конвееризировать если в что process(clk) begin if(rising_edge(clk)) then if (clr = '1') then m <= '0'; elsif (count_clr = '1') then m <= not m; if (clr = '1')or(count_clr = '1') then Counts <= 0; else Counts <= Counts + 1; end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба ндя скобки перепутал :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба ндя скобки перепутал :) <{POST_SNAPBACK}> Все поправимо. Есть кнопка "Edit". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба Все поправимо. Есть кнопка "Edit". спасибо не заметил :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_A 0 14 октября, 2005 Опубликовано 14 октября, 2005 · Жалоба to des00 :a14: Спасибо, после небольшой правки все заработало! И за критику спасибо! Я пока тока учусь, решил забить на AHDL и прейти на VHDL, пока многого не понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться