Jump to content
    

Таймер задержки на VHDL

Сорри, совсем VHDL забыл. :)

Теперь поподробнее про длительность set. Его длительность равна периоду Clk (т.е. в последовательности ...01010101... длине 01)? Или половине периода (т.е. в последовательности 01010101 длине 0, или длине 1)? Относительно clk - set синхронный сигнал, или полностью асинхронный (т.е. можно ли его анализировать по переходу сигнала clk из 0 в 1, или из 1 в 0) ?

Share this post


Link to post
Share on other sites

To daemonDX

Вы правильно "перевели" (с ошибками ) на VHDL предложенную схему. А теперь, получается ( задавая такие вопросы) Вы не понимали, что делали.

Или есть желание запутать товарища окончательно.

Share this post


Link to post
Share on other sites

Наверное я просто когда говорил о длительности сет неправильно выразился, но вроде бы приводил пример выше.В этой схеме сет и цлк идут от одного тактового генератора, просто сет до этого проходит через делитель частоты и поэтому имеет более низкую частоту и соответственно больший период при той же длительности сигнала, например

00110011001100110011 CLK

00110000001100000011 SET

Edited by darkniisiis

Share this post


Link to post
Share on other sites

То что он работает при

00110011001100110011 CLK

00111100001111000011 SET

я не спорю, с этим всё ок, но длительность SET я не имею права изменять, так же как и CLK, ибо они взаимозависимы, как я уже описал выше. Нужно описать именно под последовательность типа

 

00110011001100110011 CLK

00110000001100000011 SET

 

т.е частоты имеют зависимость SET=CLK/x, где х от 1 до 65536

Share this post


Link to post
Share on other sites

Ну вот и определились с set. :) А Вы, sazh, говорите, что запутываю. Кстати, ваш код переписывал вслепую, не особо следя за его логикой :) Мне уже было достаточно воспоминания о давнем знакомстве с VHDL :) .

To darkniisiis:

А теперь вернемся к нашим баранам, т.е. к set. Вы уверены, что делитель частоты работает именно так, с изменением скважности сигнала (т.е. в вашем примере из входного сигнала со скважностью 50/

50 (50% времени высокий уровень, 50% времени низкий уровень) получаем сигнал со скважностью 75/25)? Должен бы работать так, как говорит sazh, хотя я пока работал только со встроенными в FPGA Xilinx DCM, может и другое в мире есть :) .

00110011001100110011 CLK

00110000001100000011 SET

И про то, что set получается с внешнего устройства, а не с триггера внутри устройства, следовало упомянуть.

Судя по последним новостям, set - периодический сигнал, асинхронный для clk. Так таймер должен задерживать всю последовательность set ? Тогда это не таймер, а управляемая линия задержки. Нарисуйте, плиз, выходной сигнал с устройства для вашего примера с парой-тройкой значений x (SET=CLK/x), ну и парой малых значений prog, для разъяснения ситуации (а то что-то чем дальше, тем темнее :) ). Прямо в используемом в предыдущем формате (по три строки, clk/set/pinout)

Share this post


Link to post
Share on other sites

умножьте в плисе частоту на 2 или на 4 и задерживайте :)

 

хотя очень странно с _делителя_ частоты получать _такой_ SET...

Share this post


Link to post
Share on other sites

Наверное я просто когда говорил о длительности сет неправильно выразился, но вроде бы приводил пример выше.В этой схеме сет и цлк идут от одного тактового генератора, просто сет до этого проходит через делитель частоты и поэтому имеет более низкую частоту и соответственно больший период при той же длительности сигнала, например

00110011001100110011 CLK

00110000001100000011 SET

 

Может проще сначала нарисоовать сигналы на входе и на выходе(ну хоть на бумаге) , но осмысленно.

А потом начинать огород городить.

Share this post


Link to post
Share on other sites

00110011001100110011 CLK

00110000001100000011 SET

Получается, что длительность set равна половине периода Clk.

Нетрудно привязать set к клоку.

Вот только на выходе схемы, которая фрмирует сигналы по переднему фронту clk, можно получить сигналы, кратные целому периоду клок.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

 

entity TIMER_AGAIN is

Port ( set_n : in STD_LOGIC;

prog : in STD_LOGIC_VECTOR (15 downto 0);

clk : in STD_LOGIC;

pinout : out STD_LOGIC);

end TIMER_AGAIN;

 

 

architecture Behavioral of TIMER_AGAIN is

signal cnt : std_logic_vector( 15 downto 0 );

signal set_s : std_logic;

signal enable : std_logic;

signal delayed_set : std_logic;

 

begin

 

process( CLK, set_n )

begin

if ( set_n = '0' ) then

set_s <= '1';

elsif CLK'event and CLK = '1' then

set_s <= '0';

end if;

end process;

 

process( CLK )

begin

if CLK'event and CLK = '1' then

 

if ( set_s = '1' ) then

enable <= '1';

elsif ( cnt = 1 )then

enable <= '0';

end if;

 

if ( set_s = '1' ) then

cnt <= prog;

elsif ( enable = '1' ) then

cnt <= cnt - 1;

end if;

 

if ( cnt = 1 )then

delayed_set <= '1';

else

delayed_set <= '0';

end if;

 

end if;

end process;

pinout <= delayed_set;

end Behavioral;

Share this post


Link to post
Share on other sites

Уважаемые, а можно ли вообще анализировать _такой_ SET по _такому_ CLK??? как минимум на 2 надо помножить ;)

 

да, вот решение для xilinx virtex2, только писать не буду :)

берем CLK, умножаем на 2 или больше(Пусть в N раз). Берем (N*65536/(емкость BRAM)) штук брамин в однобитном режиме. Играемся адресами, и получаем нужную задержку :). Если нужно задержать на 1, то просто регистрим, ну или можно SRL16 вставить. Зависит от того на какой макс. частоте работать можно.

 

З.Ы. Развели тут флейм :))))

Share this post


Link to post
Share on other sites

Развели тут флейм /////

Вы сейчас предложили спилить сосну и сделать из нее спичку.

Share this post


Link to post
Share on other sites

Вы сейчас предложили спилить сосну и сделать из нее спичку.

не понял смысл афоризма :(

 

UPD: а, да, дошло :))) возможно :) но в любом случае, что на счетчике, что на памяти, нужен хотя бы двойной CLK. Ну и еще я не очень понимаю как на счетчиках (даже на CLK*2) задержать, скажем, SET в случае SET = CLK/65536...

Share this post


Link to post
Share on other sites

Я не знаю задачи, которую здесь пытаются решить. Но знаю. что она укладывается в элементарный счетчик и пара тройка триггеров.

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

Share this post


Link to post
Share on other sites

:))))) просто по моему скромному разумению, нужно тогда хотя бы вычислить период SET в тактах дизайна. А память, хотя, конечно, это нельзя назвать экономным использованием ресурсов, позволяет не высчитывать период, который, если я правильно понимаю, не известен априори. :)

 

Ну вот и меня втянули :) В смысле втянулся :)

Share this post


Link to post
Share on other sites

А я вот теперь запутался :) Если SET приходит периодически, как его задерживать на величину, большую периода прихода SET? в буфер складывать?

Т.е. условно SET приходит раз в 10 тактов, а prog = 16

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...