| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Verilog конфликт драйвера https://radiokot.ru/forum/viewtopic.php?f=60&t=109054 |
Страница 1 из 1 |
| Автор: | WolfTheGrey [ Сб окт 25, 2014 02:06:02 ] |
| Заголовок сообщения: | Verilog конфликт драйвера |
Давайте поставим жирную точку в вопросе конфликтов, а именно как мыслить в момент написания Verilog кода. допустим имеем 1_пин входная частота 1с 2 - 5 пин кнопки. Все эти модули изменяют число в одной переменной reg summa Вот на вскидку быстро набыдлокодил: Код: module summator ( input clock, input button1, //+ input button2, //- input button3, //<< input button4, //>> input button5, // output reg[7:0] summa ); always @(negedge button1 or posedge clock) begin summa = summa + 1; end always @(negedge button2) begin summa = summa - 1; end always @(negedge button3) begin summa = summa << 1; end always @(negedge button4) begin summa = summa >> 1; end endmodule |
|
| Автор: | Morroc [ Сб окт 25, 2014 10:51:04 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
тоже с таким столкнулся, даже пытал FPGA кодера по этому поводу, но видать они мыслят как то по FPGA'шному, потому что объяснение до меня дошло не полностью примерно так... если не писать таким образом, что в один момент времени возможно (именно возможно, а не обязательно произойдет) изменение состояния одного и того же регистра по разным always @ - этой ошибки нет, я бы один always на клок написал, а в нем все кнопки по if ... else - это не эквивалент вашего кода, но кнопки обрабатывать будет сейчас попробую откопать ответ FPGA'шника... упс, сейчас перечитал - кажется мы там друг друга не поняли просто вот тут более менее понятно вроде http://stackoverflow.com/questions/21061596/error-10028-cant-resolve-multiple-constant-drivers-for-net-vhdl-error |
|
| Автор: | Meteor [ Сб окт 25, 2014 13:55:41 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Не силен в верилоге, но насколько понимаю у вас напутанно с обработкой и на каждое действие делается свой алвайс. Сделайте иначе: тактируйте алвайс от одной частоты, а внутри этого алвайса уже смотрите если кнопка нажата - инкрементируйте/декрементируйте счетчик. Если нужно отработать именно фронты кнопок, то заведите несколько регистров, которые будут в алвайсе сдвигаться, и в последующем выявляться пары "01" для переднего фронта или "10" для заднего. |
|
| Автор: | WolfTheGrey [ Сб окт 25, 2014 14:32:17 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Цитата: тактируйте алвайс от одной частоты Так нельзя! Суть не в кнопках, код кнопок приведен всего лишь как упрощеный пример. Суть вопроса в конфликте драйверов. Как правильно думать при написания кода. Вот более сложная задача: этап 1 - записать звук с АЦП wm8731 в SDRAM этап2 - воспроизвести звук из SDRAM в ЦАП wm8731. Уже 5 клоков насчитал с куево тучей независимых алвайс блоков. Как такое пишется? И это еще не самая сложная затача, реализация цифрового фильтра с передискретизацией- ваще вырви мозг и положи под подушку. Допустим частота семплирования 48кГц. НАдо записать 6 точек, и по теореме Котельникова перерасчитать форму сигнала на 18 точек. (192 кГц) |
|
| Автор: | bfgroup [ Сб окт 25, 2014 14:45:18 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
WolfTheGrey писал(а): Давайте поставим жирную точку в вопросе конфликтов, а именно как мыслить в момент написания Verilog кода. Давайте поставим.Объяснение на уровне дедовской схемотехники. Выходы цифровых схем НЕЛЬЗЯ соединять между собой напрямую!!! С одной схемы выход, допустим, логический 0, с другой логическая 1. При их соединении вы увидите дымок)) Объяснение на уровне FPGA-кодера. Я как и предыдущий комментатор совсем не силён в верилоге, но попробую объяснить в терминах vhdl. Каждому сигналу ставится в соответствие драйвер. Один единственный. В случае, если нам необходимо осуществлять многократное назначение одному и тому же сигналу мы должны использовать сигнал соответствующего типа. Данный сигнал называют "разрешаемымым", в vhdl это тип std_logic и для него задана соответствующая таблица разрешения. Переводя вышесказанное для verilog-кодера можно резюмировать: мужики, юзайте тристейты или мультиплексоры (хотя mux'ы - это не множественное назначение сигналу, а множество сигналов). Как-то так.. |
|
| Автор: | WolfTheGrey [ Сб окт 25, 2014 15:19:13 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Осталось увидеть это в коде, то не очень понимаю как реализовать муксер. Как отдельный модуль, или еще как? лезть из верилога в схемотехнику не очень хочется. Чето в мыслях проясняется: написать отдельный модуль (или както таким образом вывернуться). module AND_4 (input wire а1, а2, а3, а4, output [8:0] register); .......assign if((а1 == 1) || (а2 == 1) итд...) register = register + 1; endmodule |
|
| Автор: | Meteor [ Сб окт 25, 2014 16:13:19 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
WolfTheGrey писал(а): ак нельзя! Суть не в кнопках, код кнопок приведен всего лишь как упрощеный пример. Суть вопроса в конфликте драйверов. Как правильно думать при написания кода. Вот более сложная задача: этап 1 - записать звук с АЦП wm8731 в SDRAM этап2 - воспроизвести звук из SDRAM в ЦАП wm8731. Уже 5 клоков насчитал с куево тучей независимых алвайс блоков. Как такое пишется? Я описываю на vhdl, но сути не меняет. Подход такой. Есть одна системная частота, например 200 МГц. Из нее формируются сигналы управления АЦП, управления процессами записи во внутреннюю/внешнюю память, она же используется для формирования таймерных меток при опросе кнопок, все сигналы требующие анализа фронтов проводятся через триггерные цепи тактированные этой системной частотой. В вашем примере получилось так процесс 1 - инкремент счетчика процесс 2 - декремент счетчика при этом реакция на кнопки по сути равноценна подачи нескольких тактовых импульсов. Как правильно делать - я написал, одна переменная для счетчика и триггера для формирования разрешения счета. bfgroup писал(а): юзайте тристейты или мультиплексоры Внутри ПЛИС нет трехстабильных элементов, они только на выводах, внутри допускается только мультиплексор. То есть если вдруг захотелось с нескольких счетчиков подавать сигналы на выход, то нужно использовать только мультиплексор, а после него, если надо то ставить трехстабильные элементы. |
|
| Автор: | Morroc [ Вс окт 26, 2014 11:32:32 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
WolfTheGrey писал(а): Уже 5 клоков насчитал с куево тучей независимых алвайс блоков. Как такое пишется? А так и пишется - автоматами, вводя стадии обработки, но обработчик один - оно вроде кажется коряво, но так и пишут - поверьте, есть ли другой способ не знаю, видел довольно длинные коды по обработке сигналов (те самые цифровые фильтры) и работе с ethernet - все было написано в таком духе. вот кусочек Код: always @(posedge clock)
begin case (rstate) rWait: begin if (we) // Wait until a new sample is written to memory begin rstate <= rAddr; counter <= NTAPS[ADDRBITS:0] + 1'd1; // count samples and pipeline latency raddr <= waddr; // read address -> newest sample caddr <= 1'd0; // start at coefficient zero Raccum <= 1'd0; Iaccum <= 1'd0; Rmult <= 1'd0; Imult <= 1'd0; end end rAddr: // prime the memory pipeline begin rstate <= rAddrA; next_addr; end rAddrA: begin rstate <= rAddrB; next_addr; end rAddrB: begin rstate <= rRun; next_addr; end rRun: begin // main pipeline here next_addr; Rmult <= q_real * reg_coef; Imult <= q_imag * reg_coef; // Raccum <= Raccum + Rmult[MBITS*2-1 -: ABITS]; // Iaccum <= Iaccum + Imult[MBITS*2-1 -: ABITS]; // Correction by Phil, VK6APH, to remove DC spur Raccum <= Raccum + Rmult[MBITS*2-1 -: ABITS] + Rmult[MBITS*2-1-ABITS]; Iaccum <= Iaccum + Imult[MBITS*2-1 -: ABITS] + Imult[MBITS*2-1-ABITS]; counter <= counter - 1'd1; if (counter == 0) rstate <= rWait; end endcase end |
|
| Автор: | misyachniy [ Сб апр 18, 2015 15:11:54 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Не знаю, поставлена ли жирная точка, по этому вставлю свои 5 копеек. Топик стартер поставил регистр "summa" в позу буриданова осла только "травы" в 4 раза больше. Все always синтезатор рассматривает параллельно, а не последовательно как компилятор С. В результате 4 воздействия пытаются присвоить выходному регистру "summa" 4 разных значения. Программист должен решить этот конфликт - раздать приоритеты. То есть внести все воздействия под один always. А затем расставить воздействия в порядке приоритетов операторами if/else if Это тоже не выход, так как создаются условия для "гонки" импульсов. |
|
| Автор: | Взявший Паяльник [ Вт ноя 17, 2015 17:09:41 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
кто нибудь научите verilog сам пытался не разобрался |
|
| Автор: | misyachniy [ Вт ноя 17, 2015 19:55:29 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Взявший Паяльник писал(а): кто нибудь научите verilog сам пытался не разобрался Что, есть для изучения кроме желания? |
|
| Автор: | Взявший Паяльник [ Чт ноя 19, 2015 15:36:54 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
интернет ,но ничего путнего нет. думал здесь кто подскажет
|
|
| Автор: | misyachniy [ Чт ноя 19, 2015 18:13:08 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Взявший Паяльник писал(а): интернет ,но ничего путнего нет. думал здесь кто подскажетКроме интернета нужна конкретная задача. Или хотя-бы платка с программатором. А то получится "сферический конь в вакууме". |
|
| Автор: | Взявший Паяльник [ Сб ноя 21, 2015 09:24:33 ] | ||
| Заголовок сообщения: | Re: Verilog конфликт драйвера | ||
JTAG ПОДОЙДЕТ ТАКОЙ
|
|||
| Автор: | Meteor [ Вс ноя 22, 2015 11:55:19 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Вы откуда взяли эту схему? С JTAG программатором лучше не спешить, а в начале определиться с производителем. Это может быть Altera, может Xilinx а может и Lattice. Когда разберетесь с тем как описывать аппаратуру, научитесь проводить функциональное моделирование, тогда уже купите себе плату с ПЛИС выбранного производителя, и в зависимости от насыщенности, либо докупите программатор, либо будете довольствоваться имеющимся на самой плате. |
|
| Автор: | Morroc [ Вс ноя 22, 2015 12:17:28 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
А я с конца начал - взял рабочий девайс, исходники, заказал у китайцев программатор и давай мигать светодиодами. Что понравилось - все мои мигания светодиодами и эксперименты с реализацией SPI интерфейса никак не влияли собственно на работу девайса (SDR приемник), ну т.е. даже при грубых косяках - все ведь параллельно работает. |
|
| Автор: | Meteor [ Вс ноя 22, 2015 12:23:53 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Хотелки приходят во время еды развития навыков. Можно начать с конца, я тоже сперва купил плис, затем программатор, затем учил ЯОА и уже в конце освоил моделирование. Так что совет данный выше - сын ошибок трудных и парадоксов друг. |
|
| Автор: | Pe3ucTop [ Вт дек 22, 2015 02:04:45 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Собственно по теме, вставлю и свои пять копеек : Подход в ПЛИС не такой как в МК, и соответственно все описания стремятся к одновременному выполнению. То есть и подходить надо с пониманием что все кнопки могут быть нажаты разом Ответ - Никак ! Тобишь реакция (always) - должна быть по максимальной частоте (clk), ну и сбросу (rst) , остальные все входные рассматриваем как стационарные (стабильные) значения в данный момент времени. Если же надо реагировать на фронты, то как уже здесь писалось, берём предъидущие стационарные значения и сравниваем с текущими, в случае наиденных изменений - производим действия, но опять таки рассматриваем совокупность изменений, т.к. все могут произойти разом. Ну и сами выбираем приоритеты. По вопросу если много входных частот - Надо прибегать к понятии синхронизации - т.е. или математически соотносить частоты и по параметрам выявлять - когда оба значения стационарны , или с помощью регистров стопить значения. И обрабатывать базируясь на четкие стабильные сигналы(значения). По поводу где почитать - я уважаю ресурс marsohod.org ресурс на русском... там много затронуто по поводу сопоставления частот. |
|
| Автор: | misyachniy [ Вт дек 22, 2015 18:31:24 ] |
| Заголовок сообщения: | Re: Verilog конфликт драйвера |
Pe3ucTop писал(а): Подход в ПЛИС не такой как в МК, и соответственно все описания стремятся к одновременному выполнению. То есть и подходить надо с пониманием что все кнопки могут быть нажаты разом Ответ - Никак ! ... Слово "одновременному выполнению" не подходит - лучше "Все описания рассматриваются параллельно." Если все кнопки нажаты "одновременно" - можно использовать приоритетный шифратор. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|



думал здесь кто подскажет