Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: СoolRunner-II XC2C256
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
x66
имеется vhdl код
library ieee;
Library UNISIM;
use UNISIM.vcomponents.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity counter4 is
port (rst : in std_logic;
clk : in std_ulogic;
count : out std_logic_vector (3 downto 0);
CLKDV16, CLKDV256 : inout std_ulogic);
end counter4;

architecture behav of counter4 is
signal cnt: std_logic_vector (3 downto 0);
begin
CLK_DIV16_inst : CLK_DIV16
port map (
CLKDV => CLKDV16, -- Divided clock output
CLKIN => clk -- Clock input
);
CLK_DIV16_instt : CLK_DIV16
port map (
CLKDV => CLKDV256, -- Divided clock output
CLKIN => CLKDV16 -- Clock input
);

process (CLKDV256, cnt, rst)
begin
if (rst = '1') then
cnt <= (others => '0');
elsif (CLKDV256'event and CLKDV256 = '1') then
cnt <= cnt + '1';
end if;
end process;
count <= cnt;
end behav;



Ошибок не выдает, но проблема возникает при создании .jed файла, не хочет приписывать ножки. В симуляторе программа работает нормально. Если кто знает в чем проблема просьба помочь.
bogaev_roman
Цитата(x66 @ Jun 9 2010, 16:24) *
Ошибок не выдает, но проблема возникает при создании .jed файла, не хочет приписывать ножки. В симуляторе программа работает нормально. Если кто знает в чем проблема просьба помочь.

Я конечно не силен в Vhdl, но меня смущает запись CLKDV16, CLKDV256 : inout std_ulogic
В верилоге подобная хрень работать бы не стала в таком виде (там специальные пины и обвязка потребовалась бы), эти две частоты обычными выходами быть не могут? Ну может я просто синтаксис подзабыл smile.gif
Maverick
Можно использовать например обычный счетчик.
В чем проблема? Для чего нужна программное изменение частоты? Предъявляемые требования?
Почитайте данный документ, может он даст Вам ответ
Дополнительно можете посмотреть здесь
Здесь уже поднимался подобный вопрос
PS По приведенному описанию сложно что-либо сказать...
x66
Дело в том что в программе пытаемся реализовать 4 битный счетчик, для этого используется 4 светодиода, которые есть на отладочной плате. Чтобы разглядеть то что ведется счет на диодах, необходима маленькая частота, иначе диоды просто горят. Поэтому решили программно уменьшить частоту делением на 16, для этого был взят шаблон с vhdl кодом. С этим шаблоном в симуляторе все работает отлично но в саму плиску залить прошивку не получается. Если есть другие способы уменьшения частоты то объясните пожалуйста, но желательно на основе этой проги сделать.
bogaev_roman
Цитата(x66 @ Jun 9 2010, 17:00) *
Дело в том что в программе пытаемся реализовать 4 битный счетчик, для этого используется 4 светодиода, которые есть на отладочной плате. Чтобы разглядеть то что ведется счет на диодах, необходима маленькая частота, иначе диоды просто горят. Поэтому решили программно уменьшить частоту делением на 16, для этого был взят шаблон с vhdl кодом. С этим шаблоном в симуляторе все работает отлично но в саму плиску залить прошивку не получается. Если есть другие способы уменьшения частоты то объясните пожалуйста, но желательно на основе этой проги сделать.

PS Стандартная лаба для студента 3-4 курса помигать светодиодиком имея кварц в 50МГц (при том что человек различает всего 50Гц smile.gif )
DCM на плате действительно нет. Пустите тогда обычный счетчик от 0 до 127 (скажем cnt_127) по исходной частоте, а тот который у Вас в программе cnt - добавьте еще условие чтобы он счелкал при cnt_127=127. Тогда Вы будете работать на исходной частоте, но переключаться счетчик будет на частоте в 256 раз меньшей (или 127?).
x66
Цитата(bogaev_roman @ Jun 9 2010, 17:09) *
DCM на плате действительно нет. Пустите тогда обычный счетчик от 0 до 127 (скажем cnt_127) по исходной частоте, а тот который у Вас в программе cnt - добавьте еще условие чтобы он счелкал при cnt_127=127. Тогда Вы будете работать на исходной частоте, но переключаться счетчик будет на частоте в 256 раз меньшей (или 127?).


Спасибо за совет. А можно примерный алгоритм программы?
Maverick
Цитата(x66 @ Jun 9 2010, 16:00) *
Дело в том что в программе пытаемся реализовать 4 битный счетчик, для этого используется 4 светодиода, которые есть на отладочной плате. Чтобы разглядеть то что ведется счет на диодах, необходима маленькая частота, иначе диоды просто горят. Поэтому решили программно уменьшить частоту делением на 16, для этого был взят шаблон с vhdl кодом. С этим шаблоном в симуляторе все работает отлично но в саму плиску залить прошивку не получается. Если есть другие способы уменьшения частоты то объясните пожалуйста, но желательно на основе этой проги сделать.

Если хотите увидеть мигание светодиодов, тогда возьмите последовательное соединение 2-х счетчиков.
Первый счетчик многоразрядный(разрядность зависит от тактовой частоты, например как Вы написали равна 16), а второй 4-разрядный счетчик ставите считать импульсы приходящего с N-разряда (для Вас 16 разряд) многоразрядного разрядного счетчика (для Вас тогда 16 битный счетчик).
ЗЫ Делайте так ,чтобы длительность импульсов, которые идут на светодиоды была соизмерима единицами секунд.
ЗЫ ЗЫ Вместо многоразрядного счетчика можно использовать это
x66
Большое спасибо за помощь, по пробую реализовать проект по вашим советам
bogaev_roman
Цитата(x66 @ Jun 9 2010, 17:14) *
Спасибо за совет. А можно примерный алгоритм программы?

Я не силен в VHDL так что будете проверять сами, но примерно так
Код
process (clk, cnt_127, rst)
begin
if (rst = '1') then
cnt_127 <= (others => '0');
elsif (clk'event and clk = '1') then
cnt_127 <= cnt_127 + '1';
end if;
//счетчик на 128

Код
process (clk,cnt_127, cnt, rst)
begin
if (rst = '1') then
cnt <= (others => '0');
elsif (clk'event and clk = '1') then
if (cnt_127 = '127') then
cnt <= cnt + '1';
end if;
end if;
end process;
//счетчик срабатывает только при cnt_127=127
Или еще проще - сделать только один счетчик на 10 разрядов и выводить только старшие разряды на диоды
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.