Перейти к содержанию
    

Вот она...схема моей мечты.

2 варианта:

1) Вы указываете что нужно сделать, и Вам предлагают несколько вариантов реализации.

2) Вы указываете как нужно сделать, и Вам помогают реализовать вашу схему.

 

Что-то такое Вы хотите?

326f8c66.png

 

Сейчас изображу в рисунках.

А с рисунком более понятен мой вопрос или нет? :rolleyes:

Компаратор сравнивает два каких то числа и выдает сигнал на инвертер входного сигнала.

q <= d when invert = '0' else not d;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте я попробую описать на словах.

 

Вообщем

1) Существует некая битовая последовательность состоящая из 0 и 1

2) Требуется реализовать генератор ошибок, который будет ломать, разрушать, коцать, портить эту битовую последовательность с каким-то % вероятности, который будет заранее написан в коде. Это к примеру 27%, а 100% или 0% не надо брать, ведь тогда теряется весь смысл.

 

Генератор ошибок состоит из:

  1. LFSR сдвигового регистра налево
  2. Регистра в котором хранится 8-разрядное слово(10101100) которое к примеру будет означать % вероятности ошибок.
  3. И компаратора который объединяет 1 и 2.
  4. Блока который заменяет 0 и 1 в Битовой последовательности с определённым % вероятности.

 

Всё это требуется реализовать на VHDL или на Verilog. Что 1, что 2 я незнаю, но когда смотрю код могу более менее понять, так как изучал обычный Си, но самому что-либо написать маловато мозга. :smile3046:

 

Что-то такое Вы хотите?

326f8c66.png

Что-то типа того :crying:

 

Компаратор сравнивает два каких то числа и выдает сигнал на инвертер входного сигнала.

q <= d when invert = '0' else not d;

И что тогда происходит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы уже описали всю схему.

 

Осталось только немножко поискать.

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;

Никаких временных переменных. Просто прямой обмен.

Изменено пользователем whiteTigr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внесу свой рубль, хотя это конечно сомнительное предприятие.

 

 

Грубо функциональная схема будет выглядит так:

post-14942-1320846409_thumb.png

 

Поток ошибок через ИСКЛ. ИЛИ объединяется с входным потоком.

Таблица истинности ИСКЛ. ИЛИ

 

x1  x2 |  y
------------
0   0  |  0
0   1  |  1
1   0  |  1
1   1  |  0

 

Из таблицы истинности следует такая логика работы:

Когда сигнал ошибки неактивен, то он не влияет на входящий поток (верхняя часть таблицы).

Если сигнал ошибки активен (лог. 1), то исходный бит будет проинвертирован.

 

Что из себя будет представлять генератор ошибок.

1. Генератор псевдослучайной последовательности, выполненный на сдвиговом регистре с обратными связями (LFSR).

2. Компаратор, который сравнивает значение сдвигового регистра в каждый момент времени с заданным параметром.

 

post-14942-1320846414_thumb.png

 

Для того, чтобы понять, каким образом образуется необходимая нам вероятность появления ошибки,

надо в общих чертах понять, как работает генератор ПСП и его основные свойства.

 

Скачайте в интернете книжку, которую я порекомендовал выше. Подраздел 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.

Изменено пользователем x736C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу сказать спасибо огромное всем кто откликнулся на мой пост, особенное спасибо whiteTigr за понятные для меня объяснения, а также частей генератора и спасибо x736C за реализацию проекта генератора в целом. Теперь буду разбираться в проекте, чтобы всё понять :biggrin:.

Ваши условия выбраны как будто не просто так, а очень удобно.

1. Параметр вероятности 8-ми разрядный.

2. Ближайшая разрядность LFSR — степень стандартного полинома (см. книгу) — равна девяти.

3. Максимальное значение параметра определяет вероятность появления ошибочного бита 0.5, минимальное — 0.

И последнее требование идеально ложится на второе обстоятельство.

Условия задавал мой Преподаватель<--- тут его старая фотка и немного о нём – к.т.н., доцент;

 

UPD: Забыл добавить, что вся схема, как и ожидалась, заняла меньше половины от самой тощей ПЛИС от Альтеры. 12 макроячеек из 32.

Мой преподаватель убрал из ТЗ кодер и декодер Витерби т.к. сказал незная меня и он задал слишком сложную работу для начала, поэтому оставил только генератор ошибок и блок сравнения.

 

ЗЫ на счёт благотворительного фонда кину 200 деревянных, надеюсь фонд настоящий.

 

В принципе тему можно закрывать, если что вопросы будут у меня, я буду донимать Вас всех в ЛС :1111493779:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обидно, что учебник по VHDL или Verilog Вы так и не открыли и, похоже, изо всех сил будете стараться не открывать и дальше.

 

Эх, до чего ленивый студент пошел!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, а значения от 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.

 

Так вроде верно.

Изменено пользователем des00
потенциальный оффтопик (с) модератор

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Результатом явился законченный курсовой проект "Генератор ошибок". Офрмлен по ГОСТ, но есть небольшие замечания по оформлению.

________________.rar

 

Спасибо всем тем, кто мне помог. :santa2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...