Jump to content

    

MAX10 ADC

Как работать с ADC?

Создал корку

entity adc is
	port (
		adc_pll_clock_clk          : in  std_logic                     := '0';             --    adc_pll_clock.clk
		adc_pll_locked_export      : in  std_logic                     := '0';             --   adc_pll_locked.export
		clock_clk                  : in  std_logic                     := '0';             --            clock.clk
		reset_sink_reset_n         : in  std_logic                     := '0';             --       reset_sink.reset_n
		sample_store_csr_address   : in  std_logic_vector(6 downto 0)  := (others => '0'); -- sample_store_csr.address
		sample_store_csr_read      : in  std_logic                     := '0';             --                 .read
		sample_store_csr_write     : in  std_logic                     := '0';             --                 .write
		sample_store_csr_writedata : in  std_logic_vector(31 downto 0) := (others => '0'); --                 .writedata
		sample_store_csr_readdata  : out std_logic_vector(31 downto 0);                    --                 .readdata
		sample_store_irq_irq       : out std_logic;                                        -- sample_store_irq.irq
		sequencer_csr_address      : in  std_logic                     := '0';             --    sequencer_csr.address
		sequencer_csr_read         : in  std_logic                     := '0';             --                 .read
		sequencer_csr_write        : in  std_logic                     := '0';             --                 .write
		sequencer_csr_writedata    : in  std_logic_vector(31 downto 0) := (others => '0'); --                 .writedata
		sequencer_csr_readdata     : out std_logic_vector(31 downto 0)                     --                 .readdata
	);
end entity adc;

а что цеплять на порты и как работать не пойму. документация как обычно написанна для тех кто в теме. для своих разработчиков пишут,не для пользователей.

Share this post


Link to post
Share on other sites

Делайте с секвенсером, на avalon-mm. Там один регистр CSR потом прописать чтобы запустить ADC, а потом считывать из регистров нужных входов готовое значение. Если все делать в qsys с ниосом - наружу вообще ничего не надо вытаскивать.

Share this post


Link to post
Share on other sites
2 hours ago, alexPec said:

Делайте с секвенсером, на avalon-mm. Там один регистр CSR потом прописать чтобы запустить ADC, а потом считывать из регистров нужных входов готовое значение. Если все делать в qsys с ниосом - наружу вообще ничего не надо вытаскивать.

в том то и дело что я не знаю какие настройки прописывать в сиквенсер. этот ''entity adc'' для работы на low level, непосредственно обращаться в кор, надо знать адреса и значения.

я пошел другим путем - создал через QSYS

adc.png.2dd4058ff77b45ec84b9eabfc4e876f9.png

и получил модуль более приятный для глаз.

component adc_qsys is
		port (
			clk_clk                : in  std_logic                     := 'X';             -- clk
			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
			reset_reset_n          : in  std_logic                     := 'X';             -- reset_n
			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;

но как пользоваться остается загадкой.

Share this post


Link to post
Share on other sites

Просто в кусисе поставьте компонент ADC, выберите тип с секвенсером и avalon-mm шиной. Получается примерно так:

image.thumb.png.e884dc43f945c3a13c8f3986a01bb9c6.png

А дальше через ниос, через регистры запускаете и вытаскиваете данные

Share this post


Link to post
Share on other sites
1 hour ago, alexPec said:

Просто в кусисе поставьте компонент ADC, выберите тип с секвенсером и avalon-mm шиной. Получается примерно так:

 

А дальше через ниос, через регистры запускаете и вытаскиваете данные

у меня нет ниоса, голый камень.

я так понимаю

1 - выставляем канал          command_channel <= "00000";

2 - запускаем конвертацию  command_valid <= '1';

3 - ждем конца конвертации response_valid = '1';

4 - считываем данные из     response_data

так что ли?

или сигналы сиквенсера надо обязательно куда то подключить?

Edited by jenya7

Share this post


Link to post
Share on other sites

Нет, там можно и без секвенсера АЦП сделать, но страшно много выводов получится.

К сожалению тут уже не подскажу. Придется курить хэндбук, я выкурил только часть с авалон-интерфейсом :)

