Jump to content
    

Как объединить два VHDL модуля в один для прошивки ПЛИС

Блок модуля управления порты:

entity control_module is

port(

clk: in std_logic;

rst: in std_logic;

amp_cfg: in std_logic;

adc_a: in std_logic_vector(13 downto 0);

TX_VALID: out std_logic;

RXD: out std_logic;

DATA_IN: out std_logic_vector(7 downto 0)

);

 

end control_module;

Правильные указал или нет?

Share this post


Link to post
Share on other sites

Блок модуля управления порты:

...

Правильные указал или нет?

Только частично угадывается назначение портов. Поподробнее бы. а то так неделю только выводы "утверждать" будете:)

Share this post


Link to post
Share on other sites

Вообщем получил я что хотел) В com port toolkit передались данные. Но передал только старшие 8 бит ( data_in => adc_a (13 downto 6) ) Входу uart присвоил старшие биты выхода АЦП . Как лучше организовать, чтобы остальные 6 передать. Сдвиговый регистр?

Edited by vitali36

Share this post


Link to post
Share on other sites

Но передал только старшие 8 бит. Как лучше организовать, чтобы остальные 6 передать

записать младшие 8 в один регистр, старшие 6 дополненные нулями- во второй. и передавать по очереди в рс 2 байта.

Или допилить модуль рс для передачи сразу 2 байт.

Share this post


Link to post
Share on other sites

... Как лучше организовать, чтобы остальные 6 передать. Сдвиговый регистр?

В управляющем модуле сделать так, что бы за период опроса АЦП, происходило два формирования имульса записи и начала передачи. По первому импульсу отсылаете старший байт, по второму - младшие 6 бит с дополнением нулями. А можно и поделить по 7 бит, при этом старший бит использовать как признак части. Например 1ххххххх - биты с 13 по 7, а 0ххххххх - с 6 по 0.

Share this post


Link to post
Share on other sites

TX: UART port map (

clk => tclk,

rst => trst,

data_in => adc_a (13 downto 6),

tx_valid => ttx_valid,

txd => ttxd,

tx_busy => ttx_busy

 

);

 

А при привязке как указать что data_in нужны еще байты adc_a(5 downto 0)?

Share this post


Link to post
Share on other sites

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

Далее в процессе модуля описываете как реагировать на совпадение времени. Можно сделать как- то так:

process(clk)
variable unsigned cnt:(N downto 0)
constant step:unsigned(N downto 0):="00....01";
constant max:unsigned(N downto 0):="xx....xx";
constant zero:unsigned(N downto 0):="00..000";
....
begin
if(rising_edge(clk))then
  cnt:=cnt+step;
  if(cnt=max/2-20)then
    Data_in<=ADC_a(13 downto 6);
  elsif(cnt=max/2-10)then
    --запуск передачи передний фронт
  elsif(cnt=max/2)then
    --запуск передачи задний фронт
  elsif(cnt=max-10)then
    data_in<=adc_a(5 downto 0)&"00";
  elsif(cnt=max-20)then
    --запуск передачи передний фронт 
    --запуск АЦП передний фронт
  elsif(cnt=max-10)then
    --запуск передачи задний фронт 
    --запуск АЦП задний фронт
  elsif(cnt=max)then
  cnt:=zero;
  end if;
end if;
end process;

Share this post


Link to post
Share on other sites

Тему можно закрывать. Спасибо всем, кто помогал) Отдельное спасибо Александру и Zasada)

Edited by vitali36

Share this post


Link to post
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...