VHDL фазовращатель на ПЛИС
Цифровой фазовращатель это один из основных модулей фазосдвигающего устройства которое применяется в имитаторе гидроакустических сигналов. Работает фазовращатель достаточно просто. По фронтам и спадам изначального сигнала формируются импульсы загрузки счетчика который отсчитывает необходимую задержку, формируя таким образом фазовый сдвиг фронтов и спадов сигнала.
VHDL код фазовращателя представлен ниже по тексту
--------------------------------------------------------------------
-- фазовращатель
--------------------------------------------------------------------
-- File : shift
-- Site : http://acvarif.info
-- Date : 27/09/14
-- Version : 1.0
--------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity shift is
port
(
-- общий срос
rst : in std_logic ;
-- частота
clk : in std_logic ;
-- сдвиг
shdata : in std_logic_vector(4 downto 0);
--
short_out : out std_logic;
--
shift_out : out std_logic;
--
clk32_out : out std_logic
) ;
end shift;
architecture behav of shift is
--
signal clkdiv : std_logic_vector(4 downto 0);
--
signal shiftdiv : std_logic_vector(4 downto 0);
--
signal clk32x : std_logic;
--
signal short : std_logic;
--
signal q_out : std_logic;
--
signal shift : std_logic;
begin
-- делитель
process (rst,clk)
begin
if rst = '1' then
clkdiv <= (others => '0');
elsif clk'event and clk = '1' then
clkdiv <= clkdiv + 1;
end if ;
end process ;
clk32x <= clkdiv(4);
clk32_out <= clk32x;
-- короткие по фронтам и срезам
process (rst,clk32x)
begin
if rst = '1' then
q_out <= '0';
short <= '0';
elsif clk'event and clk = '0' then
if clk32x = '1' then
q_out <= '1';
elsif clk32x = '0' then
q_out <= '0';
end if ;
end if ;
short <= q_out xor clk32x;
end process ;
short_out <= short;
-- фазовращатель
process (rst,clk)
begin
if rst = '1' then
shiftdiv <= (others => '0');
elsif short = '1' then
shiftdiv <= shdata;
elsif clk'event and clk = '1' then
if shiftdiv >= 0 then
shiftdiv <= shiftdiv - 1;
end if;
end if ;
end process ;
process (rst,clk)
begin
if rst = '1' then
shift <= '0';
elsif shiftdiv(4)'event and shiftdiv(4) = '1' then
if clk32x = '1' then
shift <= '1';
elsif clk32x = '0' then
shift <= '0';
end if ;
end if ;
end process ;
shift_out <= shift;
end behav;
Для наглядности выбрана частота 2.88 мГц которая поделена на 32(clk32_out). Далее полученный сигнал необходимо двигать по фазе с шагом в один период исходной частоты. Величина сдвига определяется входным регистром shdata, причем так, что 0 - это сдвиг на один период исходной частоты. На картинке 12 - сдвиг на 13 периодов исходной частоты.
Для постороения многоканального фазовращателя необходимо создавать ветви где каждая последующая будет продолжением предыдущей. Проще говоря фазовращатели нужно соединять последовательно друг за другом. Кстати таким образом можно вращать фазу любого сигнала в том числе ЛЧМ.
Электроника :
- Техника электроника (11)
- Полезная электроника (4)
- Электроника для всех (5)
- Техника для дома (6)
- Cхемотехника ПЛИС (11)
- Пректирование PCAD (4)
Программирование :
- Микроконтроллеры (9)
- ПЛИС VHDL Verilog (29)
- C++ Builder (7)
- Visual Studio C++ C# (7)
- Java programming (7)
- Matlab programming (4)
Сайтостроение :
- Сайтостроение HTML (5)
- Сайтостроение PHP (8)
- PHP CMS на файлах (3)
- Web инструменты (9)
- Полезное вебмастеру (11)
- SEO раскрутка сайта (4)
- PHP скрипты (3)
Реклама :
Книги и учебники :
- Шаблоны сайтов (6)
- Книги и учебники (2)
Компьютер и интернет :
Поиск по сайту :
Реклама :
Облако меток :
Бесплатная подписка :
Статистика :
- Популярность (3)
- Посещаемость (3)
- Поисковые запросы (3)