Share this post


Link to post
Share on other sites
1 hour ago, alexPec said:

Нет, там можно и без секвенсера АЦП сделать, но страшно много выводов получится.

К сожалению тут уже не подскажу. Придется курить хэндбук, я выкурил только часть с авалон-интерфейсом :)

спасибо.

Share this post


Link to post
Share on other sites
21 час назад, jenya7 сказал:

у меня нет ниоса, голый камень.

Ну так добавьте его. Это гораздо проще, и результат получите быстрее, чем если сами начнете автомат для управления придумывать.

Share this post


Link to post
Share on other sites
On 7/12/2019 at 3:08 PM, StewartLittle said:

Ну так добавьте его. Это гораздо проще, и результат получите быстрее, чем если сами начнете автомат для управления придумывать.

брать FPGA и вставлять в него микроконтроллер? никогда не понимал этих извращений. FPGA тем и хорош что может делать то что не может микроконтроллер.

Share this post


Link to post
Share on other sites
39 minutes ago, jenya7 said:

брать FPGA и вставлять в него микроконтроллер? никогда не понимал этих извращений. FPGA тем и хорош что может делать то что не может микроконтроллер.

FPGA тем и хорош, что на нем можно делать параллельную обработку интерфейсов и ЦОС под управлением софтварного проца

Share this post


Link to post
Share on other sites
1 hour ago, quato_a said:

FPGA тем и хорош, что на нем можно делать параллельную обработку интерфейсов и ЦОС под управлением софтварного проца

проц отжирает половину ресурсов, которых в FPGA кот наплакал. если бы FPGA стоил хотя бы в 2 раза дороже чем проц и был сопоставим по ресурсам с процом, тогда да. а так он стоит в 10 раз дороже и ресурсов в 10 раз меньше.

у меня внешний контроллер подключен к FPGA по SPI. как по мне это лучшее решение.

Edited by jenya7

Share this post


Link to post
Share on other sites
5 hours ago, jenya7 said:

проц отжирает половину ресурсов, которых в FPGA кот наплакал. если бы FPGA стоил хотя бы в 2 раза дороже чем проц и был сопоставим по ресурсам с процом, тогда да. а так он стоит в 10 раз дороже и ресурсов в 10 раз меньше.

у меня внешний контроллер подключен к FPGA по SPI. как по мне это лучшее решение.

если только у вас плис, очень маленькая) минимальный ниос, ЕМНИП 600 плиток, средний 1200, максимальный 1600. Правда есть любители писать КА на 100 и больше состояний, а потом усиленно их отлаживать.

ТС, есть еще Авалон стейт секвенсер. Он весит очень мало, может быть он вас устроит по возможностям?

Share this post


Link to post
Share on other sites
1 hour ago, des00 said:

если только у вас плис, очень маленькая) минимальный ниос, ЕМНИП 600 плиток, средний 1200, максимальный 1600. Правда есть любители писать КА на 100 и больше состояний, а потом усиленно их отлаживать.

ТС, есть еще Авалон стейт секвенсер. Он весит очень мало, может быть он вас устроит по возможностям?

у меня 10M50DAF484C7G и загрузка 70%.

не могу понять что там с чем соединять. нет нормальной документации. я так понимаю через QSYS по Avalon-mm шине можно все соединить включая SPI. но разобраться в этом - убиться можно.

 

Edited by jenya7

Share this post


Link to post
Share on other sites

А как я выбираю функциональность пина? Он может иметь разную функциональность -  IO_1A/ADC1IN2/DIFFIO_RX_L1P.

Если я в QSYS выбрал ADC 1/2 и каналы с которыми работать (CH1-CH8) пины отконфигурируются кором? в пин планере эти пины не надо конфигурировать? там в I/O Standard и опции такой нет.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now