Рефераты. Устройство разделения цифрового потока данных

При необходимости на входе устанавливаются буферные элементы.

Конденсаторы C1-C24 устанавливаются непосредственно возле выводов питания микросхем. C1-C12 – конденсаторы с твердым электролитом SANYO Os-Con SA 10m x 6.3V, С13-С24 – керамические конденсаторы для поверхностного монтажа типоразмера 1206, емкостью 100n и группой ТКЕ X7R. Такой выбор обусловливает максимальную эффективность подавления помех по питанию при сохранении относительно невысокой стоимости устройства.

 

2.2.3 Общие замечания к схемам

Вход схем RESET подключается к генератору сброса системы. Активным уровнем сброса является уровень логического "0". Данный узел может быть выполнен, к примеру, на микросхеме ADM707.

Несмотря на то, что микросхемы ЦАП часто имеют питание цифровой части 5 V, имеет смысл выделить для них отдельный источник питания, а не использовать один источник для схемы разделения цифрового потока и ЦАП одновременно. Это позволит уменьшить уровень помех, проникающих из цифровой части микросхемы ЦАП в аналоговую часть устройства и улучшит звучание системы.

 

Часть 3. Временные диаграммы

 

3.1 Временная диаграмма работы устройства разделения данных для микросхемы ЦАП AD1851


Рис. 12. - Временная диаграмма работы устройства разделения данных для микросхемы ЦАП AD1851

 

3.2 Временная диаграмма работы устройства разделения данных для микросхемы ЦАП AD1852


Рис. 13. - Временная диаграмма работы устройства разделения данных для микросхемы ЦАП AD1852

Часть 4. Реализация схемы в проекте VHDL


Поскольку полученные схемы не всегда удобно размещать в конечном устройстве ввиду их громоздкости, имеет смысл создать проект на языке VHDL и составить код для программирования кристалла ПЛМ. Помимо значительного сокращения занимаемой на плате площади это позволит также поднять общее быстродействие модуля разделения потоков данных, снизить наводимые цифровые помехи, промоделировать устройство без пайки.

Коды на языке VHDL представлены ниже с краткими пояснениями, где это необходимо.

Для начала выберем необходимые компоненты и составим их модели:

--Components.vhd

--16-bit Serial to Parallel Shift Register with asynchronous reset


library ieee ;

use ieee.std_logic_1164.all ;

entity SPREG16R is

port ( RST : in std_logic ;

CLK : in std_logic ;

SI : in std_logic ;

Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8 : out std_logic ;

Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0 : out std_logic

) ;

end SPREG16R ;

architecture v1 of SPREG16R is

signal sreg16 : std_logic_vector (15 downto 0) ;

begin

process (RST,CLK)

begin

if RST = '1' then

sreg16 <= (others => '0') ;

elsif CLK = '1' and CLK'event then

sreg16 <= sreg16(14 downto 0) & SI ;

end if ;

end process ;

Q15 <= sreg16(15) after 1 ns ;

Q14 <= sreg16(14) after 1 ns ;

Q13 <= sreg16(13) after 1 ns ;

Q12 <= sreg16(12) after 1 ns ;

Q11 <= sreg16(11) after 1 ns ;

Q10 <= sreg16(10) after 1 ns ;

Q9 <= sreg16(9) after 1 ns ;

Q8 <= sreg16(8) after 1 ns ;

Q7 <= sreg16(7) after 1 ns ;

Q6 <= sreg16(6) after 1 ns ;

Q5 <= sreg16(5) after 1 ns ;

Q4 <= sreg16(4) after 1 ns ;

Q3 <= sreg16(3) after 1 ns ;

Q2 <= sreg16(2) after 1 ns ;

Q1 <= sreg16(1) after 1 ns ;

Q0 <= sreg16(0) after 1 ns ;

end v1 ;


--32-bit Serial to Parallel Shift Register with asynchronous reset


library ieee ;

