Вроде так:
VX <= ( V7 & V6 & V5 & V4 & H9 & H8 ) + ( '0' & V8 & V7 & V6 & V5 & V4 );
ZXM-Phoenix rev.01 2048K, VG93 hw emulator
Непонял немного.
Я когда то на 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;
Последний раз редактировалось Mick; 16.07.2013 в 19:48.
AHDL ассемблер, VHDL и Verilog это Pascal и C, то есть языки высокого уровня, где можно не замарачиваться с RTL уровнем а описывать алгоритмы поведенчески, они тебе сами нагенерят сумматоров, они и делители и умножители нагенерят, правда асихронные и медленные
То что выше написали это конкатенация сигналов в векторы а потом сложение этих векторов
Mick, если бы писал модуль сумматора, то твой код вполне бы подошел. На VHDL такими вещами можно и не заморачиваться. Просто объединяй биты в слова, слова складывай - и все.
Мне кажется, тебе надо книгу почитать для примера. Суворова, Шейнин Проектирование цифровых систем на VHDL или автора Бибило
ZXM-Phoenix rev.01 2048K, VG93 hw emulator
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Конечно надо, только это боюсь затянется. По мне быстрее научусь если по примеру мозгового штурма.
Обмозговал раскладку памяти и как должны работать сумматоры, чтобы прибавлять 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
Ну и во вложении кусок схемы с измененными сумматорами.
Предыдущий файл я удалил за неактуальностью.
да так сделано в спектруме, но это не означает что так правильно )
по хорошему нужно примерно так
правда квартус выдаст 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"
Последний раз редактировалось shurik-ua; 17.07.2013 в 14:05.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)