NeoN 0 24 октября, 2005 Опубликовано 24 октября, 2005 · Жалоба Задача сделать на ПЛИС генератор ПСП с параллельным выходом, т.е. дающим сразу N бит ПСП за такт, причем степень полинома должна быть 9, а ширина выходной шины, т.е. разрядность регистра - 10. Для вариантов, когда разрядность шины была меньше или равна степени полинома здорово выручал www.easics.be тулз, а вот в данной ситуации я в тупике. Для примера привожу верилог генератора с разрядностью 10 и полиномом десятой степени: // 1 + x^7 + x^10 poly 10 bit PRS generator module prs10d10(clk, rst, clr, prs); input clk, rst, clr; output [9:0] prs; reg [9:0] prs; always @ (posedge clk or posedge rst) if(rst) prs <= 0; else if(clr) prs <= 10'h3ff; else begin prs[0] <= prs[0] ^ prs[3] ^ prs[6] ^ prs[9]; prs[1] <= prs[1] ^ prs[4] ^ prs[7]; prs[2] <= prs[2] ^ prs[5] ^ prs[8]; prs[3] <= prs[3] ^ prs[6] ^ prs[9]; prs[4] <= prs[4] ^ prs[7]; prs[5] <= prs[5] ^ prs[8]; prs[6] <= prs[6] ^ prs[9]; prs[7] <= prs[0] ^ prs[3] ^ prs[6] ^ prs[7] ^ prs[9]; prs[8] <= prs[1] ^ prs[4] ^ prs[7] ^ prs[8]; prs[9] <= prs[2] ^ prs[5] ^ prs[8] ^ prs[9]; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 24 октября, 2005 Опубликовано 24 октября, 2005 · Жалоба Задача сделать на ПЛИС генератор ПСП с параллельным выходом, т.е. дающим сразу N бит ПСП за такт, причем степень полинома должна быть 9, а ширина выходной шины, т.е. разрядность регистра - 10. Для вариантов, когда разрядность шины была меньше или равна степени полинома здорово выручал www.easics.be тулз, а вот в данной ситуации я в тупике. Для примера привожу верилог генератора с разрядностью 10 и полиномом десятой степени: // 1 + x^7 + x^10 poly 10 bit PRS generator module prs10d10(clk, rst, clr, prs); input clk, rst, clr; output [9:0] prs; reg [9:0] prs; always @ (posedge clk or posedge rst) if(rst) prs <= 0; else if(clr) prs <= 10'h3ff; else begin prs[0] <= prs[0] ^ prs[3] ^ prs[6] ^ prs[9]; prs[1] <= prs[1] ^ prs[4] ^ prs[7]; prs[2] <= prs[2] ^ prs[5] ^ prs[8]; prs[3] <= prs[3] ^ prs[6] ^ prs[9]; prs[4] <= prs[4] ^ prs[7]; prs[5] <= prs[5] ^ prs[8]; prs[6] <= prs[6] ^ prs[9]; prs[7] <= prs[0] ^ prs[3] ^ prs[6] ^ prs[7] ^ prs[9]; prs[8] <= prs[1] ^ prs[4] ^ prs[7] ^ prs[8]; prs[9] <= prs[2] ^ prs[5] ^ prs[8] ^ prs[9]; end endmodule <{POST_SNAPBACK}> На самом деле никакой проблемы здесь нет. Насколько мне известно из теории построения генераторов ПСП, единожды выполненная над битовым вектором функция, дает в результате один псевдослучайный бит. То есть за одно применение функции (за один сдвиг битового вектора) имеем право взять как псевдослучайный только один бит, который "выдвигается" из битового вектора (он же, в случае генератора ПСП, "вдвигается"). Этот бит формируется функцией обратных связей, которые задаются собственно многочленом. Следовательно, чтобы получить N псевдослучайных бит, нужно выполнить функцию над битовым вектором N раз, что мы и видим в преведенном Вами коде, где псевдослучайная функция выполняется над битовым вектором prs[9:0] десять раз за такт. В Вашем случае, где необходимо получить 10 псевдослучайных бит за такт, а определяющая функция имеет степень 9, Вам необходимо также выполнить над битовым вектром prs[8:0] функцию 10 раз, но с той лишь разницей, что сохранить 10-ый псевдослучайный бит в дополнительном разряде битового вектора. Полученные 10 бит и будут необходимым Вам результатом. Вот Вам еще полезный для понимания файлик: crc.pdf Будут вопросы, спрашивайте. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NeoN 0 24 октября, 2005 Опубликовано 24 октября, 2005 · Жалоба Умом-то я понимаю, что правая часть набора присвоений и есть результат сокращения 10 итераций 1-разрядного генератора. Но попытки сделать параллельный генератор "вручную" ни к чему не привели - результировавшая последовательность была кривой. Может есть софт для синтеза таких генераторов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 232 24 октября, 2005 Опубликовано 24 октября, 2005 · Жалоба Умом-то я понимаю, что правая часть набора присвоений и есть результат сокращения 10 итераций 1-разрядного генератора. Но попытки сделать параллельный генератор "вручную" ни к чему не привели - результировавшая последовательность была кривой. Может есть софт для синтеза таких генераторов? <{POST_SNAPBACK}> http://forum.electronix.ru/index.php?showt...indpost&p=15348 Приведенный мною генератор позволяет при небольшой докрутке получить логические функции для любого полинома. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Умом-то я понимаю, что правая часть набора присвоений и есть результат сокращения 10 итераций 1-разрядного генератора. Но попытки сделать параллельный генератор "вручную" ни к чему не привели - результировавшая последовательность была кривой. Может есть софт для синтеза таких генераторов? <{POST_SNAPBACK}> Софта для синтеза нестандартных генераторов не встречал. Всегда делал так: делал функцию, которая выполняла одну итерацию, далее в цикле вызывал эту функцию необходимое количество раз, получал требуемый результат. Оптимизацией логики вручную не занимался. У меня все было на VHDL. При таком подходе реализация не займет более получаса. Пробуйте. Удачи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться