Возвращение к классической логике

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
Ответить
Друг Кота
Аватара пользователя
Сообщения: 26082
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Сообщение Муркиз »

С учётом, что для 86 разрешения дисплеев было максимальное 800х600 Super EGA, то делал. Прямая запись в видеопамять на теневую страницу и обмен вывода страниц. Мультфильмы делали по расчетным программа расчета машин.

И было это 35 лет назад...

Но вот отличать серьезное высказывание от сарказма или юмора - это , увы , не лечится, бедный совсем КуКу...
Последний раз редактировалось Муркиз Ср июл 17, 2024 20:02:29, всего редактировалось 1 раз.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4298
Зарегистрирован: Пн окт 03, 2016 22:50:22

Сообщение Transformer-V »

[uquote="Муркиз",url="/forum/viewtopic.php?p=4603468#p4603468"]С учётом, что для 86 разрешения дисплеев было максимальное 800х600 Super EGA, то делал. Прямая запись в видеопамять на теневую страницу и обмен вывода страниц. Мультфильмы делали по расчетным программа расчета машин.

И было это 35 лет назад...[/uquote]
Гомерически ржу. Это очередной перл года!
Учитывая, что на представленном видео операционная система Windows, ты обосрался в тройне лопоча что - то тут про DOS. Ничего подобного ты не делал и не сделаешь от слова совсем. Для затравки данный дисплейчик с разрешением 128x128 подключен к USB порту, без МК и все это работает аки "швейцарские часы" в среде Windows.

Какие мультфильмы, на дисплее потоковое видео с ютубчика, без конвертации и мультфильмов.

Добавлено after 5 minutes 17 seconds:
[uquote="Муркиз",url="/forum/viewtopic.php?p=4603468#p4603468"]Но вот отличать серьезное высказывание от сарказма или юмора - это , увы , не лечится, бедный совсем КуКу...[/uquote]
Прекрати редактировать содержание своего текста после ответа, балабол ты наш.

Обосрался с программно-аппаратным комплексом Муркиз в том числе с программированием, так и запишем! Очередной перформанс не задался!
Контактная информация:
Реклама
Друг Кота
Сообщения: 4918
Зарегистрирован: Ср июл 14, 2010 18:27:52

Сообщение Слесарь »

Ну как бы пытаюсь перейти на Verilog
Для вывода четырех знаков числа на семисегментный четырехзначный индикатор написал такую конструкцию модуля:

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

module translate16to10 ( vol, sign_3, sign_2, sign_1, sign_0 );

input wire  [23:0]vol;
output reg [3:0]sign_0;
output reg [3:0]sign_1;
output reg [3:0]sign_2;
output reg [3:0]sign_3;

reg [3:0] mod1;
reg [6:0] mod10;
reg [9:0] mod100;
reg [12:0] mod1000;

