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

Помогите с VHDL, а то я пока лмер...

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.

А как правильно сделать не знаю.

Поможите плз :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Типа делитель частоты на число, которое не 2 в степени n.

Когда счетчик насчитает столько, сколоко я ему сказал, mks должен перейти в другое состояние. Тока не работает.

Проще всего использовать готовую функцию Tools/MegaWizard arithmetics/LPM_COUNTER

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Типа делитель частоты на число, которое не 2 в степени n.

Когда счетчик насчитает столько, сколоко я ему сказал, mks должен перейти в другое состояние. Тока не работает.

Проще всего использовать готовую функцию Tools/MegaWizard arithmetics/LPM_COUNTER

Спасибо, мне хотелось бы именно руками, это тока начало, я к нему потом еще много чего прикручу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ндя скобки перепутал :)

Все поправимо. Есть кнопка "Edit".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все поправимо. Есть кнопка "Edit".

спасибо не заметил :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to des00 :a14:

Спасибо, после небольшой правки все заработало!

И за критику спасибо! Я пока тока учусь, решил забить на AHDL и прейти на VHDL, пока многого не понимаю. :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...