Простой счетчик VHDL на DE0-Nano

23.11.2015
По поводу данной заметки - я несколько часов ломал голову, чтобы разобраться в тонкостях работы счетчиков при описании ПЛИС и вот что из этого получилось.
Приведенный ниже пример счетчика на 1 Гц на мой взгляд наиболее четко показывает принцип параллельности в работе ПЛИС. При разборе данной схемы лучше начать с конца описания. На вывод FPGA, соответствующий входу светодиода Led0 подается напряжение, указанное в сигнальной переменной tmpLed. Последняя меняет свое значение на обратное при восходящем сигнале на сигнальной переменной clk_1Hz в описании второго процесса. Свое значение 0 или 1 переменная clk_1Hz принимает в первом процессе по условию (counter < 25000000). При достижении значения переменной Counter значения 25 млн clk_1Hz принимает значение 1 и счетчик сбрасывается. До наступления этого условия clk_1Hz содержит низкий логический уровень. Ну а операция приращения переменной Counter происходит каждый раз при восходящем фронте на входе clk_50MHz. Такой вот простой счетчик. И состоит он из 33 логических элементов.
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity Counter is
port(
clk_50MHz:  in std_logic;
LED0:   out std_logic
);
end entity;
 
architecture myArc of  Counter is 
 
signal counter : integer range 0 to 25000000;
signal clk_1hz : std_logic ;
signal tmpLed : std_logic ;
 
begin
 
process(clk_50MHz)
begin
if rising_edge(clk_50MHz) then
if (counter < 25000000) then 
counter <= counter + 1;
clk_1hz <= '0';
else counter <= 0;
clk_1hz <= '1';
end if;
end if;
end process;
 
process(clk_1hz)
begin
if rising_edge(clk_1hz) then
tmpLed <= not tmpLed;
end if;
end process;
 
LED0 <= tmpLed;
 
end myArc;
 
 
Нажав на соответствующий значок, Вы можете добавить эту заметку к себе на страничку в социальной сети
 

Если же вы хотите первыми узнавать о выходе моих новых статей, то можете заполнить следующую форму, вписав туда адрес своего электронного ящика:

 

 

© 2016 Дневник хорошего человека
Рейтинг@Mail.ru