Построить счетчик

Программируемая логика - это не так уж и сложно. Разберемся вместе.
Betatron
Родился
Сообщения: 3
Зарегистрирован: Вс сен 14, 2014 15:47:13

Построить счетчик

Сообщение Betatron »

Недавно начал освоение программирования ПЛИС ,появилась задача :имея тактовую частоту 50 МГц построить счетчик который выдаёт импульсы с частотой 56МГц .Честно говоря не знаю как подступиться даже,подскажите пожалуйста с чего начать хотя бы?=)
Реклама
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Построить счетчик

Сообщение Kavka »

Несколько раз прочитал, но так и не понял в чём проблема.
Основная тактовая 50МГц, а "считать" надо сигнал с частотой больше чем тактовая?
Телепатией не обладаю. Могу ещё пару бредовых догадок выдать. :)
Подробнее изложите задачу.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Аватара пользователя
Рязанцев Владислав
Мудрый кот
Сообщения: 1781
Зарегистрирован: Пн июн 24, 2013 23:00:42
Откуда: Казахстан

Re: Построить счетчик

Сообщение Рязанцев Владислав »

Счетчик считает импульсы, а не выдает их :))
Изображение
Ваши хотелки за ваши деньги
Betatron
Родился
Сообщения: 3
Зарегистрирован: Вс сен 14, 2014 15:47:13

Re: Построить счетчик

Сообщение Betatron »

Прошу прощения в задаче оказалась опечатка , необходимо получить 56КГц на выходе
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Построить счетчик

Сообщение просто КОТ »

Боюсь, что 50МГц не кратно 56кГц. Ближайший коэффициент 893, даст ошибку в 9Гц (0,016%). Но такой коэффициент будет сложно получить. Можно попробовать делить триггерами на 128. А потом десятичным счётчиком на 7. Это даст погрешность в 197Гц (0,352%), но очень просто реализуется. Устроит?
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Построить счетчик

Сообщение uldemir »

на ПЛИС делитель на 893 делается элементарно:

Код: Выделить всё

process (clk)
begin
  if clk'event and clk='1' then
    divider <= divider+1;
    if divider = 893 then
      divider <= (others => '0');
    end if;
  end if;
end process;
А остальное задача САПР'а. Но, подожём, что ТС скажет по своему заданию.
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Построить счетчик

Сообщение просто КОТ »

А разве ПЛИСки не в виде логических блоков программируются?
Я просто вообще с ними не работал...
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Построить счетчик

Сообщение uldemir »

В виде логических блоков. Но блоки очень маленькие. Или очень большие. Оперировать "десятичными счетчиками" в ПЛИС не рационально. Рациональнее сделать десятиразрядный счетчик, который тактируется параллельно и в котором обратные связи обеспечивают инкрементальный счет со сбросом по достижении 893. что, собственно, я и написал на VHDL. И в идельном случае это займет всего 10 макроячеек и будет работать на максимальной частоте - задержки будут минимальны, в отличие от последовательно включенных 7 триггеров.
Я просто вообще с ними не работал.
Оооо, советую начать. Вам понравится! это такое счастье, что можно запилить любую логику и совсем не быть связанным с "выпускаемой номенклатурой микросхем".
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Построить счетчик

Сообщение просто КОТ »

Честно говоря, я вообще чаще работал с железом аналоговым. и совсем недавно начал пытать микроконтроллеры. немного поигрался с AVRками... но вот послушал советы мудрых сего форума, и хочу ещё попробовать STM8. Поговаривают есть масса плюсов. Как поиграюсь с ними, попробую и с ПЛИСками поиграться. насколько я понял, на них можно получить очень быстрые штуки. А это, в сочетании с хорошим железом, даст массу перспектив.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Betatron
Родился
Сообщения: 3
Зарегистрирован: Вс сен 14, 2014 15:47:13

Re: Построить счетчик

Сообщение Betatron »

uldemir, мне очень не ловко , но я если честно понятие не имею как реализовать этот код, мне бы с помощью логикой разделить, но делить на 893 триггерами я к сожалению не умею.как их надо расположить, или где хотя бы примеры посмотреть таких заданий,почитать там всякое?=)
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Построить счетчик

Сообщение просто КОТ »

С помощью логики это будет 7 обычных Т-триггера подряд, а потом десятичный счётчик, где 8 выход закорочен на Reset.НО это не рационально.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Построить счетчик

Сообщение uldemir »

Хоть я апологет зайлинксов, но на этом сайте в обучалке про альтеру описан принцип как делать счетчики. Там, конечно, написано только до 4-х разрядного, но я думаю, что вы сможете расширить и до 10 разрядов. Но, поверьте, когда вы за(censored) рисовать 10 триггеров и обратные связи, и попутно искать, где в схеме вы накосячили, посмотрите на те 10 строчек, что я написал и подумайте, может, имеет смысл еще и VHDL изучить? Особенно, если вы на ПЛИС собираетесь сделать что-либо более серьёзное чем какой-то мрачный делитель.
MisterDi
Встал на лапы
Сообщения: 85
Зарегистрирован: Сб мар 13, 2010 13:52:10

