C = A + B + Carry ?
A,B к примеру 8 бит, С-9бит, 9 бит как знак переноса для следующего сумматора
Вид для печати
Вроде так:
VX <= ( V7 & V6 & V5 & V4 & H9 & H8 ) + ( '0' & V8 & V7 & V6 & V5 & V4 );
Непонял немного. :)
Я когда то на AHDL писал сумматор, вот поднял AHDL язык и чуток переложил. Получилось вот как, если чего не напутал.
Код:------------------------------------------------------------------------------------
-- Формирование адресов VX
------------------------------------------------------------------------------------
VX5 <= H8 xor V4;
VX5_CY <= (H8 and V4) or (H8 xor V4);
VX6 <= (H9 xor V5) xor VX5_CY ;
VX6_CY <= (H9 and V5) or ((H9 xor V5) and VX5_CY);
VX7 <= V4 xor V6 xor VX6_CY;
VX7_CY <= (V4 and V6) or ((V4 xor V6) and VX6_CY);
VX8 <= (V5 xor V7) xor VX7_CY;
VX8_CY <= (V5 and V7) or ((V5 xor V7) and VX7_CY);
VX9 <= (V6 xor V8) xor VX8_CY;
VX9_CY <= (V6 and V8) or ((H9 xor V5) and VX8_CY);
VX10 <= (V7 xor '0') xor VX9_CY;
AHDL ассемблер, VHDL и Verilog это Pascal и C, то есть языки высокого уровня, где можно не замарачиваться с RTL уровнем а описывать алгоритмы поведенчески, они тебе сами нагенерят сумматоров, они и делители и умножители нагенерят, правда асихронные и медленные
То что выше написали это конкатенация сигналов в векторы а потом сложение этих векторов
Mick, если бы писал модуль сумматора, то твой код вполне бы подошел. На VHDL такими вещами можно и не заморачиваться. Просто объединяй биты в слова, слова складывай - и все.
Мне кажется, тебе надо книгу почитать для примера. Суворова, Шейнин Проектирование цифровых систем на VHDL или автора Бибило
Конечно надо, только это боюсь затянется. По мне быстрее научусь если по примеру мозгового штурма. :)
Обмозговал раскладку памяти и как должны работать сумматоры, чтобы прибавлять 50h с каждой строкой (25 текстовых строк )
Теоритическая раскладка
Общая раскладка ОЗУКод:V8 V7 V6 V5 V4 H9 H8 H7 H6 H5 H4 H3 VA11 VA10 VA9 VA8 VA7 VA6 VA5 VA4 VA3 VA2 VA1 VA0
0 0 0 0 0 0 0 0 0 0 0 0 - 1 строка 000h -> 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 - 2 строка 050h -> 0 0 0 0 0 1 0 1 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 - 3 строка 0A0h -> 0 0 0 0 1 0 1 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0 0 0 - 4 строка 0F0h -> 0 0 0 0 1 1 1 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 - 5 строка 140h -> 0 0 0 1 0 1 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0 0 - 6 строка 190h -> 0 0 0 1 1 0 0 1 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 - 7 строка 1E0h -> 0 0 0 1 1 1 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 - 8 строка 230h -> 0 0 1 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 - 9 строка 280h -> 0 0 1 0 1 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0 0 0 0 0 - 10 строка 2D0h -> 0 0 1 0 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0 - 11 строка 320h -> 0 0 1 1 0 0 1 0 0 0 0 0
0 1 0 1 1 0 0 0 0 0 0 0 - 12 строка 370h -> 0 0 1 1 0 1 1 1 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 0 - 13 строка 3C0h -> 0 0 1 1 1 1 0 0 0 0 0 0
0 1 1 0 1 0 0 0 0 0 0 0 - 14 строка 410h -> 0 1 0 0 0 0 0 1 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 - 15 строка 460h -> 0 1 0 0 0 1 1 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0 0 0 - 16 строка 4B0h -> 0 1 0 0 1 0 1 1 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 - 17 строка 500h -> 0 1 0 1 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 0 0 0 0 - 18 строка 550h -> 0 1 0 1 0 1 0 1 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 - 19 строка 5A0h -> 0 1 0 1 1 0 1 0 0 0 0 0
1 0 0 1 1 0 0 0 0 0 0 0 - 20 строка 5F0h -> 0 1 0 1 1 1 1 1 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0 - 21 строка 640h -> 0 1 1 0 0 1 0 0 0 0 0 0
1 0 1 0 1 0 0 0 0 0 0 0 - 22 строка 690h -> 0 1 1 0 1 0 0 1 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0 0 - 23 строка 6E0h -> 0 1 1 0 1 1 1 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 - 24 строка 730h -> 0 1 1 1 0 0 1 1 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 - 25 строка 780h -> 0 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 H9 H8 H7
+
V8 V7 V6 V5 V4 0 0
+
0 0 V8 V7 V6 V5 V4 VX6 VX5 VX4 VX3 VX2 VX1 VX0
0 0 0 0 0 0 0
0 0 0 0 0 0 0 - 1 строка 000h -> 0 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 1 - 2 строка 050h -> 0 0 0 0 1 0 1
0 0 0 1 0 0 0
0 0 0 0 0 1 0 - 3 строка 0A0h -> 0 0 0 1 0 1 0
0 0 0 1 1 0 0
0 0 0 0 0 1 1 - 4 строка 0F0h -> 0 0 0 1 1 1 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0 - 5 строка 140h -> 0 0 1 0 1 0 0
0 0 1 0 1 0 0
0 0 0 0 1 0 1 - 6 строка 190h -> 0 0 1 1 0 0 1
0 0 1 1 0 0 0
0 0 0 0 1 1 0 - 7 строка 1E0h -> 0 0 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 0 1 1 1 - 8 строка 230h -> 0 1 0 0 0 1 1
0 1 0 0 0 0 0
0 0 0 1 0 0 0 - 9 строка 280h -> 0 1 0 1 0 0 0
0 1 0 0 1 0 0
0 0 0 1 0 0 1 - 10 строка 2D0h -> 0 1 0 1 1 0 1
0 1 0 1 0 0 0
0 0 0 1 0 1 0 - 11 строка 320h -> 0 1 1 0 0 1 0
0 1 0 1 1 0 0
0 0 0 1 0 1 1 - 12 строка 370h -> 0 1 1 0 1 1 1
0 1 1 0 0 0 0
0 0 0 1 1 0 0 - 13 строка 3C0h -> 0 1 1 1 1 0 0
0 1 1 0 1 0 0
0 0 0 1 1 0 1 - 14 строка 410h -> 1 0 0 0 0 0 1
0 1 1 1 0 0 0
0 0 0 1 1 1 0 - 15 строка 460h -> 1 0 0 0 1 1 0
0 1 1 1 1 0 0
0 0 0 1 1 1 1 - 16 строка 4B0h -> 1 0 0 1 0 1 1
1 0 0 0 0 0 0
0 0 1 0 0 0 0 - 17 строка 500h -> 1 0 1 0 0 0 0
1 0 0 0 1 0 0
0 0 1 0 0 0 1 - 18 строка 550h -> 1 0 1 0 1 0 1
1 0 0 1 0 0 0
0 0 1 0 0 1 0 - 19 строка 5A0h -> 1 0 1 1 0 1 0
1 0 0 1 1 0 0
0 0 1 0 0 1 1 - 20 строка 5F0h -> 1 0 1 1 1 1 1
1 0 1 0 0 0 0
0 0 1 0 1 0 0 - 21 строка 640h -> 1 1 0 0 1 0 0
1 0 1 0 1 0 0
0 0 1 0 1 0 1 - 22 строка 690h -> 1 1 0 1 0 0 1
1 0 1 1 0 0 0
0 0 1 0 1 1 0 - 23 строка 6E0h -> 1 1 0 1 1 1 0
1 0 1 1 1 0 0
0 0 1 0 1 1 1 - 24 строка 730h -> 1 1 1 0 0 1 1
1 1 0 0 0 0 0
0 0 1 1 0 0 0 - 25 строка 780h -> 1 1 1 1 0 0 0
http://s019.radikal.ru/i620/1307/1d/db05c524ab4b.gif
Ну и во вложении кусок схемы с измененными сумматорами.
Предыдущий файл я удалил за неактуальностью.
да так сделано в спектруме, но это не означает что так правильно )
по хорошему нужно примерно так
правда квартус выдаст warning что клок vsync не прописан в sdc файле, поэтому нужно его там создать )Код:--INT
process(vsync,сpu_m1,cpu_iorq)
begin
if (cpu_iorq and cpu_m1) = '1' then
cpu_int <= '0';
elsif vsync'event and vsync = '1' then
cpu_int <= '1';
end if;
end process;
VGA_VSYNC <= vsync;
p.s. активный уровень сигналов сpu_m1 и cpu_iorq - "1", для активного "0" будет - "if (cpu_iorq or cpu_m1) = '0' then"