use ieee.std_logic_1164.all ;

entity SPREG32R is

port ( RST : in std_logic ;

CLK : in std_logic ;

SI : in std_logic ;

Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24 : out std_logic;

Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16 : out std_logic;

Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8 : out std_logic ;

Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0 : out std_logic

) ;

end SPREG32R ;

architecture v1 of SPREG32R is

signal sreg32 : std_logic_vector (31 downto 0) ;

begin

process (RST,CLK)

begin

if RST = '1' then

sreg32 <= (others => '0') ;

elsif CLK = '1' and CLK'event then

sreg32 <= sreg32(30 downto 0) & SI ;

end if ;

end process ;

Q31 <= sreg32(31) after 1 ns ;

Q30 <= sreg32(30) after 1 ns ;

Q29 <= sreg32(29) after 1 ns ;

Q28 <= sreg32(28) after 1 ns ;

Q27 <= sreg32(27) after 1 ns ;

Q26 <= sreg32(26) after 1 ns ;

Q25 <= sreg32(25) after 1 ns ;

Q24 <= sreg32(24) after 1 ns ;

Q23 <= sreg32(23) after 1 ns ;

Q22 <= sreg32(22) after 1 ns ;

Q21 <= sreg32(21) after 1 ns ;

Q20 <= sreg32(20) after 1 ns ;

Q19 <= sreg32(19) after 1 ns ;

Q18 <= sreg32(18) after 1 ns ;

Q17 <= sreg32(17) after 1 ns ;

Q16 <= sreg32(16) after 1 ns ;

Q15 <= sreg32(15) after 1 ns ;

Q14 <= sreg32(14) after 1 ns ;

Q13 <= sreg32(13) after 1 ns ;

Q12 <= sreg32(12) after 1 ns ;

Q11 <= sreg32(11) after 1 ns ;

Q10 <= sreg32(10) after 1 ns ;

Q9 <= sreg32(9) after 1 ns ;

Q8 <= sreg32(8) after 1 ns ;

Q7 <= sreg32(7) after 1 ns ;

Q6 <= sreg32(6) after 1 ns ;

Q5 <= sreg32(5) after 1 ns ;

Q4 <= sreg32(4) after 1 ns ;

Q3 <= sreg32(3) after 1 ns ;

Q2 <= sreg32(2) after 1 ns ;

Q1 <= sreg32(1) after 1 ns ;

Q0 <= sreg32(0) after 1 ns ;

end v1 ;


--64-bit Serial to Parallel Shift Register with asynchronous reset


library ieee ;

use ieee.std_logic_1164.all ;

entity SPREG64R is

port ( RST : in std_logic ;

CLK : in std_logic ;

SI : in std_logic ;

Q63,Q62,Q61,Q60,Q59,Q58,Q57,Q56 : out std_logic;

Q55,Q54,Q53,Q52,Q51,Q50,Q49,Q48 : out std_logic;

Q47,Q46,Q45,Q44,Q43,Q42,Q41,Q40 : out std_logic;

Q39,Q38,Q37,Q36,Q35,Q34,Q33,Q32 : out std_logic;

Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24 : out std_logic;

Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16 : out std_logic;

Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8 : out std_logic;

Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0 : out std_logic

) ;

end SPREG64R ;

architecture v1 of SPREG64R is

signal sreg64 : std_logic_vector (63 downto 0) ;

begin

process (RST,CLK)

begin

if RST = '1' then

sreg64 <= (others => '0') ;

elsif CLK = '1' and CLK'event then

sreg64 <= sreg64(62 downto 0) & SI ;

end if ;

end process ;

Q63 <= sreg64(63) after 1 ns ;

Q62 <= sreg64(62) after 1 ns ;

Q61 <= sreg64(61) after 1 ns ;

Q60 <= sreg64(60) after 1 ns ;

Q59 <= sreg64(59) after 1 ns ;

Q58 <= sreg64(58) after 1 ns ;