Re: Построить счетчик

Сообщение MisterDi »

поверьте, когда вы за(censored) рисовать 10 триггеров и обратные связи, и попутно искать, где в схеме вы накосячили, посмотрите на те 10 строчек, что я написал и подумайте, может, имеет смысл еще и VHDL изучить?
Самое интересное, что эти 10 строчек вполне можно написать автоматически через мастер компонентов.
misterdi<@>i.ua
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: Построить счетчик

Сообщение misyachniy »

uldemir писал(а):на ПЛИС делитель на 893 делается элементарно:
....
К указанному делителю еще нужен декодер состояния счетчика.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Построить счетчик

Сообщение uldemir »

У вас есть телепатическая связь с TS? он давно пропал и этот делитель, похоже, его совсем не интересует.
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: Построить счетчик

Сообщение WolfTheGrey »

А как приподнять частоту? Имею на плате генераторы на 27б 48 и 50 мгц.
Если зайти в квартусе на мастер визард, то почему то мастер PLL блоков отключен.

Изображение

И добавлю......
На сайте марсахода нашел статью: http://www.marsohod.org/index.php/ourbl ... og/212-pll
Другая проблемма, пытаюсь добавить РЛЛ блок в проект а че квартус материться?!
Error (10170): Verilog HDL syntax error at timer.v(1) near text ""pll_144.v"; expecting "<"

Код: Выделить всё

include "pll_144.v" // 50mHz to 144mHz or 80mHz
 module timer
