Strona 1 z 1
[FPGA] MAXIMATOR obsługa ADC
: czwartek 17 mar 2016, 23:14
autor: PROTON
Obsługa ADC na kanale ANAIN1, czyli tam gdzie jest podłączony potencjometr.
Podczas kręcenia potencjometrem w prawo zapalaną się diody na płytce.
ADC.7z
Re: [FPGA] MAXIMATOR obsługa ADC
: czwartek 17 mar 2016, 23:59
autor: dambo
mógłbyś coś więcej o tym napisać? widzę, że jest tu użyty gotowy ip-core do adc-ka, tak samo będzie z innymi "peryferiami" wewnętrznymi w MAX10?
Re: [FPGA] MAXIMATOR obsługa ADC
: piątek 18 mar 2016, 09:22
autor: PROTON
Wersja poprawiona kodu VHDL, okazuje się że nie potrzeba automatu skończonego (FSM) do obsługi ADC.
Wystarczy sprawdzać czy response_valid = '1'
Kod: Zaznacz cały
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY Test_ADC IS
PORT(
CLK : IN STD_LOGIC;
LED : OUT STD_LOGIC_VECTOR(3 downto 0)
);
END Test_ADC;
ARCHITECTURE logic OF Test_ADC IS
signal reset_reset_n : STD_LOGIC;
signal command_valid : STD_LOGIC;
signal command_channel : STD_LOGIC_VECTOR(4 DOWNTO 0);
signal command_startofpacket : STD_LOGIC;
signal command_endofpacket : STD_LOGIC;
signal command_ready : STD_LOGIC;
signal response_valid : STD_LOGIC;
signal response_channel : STD_LOGIC_VECTOR(4 DOWNTO 0);
signal response_data : STD_LOGIC_VECTOR(11 DOWNTO 0);
signal response_startofpacket : STD_LOGIC;
signal response_endofpacket : STD_LOGIC;
component adc_qsys is
port (
clk_clk : in std_logic := 'X'; -- clk
reset_reset_n : in std_logic := 'X'; -- reset_n
command_valid : in std_logic := 'X'; -- valid
command_channel : in std_logic_vector(4 downto 0) := (others => 'X'); -- channel
command_startofpacket : in std_logic := 'X'; -- startofpacket
command_endofpacket : in std_logic := 'X'; -- endofpacket
command_ready : out std_logic; -- ready
response_valid : out std_logic; -- valid
response_channel : out std_logic_vector(4 downto 0); -- channel
response_data : out std_logic_vector(11 downto 0); -- data
response_startofpacket : out std_logic; -- startofpacket
response_endofpacket : out std_logic -- endofpacket
);
end component adc_qsys;
begin
u0 : component adc_qsys
port map (
clk_clk => CLK, -- clk.clk
reset_reset_n => reset_reset_n, -- reset.reset_n
command_valid => command_valid, -- command.valid
command_channel => command_channel, -- .channel
command_startofpacket => command_startofpacket, -- .startofpacket
command_endofpacket => command_endofpacket, -- .endofpacket
command_ready => command_ready, -- .ready
response_valid => response_valid, -- response.valid
response_channel => response_channel, -- .channel
response_data => response_data, -- .data
response_startofpacket => response_startofpacket, -- .startofpacket
response_endofpacket => response_endofpacket -- .endofpacket
);
command_channel <= "00000";
reset_reset_n <= '1';
command_valid <= '1';
command_startofpacket <= '1';
command_ready <= '1';
process(CLK)
begin
if rising_edge(CLK) and response_valid = '1' then
if response_data > 512 then
LED(0) <= '0';
else
LED(0) <= '1';
end if;
if response_data > 1536 then
LED(1) <= '0';
else
LED(1) <= '1';
end if;
if response_data > 2560 then
LED(2) <= '0';
else
LED(2) <= '1';
end if;
if response_data > 3584 then
LED(3) <= '0';
else
LED(3) <= '1';
end if;
end if;
end process;
END logic;
Re: [FPGA] MAXIMATOR obsługa ADC
: piątek 18 mar 2016, 09:34
autor: PROTON
dambo pisze:mógłbyś coś więcej o tym napisać? widzę, że jest tu użyty gotowy ip-core do adc-ka, tak samo będzie z innymi "peryferiami" wewnętrznymi w MAX10?
Nie jest to typowy IP-Core, został wygenerowany przy użyciu konfiguratora Qsys ( w menu: Tools->Qsys ), do wszystkich wbudowanych peryferiów używa się tego konfiguratora.