реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Счетчик по модулю N
Joker
сообщение Apr 4 2005, 19:45
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 12-12-04
Пользователь №: 1 457



Я уже задавал этот вопрос но он видно снесся.
Хотелось бы узнать кто как делает в Quartuse счетчики по модулю N (ну скажем 50 - 100).Просто если использовать LPM COUNTER то частота получается очень маленькая.Я чтоб увеличить частоту беру счетчик по модулю 2 и после ставлю дешифратор на нужный коэфф.пересчета а с выхода дешифратора на SCLR счетчика.Получается примерно в 1.5 раза быстрее но вобщемто места больше занимает.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Apr 5 2005, 06:19
Сообщение #2


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Joker @ Apr 4 2005, 22:45)
Я уже задавал этот вопрос но он видно снесся.
Хотелось бы узнать кто как делает в Quartuse счетчики по модулю N (ну скажем 50 - 100).Просто если использовать LPM COUNTER то частота получается очень маленькая.Я чтоб увеличить частоту беру счетчик по модулю 2 и после ставлю дешифратор на нужный коэфф.пересчета а с выхода дешифратора на SCLR счетчика.Получается примерно в 1.5 раза быстрее но вобщемто места больше занимает.
*


Ищите в Goggle carry look-ahead counters
http://www.telesys.ru/wwwboards/fpga/60/messages/21741.shtml


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Joker
сообщение Apr 7 2005, 21:13
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 12-12-04
Пользователь №: 1 457



Цитата(Victor® @ Apr 5 2005, 09:19)
Цитата(Joker @ Apr 4 2005, 22:45)
Я уже задавал этот вопрос но он видно снесся.
Хотелось бы узнать кто как делает в Quartuse счетчики по модулю N (ну скажем 50 - 100).Просто если использовать LPM COUNTER то частота получается очень маленькая.Я чтоб увеличить частоту беру счетчик по модулю 2 и после ставлю дешифратор на нужный коэфф.пересчета а с выхода дешифратора на SCLR счетчика.Получается примерно в 1.5 раза быстрее но вобщемто места больше занимает.
*


Ищите в Goggle carry look-ahead counters
http://www.telesys.ru/wwwboards/fpga/60/messages/21741.shtml
*


ep1k30qc208-3 -- 200Мгц по моей схеме
Go to the top of the page
 
+Quote Post
peter-buganov
сообщение May 6 2005, 21:33
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 6-05-05
Пользователь №: 4 801



Для малых модулей счета (малых N) быстрее, чем на lpm_counter, получаются счетчики, написанные в лоб. А для больших quartus сам подставит lpm_counter вместо вашего функционального блока


library ieee, work;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity pp_counter is
generic
(
width : integer := 8;
modulus : integer := 250;
avalue : integer := 15;
svalue : integer := 0
);
port
(
din : in std_logic_vector (width-1 downto 0);
sload : in std_logic := '0';
sset : in std_logic := '0';
sclr : in std_logic := '0';
updown : in std_logic := '1'; -- '0' - down, '1' - up
cnt_en : in std_logic;
clk : in std_logic;
aload : in std_logic := '0';
aclr : in std_logic := '0';
aset : in std_logic := '0';
dout : out std_logic_vector (width-1 downto 0);
cout : out std_logic;
is_zero : out std_logic
);
end pp_counter;

architecture behav of pp_counter is
signal value : unsigned (width-1 downto 0);
begin

process (din, cnt_en, clk, aclr, aset, aload)
begin
if (aclr='1') then
value <= (others => '0');
elsif (aset='1') then
value <= to_unsigned(avalue, width);
elsif (aload='1') then
value <= unsigned(din);
elsif (cnt_en='1' and rising_edge(clk))then
if (sclr='1') then
value <= (others => '0');
elsif (sset='1') then
value <= to_unsigned(svalue, width);
elsif (sload='1') then
value <= unsigned(din);
else
if (updown='1') then
if (value=(modulus-1)) then
value <= (others => '0');
else
value <= value + to_unsigned(1, width);
end if;
else
if (value=0) then
value <= to_unsigned(modulus-1, width);
else
value <= value - to_unsigned(1, width);
end if;
end if;
end if;
end if;
end process;

dout <= std_logic_vector(value);

cout <= '1' when (value=(modulus-1))
else '0';

is_zero <= '1' when (value=0)
else '0';

end behav;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 18:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016