Q57 <= sreg64(57) after 1 ns ;

Q56 <= sreg64(56) after 1 ns ;

Q55 <= sreg64(55) after 1 ns ;

Q54 <= sreg64(54) after 1 ns ;

Q53 <= sreg64(53) after 1 ns ;

Q52 <= sreg64(52) after 1 ns ;

Q51 <= sreg64(51) after 1 ns ;

Q50 <= sreg64(50) after 1 ns ;

Q49 <= sreg64(49) after 1 ns ;

Q48 <= sreg64(48) after 1 ns ;

Q47 <= sreg64(47) after 1 ns ;

Q46 <= sreg64(46) after 1 ns ;

Q45 <= sreg64(45) after 1 ns ;

Q44 <= sreg64(44) after 1 ns ;

Q43 <= sreg64(43) after 1 ns ;

Q42 <= sreg64(42) after 1 ns ;

Q41 <= sreg64(41) after 1 ns ;

Q40 <= sreg64(40) after 1 ns ;

Q39 <= sreg64(39) after 1 ns ;

Q38 <= sreg64(38) after 1 ns ;

Q37 <= sreg64(37) after 1 ns ;

Q36 <= sreg64(36) after 1 ns ;

Q35 <= sreg64(35) after 1 ns ;

Q34 <= sreg64(34) after 1 ns ;

Q33 <= sreg64(33) after 1 ns ;

Q32 <= sreg64(32) after 1 ns ;

Q31 <= sreg64(31) after 1 ns ;

Q30 <= sreg64(30) after 1 ns ;

Q29 <= sreg64(29) after 1 ns ;

Q28 <= sreg64(28) after 1 ns ;

Q27 <= sreg64(27) after 1 ns ;

Q26 <= sreg64(26) after 1 ns ;

Q25 <= sreg64(25) after 1 ns ;

Q24 <= sreg64(24) after 1 ns ;

Q23 <= sreg64(23) after 1 ns ;

Q22 <= sreg64(22) after 1 ns ;

Q21 <= sreg64(21) after 1 ns ;

Q20 <= sreg64(20) after 1 ns ;

Q19 <= sreg64(19) after 1 ns ;

Q18 <= sreg64(18) after 1 ns ;

Q17 <= sreg64(17) after 1 ns ;

Q16 <= sreg64(16) after 1 ns ;

Q15 <= sreg64(15) after 1 ns ;

Q14 <= sreg64(14) after 1 ns ;

Q13 <= sreg64(13) after 1 ns ;

Q12 <= sreg64(12) after 1 ns ;

Q11 <= sreg64(11) after 1 ns ;

Q10 <= sreg64(10) after 1 ns ;

Q9 <= sreg64(9) after 1 ns ;

Q8 <= sreg64(8) after 1 ns ;

Q7 <= sreg64(7) after 1 ns ;

Q6 <= sreg64(6) after 1 ns ;

Q5 <= sreg64(5) after 1 ns ;

Q4 <= sreg64(4) after 1 ns ;

Q3 <= sreg64(3) after 1 ns ;

Q2 <= sreg64(2) after 1 ns ;

Q1 <= sreg64(1) after 1 ns ;

Q0 <= sreg64(0) after 1 ns ;

end v1 ;


-- D Flip Flop w asynchronous reset


library ieee ;

use ieee.std_logic_1164.all ;

entity DFFR is

port (RST : in std_logic ;

CLK : in std_logic ;

D : in std_logic ;

Q : out std_logic ;

QN : out std_logic

) ;

end DFFR ;

architecture v1 of DFFR is

signal n1 : std_logic ;

begin

process (RST,CLK)

begin

if RST = '1' then

n1 <= '0' after 1 ns ;

elsif (CLK'event and CLK='1') then

n1 <= D after 1 ns ;

end if ;

end process ;

Q <= n1 after 1 ns ;

QN <= not n1 after 1 ns ;

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.