always@(*)
begin
	if( vol < 4'd10 )
	begin
			sign_0 = vol[3:0];
			sign_1 = 4'b0000;
			sign_2 = 4'b0000;
			sign_3 = 4'b0000;
	end
	else
	begin
		if( vol < 7'd100 )
		begin
			mod10 = vol / 5'd10;
			mod1 = vol - ( mod10 * 5'd10 );

			sign_0 = mod1;
			sign_1 = mod10;
			sign_2 = 4'b0000;
			sign_3 = 4'b0000;
		end
		else
		if( vol < 10'd1000 )
		begin
			mod100 = vol / 7'd100;
			mod10 = ( vol - ( mod100 * 7'd100 ) ) / 4'd10;
			mod1 = vol - ( mod100 * 7'd100 ) - ( mod10 * 4'd10 );

			sign_0 = mod1;
			sign_1 = mod10;
			sign_2 = mod100;
			sign_3 = 4'b0000;
		end
		else
		if( vol < 14'd10000 )
		begin
			mod1000 = vol / 10'd1000;
			mod100 = ( vol - ( mod1000 * 10'd1000 ) )  / 7'd100;
			mod10 = ( vol - (( mod1000 * 10'd1000 ) ) - ( mod100 * 7'd100 ) ) / 4'd10;
			mod1 = vol - (mod1000 * 10'd1000 ) - ( mod100 * 7'd100 ) - ( mod10 * 4'd10 );

			sign_0 = mod1;
			sign_1 = mod10;
			sign_2 = mod100;
			sign_3 = mod1000;
		end
		else
		begin
			sign_0 = 4'b0000;
			sign_1 = 4'b0000;
			sign_2 = 4'b0000;
			sign_3 = 4'b0000;
		end
	end	
end

endmodule
где вход модуля vol, входное число от 0 до 9999, а sign_0 .... sign_3, это выходы знаков числа на семисегментный числовой индикатор.

Конструкция получилась очень громоздкой. Возможно ли упростить конструкцию?

Добавлено after 10 minutes 21 second:
Изображение

Изображение
Вложения
7 segment 2.jpg
(84.63 КБ) 241 скачивание
7 segment.jpg
(102.59 КБ) 250 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 4298
Зарегистрирован: Пн окт 03, 2016 22:50:22

Сообщение Transformer-V »

Работаю над очередным проектом, все выполнено c нуля на классической логике и без МК, посути программа "размазана" на логике. Данная "железка" выполняет 4 функции.

Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 4918
Зарегистрирован: Ср июл 14, 2010 18:27:52

Сообщение Слесарь »

Если так пойдет дальше, как с простым выводом чисел на индикатор, занимает так много элементов, то похоже не умещается даже самый простой мой проект в ПЛИС Циклон 4. Надо долго переучиваться с процедурного программирования МК в программирование ПЛИС. В общем, походу надо возвращаться к самым истокам логических схем, как это все делалось при ограниченности ресурсов.

Добавлено after 1 hour 2 minutes 48 seconds:
Оптимизировал код, уменьшил на 200 число используемых элементов ПЛИС.
Как же все таки уйти от умножения и деления для такой задачи?

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

module translate16to10 ( vol, sign_3, sign_2, sign_1, sign_0 );

input wire  [23:0]vol;
output reg [3:0]sign_0;
output reg [3:0]sign_1;
output reg [3:0]sign_2;
output reg [3:0]sign_3;

reg [13:0] mult1; // max 9000
reg [9:0]  mult2; // max 900

always@(vol)
begin
	if( vol < 4'd10 )
	begin
			sign_0 = vol[3:0];
			sign_1 = 4'b0000;
			sign_2 = 4'b0000;
			sign_3 = 4'b0000;
	end
	else
	begin
		if( vol < 7'd100 )
		begin
			sign_1 = vol / 5'd10;
			sign_0 = vol - ( sign_1 * 5'd10 );
			sign_2 = 4'b0000;
			sign_3 = 4'b0000;
		end
		else
		if( vol < 10'd1000 )
		begin
			sign_2 = vol / 7'd100;
			mult2 =  sign_2 * 7'd100;	
			sign_1 = ( vol - mult2 ) / 4'd10;
			sign_0 = vol - mult2 - ( sign_1 * 4'd10 );
			sign_3 = 4'b0000;
		end
		else
		if( vol < 14'd10000 )
		begin
			sign_3 = vol / 10'd1000;
			mult1 = sign_3 * 10'd1000;
			sign_2 = ( vol - mult1 )  / 7'd100;
			mult2 =  sign_2 * 7'd100;
			sign_1 = ( vol - mult1 - mult2 ) / 4'd10;
			sign_0 = vol - mult1 - mult2 - ( sign_1 * 4'd10 );
		end
		else
		begin
			sign_0 = 4'b0000;
			sign_1 = 4'b0000;
			sign_2 = 4'b0000;
			sign_3 = 4'b0000;
		end
	end	
end

endmodule
Добавлено after 42 minutes 16 seconds:
Пытаюсь всеми силами изгнать из себя процедурщика программера МК, для этого требуется особенный обряд, дополнительно оптимизировал код Verilog и сократил число используемых элементов ПЛИС на 750 шт. Результат вроде тот же, но надо еще тестировать.
Что еще можно сделать для решения этой задачи?
Как избавиться от умножения и деления?

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

module translate16to10 ( vol, sign_3, sign_2, sign_1, sign_0 );

input wire  [23:0]vol;
output reg [3:0]sign_0;
output reg [3:0]sign_1;
output reg [3:0]sign_2;
output reg [3:0]sign_3;

reg [13:0] mult1; // max 9000
reg [9:0]  mult2; // max 900

always@(vol)
begin
	if( vol < 14'd10000 )
	begin
		sign_3 = vol / 10'd1000;
		mult1 = sign_3 * 10'd1000;
		sign_2 = ( vol - mult1 )  / 7'd100;
		mult2 =  sign_2 * 7'd100;
		sign_1 = ( vol - mult1 - mult2 ) / 4'd10;
		sign_0 = vol - mult1 - mult2 - ( sign_1 * 4'd10 );
	end
	else
	begin
		sign_0 = 4'b0000;
		sign_1 = 4'b0000;
		sign_2 = 4'b0000;
		sign_3 = 4'b0000;
	end
end

endmodule
Изображение

Добавлено after 18 minutes 16 seconds:
Хочется понять немного теории, использую в коде регистры reg (ячейки памяти) mult1, mult2, но синтезатор электронной схемы насколько понимаю в схеме не применяет эти регистры reg, насколько понимаю использует провода wire между делителем и множителем в схеме. То есть, синтезатор схемы упростил и сделал без дополнительных регистров. Но в коде блока always, я не могу использовать провода wire вместо регистров reg. Как быть? Как доработать код чтоб было вообще правильно??
Вложения
7 segment 3.jpg
(48.94 КБ) 180 скачиваний
Реклама
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4298
Зарегистрирован: Пн окт 03, 2016 22:50:22

Сообщение Transformer-V »

[uquote="Слесарь",url="/forum/viewtopic.php?p=4617964#p4617964"]Если так пойдет дальше, как с простым выводом чисел на индикатор, занимает так много элементов, то похоже не умещается даже самый простой мой проект в ПЛИС Циклон 4. Надо долго переучиваться с процедурного программирования МК в программирование ПЛИС. В общем, походу надо возвращаться к самым истокам логических схем, как это все делалось при ограниченности ресурсов.[/uquote]
Вся громозкость решения кроется в делении (остатка от деления - %), для которого нужно много логических элементов. А так да, "истоки" всегда помогут - мешок логики, где по итогу родится очередной шкаф с платами усеянными логическими микросхемами и ROM
Контактная информация:
Друг Кота
Сообщения: 4918
Зарегистрирован: Ср июл 14, 2010 18:27:52

Сообщение Слесарь »

[uquote="Transformer-V",url="/forum/viewtopic.php?p=4618536#p4618536"]Вся громозкость решения кроется в делении (остатка от деления - %), для которого нужно много логических элементов. А так да, "истоки" всегда помогут - мешок логики, где по итогу родится очередной шкаф с платами усеянными логическими микросхемами и ROM[/uquote]

Так у меня вроде деление без остатка. Работаю с целыми числами.

Добавлено after 2 minutes 2 seconds:
[uquote="Morroc",url="/forum/viewtopic.php?p=4618009#p4618009"]?[/uquote]

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

Вернуться в «МЯЯЯУ!»