Джеймс 4 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба 57 minutes ago, Raven said: Ну это же совсем другое дело - в смысле удобочитаемости. И что-то советовать здесь гораздо удобнее. Сами-то чувствуете разницу? Советовать в плане сброса тут к сожалению нечего - у Автора везде используется "стробированный" SPI-clock, поэтому тактовая частота сигнал сброса "не накроет". То есть всё та же алхимия и поиски философского камня Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба 4 minutes ago, pinchemierda said: Не могли бы вы помочь мне с ними в конкретном случае. Я так понимаю нужно создать файл .sdc. Что необходимо в него записать (желательно с разъяснениями). По теме нагуглил статью, пока с первого раза не осилил информацию. Вот статья толковая, но немного сумбурно. Для начала нужно обьявить клоки (создать клок группы): create_clock -name spi_clk -period 20 [get_ports SCLK ] -waveform {0.000000 25.000000} где spi_clk - просто название группы, период - длительность периода в ns, SCLK - порт в который заходит клок (в самом топовом модуле), вейвформа не обязательна, но желательна (с указанием начала 0 и 1 сигнала в пределах периода. Создайте клок группы для всех имеющихся частот в проекте и дальше продолжим. А то я уже ни Ваших частот не помню ни их значений Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба 1 hour ago, Leka said: Те описали в конечном итоге синхронный сброс - нет клока, нет сброса. Нет, вы к сожалению путаете терминологию. Советую почитать классическую статью http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_Resets.pdf Статья относительно большая, поэтому можете сразу посмотреть, чем отличается Рисунок 3 от Рисунка 4. Ну и в 6 разделе речь идет как раз про синхронизатор для асинхронного reset-а. Ну и ДА, сlock ("чистый" clock!) должен "накрывать" cигнал асинхронного сброса. И сниматься естественно в подходящее время ("the reset release, also called reset removal") P.S Автору это пока не надо, у него другие проблемы, - до этих он еще не дошел Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Дальше лучше всего будет прочитать сий документ: https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_timequest_cookbook.pdf Помучится с переводом (если плох английский), но всё же разобраться. Ибо в этой доке собраны обсновы основ для задания тайминг констрейнов. Ну и у Альтеры самые крутые даташити и апноты Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба 12 hours ago, Leka said: Асинхронный сброс ... Противоречит здравой идее синхронного дизайна. Служит источником трудноуловимых ошибок. Замусоривает код. И тд и тп. C тем что не "костыль" уже вроде должны разобраться. Но мне есть еще что добавить. Дело в том, что код для ПЛИС/ASIC не может существовать как некая абстракция. Этот код- хороший, этот код - плохой. Код еще должен учитывать особенности архитектуры семейства, использование трассировочных ресурсов и так далее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 226 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба 56 минут назад, pinchemierda сказал: результирующий код Если в Вашем частном случае данные на spitx неизменны во время сеанса, а потому выкинули их загрузку по спаду SS, то и сам буферный регистр стал лишним. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Только что, Leka сказал: Если нужен именно асинхронный сброс - лучше сформировать короткий импульс на фронте или спаде входного сигнала сброса, его и подавать на асинхронные входы триггеров Сделал так, не помогло module spi_slave( input wire SS, input wire SCLK, output wire MISO, input wire MOSI, output reg [7:0]spirx, input wire [7:0]spitx ); reg [7:0]txbuf; reg [7:0]spireg; reg txsw; reg [2:0]counter; reg clr = 0; always@(negedge SS or posedge clr) begin if(clr) clr <= 0; else clr <= 1; end always @(negedge SCLK or posedge clr) begin if(clr) begin txsw <= 1'b0; counter <= 3'd0; end else begin txsw <= 1'b1; counter <= counter + 1'd1; end end always @(negedge SCLK) begin if(counter == 3'd7) spirx <= spireg; if(counter == 3'd7 || ~txsw) txbuf <= spitx; end always @(posedge SCLK) begin spireg <= {spireg[6:0], MOSI}; end assign miso_mux = (txsw) ? txbuf[3'd7-counter] : spitx[3'd7-counter]; assign MISO = (~SS) ? miso_mux : 1'bz; endmodule синтезируется такая схема: Это вообще как, нормально? Только что, Nick_K сказал: Создайте клок группы для всех имеющихся частот в проекте и дальше продолжим. А у меня только одна частота по идее, это SCLK. Или ошибаюсь? Частоту SS не знаю, в конкретной железке он у меня вообще на gnd. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба 15 minutes ago, pinchemierda said: Это вообще как, нормально? А у меня только одна частота по идее, это SCLK. Или ошибаюсь? Частоту SS не знаю, в конкретной железке он у меня вообще на gnd. Нет, это не нормально (но и не критическая ошибка). Да и не переживайте Вы о синхронном/асинхронном сбросе. Не это самое страшное. По поводу констрейнов - частоты нужно обьявлять все. Как SCLK так и рабочую частоту для остального проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба А у меня в топ модуле кроме объявления spi_slave модуля пока больше ничего и нет: module top( input wire i_spi_cs, input wire i_spi_clk, input wire i_spi_mosi, output wire o_spi_miso, output wire [7:0]o_rx_buf ); spi_slave spi( i_spi_cs, i_spi_clk, o_spi_miso, i_spi_mosi, o_rx_buf, o_rx_buf //эхо ); endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 1 июля, 2020 Опубликовано 1 июля, 2020 (изменено) · Жалоба module spi_slave( input SS, input SCLK, input MOSI, output MISO, input [7:0] TX, output reg [7:0] RX ); reg [7:0] txbuf; reg [6:0] txsr; reg [7:0] rxsr; reg [2:0] cnt=0; reg clr=0; always@(negedge SS or posedge clr) if(clr) clr <= 0; else clr <= 1; always @(negedge SCLK or posedge clr) if(clr) cnt <= 0; else cnt <= cnt + 1; always @(posedge SCLK) rxsr <= {rxsr, MOSI}; always @(negedge SCLK) if(cnt == 7) RX <= rxsr; always @(posedge SCLK) if(cnt == 0) txbuf <= TX; always @(negedge SCLK) if(cnt == 0) txsr <= txbuf; else txsr <= {txsr, 1'b0}; assign MISO = (SS) ? 1'bz : (cnt == 0) ? txbuf[7] : txsr[6]; endmodule Изменено 1 июля, 2020 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Leka, попробовал. Проблема осталась, в выходном порту мусор ((. Лишь изредка нормализуется приём на пару секунд (особенно если свободные контакты руками полапать), но потом сразу же срывается. Что отправляется по MISO даже не смотрел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба SS программно управляется, нет ошибок ? Последовательные резисторы есть по проводам (против звона) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба Только что, Leka сказал: SS программно управляется, нет ошибок ? Пробовал и просто его на gnd цеплять, без подключения к мастеру. Если к мастеру цепляю, то после инициализации МК сразу подаю 0 и больше не трогаю. Уменьшение скорости SPI тоже не помогает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 3 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба #япиарюсь https://gitlab.com/vborchsh/spi-core/-/blob/master/spi_slave.sv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 1 июля, 2020 Опубликовано 1 июля, 2020 · Жалоба К мастеру вопросов точно нет. В синхронном варианте связка МК <-> ПЛИС работает, только частота не максимальная, а 9МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться