User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 30

Тема: Расширения fpga-клонов

  1. #11

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    974
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чойтоясегоднядурной...
    Соррян за жуткий оффтоп.
    Со стороны это выглядит так:
    "ТС якобы что-то изваял, привёл куски кода (только смысла в них ни какого).
    Потом "свалил в кусты" типо подожду пока кто нибудь не клюнет и не сделает часть работы (в которой нифига не шарит, либо лень).
    Прикинулся шлангом (что такое гугл не знает и где торрент тоже).
    Докучи намекнул что все ... а я дартаньян. может к другим мушкетёрам податься ?"
    Ещё раз сорри... если слишком грубо.
    ПС: может я ошибаюсь в ситуации? и всё совсем не так на деле?

  2. #12

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    Чойтоясегоднядурной...
    Только сегодня?
    Цитата Сообщение от AlexG Посмотреть сообщение
    ТС якобы что-то изваял, привёл куски кода (только смысла в них ни какого).
    Толстый троллинг. Почитай название топика. Расширение клонов на фпга подразумевает изменение их прошивки, а для этого нужно изменить исходные коды прошивки. Ты это знал?
    Я взял прошивку с гитхаба за базу и написал, что в ней я конкретно меняю для получения результата. Знаток вхдл? Докажи, что в кусках кода нет никакого смысла.
    Цитата Сообщение от AlexG Посмотреть сообщение
    Потом "свалил в кусты" типо подожду пока кто нибудь не клюнет и не сделает часть работы (в которой нифига не шарит, либо лень).
    Подожду, пока кто-нибудь не присоединится к работе. Ты понимаешь, что правку кода вдп можно одному не потянуть? Докажи, что я нифига не шарю.
    Цитата Сообщение от AlexG Посмотреть сообщение
    Прикинулся шлангом (что такое гугл не знает и где торрент тоже).
    Это тебе не музычку скачивать. Кроме того, что бы найти эти старые программы, их нужно ещё правильно установить и настроить.
    Цитата Сообщение от AlexG Посмотреть сообщение
    Докучи намекнул что все ... а я дартаньян. может к другим мушкетёрам податься ?"
    Ты наверно подсознательно причислил себя к нехорошим людям, о которых я писал.
    Цитата Сообщение от AlexG Посмотреть сообщение
    ПС: может я ошибаюсь в ситуации? и всё совсем не так на деле?
    Зачем ты написал в этот топик? Ты не понимаешь о чём речь в этом топике, не понимаешь, о каком расширении я написал в первом посту, не понимаешь принцип этого расширения,не понимаешь кусков кода, да и вообще, тебе этот топик безразличен. Тогда зачем ты сюда пишешь?

    - - - Добавлено - - -

    Пацаны, не ведитесь на залётных циркачей. Им этот топик по-барабану. Они даже не могут понять о чём речь вообще.
    ¡Un momento, señor fiscal!


  3. #13

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    974
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сегодня мне просто лень.
    Посему кратко:
    VHDL, Verilog - это один из моих "кусков хлеба" - так что, увы, я в нем разбираюсь.
    "Правильно установить и настроить" - обычно эти знания требуются при работе в линуксе. в винде обычно всё сводится к запуску инсталлятора. Если с эти у кого-то сложности то это его печаль.

  4. #14

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    Сегодня мне просто лень.
    Так ты даже мои правки не читал! Циркач!

    - - - Добавлено - - -

    Цитата Сообщение от AlexG Посмотреть сообщение
    в винде обычно всё сводится к запуску инсталлятора
    А может и не сводИться.
    Последний раз редактировалось Smalovsky; 31.07.2025 в 17:04.
    ¡Un momento, señor fiscal!


  5. #15

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Автор оригинальной прошивки недавно умер...
    https://tinkerdifferent.com/threads/...-estrade.4501/
    Может, для кого-то это важно узнать.
    А я ему уже хотел письмо писать, для разъяснения назначения сигналов в спрайтовом движке... Буду писать( видимо придётся, слишком сложный спрайтовый движок) в команды Мистера и Тимгенезис , у них прошивки основаны на прошивке автора. Такие дела..
    Последний раз редактировалось Smalovsky; 03.08.2025 в 14:42.
    ¡Un momento, señor fiscal!


  6. #16

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дошёл до редактирования раздела реализации -- PIXEL COUNTER AND OUTPUT.
    Сделаю необходимые пояснения. Информация о пикселях строки хранится в трёх буферах строк OBJ_COLINFO, BGA_COLINFO, BGB_COLINFO,
    представляющих собой двухпортовую память. Каждый буфер строки хранит информацию о 320 пикселях строки. Буфер OBJ_COLINFO хранит пиксели
    строки спрайтового слоя. Буферы BGA_COLINFO и BGB_COLINFO хранят информацию о пикселях тайловых слоёв А и Б. В функциональном блоке PIXEL COUNTER AND OUTPUT
    происходит считывание информации для пикселя выводимого на экран из каждого источника - буферов строк и из регистра фонового цвета, выбор согласно информации из источников( приоритету и значению номеру цвета)
    конечного источника информации о пикселе и получению значения цвета из CRAM согласно этому источнику. Это приблизительно показано на следующей схеме:



    Информация о пикселе в семибитных ячейках буферов строк состоит из следующих битовых полей:
    PRI - бит приоритета, PALNO -номер палитры, COLNO-номер цвета в палитре.
    Для регистра фонового цвета бит приоритета не нужен.
    Выбор значения цвета из массива CRAM происходит по индексу равному десятичному значению конкатенации PALNO & COLNO.

    За реализацию показанной выше приближонной схемы отвечает участок кода в операторе case PIXDIV is, в ветви:

    when "0011" =>
    if OBJ_COLINFO_Q_B(3 downto 0) /= "0000" and OBJ_COLINFO_Q_B(6) = '1' then
    T_COLOR <= CRAM( CONV_INTEGER(OBJ_COLINFO_Q_B(5 downto 0)) );
    elsif BGA_COLINFO_Q_B(3 downto 0) /= "0000" and BGA_COLINFO_Q_B(6) = '1' then
    T_COLOR <= CRAM( CONV_INTEGER(BGA_COLINFO_Q_B(5 downto 0)) );
    elsif BGB_COLINFO_Q_B(3 downto 0) /= "0000" and BGB_COLINFO_Q_B(6) = '1' then
    T_COLOR <= CRAM( CONV_INTEGER(BGB_COLINFO_Q_B(5 downto 0)) );
    elsif OBJ_COLINFO_Q_B(3 downto 0) /= "0000" then
    T_COLOR <= CRAM( CONV_INTEGER(OBJ_COLINFO_Q_B(5 downto 0)) );
    elsif BGA_COLINFO_Q_B(3 downto 0) /= "0000" then
    T_COLOR <= CRAM( CONV_INTEGER(BGA_COLINFO_Q_B(5 downto 0)) );
    elsif BGB_COLINFO_Q_B(3 downto 0) /= "0000" then
    T_COLOR <= CRAM( CONV_INTEGER(BGB_COLINFO_Q_B(5 downto 0)) );
    else
    T_COLOR <= CRAM( CONV_INTEGER(BGCOL) );
    end if;

    Необходимо изменить этот код, чтобы можно было выбирать из 128 значений цветов CRAM. Впервую очередь, необходимо расширить память OBJ_COLINFO
    до ширины шины данных в 8 бит. Ячейка памяти OBJ_COLINFO будет содержать конкатенацию битовых полей BS & PRI & PALNO & COLNO. Новый бит BS в старшем разряде ячейки - бит переключения палитровых банков.
    Буфера строк имеют тип vdp_colinfo( описан в файле vdp_colinfo.vhd). По аналогии с этим типом при помощи Мегавизард( Memory Compilier) в Квартус 2 делаем тип vdp_ext_colinfo, который отличается торлько шириной шины
    данных каналов в 8 бит. Что у меня вышло:

    vdp_ext_colinfo


    Код:
    -- megafunction wizard: %RAM: 2-PORT%
    -- GENERATION: STANDARD
    -- VERSION: WM1.0
    -- MODULE: altsyncram 
    
    -- ============================================================
    -- File Name: vdp_ext_colinfo.vhd
    -- Megafunction Name(s):
    -- 			altsyncram
    --
    -- Simulation Library Files(s):
    -- 			altera_mf
    -- ============================================================
    -- ************************************************************
    -- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
    --
    -- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition
    -- ************************************************************
    
    
    --Copyright (C) 1991-2010 Altera Corporation
    --Your use of Altera Corporation's design tools, logic functions 
    --and other software and tools, and its AMPP partner logic 
    --functions, and any output files from any of the foregoing 
    --(including device programming or simulation files), and any 
    --associated documentation or information are expressly subject 
    --to the terms and conditions of the Altera Program License 
    --Subscription Agreement, Altera MegaCore Function License 
    --Agreement, or other applicable license agreement, including, 
    --without limitation, that your use is for the sole purpose of 
    --programming logic devices manufactured by Altera and sold by 
    --Altera or its authorized distributors.  Please refer to the 
    --applicable agreement for further details.
    
    
    LIBRARY ieee;
    USE ieee.std_logic_1164.all;
    
    LIBRARY altera_mf;
    USE altera_mf.all;
    
    ENTITY vdp_ext_colinfo IS
    	PORT
    	(
    		address_a		: IN STD_LOGIC_VECTOR (8 DOWNTO 0);
    		address_b		: IN STD_LOGIC_VECTOR (8 DOWNTO 0);
    		clock		: IN STD_LOGIC  := '1';
    		data_a		: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
    		data_b		: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
    		wren_a		: IN STD_LOGIC  := '0';
    		wren_b		: IN STD_LOGIC  := '0';
    		q_a		: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
    		q_b		: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
    	);
    END vdp_ext_colinfo;
    
    
    ARCHITECTURE SYN OF vdp_ext_colinfo IS
    
    	SIGNAL sub_wire0	: STD_LOGIC_VECTOR (7 DOWNTO 0);
    	SIGNAL sub_wire1	: STD_LOGIC_VECTOR (7 DOWNTO 0);
    
    
    
    	COMPONENT altsyncram
    	GENERIC (
    		address_aclr_a		: STRING;
    		address_aclr_b		: STRING;
    		address_reg_b		: STRING;
    		indata_aclr_a		: STRING;
    		indata_aclr_b		: STRING;
    		indata_reg_b		: STRING;
    		intended_device_family		: STRING;
    		lpm_type		: STRING;
    		numwords_a		: NATURAL;
    		numwords_b		: NATURAL;
    		operation_mode		: STRING;
    		outdata_aclr_a		: STRING;
    		outdata_aclr_b		: STRING;
    		outdata_reg_a		: STRING;
    		outdata_reg_b		: STRING;
    		power_up_uninitialized		: STRING;
    		read_during_write_mode_mixed_ports		: STRING;
    		widthad_a		: NATURAL;
    		widthad_b		: NATURAL;
    		width_a		: NATURAL;
    		width_b		: NATURAL;
    		width_byteena_a		: NATURAL;
    		width_byteena_b		: NATURAL;
    		wrcontrol_aclr_a		: STRING;
    		wrcontrol_aclr_b		: STRING;
    		wrcontrol_wraddress_reg_b		: STRING
    	);
    	PORT (
    			wren_a	: IN STD_LOGIC ;
    			clock0	: IN STD_LOGIC ;
    			wren_b	: IN STD_LOGIC ;
    			address_a	: IN STD_LOGIC_VECTOR (8 DOWNTO 0);
    			address_b	: IN STD_LOGIC_VECTOR (8 DOWNTO 0);
    			q_a	: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
    			q_b	: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
    			data_a	: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
    			data_b	: IN STD_LOGIC_VECTOR (7 DOWNTO 0)
    	);
    	END COMPONENT;
    
    BEGIN
    	q_a    <= sub_wire0(7 DOWNTO 0);
    	q_b    <= sub_wire1(7 DOWNTO 0);
    
    	altsyncram_component : altsyncram
    	GENERIC MAP (
    		address_aclr_a => "NONE",
    		address_aclr_b => "NONE",
    		address_reg_b => "CLOCK0",
    		indata_aclr_a => "NONE",
    		indata_aclr_b => "NONE",
    		indata_reg_b => "CLOCK0",
    		intended_device_family => "Stratix",
    		lpm_type => "altsyncram",
    		numwords_a => 512,
    		numwords_b => 512,
    		operation_mode => "BIDIR_DUAL_PORT",
    		outdata_aclr_a => "NONE",
    		outdata_aclr_b => "NONE",
    		outdata_reg_a => "CLOCK0",
    		outdata_reg_b => "CLOCK0",
    		power_up_uninitialized => "FALSE",
    		read_during_write_mode_mixed_ports => "OLD_DATA",
    		widthad_a => 9,
    		widthad_b => 9,
    		width_a => 8,
    		width_b => 8,
    		width_byteena_a => 1,
    		width_byteena_b => 1,
    		wrcontrol_aclr_a => "NONE",
    		wrcontrol_aclr_b => "NONE",
    		wrcontrol_wraddress_reg_b => "CLOCK0"
    	)
    	PORT MAP (
    		wren_a => wren_a,
    		clock0 => clock,
    		wren_b => wren_b,
    		address_a => address_a,
    		address_b => address_b,
    		data_a => data_a,
    		data_b => data_b,
    		q_a => sub_wire0,
    		q_b => sub_wire1
    	);
    
    
    
    END SYN;
    
    -- ============================================================
    -- CNX file retrieval info
    -- ============================================================
    -- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
    -- Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0"
    -- Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0"
    -- Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0"
    -- Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0"
    -- Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0"
    -- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
    -- Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
    -- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
    -- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0"
    -- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
    -- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0"
    -- Retrieval info: PRIVATE: CLRdata NUMERIC "0"
    -- Retrieval info: PRIVATE: CLRq NUMERIC "0"
    -- Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0"
    -- Retrieval info: PRIVATE: CLRrren NUMERIC "0"
    -- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0"
    -- Retrieval info: PRIVATE: CLRwren NUMERIC "0"
    -- Retrieval info: PRIVATE: Clock NUMERIC "0"
    -- Retrieval info: PRIVATE: Clock_A NUMERIC "0"
    -- Retrieval info: PRIVATE: Clock_B NUMERIC "0"
    -- Retrieval info: PRIVATE: ECC NUMERIC "0"
    -- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
    -- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0"
    -- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1"
    -- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
    -- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
    -- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Stratix"
    -- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
    -- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
    -- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
    -- Retrieval info: PRIVATE: MEMSIZE NUMERIC "4096"
    -- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0"
    -- Retrieval info: PRIVATE: MIFfilename STRING ""
    -- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "3"
    -- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0"
    -- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "1"
    -- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
    -- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "1"
    -- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "4"
    -- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "4"
    -- Retrieval info: PRIVATE: REGdata NUMERIC "1"
    -- Retrieval info: PRIVATE: REGq NUMERIC "1"
    -- Retrieval info: PRIVATE: REGrdaddress NUMERIC "0"
    -- Retrieval info: PRIVATE: REGrren NUMERIC "0"
    -- Retrieval info: PRIVATE: REGwraddress NUMERIC "1"
    -- Retrieval info: PRIVATE: REGwren NUMERIC "1"
    -- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
    -- Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0"
    -- Retrieval info: PRIVATE: UseDPRAM NUMERIC "1"
    -- Retrieval info: PRIVATE: VarWidth NUMERIC "0"
    -- Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "8"
    -- Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "8"
    -- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "8"
    -- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "8"
    -- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0"
    -- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "1"
    -- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0"
    -- Retrieval info: PRIVATE: enable NUMERIC "0"
    -- Retrieval info: PRIVATE: rden NUMERIC "0"
    -- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE"
    -- Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE"
    -- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK0"
    -- Retrieval info: CONSTANT: INDATA_ACLR_A STRING "NONE"
    -- Retrieval info: CONSTANT: INDATA_ACLR_B STRING "NONE"
    -- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK0"
    -- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Stratix"
    -- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
    -- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "512"
    -- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "512"
    -- Retrieval info: CONSTANT: OPERATION_MODE STRING "BIDIR_DUAL_PORT"
    -- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
    -- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE"
    -- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0"
    -- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "CLOCK0"
    -- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
    -- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "OLD_DATA"
    -- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "9"
    -- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "9"
    -- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
    -- Retrieval info: CONSTANT: WIDTH_B NUMERIC "8"
    -- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
    -- Retrieval info: CONSTANT: WIDTH_BYTEENA_B NUMERIC "1"
    -- Retrieval info: CONSTANT: WRCONTROL_ACLR_A STRING "NONE"
    -- Retrieval info: CONSTANT: WRCONTROL_ACLR_B STRING "NONE"
    -- Retrieval info: CONSTANT: WRCONTROL_WRADDRESS_REG_B STRING "CLOCK0"
    -- Retrieval info: USED_PORT: address_a 0 0 9 0 INPUT NODEFVAL address_a[8..0]
    -- Retrieval info: USED_PORT: address_b 0 0 9 0 INPUT NODEFVAL address_b[8..0]
    -- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC clock
    -- Retrieval info: USED_PORT: data_a 0 0 8 0 INPUT NODEFVAL data_a[7..0]
    -- Retrieval info: USED_PORT: data_b 0 0 8 0 INPUT NODEFVAL data_b[7..0]
    -- Retrieval info: USED_PORT: q_a 0 0 8 0 OUTPUT NODEFVAL q_a[7..0]
    -- Retrieval info: USED_PORT: q_b 0 0 8 0 OUTPUT NODEFVAL q_b[7..0]
    -- Retrieval info: USED_PORT: wren_a 0 0 0 0 INPUT GND wren_a
    -- Retrieval info: USED_PORT: wren_b 0 0 0 0 INPUT GND wren_b
    -- Retrieval info: CONNECT: @data_a 0 0 8 0 data_a 0 0 8 0
    -- Retrieval info: CONNECT:     @Wren_a 0 0 0 0 wren_a 0 0 0 0
    -- Retrieval info: CONNECT: q_a 0 0 8 0 @q_a 0 0 8 0
    -- Retrieval info: CONNECT: q_b 0 0 8 0 @q_b 0 0 8 0
    -- Retrieval info: CONNECT: @address_a 0 0 9 0 address_a 0 0 9 0
    -- Retrieval info: CONNECT: @data_b 0 0 8 0 data_b 0 0 8 0
    -- Retrieval info: CONNECT: @address_b 0 0 9 0 address_b 0 0 9 0
    -- Retrieval info: CONNECT:     @Wren_b 0 0 0 0 wren_b 0 0 0 0
    -- Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
    -- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo.vhd TRUE
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo.inc FALSE
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo.cmp TRUE
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo.bsf FALSE
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo_inst.vhd FALSE
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo_waveforms.html TRUE
    -- Retrieval info: GEN_FILE: TYPE_NORMAL vdp_ext_colinfo_wave*.jpg FALSE
    -- Retrieval info: LIB_FILE: altera_mf
    [свернуть]



    Теперь в архитектурном теле меняем конкретизацию компонента с obj_ci : entity work.vdp_colinfo

    на obj_ci : entity work.vdp_ext_colinfo , соответствие портов не меняем.

    Вразделе описаний -- SPRITE ENGINE первой части -- PART 1 меняем объявление сигналов

    signal OBJ_COLINFO_D_A : std_logic_vector(6 downto 0);
    signal OBJ_COLINFO_D_B : std_logic_vector(6 downto 0);

    signal OBJ_COLINFO_Q_A : std_logic_vector(6 downto 0);
    signal OBJ_COLINFO_Q_B : std_logic_vector(6 downto 0);

    на


    signal OBJ_COLINFO_D_A : std_logic_vector(7 downto 0);
    signal OBJ_COLINFO_D_B : std_logic_vector(7 downto 0);

    signal OBJ_COLINFO_Q_A : std_logic_vector(7 downto 0);
    signal OBJ_COLINFO_Q_B : std_logic_vector(7 downto 0);

    Этими действиями мы расширили размер ячейки буфера строки спрайтового слоя OBJ_COLINFO до 8 бит.
    Теперь можно переписать необходимую ветвь оператора case PIXDIV is в разделе реализации -- PIXEL COUNTER AND OUTPUT на

    when "0011" =>
    if OBJ_COLINFO_Q_B(3 downto 0) /= "0000" and OBJ_COLINFO_Q_B(6) = '1' then
    case PBS_MODE is
    when "00" =>
    T_COLOR <= CRAM( CONV_INTEGER('0' & OBJ_COLINFO_Q_B(5 downto 0)) );
    when "01" =>
    T_COLOR <= CRAM( CONV_INTEGER(OBJ_COLINFO_Q_B(7) & OBJ_COLINFO_Q_B(5 downto 0)) );
    when "10" =>
    T_COLOR <= CRAM( CONV_INTEGER(not (OBJ_COLINFO_Q_B(7)) & OBJ_COLINFO_Q_B(5 downto 0)) );
    when "11" =>
    T_COLOR <= CRAM( CONV_INTEGER('1' & OBJ_COLINFO_Q_B(5 downto 0)) );
    when others => null;
    end case;
    elsif BGA_COLINFO_Q_B(3 downto 0) /= "0000" and BGA_COLINFO_Q_B(6) = '1' then
    T_COLOR <= CRAM( CONV_INTEGER('0'& BGA_COLINFO_Q_B(5 downto 0)) );
    elsif BGB_COLINFO_Q_B(3 downto 0) /= "0000" and BGB_COLINFO_Q_B(6) = '1' then
    T_COLOR <= CRAM( CONV_INTEGER('0'& BGB_COLINFO_Q_B(5 downto 0)) );
    elsif OBJ_COLINFO_Q_B(3 downto 0) /= "0000" then
    case PBS_MODE is
    when "00" =>
    T_COLOR <= CRAM( CONV_INTEGER('0' & OBJ_COLINFO_Q_B(5 downto 0)) );
    when "01" =>
    T_COLOR <= CRAM( CONV_INTEGER(OBJ_COLINFO_Q_B(7) & OBJ_COLINFO_Q_B(5 downto 0)) );
    when "10" =>
    T_COLOR <= CRAM( CONV_INTEGER(not (OBJ_COLINFO_Q_B(7)) & OBJ_COLINFO_Q_B(5 downto 0)) );
    when "11" =>
    T_COLOR <= CRAM( CONV_INTEGER('1' & OBJ_COLINFO_Q_B(5 downto 0)) );
    when others => null;
    end case;
    elsif BGA_COLINFO_Q_B(3 downto 0) /= "0000" then
    T_COLOR <= CRAM( CONV_INTEGER('0'& BGA_COLINFO_Q_B(5 downto 0)) );
    elsif BGB_COLINFO_Q_B(3 downto 0) /= "0000" then
    T_COLOR <= CRAM( CONV_INTEGER('0'& BGB_COLINFO_Q_B(5 downto 0)) );
    else
    T_COLOR <= CRAM( CONV_INTEGER('0'& BGCOL) );
    end if;

    Что соответствует приближенной к коду схеме:



    В тех источниках информации о пикселях( BGA_COLINFO, BGB_COLINFO, BGCOL) у которых размерность выходных данных на входе в каналы мультиплексора меньше 7 бит, дополняем старшим нулевым разрядом до 7 бит.
    Последний раз редактировалось Smalovsky; 09.08.2025 в 16:24.
    ¡Un momento, señor fiscal!


  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добрался до спрайтового движка.
    Спрайтовый движок делится на две части. В первой части происходит считывание четырёх первых байтов атрибутов спрайта пословно из видеопамяти. Сначала Считывается первое слово - позиция Y срайта, затем второе слово включающее в себя атрибуты размера спрайта и ссылку на следующий по приоритету спрайт. Каждое слово сохраняется в свою однопортовую память в более плотном виде. Необходимо проследить, чтобы при уплотнении слова атрибутов не пропал новый атрибут - бит переключения банков.
    Так как новый атрибут - бит переключения банков, расположен в третьем байте атрибутов или во втором сохраняемом слове атрибутов, то необходимо найти место где считывается это слово. Это происходит в разделе реализации -- SPRITE ENGINE - PART ONE в операторе case:

    case SP1C is
    ...
    when SP1C_SZL_RD =>
    if SP1_DTACK_N = '0' then
    -- OBJ_SZ_LINK( CONV_INTEGER( SP1_X(7 downto 1) ) ) <= SP1_VRAM_DO(11 downto 8) & SP1_VRAM_DO(6 downto 0);
    OBJ_SZ_LINK_ADDR_WR <= "00" & SP1_X(7 downto 1);
    OBJ_SZ_LINK_D <= "00000" & SP1_VRAM_DO(11 downto 8) & SP1_VRAM_DO(6 downto 0);
    OBJ_SZ_LINK_WE <= '1';

    OBJ_CUR <= SP1_VRAM_DO(6 downto 0);
    SP1C <= SP1C_LOOP;
    end if;
    ...
    end case;

    В строке
    OBJ_SZ_LINK_D <= "00000" & SP1_VRAM_DO(11 downto 8) & SP1_VRAM_DO(6 downto 0);
    Сделаем необходимые изменения
    OBJ_SZ_LINK_D <= "0000" & VRAM_DO(15) & SP1_VRAM_DO(11 downto 8) & SP1_VRAM_DO(6 downto 0);
    так как при уплотнении данных не включался новый атрибут.
    Во второй части спрайтового движка поисходит считывание остальных слов атрибутов и форимирование буфера строки OBJ_COLINFO.
    В разделе объявлений -- SPRITE ENGINE подраздел -- PART 2 вводим новый сигнал, отвечающий за бит прпеключения банков:

    signal OBJ_BS : std_logic;


    Теперь необходимо найти место, где извлекается сохранённое ранее и уплотненное второе слово атрибутов, чтобы назначить сигнал OBJ_BS.
    Такое место есть в раздел реализации -- SPRITE ENGINE - PART TWO:

    case SP2C is
    ...
    when SP2C_Y_RD4 =>
    OBJ_Y_OFS <= "010000000" + ("0" & SP2_Y) - OBJ_Y_Q(8 downto 0);
    OBJ_HS <= OBJ_SZ_LINK_Q(10 downto 9);
    OBJ_VS <= OBJ_SZ_LINK_Q(8 downto 7);
    OBJ_LINK <= OBJ_SZ_LINK_Q(6 downto 0);
    SP2C <= SP2C_Y_TST;
    ...
    end case;

    Делаем необходимое добавление с назначением сигнала OBJ_BS:
    ...
    OBJ_Y_OFS <= "010000000" + ("0" & SP2_Y) - OBJ_Y_Q(8 downto 0);
    OBJ_BS <= OBJ_SZ_LINK_Q(11);
    OBJ_HS <= OBJ_SZ_LINK_Q(10 downto 9);
    OBJ_VS <= OBJ_SZ_LINK_Q(8 downto 7);
    OBJ_LINK <= OBJ_SZ_LINK_Q(6 downto 0);
    SP2C <= SP2C_Y_TST;
    ...


    В том же операторе case находим ветвь

    when SP2C_PLOT =>

    и вложенное условие, где формируется информация о пикселе в буфере строки OBJ_COLINFO:

    if OBJ_COLINFO_Q_A(3 downto 0) = "0000" then
    OBJ_COLINFO_WE_A <= '1';
    OBJ_COLINFO_D_A <= OBJ_PRI & OBJ_PAL & OBJ_COLNO;
    else
    if OBJ_COLNO /= "0000" then
    SCOL_SET <= '1';
    end if;
    end if;

    Делаем необходимые изменения третьей строке:

    OBJ_COLINFO_D_A <= OBJ_BS & OBJ_PRI & OBJ_PAL & OBJ_COLNO;
    ¡Un momento, señor fiscal!


  9. #18

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дошло дело до компиляции. И я столкнулся с траблом... Проект-то зависит от субмодулей. Посмотрите https://github.com/Torlus/fpgagen/bl...er/.gitmodules
    Короче, начал разбираться в чём дело. Автор пишет:
    The project depends on submodules, so you need to type in the following commands after checkout.

    cd fpgagen
    git submodule init
    git submodule update
    Перевод:
    Проект зависит от подмодулей, поэтому после извлечения вам нужно будет ввести следующие команды. cd fpgagen git submodule init git submodule update
    Что-бы это сделать, нужно установить гит декстоп. Скачал две версии, и ни одна не установилась... Пробую вручную скачать подмодули и кинуть их в нужные папки. Может, проканает?

    Нужна помощь. Если кто может, скачайте репозиторий https://github.com/Torlus/fpgagen и выполните подключение подмодулей. Этот репозиторий с установленными модулями потом скиньте мне в архиве через какой файлообменник или на почту. Адрес электоронной почты напишу в личку тем кто захочет помочь. Вы поможете не только мне, но и тем кто желает увидеть новый видеорежим.
    ¡Un momento, señor fiscal!


  10. #19

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    https://git-scm.com/downloads
    Именно оттуда и именно установился

  11. #20

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    930
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hunta, я не могу установить. Хотя ,возможно, проблема из-за того что я скачал квартус 9.1, а для проекта на мистере надо квартус 11.1. У меня открывается проект для альтеры де1, но не открывается для мистера.

    - - - Добавлено - - -

    Пока буду собирать для альтеры де1. Дальше видно будет. Как вижу новый видеорежим для сеги только мне интересен.
    ¡Un momento, señor fiscal!


Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Опрос: WiFi для ZX клонов не на FPGA
    от izzx в разделе Несортированное железо
    Ответов: 253
    Последнее: 26.10.2025, 10:35
  2. Pano Logic G2 - убийца клонов на FPGA.
    от occamlab в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 27
    Последнее: 27.11.2020, 11:30
  3. Производство клонов ZX Spectrum
    от andykarpov в разделе Новости
    Ответов: 129
    Последнее: 26.04.2017, 18:56
  4. Логотипы клонов Спектрума
    от CodeMaster в разделе Разный софт
    Ответов: 10
    Последнее: 07.09.2010, 23:09
  5. О совместимости клонов с играми
    от ILoveSpeccy в разделе Несортированное железо
    Ответов: 1
    Последнее: 13.03.2008, 18:26

Ваши права

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