(
// DAC
input clock48,
output reg DAC_lr,
output reg DAC_data,
output reg DAC_bc............
.........

И еще вопрос в тему: как на хостинге Кото-Фотки раскидать картинки по папккам по тематике? то у меня там уже хаос начинается.
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: Построить счетчик

Сообщение misyachniy »

WolfTheGrey писал(а): Другая проблемма, пытаюсь добавить РЛЛ блок в проект а че квартус материться?!
Error (10170): Verilog HDL syntax error at timer.v(1) near text ""pll_144.v"; expecting "<"

Код: Выделить всё

include "pll_144.v" // 50mHz to 144mHz or 80mHz
 module timer
(
// DAC
input clock48,
output reg DAC_lr,
output reg DAC_data,
output reg DAC_bc............
.........
Директива "include" применяется длля включения констант и переопределений.
Вам нужно включить в проект экземпляр модуля и присоединить его входы/выходы.
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: Построить счетчик

Сообщение WolfTheGrey »

Вам нужно включить в проект экземпляр модуля и присоединить его входы/выходы.
А вот присоеденять входы и выходы я не умею :( Error (10663): Verilog HDL Port Connection error at timer.v(37): output or inout port "c0" must be connected to a structural net expression
Почему все так сложно? почему нельзя как в языке программирования C# ??

Код: Выделить всё

input reg clock,
output reg clock0, clock1, loc;
pll_144 pl(inclk0(clock), c0(clock0), c1(clock1), locked(loc));
модуль плл блока:
Спойлер

Код: Выделить всё

// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module pll_144 (
	inclk0,
	c0,
	c1,
	locked);

	input	  inclk0; // 50mhz 
	output	  c0;  // 144mHz 
	output	  c1;  // 80mHz 
	output	  locked;  // PLL activeclock 

	wire [4:0] sub_wire0;
	wire  sub_wire2;
	wire [0:0] sub_wire6 = 1'h0;
	wire [0:0] sub_wire3 = sub_wire0[0:0];
	wire [1:1] sub_wire1 = sub_wire0[1:1];
	wire  c1 = sub_wire1;
	wire  locked = sub_wire2;
	wire  c0 = sub_wire3;
	wire  sub_wire4 = inclk0;
	wire [1:0] sub_wire5 = {sub_wire6, sub_wire4};

	altpll	altpll_component (
				.inclk (sub_wire5),
				.clk (sub_wire0),
				.locked (sub_wire2),
				.activeclock (),
				.areset (1'b0),
				.clkbad (),
				.clkena ({6{1'b1}}),
				.clkloss (),
				.clkswitch (1'b0),
				.configupdate (1'b0),
				.enable0 (),
				.enable1 (),
				.extclk (),
				.extclkena ({4{1'b1}}),
				.fbin (1'b1),
				.fbmimicbidir (),
				.fbout (),
				.fref (),
				.icdrclk (),
				.pfdena (1'b1),
				.phasecounterselect ({4{1'b1}}),
				.phasedone (),
				.phasestep (1'b1),
				.phaseupdown (1'b1),
				.pllena (1'b1),
				.scanaclr (1'b0),
				.scanclk (1'b0),
				.scanclkena (1'b1),
				.scandata (1'b0),
				.scandataout (),
				.scandone (),
				.scanread (1'b0),
				.scanwrite (1'b0),
				.sclkout0 (),
				.sclkout1 (),
				.vcooverrange (),
				.vcounderrange ());
	defparam
		altpll_component.bandwidth_type = "AUTO",
		altpll_component.clk0_divide_by = 25,
		altpll_component.clk0_duty_cycle = 50,
		altpll_component.clk0_multiply_by = 72,
		altpll_component.clk0_phase_shift = "0",
		altpll_component.clk1_divide_by = 5,
		altpll_component.clk1_duty_cycle = 50,
		altpll_component.clk1_multiply_by = 8,
		altpll_component.clk1_phase_shift = "0",
		altpll_component.compensate_clock = "CLK1",
		altpll_component.inclk0_input_frequency = 20000,
		altpll_component.intended_device_family = "Cyclone IV E",
		altpll_component.lpm_hint = "CBX_MODULE_PREFIX=pll_144",
		altpll_component.lpm_type = "altpll",
		altpll_component.operation_mode = "NORMAL",
		altpll_component.pll_type = "AUTO",
		altpll_component.port_activeclock = "PORT_UNUSED",
		altpll_component.port_areset = "PORT_UNUSED",
		altpll_component.port_clkbad0 = "PORT_UNUSED",
		altpll_component.port_clkbad1 = "PORT_UNUSED",
		altpll_component.port_clkloss = "PORT_UNUSED",
		altpll_component.port_clkswitch = "PORT_UNUSED",
		altpll_component.port_configupdate = "PORT_UNUSED",
		altpll_component.port_fbin = "PORT_UNUSED",
		altpll_component.port_inclk0 = "PORT_USED",
		altpll_component.port_inclk1 = "PORT_UNUSED",
		altpll_component.port_locked = "PORT_USED",
		altpll_component.port_pfdena = "PORT_UNUSED",
		altpll_component.port_phasecounterselect = "PORT_UNUSED",
		altpll_component.port_phasedone = "PORT_UNUSED",
		altpll_component.port_phasestep = "PORT_UNUSED",
		altpll_component.port_phaseupdown = "PORT_UNUSED",
		altpll_component.port_pllena = "PORT_UNUSED",
		altpll_component.port_scanaclr = "PORT_UNUSED",
		altpll_component.port_scanclk = "PORT_UNUSED",
		altpll_component.port_scanclkena = "PORT_UNUSED",
		altpll_component.port_scandata = "PORT_UNUSED",
		altpll_component.port_scandataout = "PORT_UNUSED",
		altpll_component.port_scandone = "PORT_UNUSED",
		altpll_component.port_scanread = "PORT_UNUSED",
		altpll_component.port_scanwrite = "PORT_UNUSED",
		altpll_component.port_clk0 = "PORT_USED",
		altpll_component.port_clk1 = "PORT_USED",
		altpll_component.port_clk2 = "PORT_UNUSED",
		altpll_component.port_clk3 = "PORT_UNUSED",
		altpll_component.port_clk4 = "PORT_UNUSED",
		altpll_component.port_clk5 = "PORT_UNUSED",
		altpll_component.port_clkena0 = "PORT_UNUSED",
		altpll_component.port_clkena1 = "PORT_UNUSED",
		altpll_component.port_clkena2 = "PORT_UNUSED",
		altpll_component.port_clkena3 = "PORT_UNUSED",
		altpll_component.port_clkena4 = "PORT_UNUSED",
		altpll_component.port_clkena5 = "PORT_UNUSED",
		altpll_component.port_extclk0 = "PORT_UNUSED",
		altpll_component.port_extclk1 = "PORT_UNUSED",
		altpll_component.port_extclk2 = "PORT_UNUSED",
		altpll_component.port_extclk3 = "PORT_UNUSED",
		altpll_component.self_reset_on_loss_lock = "OFF",
		altpll_component.width_clock = 5;


endmodule
Изображение
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: Построить счетчик

Сообщение misyachniy »

Человек сам выбирает где и на чем зарабатывать деньги.
Можно писать на SystemC.

По Verilog, я много почерпнул с этого документа
http://www.lsi.upc.edu/~jordicf/Teachin ... yasulu.pdf

Так не объявляют экземпляр.
pll_144 pl(inclk0(clock), c0(clock0), c1(clock1), locked(loc));

Если названия цепей модуля указываются то нужно писать с точкой:
pll_144 pl(.inclk0(clock), .c0(clock0), .c1(clock1), .locked(loc));

Или без имени:
pll_144 pl(clock, clock0, clock1, loc);
tataff
Опытный кот
Сообщения: 796
Зарегистрирован: Вс ноя 09, 2008 12:10:59
Откуда: Москва

Re: Построить счетчик

Сообщение tataff »

Betatron, а какой функциональный состав ПЛИС? Не проще поделить 50МГц и 56Кгц до НОД = 1 КГц и умножить его на 56?
Объём энтузиазма обратно пропорционален объёму накопленных знаний и опыта.
Ответить

Вернуться в «ПЛИС»