impulsų generatorius, VHDL

A

anee_anil

Guest
Hi all,

I'm trying to do impulsų generatorius, kuri bus įgyvendinta CPLD
Idėja yra gauti išėjimo impulsų iš 80MHz laikrodis.

Dėl išėjimo dažnis yra nustatyta pagal 16-bitų duomenų ir laikrodis.
pvz 0000000000000001 rodo 12.5ns išėjimo dažnis
0000000000000010 rodo 25ns išėjimo dažnis.

Impulsų plotį, produkcija gaunama 10 bitų duomenų
pavyzdžiui, 0000000001 rodo 12.5ns impulsų plotis
0000000010 rodo 25ns impulsų plotis

ir bus 6 bitų įvedimo, per kurį mes galime pasirinkti 8 išvesties uostuose.
Kai mes Pasirinkite kitą signalą Ankstesnis signalas turėtų išlaikyti duomenis.subjektas pulse_gen yra
uostas (CLK: in std_logic;
freq_data: in std_logic_vector (15 downto 0);
pulse_width_data: in std_logic_vector (9 downto 0);
wave_sel: in std_logic_vector (5 downto 0);
out_wave: iš std_logic_vector (7 downto 0));
pabaigos subjektas;

 
Labas,
Tai impulsų pasikartojimo laikas (PAG arba PRF), ir impulsų plotis kartos.
Prašome kas gali kodą?

Kalbant

 
Hi all,
Turiu koduojami impulsų pasikartojimo ir impulso pločio generatorius.

Biblioteka IEEE;
naudoti IEEE.STD_LOGIC_1164.ALL;
naudoti IEEE.STD_LOGIC_ARITH.ALL;
naudoti IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment po biblioteka deklaraciją, jei instancija
---- Bet Xilinx Pirmykštė šį kodą.
- Biblioteka UNISIM;
- naudoti UNISIM.VComponents.all;

subjektas pulse_generator yra
uostas (CLK: in std_logic;
PRT: in std_logic_vector (15 downto 0);
pw: in std_logic_vector (9 downto 0) - impulso pločio
wave_sel: in std_logic_vector (5 downto 0);
out_wave0, out_wave1, out_wave2, out_wave3, out_wave4, out_wave5, out_wave6, out_wave7: iš std_logic);
pabaigos pulse_generator;

Architektūra Behavioral iš pulse_generator yra
signalas count2: std_logic_vector (9 downto 0): = "0000000000";
signalas count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
signalas clkouta, clkout1, clkout2, clkoutb, clkoutc, clkoutd, clkoute, clkoutf, clkoutg, clkouth: std_logic;
pradėti
procesas (CLK)
pradėti
atveju wave_sel yra
kai "000000" => out_wave0 <= clkouta;
kai "000.001" => out_wave1 <= clkoutb;
kai "000.010" => out_wave2 <= clkoutc;
kai "000.011" => out_wave3 <= clkoutd;
kai "000.100" => out_wave4 <= clkoute;
kai "000.101" => out_wave5 <= clkoutf;
kai "000.110" => out_wave6 <= clkoutg;
kai "000.111" => out_wave7 <= clkouth;
kai kiti => null;
pabaigos atveju;
galutinio proceso;

------------------------ out_wave (0 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkouta <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- --------------------
------------------------ out_wave (1 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkoutb <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- -------------------------------
------------------------ out_wave (2 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkoutc <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- -------------------------------
------------------------ out_wave (3 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkoutd <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- --------------------
------------------------ out_wave (4 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkoute <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- -------------------------------
------------------------ out_wave (5 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkoutf <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- -------------------------------
------------------------ out_wave (6 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkoutg <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- --------------------
------------------------ out_wave (7 )---------------------- --------------
procesas (CLK, PW, PRT)
kintamasis temp1: std_logic_vector (9 downto 0);
kintamasis temp2: std_logic_vector (15 downto 0);
- kintamasis count2: std_logic_vector (9 downto 0): = "0000000000";
- kintamasis count1: std_logic_vector (15 downto 0): = 0000000000000000 ";
pradėti
if (clk'event ir CLK = '1 ') then

temp2: = PRT;
clkout1 <= '1 ';
count1 <= count1 1;
if (temp2 = count1), tada
count1 <= "0000000000000000";
end if;
if (count1 <= pw), tada
temp1: = pw;
clkout2 <= '1 ';
count2 <= count2 1;
if (temp1 = count2), tada
count2 <= "0000000000";
clkout2 <= '0 ';
end if;
kitas
clkout2 <= '0 ';
end if;
end if;
clkouth <= clkout1 ir clkout2;
galutinio proceso;
-------------------------------------------------- -------------------------------
pabaigos Behavioral;PAG vertė nustatoma pagal laikrodžio ciklai po kurio bangų kartojasi numeris.PW vertė nustatoma pagal laikrodžio ciklai, kurių impulso plotis turėtų išlikti didelis skaičius.

Prašau kas nors man padėti kodas, kaip
Kai banga yra priskiriamas prie signalo, jis turėtų išlikti tos pačios PAG ir impulso plotis net po išėjimo bangos pasikeitė, ir pasikeitė banga turėtų turėti naują PAG ir PW.Ačiū susiję su
Anil

 

Welcome to EDABoard.com

Sponsor

Back
Top