Генератор ошибок

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Meinframe
Открыл глаза
Сообщения: 70
Зарегистрирован: Ср апр 06, 2011 15:16:47

Генератор ошибок

Сообщение Meinframe »

Программа для порчи сигнала.

Код: Выделить всё

module channel (
	input		irst, iclk, ien,
	input [7:0] ierRate,	// Входная вероятность ошибки
							// 8'h00 - P =  0	- ошибки отсутствуют
							// 8'hFF - P = ~0.5
	input		iserial, 	// Входные данные (код NRZ)
	output		oserial, oerserial		// Выходные данные
				);
	
	// Регистр генератора ПСП, инициализируется
	// всеми единицами при включении ПЛИС
	reg	  [8:0]	lfsr = {9{1'b1}};
	// Выходной буферный регистр
	reg			serial_ff;
    
	// Событие "ошибка" случается, если значение в регистре ПСП
	// менее заданного параметра
	wire		errorEvent = lfsr < {1'b0, ierRate};
  
    //Ошибки
    reg   [8:0] result;
   
    //Счётчик
    reg   [8:0] err_ctr;
     
    reg   [8:0] cycle;
    
//Регистр один раз за цикл пробегает любое выбранное нами значение.
//Формируем сигнал конца цикла
assign cycle = lfsr == 9'hFF;
    
//Счетчик будет считать каждый раз, когда наш генератор генерирует ошибку
always_ff @ (posedge iclk)
    if (irst | cycle)  err_ctr <= 8'h0;
    else if (ien & errorEvent) err_ctr <= err_ctr + 1;

//Посчитанный результат сохраняем в регистр до конца цикла измерения
always_ff @ (posedge iclk)
     if (irst) result <= 8'h0;
         else if (ien & cycle) result <= err_ctr;

     assign oerserial = result;


// Описание сдвигового регистра с обратными связями (генератора ПСП)
always @ (posedge iclk)
	if (irst)
		lfsr <= {9{1'b1}};	// По сигналу сброс синхронно (т.е. по фронту iclk)
							// загружаем в регистр все единицы
	else if (ien)			// По сигналу 
		lfsr <= {lfsr[7:0], lfsr[8] ^ lfsr[4]};
		// Стандартный полином для генератора 9-й степени
		// g(x) = x^9 + x^5 + 1

// По переднему фронту сигнала iclk при активном разрешительном сигнале ien
// присваимваем буферному регистру serial_ff результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ
// между исходным (входным) потоком данных и потоком ошибок.
always @ (posedge iclk)
	if (ien)
		serial_ff <= iserial ^ errorEvent;

	assign		oserial = serial_ff;
	

endmodule
Когда делаю функциональную симуляцию не могу получить сигнал с выхода oerserial, чтобы узнать статистические данные, подтверждающие вероятности изменения бита, соответствующие заданным.
Кто нибудь может помочь? Я новичёк в этом и собрал код из двух кусков (писал код не я). Не могу понять как данные с result получить при функциональной симуляции проекта. :cry:
Бардак в голове...
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»