whiteTigr 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 · Жалоба Вот она...схема моей мечты. 2 варианта: 1) Вы указываете что нужно сделать, и Вам предлагают несколько вариантов реализации. 2) Вы указываете как нужно сделать, и Вам помогают реализовать вашу схему. Что-то такое Вы хотите? Сейчас изображу в рисунках. А с рисунком более понятен мой вопрос или нет? :rolleyes: Компаратор сравнивает два каких то числа и выдает сигнал на инвертер входного сигнала. q <= d when invert = '0' else not d; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 · Жалоба Давайте я попробую описать на словах. Вообщем 1) Существует некая битовая последовательность состоящая из 0 и 1 2) Требуется реализовать генератор ошибок, который будет ломать, разрушать, коцать, портить эту битовую последовательность с каким-то % вероятности, который будет заранее написан в коде. Это к примеру 27%, а 100% или 0% не надо брать, ведь тогда теряется весь смысл. Генератор ошибок состоит из: LFSR сдвигового регистра налево Регистра в котором хранится 8-разрядное слово(10101100) которое к примеру будет означать % вероятности ошибок. И компаратора который объединяет 1 и 2. Блока который заменяет 0 и 1 в Битовой последовательности с определённым % вероятности. Всё это требуется реализовать на VHDL или на Verilog. Что 1, что 2 я незнаю, но когда смотрю код могу более менее понять, так как изучал обычный Си, но самому что-либо написать маловато мозга. :smile3046: Что-то такое Вы хотите? Что-то типа того :crying: Компаратор сравнивает два каких то числа и выдает сигнал на инвертер входного сигнала. q <= d when invert = '0' else not d; И что тогда происходит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whiteTigr 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 (изменено) · Жалоба Вы уже описали всю схему. Осталось только немножко поискать. LFSR сдвигового регистра налево По сдвиговому регистру, например, первая же ссылка с пачкой реализаций: http://electronix.ru/forum/index.php?showtopic=11996. Применительно к Вашей задаче, должно получится что-то такое: signal D: std_logic_vector(7 downto 0) := "10101100"; ... process(clk) begin if rising_edge(clk) then d(7 downto 0) <= d(6 downto 0) & d(7); end if; end process; Регистра в котором хранится 8-разрядное слово(10101100) которое к примеру будет означать % вероятности ошибок. Вот здесь я не понял. В моем понимании процент ошибок и будет хранится в сдвиговом регистре. И компаратора который объединяет 1 и 2. И выдает выход invert. invert <= d(0); Блока который заменяет 0 и 1 в Битовой последовательности с определённым % вероятности. q <= d when invert = '0' else not d; Вам осталось только собрать все это вместе. П.С.: Всё это требуется реализовать на VHDL или на Verilog. Что 1, что 2 я незнаю, но когда смотрю код могу более менее понять, так как изучал обычный Си, но самому что-либо написать маловато мозга. Разница между Си и VHDL существенная. Си последовательно исполняет строчку за строчкой, а VHDL работает параллельно. Особенно сильно мозг выворачивается в начале изучения из-за разрыва шаблона. Например, операция обмена двух "переменных" в VHDL будет выглядеть примерно так process(clk) begin if rising_edge(clk) then a <= b; b <= a; end if; end process; Никаких временных переменных. Просто прямой обмен. Изменено 9 ноября, 2011 пользователем whiteTigr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 (изменено) · Жалоба Внесу свой рубль, хотя это конечно сомнительное предприятие. Грубо функциональная схема будет выглядит так: Поток ошибок через ИСКЛ. ИЛИ объединяется с входным потоком. Таблица истинности ИСКЛ. ИЛИ x1 x2 | y ------------ 0 0 | 0 0 1 | 1 1 0 | 1 1 1 | 0 Из таблицы истинности следует такая логика работы: Когда сигнал ошибки неактивен, то он не влияет на входящий поток (верхняя часть таблицы). Если сигнал ошибки активен (лог. 1), то исходный бит будет проинвертирован. Что из себя будет представлять генератор ошибок. 1. Генератор псевдослучайной последовательности, выполненный на сдвиговом регистре с обратными связями (LFSR). 2. Компаратор, который сравнивает значение сдвигового регистра в каждый момент времени с заданным параметром. Для того, чтобы понять, каким образом образуется необходимая нам вероятность появления ошибки, надо в общих чертах понять, как работает генератор ПСП и его основные свойства. Скачайте в интернете книжку, которую я порекомендовал выше. Подраздел 8.4.1. Там совсем немного и очень доступным языком. LFSR в процессе всего цикла работы сменяет (2^m - 1) состояний. Количество нулей и единиц, сменяющихся в любом из триггеров (или снимаемых с выхода LFSR) примерно равно. Ваши условия выбраны как будто не просто так, а очень удобно. 1. Параметр вероятности 8-ми разрядный. 2. Ближайшая разрядность LFSR — степень стандартного полинома (см. книгу) — равна девяти. 3. Максимальное значение параметра определяет вероятность появления ошибочного бита 0.5, минимальное — 0. И последнее требование идеально ложится на второе обстоятельство. Напоминаю, что за весь цикл регистр LFSR в псевдослучайном порядке сменяет все состояния от 1 до 511 исключая ноль. Значение 9'h01 случится в регистре только один раз за весь цикл. То есть вероятность его появления 1/510. Значения от 1 до 10 попадутся нам в 10 случаях из 510. Ну, а значения от 0 до 255 попадутся в ~50 случаях из 100. Или, если точнее, в 256 случаях из 510. Напомню, что 0 нам никогда не встретится. Архив проекта для Quartus 9.0 ber.zip Уважаемый Meinframe. Этот пост оплачен моим работодателем, причем без его ведома %) 200 рублей прошу перевести благотворительному фонду Линия жизни. UPD: Забыл добавить, что вся схема, как и ожидалась, заняла меньше половины от самой тощей ПЛИС от Альтеры. 12 макроячеек из 32. Изменено 9 ноября, 2011 пользователем x736C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 · Жалоба Хочу сказать спасибо огромное всем кто откликнулся на мой пост, особенное спасибо whiteTigr за понятные для меня объяснения, а также частей генератора и спасибо x736C за реализацию проекта генератора в целом. Теперь буду разбираться в проекте, чтобы всё понять . Ваши условия выбраны как будто не просто так, а очень удобно. 1. Параметр вероятности 8-ми разрядный. 2. Ближайшая разрядность LFSR — степень стандартного полинома (см. книгу) — равна девяти. 3. Максимальное значение параметра определяет вероятность появления ошибочного бита 0.5, минимальное — 0. И последнее требование идеально ложится на второе обстоятельство. Условия задавал мой Преподаватель<--- тут его старая фотка и немного о нём – к.т.н., доцент; UPD: Забыл добавить, что вся схема, как и ожидалась, заняла меньше половины от самой тощей ПЛИС от Альтеры. 12 макроячеек из 32. Мой преподаватель убрал из ТЗ кодер и декодер Витерби т.к. сказал незная меня и он задал слишком сложную работу для начала, поэтому оставил только генератор ошибок и блок сравнения. ЗЫ на счёт благотворительного фонда кину 200 деревянных, надеюсь фонд настоящий. В принципе тему можно закрывать, если что вопросы будут у меня, я буду донимать Вас всех в ЛС :1111493779: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 · Жалоба Обидно, что учебник по VHDL или Verilog Вы так и не открыли и, похоже, изо всех сил будете стараться не открывать и дальше. Эх, до чего ленивый студент пошел! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 9 ноября, 2011 Опубликовано 9 ноября, 2011 (изменено) · Жалоба Ну, а значения от 0 до 255 попадутся в ~50 случаях из 100. Или, если точнее, в 256 случаях из 510. Напомню, что 0 нам никогда не встретится. Cлегка запутался. Если речь идет о всем регистре LFSR, то значения от 9'd1 до 9'd255 примет в 255 случаях из 511; и нуля (9'd0) мы не увидим. Если имеем в виду только младшие 8 бит параметра, с которым мы сравниваем, то нулевое значение будет иметь место при значении LFSR = 256 (9'b1_0000_0000). Но т.к. все, что выше 255 «отрезано» нашим компаратором, то вероятность ошибки при значении параметра 8'hFF будет 255 / 511 = 0.499. Так вроде верно. Изменено 10 ноября, 2011 пользователем des00 потенциальный оффтопик (с) модератор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Meinframe 0 20 декабря, 2011 Опубликовано 20 декабря, 2011 · Жалоба Результатом явился законченный курсовой проект "Генератор ошибок". Офрмлен по ГОСТ, но есть небольшие замечания по оформлению. ________________.rar Спасибо всем тем, кто мне помог. :santa2: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться