реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> модуль spi slave verilog
fookat
сообщение Aug 3 2016, 08:17
Сообщение #16





Группа: Новичок
Сообщений: 4
Регистрация: 3-08-16
Пользователь №: 92 818



Здравствуйте. Недавно начал вникать в тему FPGA и поэтому возник вопрос..
В коде присутствуют регистры для устранения метастабильности rx_done.

Код
   reg                     rx_done;
   reg                     rx_done_flip1;
   reg                     rx_done_flip2;
   reg                     rx_done_flip3;


По фронту тактирующего сигнала CLK_I происходит запись в эти регистры

Код
   always @(posedge CLK_I or posedge RST_I)
     if (RST_I) begin
       rx_done_flip1                <= #UDLY 1'b0;
       rx_done_flip2                <= #UDLY 1'b0;
       rx_done_flip3                <= #UDLY 1'b0;
     end
     else begin
       rx_done_flip1                <= #UDLY rx_done;
       rx_done_flip2                <= #UDLY rx_done_flip1;
       rx_done_flip3                <= #UDLY rx_done_flip2;
     end


Меня интересует почему во время записи reg_rxdata <= rx_shift_data;
используется проверка if (rx_done_flip1 && !rx_done_flip2)

Код
   always @(posedge CLK_I or posedge RST_I)
     if(RST_I)
       reg_rxdata            <= #UDLY 'h0;
     else if (rx_done_flip1 && !rx_done_flip2)
       reg_rxdata            <= #UDLY rx_shift_data;


А при установке регистра reg_rrdy
используется проверка else if (rx_done_flip2 && !rx_done_flip3)

Код
   always @(posedge CLK_I or posedge RST_I)
     if (RST_I)
       reg_rrdy                     <= #UDLY 1'b0;
     else if (rx_done_flip2 && !rx_done_flip3)
       reg_rrdy                     <= #UDLY 1'b1;
     else if (WR_RD && !CSn)
       reg_rrdy                     <= #UDLY 1'b0;



И почему, например в (rx_done_flip2 && !rx_done_flip3), регистр rx_done_flip3 берётся с инверсией?
Чтобы значение reg_rrdy было зафиксировано только когда rx_done_flip2 установлен, а rx_done_flip3 ещё нет?

Спасибо.

Go to the top of the page
 
+Quote Post
Tausinov
сообщение Aug 3 2016, 09:31
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Путем таких нехитрых условий требуемое действие происходит только на фронте сигнала. Если текущее значение ноль, а предыдущее было единичка, то это задний фронт; если текущее единичка, а предыдущее было ноль - передний фронт. Т.о., если какой-то сигнал держится в единичке или в нуле больше одного такта, можно относительно просто совершить однократное действие, связанное с его значением.
Go to the top of the page
 
+Quote Post
glb
сообщение Aug 23 2016, 12:53
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 28-08-15
Пользователь №: 88 193



Доброго дня! Использовал приведенный пример SPI, при приеме пакета по SPI сигнал RX_RDY "сдвигается" и срабатывает до окончания приема, с чем это может быть связано?

Сообщение отредактировал glb - Aug 23 2016, 14:07
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
likeasm
сообщение Aug 26 2016, 08:04
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 15-04-10
Пользователь №: 56 673



Цитата(glb @ Aug 23 2016, 15:53) *
Доброго дня! Использовал приведенный пример SPI, при приеме пакета по SPI сигнал RX_RDY "сдвигается" и срабатывает до окончания приема, с чем это может быть связано?

может быть дребезг на фронтах клока.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 20 2017, 07:50
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



решил поднять тему. посмотрел описание SPI Slave на VHDL. вроде логика понятна. непонятно как написать надстройку над модулем, пользовательскую логику управляющую слейвом.
если я правильно понял из тестбенч - никакого разрешающего тригера нет. передача инициализируется при CSn<='0';

Сообщение отредактировал Jenya7 - Feb 20 2017, 08:16
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 15:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016