fookat 1 3 августа, 2016 Опубликовано 3 августа, 2016 · Жалоба Здравствуйте. Недавно начал вникать в тему 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 ещё нет? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 3 августа, 2016 Опубликовано 3 августа, 2016 · Жалоба Путем таких нехитрых условий требуемое действие происходит только на фронте сигнала. Если текущее значение ноль, а предыдущее было единичка, то это задний фронт; если текущее единичка, а предыдущее было ноль - передний фронт. Т.о., если какой-то сигнал держится в единичке или в нуле больше одного такта, можно относительно просто совершить однократное действие, связанное с его значением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glb 0 23 августа, 2016 Опубликовано 23 августа, 2016 (изменено) · Жалоба Доброго дня! Использовал приведенный пример SPI, при приеме пакета по SPI сигнал RX_RDY "сдвигается" и срабатывает до окончания приема, с чем это может быть связано? Изменено 23 августа, 2016 пользователем glb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 26 августа, 2016 Опубликовано 26 августа, 2016 · Жалоба Доброго дня! Использовал приведенный пример SPI, при приеме пакета по SPI сигнал RX_RDY "сдвигается" и срабатывает до окончания приема, с чем это может быть связано? может быть дребезг на фронтах клока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 (изменено) · Жалоба решил поднять тему. посмотрел описание SPI Slave на VHDL. вроде логика понятна. непонятно как написать надстройку над модулем, пользовательскую логику управляющую слейвом. если я правильно понял из тестбенч - никакого разрешающего тригера нет. передача инициализируется при CSn<='0'; Изменено 20 февраля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться