egorman44 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба Добрый день всем! Начал потихоньку осваивать Verilog . Сейчас хотелось сделать проектик для работу с микросхемой AD73322 (front-end processor для речи и телефонии). Протокол обмена между fpga и AD73322 следующий: 1. Ждать импульса на линии SDOFS , говорит о том что сейчас будет прием, AD73322 будет передавать пакет fpga 2. Затем принять 16 бит 3. Сделать чего- нибудь с ними(принятыми битами) 4. Сформировать импульс на линии SDIFS , говорит о том что сейчас будет передача ,AD73322 будет принимать пакет от fpga 5. Передать 16 бит как я вижу задачу можно решить с применением FSM(Finite State Machine) дизайна . Просмотрев мануал "Synthesizable Finite State Machine Design Techniques Using the New SystemVerilog 3.0 Enhancements", я остановился на методе с применением 3-х always блоков. вопросы следующие: 1. Правильно ли решать подобную задачу с помощью Finite State Machine Design? Есть ли альтернативы? 2. Допусти у меня есть состояния wait_for_SDOF и ready_to_receive, переход из первого во второй осуществляется , по импульсу на линии SDOFS , как это должно выглядеть ? Мой вариант : always @(state,SDOFS) begin next = 'bx; case (state) wait_for_SDOFS: if (SDOFS) next = ready_to_receive; else next = wait_for_SDOFS ; ... endcase end не надо ли использовать конструкцию posedge SDOFS , так как мне нужен именно переход из "0" в "1", но как использовать его в блоке always, если я его запихну туда, ничего хорошего думаю не получиться. Вообщем как поступают при ожидании синхронизирующего сигнала , как и в моей ситуации ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба Добрый день всем! Начал потихоньку осваивать Verilog . Вообщем как поступают при ожидании синхронизирующего сигнала , как и в моей ситуации ? У меня на сайте "Краткий Курс". Главы про FSM, Пересечение клоковых доменов и пр... Еще поищите в сети "синхронное проектирование"... Остальное - по скайпу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lennox 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба Вообщем как поступают при ожидании синхронизирующего сигнала , как и в моей ситуации ? я бы так always @(posedge iCLK) begin SDOF_D1 <= SDOF; SDOF_D2 <= SDOF_D1; SDOF_LOW_TO_HIGH <= ~SDOF_LOW_TO_HIGH & SDOF_D2; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба я бы так Код always @(posedge iCLK) begin SDOF_D1 <= SDOF; SDOF_D2 <= SDOF_D1; SDOF_LOW_TO_HIGH <= ~SDOF_LOW_TO_HIGH & SDOF_D2; end лучше как iosifk советует через его краткий курс:)... SDOF_LOW_TO_HIGH = 0 SDOF_D2 стал 1 на первом клоке ((~0) & 1) = 1 на втором клоке ((~1)& 1) = 0 на следующем клоке ((~0) & 1) = 1 и так далее - генережка... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lennox 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба и так далее - генережка... было бы так, если бы не Ждать импульса на линии SDOFS --- а вообще да, надо читать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба Господа спасибо за пищу для размышлений ! будем читать значит и вопрос конечно офтоп , но хотелось бы очень узнать , как ближе перевести понятие "inferred latches" , что защелка это понятно, но какой смысл вкладывают в слово inferred ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба было бы так, если бы не вы знаете длину импульса? Почему вы решили что он будет всего 1 такт? Надо делать надежно, это лучше чем искать почему все так странно... a1<=a a2<=a1 a3<=a2 if((a3 == 0)&&(a2 == 1)) front <= 1; else front <= 0; или как в вашем случае front <= ((~a3)&a2) вот так вы точно получите строб по фронту длительностью в 1 такт. Переменная зависит только от сигнала, нет обратной связи с ней самой, и нет генережки. П,С, все под always @(posedge clk) естественно inferred - это не та случаем которая сохраняет данные без клока, по изменению на входах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
o_khavin 0 19 марта, 2014 Опубликовано 19 марта, 2014 (изменено) · Жалоба и вопрос конечно офтоп , но хотелось бы очень узнать , как ближе перевести понятие "inferred latches" , что защелка это понятно, но какой смысл вкладывают в слово inferred ? Обычно так говорит синтезатор, когда в процессе прожёвывания Вашего кода, считает что в нём описаны некие "latches" (а могут быть и любые другие компоненты) и хочет уведомить Вас, что он их там нашёл. Типа такого (так пишет синтезатор Xilinx-а): Synthesizing Unit <XXX>. Related source file is "***.v". Found 1-bit register for signal <xxx>. Found 1-bit register for signal <yyy>. Found 1-bit register for signal <zzz>. Summary: inferred 3 D-type flip-flop(s). Unit <XXX> synthesized. Т.е. в модуле XXX синтезатор насинтезил три FF-а, о чём и сообщает по завершении процесса. P.S. Имена действующих лиц изменены по их желанию. :) Изменено 19 марта, 2014 пользователем o_khavin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 марта, 2014 Опубликовано 20 марта, 2014 · Жалоба :) а я какую то глупость написал про инферед), надо было просто перевести дословно что это предполагаемая защелка:)... http://www.xilinx.com/support/answers/39136.htm вот здесь ксалинкс пишет почему он варнинг дает по этому поводу. в ПЛИС на несколько порядков больше варнингов чем в программизме, да еще часть из них надо прочитать и понять, а не бороться с ними... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 20 марта, 2014 Опубликовано 20 марта, 2014 (изменено) · Жалоба премного благодарствую ! вот здесь капиталисты тоже рассматривают почему inferred latch есть плохо :rolleyes: http://electronics.stackexchange.com/quest...red-latches-bad Изменено 20 марта, 2014 пользователем egorman44 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 24 марта, 2014 Опубликовано 24 марта, 2014 (изменено) · Жалоба По мере чтения возникают вопросы. Во-первых правильно ли я понял, для синхронизации сигнала мне необходим синхронизатор (например два последовательных D- триггер). Он выглядит следующим образом: always @(posedge SCLK) begin a1 <= SDOFS; a2 <= a1; a3 <= a2; SDOFS_risingedge <= ((~a3)&a2); end В таком случае , задержка при определение переднего фронта SDOFS составит 2 такта синхросигнала. Как мне говорит даташит "SDOFS Framing Signal Output for SDO Serial Transfers. The frame sync is one bit wide and is active one SCLK period before the first bit (MSB) of each output word. SDOFS is referenced to the positive edge of SCLK. SDOFS is in three-state when SE is low." , После импульса SDOFS , длинной один такт SCLK, сразу следует первый бит посылки. Т.е. должен ли я исправить код на always @(posedge SCLK) begin a1 <= SDOFS; a2 <= a1; SDOFS_risingedge <= ((~a2)&a1); end чтобы не пропустить первый бит ? Или есть другие решения ? Изменено 24 марта, 2014 пользователем egorman44 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 марта, 2014 Опубликовано 24 марта, 2014 · Жалоба По мере чтения возникают вопросы. Во-первых правильно ли я понял, для синхронизации сигнала мне необходим синхронизатор (например два последовательных D- триггер). Он выглядит следующим образом: чтобы не пропустить первый бит ? Или есть другие решения ? А почему Вы решили, что синхронизировать нужно под SCLK? Неужели я так непонятно написал про Пересечение клоковых доменов в "Кратком курсе"? Еще я написал - поищите в сети "синхронное проектирование".. Ну и как, помогло? Или как обычно? Читать лень, лучше спросить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 24 марта, 2014 Опубликовано 24 марта, 2014 · Жалоба Не вдаваясь в подробности мануала, вы можете пропустить через D триггера все сигналы, тогда сигналы между собой не разойдутся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 25 марта, 2014 Опубликовано 25 марта, 2014 · Жалоба По мере погружения , появляются еще некоторый вопросы , требующие разъяснения Хотел спросить о генерации сигнала сброса . Порыскал на просторах и нашел в книге Полякова (это в главе посвященной верификации) следующее: initial begin RESET_INV = 1'b0; repeat(10) @(posedge SCLK); RESET_INV <= 1'b1; end Почему товарищ использует в одном initial блоке blocking и non-blocking assignment или для верификации так можно ? Я переправил , RESET_INV = 1'b1; Вроде бы работает, но посмотрев RTL Viewer не увидел никакой синтезируемой схемы, привязанной к выходу RESET_INV, а лишь высокий уровень 1'h1 . Хотелось , бы услышать как ПРАВИЛЬНО исполнять сие? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lennox 0 25 марта, 2014 Опубликовано 25 марта, 2014 · Жалоба initial begin RESET_INV = 1'b0; repeat(10) @(posedge SCLK); RESET_INV <= 1'b1; end но посмотрев RTL Viewer не увидел никакой синтезируемой схемы, привязанной к выходу RESET_INV а как можно rtl viewer'ом посмотреть тестбенч? это же в тестбенче у Вас?)) initial begin RESET_INV = 1'b0; repeat(10) @(posedge SCLK); RESET_INV <= 1'b1; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться