Страница 9 из 11 Первая ... 7891011 Последняя
Показано с 161 по 180 из 211

Тема: DF2 - Вторая версия DIY ЦФ

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию DF2 - Вторая версия DIY ЦФ

    Итак, обещанный проект нового ЦФ.
    Опыт прошлой ветки показал, что вопросы построения ЦФ сводятся к конкретному проекту. Поэтому решил создать отдельную.

    Исходная ветка с обсуждением различных реализаций ЦФ здесь.
    Ветка про ЦФ DF1 здесь.

    С момента публикации прошлой версии ЦФ прокачал скилл по верилогу, поэтому новый ЦФ выполнен проще, и с более сложной арифметикой. В частности добавлены опции шейпера и дополнительного апсемплера, что позволяет выводить данные в том числе на малоразрядные ЦАП, типа AK4499EX.
    Получив определенный опыт понял о чем писал Сергей Агеев (на счет реализации умножителей и многовходовых сумматоров на FPGA). Если правильно выбирать длину конвейера, то нет смысла изобретать оригинальную схему умножителя. Компилятор синтезирует лучше.
    То же самое касается описания сумматоров: использование многовходовых сумматоров оптимизируется лучше, чем ручная разбивка на двух-входовые.

    В отличие от предыдущего проекта, новый делался как заготовка для самостоятельного применения и доработки под свои задачи. Поэтому все режимы досконально не тестировались, и проект выкладывается "как есть" в версии альфа.
    В исходниках есть только пара примеров: для FPGA cyclone и lcmxo2.
    Описание содержит краткое перечисление основных параметров, а так же инструкцию по самостоятельной сборке проекта и генерации собственных коэф-тов в MatLab.
    Картинок много, текста мало. Все как мы любим.
    Утилита и ее исходник для автоматизированной конверсии коэф-тов в формат верилога прилагается.
    Так же прилагаются матлабовские модели всех каскадов фильтра, архив со сгенерированными коэф-тами фильтров, примененных в проекте и симулинк-модель. Для запуска симулинк-модели нужен матлаб версии r2018b.

    - 25.09.2023 - Добавил MatLab модель шейпера в симулинке. На этот раз версии r2013b. В 2018-ом матлабе че-то намудрили со спектроанализатором, и в нем амплитуда сигнала получается зависима от порядка шейпера, или от кратности оверсемплинга.

    - 27.09.2023 - Правка шейпера 3-го порядка

    Шейпер 3-го порядка в проекте выполнен по схеме:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132616551.png 
Просмотров:	87 
Размер:	17.0 Кб 
ID:	441606
    NTF шейпера на 1кГц сигнале:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132509846.png 
Просмотров:	77 
Размер:	29.1 Кб 
ID:	441605
    Данный шейпер оптимизирован для работы на невысокой частоте семплирования (х16..х32) и с разрядностью данных не менее 7..8 бит.
    На работы на более высоких ЧД при меньшей разрядности данных можно упростить коэф-т шейпера, улучшив SNR и сэкономив на логике. Для этого исключается слагаемое Gain3 (по схеме симулинка):
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132931529.png 
Просмотров:	52 
Размер:	17.0 Кб 
ID:	441607
    В проекте это слагаемое находится в файле DATA_READ.v:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_133349302.png 
