bmv89 0 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Ну мне почему-то хотелось этот сигнал генерировать именно на стороне мк. Короче, не важно уже. Основную концепцию я усвоил - синхросигнал один единственный, всё остальное обрабатывать синхронно, не зависимо откуда пришло (извне или из этой же ПЛИС). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 226 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 15 минут назад, pinchemierda сказал: хотелось этот сигнал генерировать именно на стороне мк Из этого никак не следует, что его надо заводить в ПЛИС без синхронизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 2 июня, 2020 Опубликовано 2 июня, 2020 (изменено) · Жалоба Да уж тупанул)) Не те методички читаю (или потому что по диагонали). Спасибо за разъяснения! А можно ещё вопрос чисто фундаментальный? Что вообще можно считать с т.з. верилога одновременными событиями? Например есть такая ситуация: два always блока, которые должны выполнятся одновременно (в списках чувствительности у обоих есть, к примеру, posedge CLK): always@(posedge CLK or posedge Reset) begin if(Reset) //.......... else counter <= counter+1; end always@(posedge CLK) begin val <= counter; //чему будет равен val? end При самом первом фронте CLK val будет равен инкрементированному значению уже? Или он будет равен исходному значению counter (до сложения с 1)? Или таких ситуаций необходимо избегать, из-за неопределённости? Изменено 2 июня, 2020 пользователем pinchemierda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 226 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 8 минут назад, pinchemierda сказал: При самом первом фронте CLK val будет равен инкрементированному значению уже? После тактового сигнала, на выходе регистра всегда будет то, что было на входе. И тут только один фронт, никакого второго нет. Соответственно, val=counter, counter=+1, т.е. буквально то, что описано операторами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 50 минут назад, pinchemierda сказал: Что вообще можно считать с т.з. верилога одновременными событиями? Стандартом Verilog порядок выполнения always/initial не специфицируется. Т.е. может быть произвольным. А то как это обрабатывается симулятором хорошо описано у sunburst-design но это уже детальное объяснение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 56 minutes ago, pinchemierda said: При самом первом фронте CLK val будет равен инкрементированному значению уже? Почитайте про отличия 2х типов присваивания: '=' и '<=' Вопрос отпадёт сам собой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Решил уж уточнить, а то симулятору слепо доверять не хочется. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 21 июня, 2020 Опубликовано 21 июня, 2020 · Жалоба И снова здравствуйте, уважаемые знатоки ПЛИС и Verilog! Гляньте, что не так с кодом? Пытаюсь SPI slave в железе запустить, в функциональном симуляторе (без учёта таймингов) всё как надо работает. Приёмный буфер o_rx_buf вывел наружу и подключил 8 светодиодов для отладки. В результате в этом буфере всё что угодно, только не то, что реально отправляется по линии MOSI. На выходе MISO тоже не пойми что. Если закомментировать всё, что связано с MISO, то сразу всё оживает и модуль начинает правильно воспринимать данные на линии MOSI. Частота i_core_clk = 50МГц, частота SPI clk = 18 МГц (хотя пробовал и меньше). Всё пытался сделать максимально синхронным. module spi_slave( input i_core_clk, //FPGA clock input i_cs, input i_clk, input i_mosi, output reg o_miso, output reg o_irq, output reg [7:0]o_rx_buf, input [7:0]i_tx_buf ); reg [2:0]counter; //счётчик битов reg sync_clk; //-------------------------- MOSI --------------------------------- reg [7:0]sr_rx; //сдвиговый приёмный регистр //Детектирование фронта CLK always @(posedge i_core_clk) begin sync_clk <= i_clk; if(!counter && sync_clk) begin o_irq <= 1'd1; o_rx_buf <= sr_rx; end else o_irq <= 1'd0; end always @(posedge sync_clk or posedge i_cs) begin if(i_cs) counter <= 3'd0; else begin counter <= counter + 1'd1; sr_rx <= {sr_rx[6:0], i_mosi}; end end //-------------------------- MISO --------------------------------- reg [7:0]sr_tx; //сдвиговый регистр отправки reg [2:0]tmp; always @(*) begin if(i_cs) o_miso = 1'dZ; else o_miso = sr_tx[7]; end always @(posedge i_core_clk) begin tmp <= counter; if(!counter) sr_tx <= i_tx_buf; if(counter != tmp) sr_tx <= sr_tx << 1'd1; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 21 июня, 2020 Опубликовано 21 июня, 2020 · Жалоба 1 hour ago, pinchemierda said: Всё пытался сделать максимально синхронным. Для начала проверьте, что sync_clk у вас на глобальной цепи "сидит" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 июня, 2020 Опубликовано 22 июня, 2020 · Жалоба 7 hours ago, pinchemierda said: Всё пытался сделать максимально синхронным. вы логику того что написали, точно представляете? выложите файл модуля и тестбенча, как оно у вас работает в симуляторе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmv89 0 22 июня, 2020 Опубликовано 22 июня, 2020 · Жалоба Симулировал в квартусе с использованием функционального симулятора (там не нужен тестбенч). Modelsim не освоил пока ((. Файл модуля выложил. Могу диаграммы выложить, но опять ругаться будут)). А что там с логикой то? Можете поправить? Цитата что sync_clk у вас на глобальной цепи "сидит" не совсем понял, что здесь означает "на глобальной цепи" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 июня, 2020 Опубликовано 22 июня, 2020 · Жалоба 1 hour ago, pinchemierda said: А что там с логикой то? Можете поправить? в трех словах: в утиль, все. осваивайте нормальный симулятор и тестбенчи. на все про все 2-3 часа туториала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 22 июня, 2020 Опубликовано 22 июня, 2020 · Жалоба 23 minutes ago, des00 said: на все про все 2-3 часа туториала везет =) у меня пару недель ушло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 июня, 2020 Опубликовано 22 июня, 2020 · Жалоба 51 minutes ago, new123 said: везет =) у меня пару недель ушло это если в слепую идти или самодеятельностью заниматься. А если поставить софт, открыть туториал и идти по шагам, то первый простой проект (ЕМНИП, там обычный счетчик + тестбенч) проходится за 2-3 часа. За это время студент получает: навык работы со средой, проектом, компиляция, запуск моделирования, отладка). Потом уже туториал по проектной работе, работы с командной строки, библиотеки. Для старта этого достаточно. У меня студенты через это проходят все) Причем весь материал идет вместе с софтом) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 23 июня, 2020 Опубликовано 23 июня, 2020 · Жалоба 2-3 часа достаточно для того, чтобы пройти по шагам инструкции, но совершенно недостаточно для того, чтобы что-то значимое осело в голове и появилось нормальное понимание и представление. Это легко проверяется - дайте студенту, не знакомому ранее с темой и прошедшему тутор, задание сделать теперь самостоятельно другое подобное задание - результат не обрадует. Скорость освоения у всех, конечно, разная, но отличается не кардинально - определяется скоростью образования синапсических связей в мозгу, а мозг штука инертная и за раз в него не вложишь много. Т.ч. пройти-то студент это пройдёт за 3 часа, но что он усвоит - большой вопрос. От бэкграунда ещё сильно зависит. Поэтому в неделю-две мне верится больше, и то при условии, что новичка "поставили в колею" и сразу объяснили что к чему - сориентировали, так сказать, в "системе координат". Полностью самостоятельно это осваивается намного медленнее - там одних док прочесть надо немало, а их ещё надо найти (понять, какие нужны и в каком объёме изучать). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться