Страница 3 из 3
Re: Возвращение к классической логике
Добавлено: Ср июл 17, 2024 19:54:55
Муркиз
С учётом, что для 86 разрешения дисплеев было максимальное 800х600 Super EGA, то делал. Прямая запись в видеопамять на теневую страницу и обмен вывода страниц. Мультфильмы делали по расчетным программа расчета машин.
И было это 35 лет назад...
Но вот отличать серьезное высказывание от сарказма или юмора - это , увы , не лечится, бедный совсем КуКу...
Re: Возвращение к классической логике
Добавлено: Ср июл 17, 2024 20:06:19
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]
Прекрати редактировать содержание своего текста после ответа, балабол ты наш.
Обосрался с программно-аппаратным комплексом Муркиз в том числе с программированием, так и запишем! Очередной перформанс не задался!
Re: Возвращение к классической логике
Добавлено: Ср авг 21, 2024 18:03:25
Слесарь
Ну как бы пытаюсь перейти на 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:

Re: Возвращение к классической логике
Добавлено: Ср авг 21, 2024 18:39:38
Transformer-V
Работаю над очередным проектом, все выполнено c нуля на классической логике и без МК, посути программа "размазана" на логике. Данная "железка" выполняет 4 функции.

Re: Возвращение к классической логике
Добавлено: Ср авг 21, 2024 20:51:32
Слесарь
Если так пойдет дальше, как с простым выводом чисел на индикатор, занимает так много элементов, то похоже не умещается даже самый простой мой проект в ПЛИС Циклон 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. Как быть? Как доработать код чтоб было вообще правильно??
Re: Возвращение к классической логике
Добавлено: Ср авг 21, 2024 21:00:15
Morroc
Re: Возвращение к классической логике
Добавлено: Пт авг 23, 2024 10:30:53
Transformer-V
[uquote="Слесарь",url="/forum/viewtopic.php?p=4617964#p4617964"]Если так пойдет дальше, как с простым выводом чисел на индикатор, занимает так много элементов, то похоже не умещается даже самый простой мой проект в ПЛИС Циклон 4. Надо долго переучиваться с процедурного программирования МК в программирование ПЛИС. В общем, походу надо возвращаться к самым истокам логических схем, как это все делалось при ограниченности ресурсов.[/uquote]
Вся громозкость решения кроется в делении (остатка от деления - %), для которого нужно много логических элементов. А так да, "истоки" всегда помогут - мешок логики, где по итогу родится очередной шкаф с платами усеянными логическими микросхемами и ROM
Re: Возвращение к классической логике
Добавлено: Пт авг 23, 2024 12:04:05
Слесарь
[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]
Да... первый вариант вроде годный. можно будет попробовать написать под него логику. Возможно будет использоваться заметно меньше элементов, чем логика умножения и деление без остатка.