Просмотров:	76 
Размер:	20.6 Кб 
ID:	441609
    Данное слагаемое отклоняет значение коэф-та от 3-х, создавая дополнительный полюс на NTF. После упрощения коэф-та NTF шейпера принимает вид классического модулятора 3-го порядка.
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_133125636.png 
Просмотров:	68 
Размер:	26.8 Кб 
ID:	441608
    Можно также это слагаемое не удалять, а менять его величину (увеличивать сдвиг), двигая тем самым полюс NTF.
    [свернуть]

    - 28.09.2023 - Отрефакторил модули DATA_READ и SAI_OUTPUT. Поправил описание.
    - 05.10.2023 - Поправил DF_CONTROL. Поправил описание.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 05.10.2023 в 22:16.

  2. #161
    Завсегдатай Аватар для Михаил45
    Регистрация
    09.03.2007
    Адрес
    Санкт-Петербург
    Возраст
    62
    Сообщений
    2,124

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Володя, так ты на говине запускаешь дф2 и конвейер?

  3. #162
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,577

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Пока никак. Только дф2 пока могу. Верилог держит.

    ---------- Сообщение добавлено 20:17 ---------- Предыдущее сообщение было 19:41 ----------

    Сделал индикацию заполненности буфера фифо. После ресета сразу показывает 0. Переходит на 1 через 8 минут. Значит 64 минуты есть в запасе. Поток 192кГц. На потоке 48кГц полный буфер будет более 4 часов для моего случая разности частот. Отлично.
    Последний раз редактировалось Turbo_man; 01.12.2023 в 20:29.

  4. #163
    Завсегдатай Аватар для Михаил45
    Регистрация
    09.03.2007
    Адрес
    Санкт-Петербург
    Возраст
    62
    Сообщений
    2,124

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Понятно. Есть ли смысл переходить на этот пакет?

  5. #164
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,577

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Я буду учить верилог и переходить на Говин, если сдюжу.
    Главное там встроенное ОЗУ 64Мбит.
    И сам кристалл мощнее, чем Циклон4.

  6. #165
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Увеличение DW приводит к тому, что проект не помещается. Озу не лезет. Видимо организация битности озу кратна 9.
    Да, 27 бит потому и выбрано, что на два канала ровно три блока памяти по ширине (18х3 = 27х2).

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Сейчас сделал разрешение чтения фифо после переполнения записи, не зависимо от соотношения частот записи и чтения. Артефактов перепрыгивания ещё не встретил.
    Т.е. чтение стартует когда FIFO полностью заполнено? В таком случае работать будет без артефактов только если частота на чтение выше, чем на записи.
    Если разница частот не известна, то чтение надо разрешать когда FIFO заполнено на 50%.
    А лучше сначала замерить разницу, а по результату уже включать чтение: либо сразу, либо по заполнению ФИФО.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Ещё интересно бы написать фифо полностью на верилоге, чтобы потом и в Говине использовать.
    Можно в ветке обсудить варианты релизации. Че там, пара счетчиков адресов и блок памяти.
    Память описывается как массив слов с независимыми портами чтения и записи.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Собираюсь мультиплексировать управляющим пином 3 бита индикации частоты Fs с декодером на 8 светодиодов и 3 старших разряда адресного счётчика записи в буфер ФИФО. Тогда будет индикация заполненности буфера фифо с дискретом 12.5%.
    Только если надо именно процент заполнения ФИФО, то это не значение счетчика, а разность счетчиков записи и чтения.

    ---------- Сообщение добавлено 20:44 ---------- Предыдущее сообщение было 20:41 ----------

    А вообще для асинхронного источника я бы лучше поискал VCXO, хотя бы si514, или типа того. Тогда большой буфер не нужен. И задержка при включении воспроизведения меньше.

  7. #166
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,577

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Нет, работать будет в обоих случаях. Только счётчики будут расходиться в разных направлениях. И в худшем случае может потеряться первых 4096 семплов. Это не гуд, конечно. Пока лень исправлять. Чуть позже поправлю по разности частот.

    ---------- Сообщение добавлено 21:02 ---------- Предыдущее сообщение было 20:53 ----------

    VCXO в источнике я уже делал. И управлял по коаксиалу напряжением частотой этого VCXO. В приёмнике ещё не делал. Si514 если найду, то попробую. Томтит так делал.

    ---------- Сообщение добавлено 21:04 ---------- Предыдущее сообщение было 21:02 ----------

    Задержка при включении важна только для случая просмотра видео. Фифо мне больше нравится, да и кошернее так. Гены лучше можно использовать.

    ---------- Сообщение добавлено 21:08 ---------- Предыдущее сообщение было 21:04 ----------

    Когда перейду на Говин и задействую 64Мбит (или часть от этого) озу, то индекс можно будет тупо на 50% ставить и не париться.

  8. #167
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Нет, работать будет в обоих случаях. Только счётчики будут расходиться в разных направлениях. И в худшем случае может потеряться первых 4096 семплов.
    А да, точно, запись просто перепрыгнет чтение и потеряет заполненный буфер.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    VCXO в источнике я уже делал. И управлял по коаксиалу напряжением частотой этого VCXO. В приёмнике ещё не делал. Si514 если найду, то попробую. Томтит так делал.
    Не ну ЦАП это же приемник, а источники могут быть разные.
    Конкретно 514 генератор сейчас может и не купить. Можно что-то аналогичное поискать.
    Хотя конечно это дефицит дефицитный. Из того что сейчас доступно в основном прожорливые силабсы с потреблением в сотню мА.
    У 514 еще управление по I2C, что на ПЛИС делать вообще нифига не удобно, лучше наверное поискать версию с управлением напряжением и регулировать через ЦАПик.
    Еще одно время в американских магазах продавали неплохие VCXO SIT3808, но сейчас уже нету.

  9. #168
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,577

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Переделал на начало чтения при пустом буфере записи. Так лучше 4096 семплов пустоты вставит, в худшем случае.

  10. #169
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    48
    Сообщений
    955

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    dortonyan, Алексей, такой вопрос. Если я вывожу на пины настройку кратности передискретизации как мне автоматически, в зависимости от выбранной кратности, настраивать делитель битклока в модуле вывода?
    Александр.

  11. #170
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от And$er Посмотреть сообщение
    Если я вывожу на пины настройку кратности передискретизации как мне автоматически, в зависимости от выбранной кратности, настраивать делитель битклока в модуле вывода?
    В проекте не предусмотрено динамическое изменение частоты битклока.
    Из того соображения, что для ЦАПа частоту битклока можно задать сразу максимальной и менять только частоту семплирования.
    Если очень надо, то можно попробовать параметр BCKDIV модуля SAI_OUTPUT описать как входной порт (скажем 3-битной разрядности) и для каждого значения выходной ЧД подавать туда требуемое значение делителя частоты битклока.

  12. #171
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    48
    Сообщений
    955

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Не совсем понял, ведь если, к примеру, я поставлю делитель частоты для битклока 2^0 для 1024fs, а макс передискретизацию поставлю 16, то данные на выходе цф будут формироваться неправильно?
    Александр.

  13. #172
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от And$er Посмотреть сообщение
    Не совсем понял, ведь если, к примеру, я поставлю делитель частоты для битклока 2^0 для 1024fs, а макс передискретизацию поставлю 16, то данные на выходе цф будут формироваться неправильно?
    Смотря какой ЦАП.
    Проект делался в первую очередь для работы с параллельными конверторами. Там такой проблемы точно нету.
    А для ДС ЦАП данная ф-я не особо нужна, разве что на этапе отладки выбрать оптимальный режим.

  14. #173
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    48
    Сообщений
    955

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Алексей, попробовал вывести 3х битовый сигнал делителя битклока из модуля SSAI_OUTPUT, убоав его из параметров.
    Квартус выдает ошибку, наа строке, где это значение используется для сдвига. Как это обойти можно?
    Александр.

  15. #174
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от And$er Посмотреть сообщение
    Алексей, попробовал вывести 3х битовый сигнал делителя битклока из модуля SSAI_OUTPUT, убоав его из параметров.
    Квартус выдает ошибку, наа строке, где это значение используется для сдвига. Как это обойти можно?
    Покажите скрин, или файл где дорабатывали.

  16. #175
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    48
    Сообщений
    955

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Код:
    // Simple Series Audio Interface Output
    module SSAI_OUTPUT
    #( parameter 
    	MCLKSEL = 0,	// Master Clock Select: 0 - 1024Fs, 1 - 768Fs
    	
    	// ********** Data Control **********************
    	DLEN = 24, 		// Output Data Length in bits
    	OB = 0,			// 1 - offset binary, 0 - 2*s complement
    	DATINV = 0,		// Output data invertion
    	// **********************************************
    
    	// ********** Bit Clock Control *****************
    	//BCKDIV = 3, 	// BCK = iCLK/(2^CKDIV)
    	BCKINV = 0,		// 1 - invet BCK clokck: 0 = update data on falling BCK; 1 = update data on rising BCK
    	// **********************************************
    	
    	// ********** Word Clock Control ****************
    	WCKW = 16,		// WCK strobe width in iCLK periods	
    	WCKINV = 0,		// 1 - invet WCK strobe: 0 = update DAC on falling WCK; 1 = update DAC on rising WCK
    	// **********************************************
    	
    	// ********** Deglitcher Control ****************
    	DGHW = 20,		// 1..31 - deglitcher HOLD width
    	DGINV = 0		// 1 - invet DG strobe: 0 = 1-hold, 0-sample; 1 = 0-hold, 1-sample
    	// **********************************************
    )
    (
    // input global signals
    input iCLK, iCLRn,
    // input control signals
    input[2:0] iOVS_MAX,
    input[2:0] iBCKDIV,
    input iDGEN,	// 1 - enable deglitcher signal
    // input data
    input [23:0] iDL, iDR,
    // output data (LAT - not used)
    output oDL, oDR, oBCK, oWCK, /*oLAT,*/ oDG
    );
    
    
    //**** Input Control Logic ****************
    wire[2:0] wOvsMax = (iOVS_MAX > `OVS_MAX_x32) ? `OVS_MAX_x32 : iOVS_MAX;
    wire signed[23:0] wCoding = OB << 23;
    wire wDGCLR = (!iCLRn) ? 0 : iDGEN;
    //*****************************************
    
    //**** Control counter ********************
    reg [9:0] rCNT;
    wire[10:0] wMCKLIM = (MCLKSEL) ? 768 : 1024;
    wire[9:0] wCntLim = (wMCKLIM >> wOvsMax) - 1;
    wire wBCK = (iBCKDIV) ? rCNT[iBCKDIV-1] : !iCLK;
    wire wLOAD = (rCNT == ((wCntLim - (DLEN << iBCKDIV)) & wCntLim)) ? 1 : 0;
    //*****************************************
    
    reg rBCK, rWCK, rDG;
    reg[DLEN-1:0] rSHL, rSHR;
    reg[14:0] wDGLIM;
    wire[23:0] wDL = (DATINV) ? ~iDL : iDL;
    wire[23:0] wDR = (DATINV) ? ~iDR : iDR;
    
    //**** Output assigments *****************
    assign oBCK = wBCK ^ BCKINV;
    assign oWCK = rWCK ^ WCKINV;
    assign oDG = rDG ^ DGINV;
    assign oDL = rSHL[DLEN-1];
    assign oDR = rSHR[DLEN-1];
    //****************************************
    
    //*****************************************
    always@ * begin
    	case (wOvsMax)
    	`OVS_MAX_x1: wDGLIM = ((wMCKLIM>>`OVS_MAX_x1)-1) * DGHW;
    	`OVS_MAX_x2: wDGLIM = ((wMCKLIM>>`OVS_MAX_x2)-1) * DGHW;
    	`OVS_MAX_x4: wDGLIM = ((wMCKLIM>>`OVS_MAX_x4)-1) * DGHW;
    	`OVS_MAX_x8: wDGLIM = ((wMCKLIM>>`OVS_MAX_x8)-1) * DGHW;
    	`OVS_MAX_x16: wDGLIM = ((wMCKLIM>>`OVS_MAX_x16)-1) * DGHW;
    	`OVS_MAX_x32: wDGLIM = ((wMCKLIM>>`OVS_MAX_x32)-1) * DGHW;
    	default: wDGLIM = *hx;
    	endcase
    end
    
    //*****************************************
    always@ (posedge iCLK or negedge iCLRn) begin
    	if (!iCLRn) begin
    		rCNT <= 0;
    		rBCK <= 0; rWCK <= 0;
    		rSHL <= 0; rSHR <= 0;
    	end
    	else begin
    		// Control timer to read address generate
    		rCNT <= (rCNT == wCntLim) ? 0 : (rCNT+1);		
    		
    		// Word Clock Processing Logic
    		if (rCNT == wCntLim) rWCK <= 0;
    		else if (rCNT == (wCntLim - WCKW)) rWCK <= 1;
    		
    		// Load input data and shift to output
    		if (wLOAD) begin
    			rSHL <= (wDL >> (24-DLEN)) ^ wCoding;
    			rSHR <= (wDR >> (24-DLEN)) ^ wCoding;
    		end
    		else begin
    			if (iBCKDIV) begin
    				if (rCNT[iBCKDIV-1:0] == ((1<<iBCKDIV)-1)) begin
    					rSHL <= rSHL << 1;
    					rSHR <= rSHR << 1;
    				end
    			end
    			else begin
    				rSHL <= rSHL << 1;
    				rSHR <= rSHR << 1;
    			end
    		end
    	end
    end
    
    //**** Deglitcher signal processing ****************
    always@ (posedge iCLK or negedge wDGCLR) begin
    	if (!wDGCLR) rDG <= 0;
    	else if (rCNT == wCntLim-1) rDG <= 1;
    	else if (rCNT == ((wDGLIM>>5)-1)) rDG <= 0;
    end
    
    endmodule
    Ошибку выдает такую:
    Код:
    Error (10734): Verilog HDL error at SAI_OUTPUT.v(320): iBCKDIV is not a constant
    Вот в этой строке:
    Код:
    if (rCNT[iBCKDIV-1:0] == ((1<<iBCKDIV)-1)) begin
    Александр.

  17. #176
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от And$er Посмотреть сообщение
    Вот в этой строке:
    Код:
    if (rCNT[iBCKDIV-1:0] == ((1<<iBCKDIV)-1)) begin
    А, ну да, в этой строке ошибка синтаксиса, как оно и пишет: в квадратных скобках допускаются только константы.
    Надо как-то условие по другому описать, сходу не соображу.

    Как-то так наверное:
    Код:
    if ((rCNT & {iBCKDIV{1*b1}}) == ((1<<iBCKDIV)-1))
    Только вместо звездочки апостроф (редактор автоматом заменяет апострофы).
    Проверьте в симуляторе что получается.

  18. #177
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    48
    Сообщений
    955

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Не компилируется так. Та же ошибка.
    Александр.

  19. #178
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,228

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Точно, для такого представления тоже надо константа.
    Кароче вот так переделал, вроде работает. Но фронты на выходе могут "поплыть", это надо отдельно оптимизировать.
    Вложения Вложения

  20. #179
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    48
    Сообщений
    955

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Точно, для такого представления тоже надо константа.
    Кароче вот так переделал, вроде работает. Но фронты на выходе могут "поплыть", это надо отдельно оптимизировать.
    Спасибо, Алексей! Попробую.
    Александр.

  21. #180
    Завсегдатай Аватар для Михаил45
    Регистрация
    09.03.2007
    Адрес
    Санкт-Петербург
    Возраст
    62
    Сообщений
    2,124

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Странно. Я думал что софтовый ресемплер должен быть как минимум не хуже.
    Единственное, что там скорее всего спад будет крутой (как в моем шапре), и фильтр однопроходной (с более длинной ИХ). Но это такое...
    А разрядность данных на выходе soxr можно задать 16 бит? Может там просто выход из ресемплера 24 бита, и где-то округление в 16 происходит некорректно...
    Проверил на конвейере 2х1541 режим 16фс в режиме байпаса ДФ2 и вкулюченном sorx:

    root@orangepi3-lts:~# cat /proc/asound/card*/pcm*p/sub*/hw_params
    closed
    closed
    access: MMAP_INTERLEAVED
    format: S32_LE
    subformat: STD
    channels: 2
    rate: 705600 (705600/1)
    period_size: 1024
    buffer_size: 2048

    Играет близко к твоему фильтру. Но чуть порезче. Я не умею литературно-поэтически по удифильски подбирать слова. Обратно вернулся к ДФ2. Можно в настройках soxr подбирать фильтры, но лень очень - нахуа, спрашивается, лучше слушать музыку.

Страница 9 из 11 Первая ... 7891011 Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •