Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Komparator i sygnał piłokształtny

Moderatorzy: Jacek Bogusz, Moderatorzy

michal_125
-
-
Posty: 1
Rejestracja: 25 lis 2015, o 16:45

Komparator i sygnał piłokształtny

Postautor: michal_125 » 25 lis 2015, o 16:54

Witam. Jestem świeżym użytkownikiem tego forum. Uczę się języka VHDL. Moim pierwszym projektem jest zrobienie przetwornika A/C. Posiadam napisany w VHDL komparator i sygnał piłokształtny. Wyskakuje mi problem podczas symulacji. Używam środowiska VIVADO 2015.3 oraz układu Basys3.

Kod żródłowy:
sawtooth.vhd

-- sawtooth wave
library ieee;
use ieee.std_logic_1164.all;
USE ieee.numeric_std.ALL;
use ieee.std_logic_arith.all;

entity sawtoothwav is
port(clk:in std_logic;
reset : in std_logic;
op : out std_logic_vector (11 downto 0 ) );
end sawtoothwav;

architecture sawtoothwav_arch of sawtoothwav is
begin
process(clk)
variable count:integer; -- sawtooth level counter

constant n:integer:= 256; -- maximum sawtooth level
begin
if (reset='1') then -- sawtooth reset
count := 0;
elsif rising_edge(clk) then -- sawtooth rising_edge
count := count + 1;
end if;
if(count>=n) then count:=0; -- sawtooth reset

else op<=std_logic_vector(to_unsigned(count,12)); -- sawtooth sending
end if;
end process;

end sawtoothwav_arch;

komparator
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity compare is
port( clk : in std_logic ;
num_adc : in std_logic_vector (15 downto 0); --analog input
num_saw : in std_logic_vector (11 downto 0); -- sawtooth signal input
czas : out integer
);
end compare;


architecture Behavioral of compare is
signal greater_or_equal : std_logic;
signal sample_adc : std_logic_vector (11 downto 0);

begin

sampling: process (num_adc,num_saw) -- analog input sampling
begin
if (num_saw="000000000000") then
sample_adc <= num_adc (15 downto 4);
end if;
end process;

compare: process(sample_adc,num_saw)
begin
if (num_saw>=sample_adc) then
greater_or_equal <= '1';
else greater_or_equal <= '0';
end if;
end process;


clocking: process (greater_or_equal,clk) -- time counting process
variable counter:integer:=0;
begin
if rising_edge (clk) then
if (greater_or_equal='1') then
counter := counter + 1;
elsif (num_saw="000000000000" )then
czas <=counter;
counter :=1; --counnter
else
counter := 0;
--end if;
--if (num_saw="000000000000") then --when sawtoth is reset, time is being send further
--czas <= counter;
--counter :=1;
end if;
end if;
end process;
end Behavioral;

top_tp
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity top_tb is
-- Port ( );
end top_tb;

architecture Behavioral of top_tb is
component top
Port (clk :in std_logic;
reset :in std_logic;
num_adc : in std_logic_vector (15 downto 0);
czas : out integer;
sawnum_out : out std_logic_vector (11 downto 0));
end component;
signal clk,reset : std_logic;
signal num_adc: std_logic_vector (15 downto 0);
signal czas : integer;
signal sawnum_out : std_logic_vector (11 downto 0);
begin
nazwa: top port map (
clk =>clk,
reset => reset,
num_adc => num_adc,
czas => czas,
sawnum_out => sawnum_out );
clocking: process
begin
clk <= '1';
wait for 2 ns;
clk <= '0';
wait for 2 ns;
clk <= '1';
end process;

wszystko: process
begin
num_adc <= "0000000100000000";
reset <= '1';
wait for 30ns;
reset <= '0';
wait for 50 ns;
num_adc <= "0000000010001010";
wait for 3 ns;
wait;
end process;
end Behavioral;


Pilnie proszę o pomoc

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości