Bovee 0 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Есть код сдвигового регистра с асинхронным сбросом и параллельной загрузкой, не могу понять зачем нужны сигналы InS, InP, SHFT, какова их функция?))) можете пожалуйста поподробнее объяснить как они работают в коде Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
attaboy 0 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Самый высокий приоритет имеет сигнал Clear, причем он активен в нуле. Если Clear активен - выход обнуляется, независимо от значений других линий. Далее смотрим логику case. Если LD == 1 (активно) и Clear == 1 (неактивно), то независимо от значения SHFT значение InP подается на выход D за один такт. А если LD == 0 (неактивно) и SHFT == 1 (активно), то InS подается в D со сдвигом вправо, то есть каждый такт значение InS продвигается в D на один такт вправо. Правда синтаксис подобного сдвигового регистра у меня вызывает сомнения. Точно не знаю, как будет синтезироваться подобная конструкция, есть даже подозрение, что Vivado выдаст ошибку multidriven net. Я бы не стал ставить регистр D и в блокирующее, и в неблокирующее присваивание, а реализовал бы всю логику в рамках одного always @ (negedge CLK). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bovee 0 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 1 минуту назад, attaboy сказал: Самый высокий приоритет имеет сигнал Clear, причем он активен в нуле. Если Clear активен - выход обнуляется, независимо от значений других линий. Далее смотрим логику case. Если LD == 1 (активно) и Clear == 1 (неактивно), то независимо от значения SHFT значение InP подается на выход D за один такт. А если LD == 0 (неактивно) и SHFT == 1 (активно), то InS подается в D со сдвигом вправо, то есть каждый такт значение InS продвигается в D на один такт вправо. Правда синтаксис подобного сдвигового регистра у меня вызывает сомнения. Точно не знаю, как будет синтезироваться подобная конструкция, есть даже подозрение, что Vivado выдаст ошибку multidriven net. Я бы не стал ставить регистр D и в блокирующее, и в неблокирующее присваивание, а реализовал бы всю логику в рамках одного alwayw @ (negedge CLK). ну я проверял этот код на EDA Playground, запускается)))) а вообще сами сигналы InP InS SHFT что означают??? в этом не могу разобраться))) LD - это загрузка как я понял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Код и фактическое наличие такого флопа - две разные вещию Скорее всего это описание некого кастомного компонента. Данный RTL реализует последовательную загрузку через serial порт InS и сдвигает по одному биту при активном сигнале сдвига (SHIFT). Если же подать единичное значение на сигнал загрузки (load - LD) произведётся запись из параллельного порта InP во все соответствующие флопы. Хотя куку было упомянуто - описание достаточно корявое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
attaboy 0 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Just now, Bovee said: ну я проверял этот код на EDA Playground, запускается)))) а вообще сами сигналы InP InS SHFT что означают??? в этом не могу разобраться))) LD - это загрузка как я понял LD - это Load, имеется в виду загрузка за один такт. SHFT - это shift, сдвиг побитно. Ну и соответственно источники данных. Для LD - это InP, а для SHFT - InS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bovee 0 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Только что, attaboy сказал: LD - это Load, имеется в виду загрузка за один такт. SHFT - это shift, сдвиг побитно. Ну и соответственно источники данных. Для LD - это InP, а для SHFT - InS. понял, спасибо большое!!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 26 января, 2022 Опубликовано 26 января, 2022 · Жалоба Это где такие горбатые примеры дают для изучения? Запись в сигнал из разных блоков! Асинхронный сброс прекрасно описывается в одном блоке с остальной логикой: always @(negedge clk, negedge Clear) begin if(!Clear) begin D <= 0; end else begin if(LD) begin D <= InP; end else begin if(SHFT) begin D <= {InS, D[3:1]}; end end end end К тому же присваивания в 'edge' блоках должны быть неблокирующими. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bovee 0 26 января, 2022 Опубликовано 26 января, 2022 (изменено) · Жалоба извините, можно еще вопрос?)) почему во входных сигналах мы записываем и сигнал LD, и его источник данных InP, такая же ситуация для сигнала SHFT и его источника данных InS))) почему происходит именно такая запись? и почему используется активный 0 в условии асинхронного сброса???)))) 8 часов назад, dxp сказал: Это где такие горбатые примеры дают для изучения? Запись в сигнал из разных блоков! Асинхронный сброс прекрасно описывается в одном блоке с остальной логикой: always @(negedge clk, negedge Clear) begin if(!Clear) begin D <= 0; end else begin if(LD) begin D <= InP; end else begin if(SHFT) begin D <= {InS, D[3:1]}; end end end end К тому же присваивания в 'edge' блоках должны быть неблокирующими. а тут получается реализован и асинхронный сброс и параллельная загрузка? Изменено 26 января, 2022 пользователем Bovee дополнение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bovee 0 26 января, 2022 Опубликовано 26 января, 2022 · Жалоба 8 часов назад, dxp сказал: Это где такие горбатые примеры дают для изучения? Запись в сигнал из разных блоков! Асинхронный сброс прекрасно описывается в одном блоке с остальной логикой: always @(negedge clk, negedge Clear) begin if(!Clear) begin D <= 0; end else begin if(LD) begin D <= InP; end else begin if(SHFT) begin D <= {InS, D[3:1]}; end end end end К тому же присваивания в 'edge' блоках должны быть неблокирующими. а можете кратко описать принцип работы кода пожалуйста!!!!))))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 26 января, 2022 Опубликовано 26 января, 2022 · Жалоба 44 минуты назад, Bovee сказал: почему во входных сигналах мы записываем и сигнал LD, и его источник данных InP, такая же ситуация для сигнала SHFT и его источника данных InS))) почему происходит именно такая запись? В смысле? А как иначе? Это же просто входные сигналы, они все одновременно присутствуют. 44 минуты назад, Bovee сказал: и почему используется активный 0 в условии асинхронного сброса??? Это я уж не знаю, почему так выбрали - так в вашем примере. Не нравится активный ноль, сделайте активную единицу, при этом negedge Clear поменяется на posedge Clear и if(!Clear) на if(Clear). 44 минуты назад, Bovee сказал: а тут получается реализован и асинхронный сброс и параллельная загрузка? А в чём сомнения? Вы на код посмотрите и всё поймёте, он же тривиальный. Промоделируйте в голове, что будет происходить при изменениях входных сигналов. 7 минут назад, Bovee сказал: а можете кратко описать принцип работы кода пожалуйста!!!! Какое место вам не понятно? always? if...else? Тут же просто описана логика обработки входных сигналов. Она строится из приоритета действий. D принимает значения, формированием которых управляют входные сигналы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bovee 0 26 января, 2022 Опубликовано 26 января, 2022 · Жалоба 3 минуты назад, dxp сказал: В смысле? А как иначе? Это же просто входные сигналы, они все одновременно присутствуют. Это я уж не знаю, почему так выбрали - так в вашем примере. Не нравится активный 0, сделай те активную единицу, при этом negedge Clear поменяется на posedge Clear и if(!Clear) на if(Clear). А в чём сомнения? Вы на код посмотрите и всё поймёте, он же тривиальный. Промоделируйте в голове, что будет происходить при изменениях входных сигналов. Какое место вам не понятно? always? if...else? Тут же просто описана логика обработки входных сигналов. Она строится из приоритета действий. D принимает значения, формированием которых управляют входные сигналы. ну вот допустим строчка:........ то есть при изменении сигнала LD сигналу D идет загрузка???? не совсем в голове укладывается((((( также и про if(SHFT).... if(SHFT) begin D <= {InS, D[3:1]} if(LD) begin D <= InP; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 26 января, 2022 Опубликовано 26 января, 2022 · Жалоба 14 minutes ago, Bovee said: ну вот допустим строчка:........ то есть при изменении сигнала LD сигналу D идет загрузка???? не совсем в голове укладывается((((( также и про if(SHFT).... if(SHFT) begin D <= {InS, D[3:1]} if(LD) begin D <= InP; Вы сколько занимаетесь разработкой/изучением схемотехники? Это обычный enable для флопа (читай регистр). Если такие элементарные понятия не укладываются в голове, то нужно почитать детальнее соответствующую литературу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 27 января, 2022 Опубликовано 27 января, 2022 · Жалоба 14 часов назад, Bovee сказал: ну вот допустим строчка:........ то есть при изменении сигнала LD сигналу D идет загрузка???? не совсем в голове укладывается((((( также и про if(SHFT).... if(SHFT) begin D <= {InS, D[3:1]} if(LD) begin D <= InP; а else между ними вы не видите? Как конструкция if ... else ... работает, понимаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vt313 0 2 февраля, 2022 Опубликовано 2 февраля, 2022 · Жалоба 26.01.2022 в 11:23, Bovee сказал: извините, можно еще вопрос?)) почему во входных сигналах мы записываем и сигнал LD, и его источник данных InP, такая же ситуация для сигнала SHFT и его источника данных InS))) почему происходит именно такая запись? и почему используется активный 0 в условии асинхронного сброса???)))) а тут получается реализован и асинхронный сброс и параллельная загрузка? Рекомендую. assign Dv = (ld)? inp : (shift)? {ins, D[3:1]} : D; always @(negedge clk, negedge Clear) begin if(!Clear) D = 0; else D = Dv; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 2 февраля, 2022 Опубликовано 2 февраля, 2022 · Жалоба 26 минут назад, vt313 сказал: Рекомендую. assign Dv = (ld)? inp : (shift)? {ins, D[3:1]} : D; always @(negedge clk, negedge Clear) begin if(!Clear) D = 0; else D = Dv; end Прикольный язык. Так вообще кто-нибудь вообще пишет ? Ничего же не понятно ! Но это на мой VHDL'ный взгляд... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться