M.A.D.製FPGA評価ボード MFP-CY240Z-B2016年07月24日 12:33

M.A.D.さんよりFPGA評価ボードを購入したので、ソースビルドした際の覚書。

作業マシン Windows10 x64

ソースはHRA! 氏の1chipMSX改 開発最新版(2008/07/12 24:27)を利用。

ビルド及び書き込みには
Quartus II 10.1sp1 Web Edition
を利用。

1・USBBlasterのWindows10x64用のドライバ
Quartus II 10.1sp1 Web Editionには64ビット版のドライバが含まれていないので
Quartus Prime Lite Edition 16をセットアップし入手。

2・ソース修正
ビルド時にエラーが発生するので以下を修正
one_chip_msx_board\sdram_controller\sdram_ctrl.vhd

40行目
	PORT(
		MEMCLK			: IN	STD_LOGIC;							-- SD-RAM CLOCK
		-- CPU INTERFACE
                    ↓
	PORT(
		RESET			: IN	STD_LOGIC;
		MEMCLK			: IN	STD_LOGIC;							-- SD-RAM CLOCK
		-- CPU INTERFACE


sound\opll\vm2413\vm2413.vhd
52行目
  function CONV_REGS_VECTOR ( inst : REGS_TYPE ) return REGS_VECTOR_TYPE;
  function CONV_REGS ( inst_vec : REGS_VECTOR_TYPE ) return REGS_TYPE; 
                    ↓
  function CONV_REGS_VECTOR ( regs : REGS_TYPE ) return REGS_VECTOR_TYPE;
  function CONV_REGS ( vec : REGS_VECTOR_TYPE ) return REGS_TYPE; 


68行目
  function CONV_VOICE_VECTOR ( voice : VOICE_TYPE ) return VOICE_VECTOR_TYPE;
  function CONV_VOICE ( vector : VOICE_VECTOR_TYPE ) return VOICE_TYPE; 
                    ↓
  function CONV_VOICE_VECTOR ( inst : VOICE_TYPE ) return VOICE_VECTOR_TYPE;
  function CONV_VOICE ( inst_vec : VOICE_VECTOR_TYPE ) return VOICE_TYPE; 

M.A.D.製FPGA評価ボード MFP-CY240Z-B その22016年07月24日 16:10

音量小さかったのでソース修正

こちらのソースから音量部分のみ移植。

とりあえず音量は大きくなったけど、各音源のボリュームバランスはとれてるのかな?
これでダメなら内部を直接いじってみるか。


音量増加

one_chip_msx_board\emsx_top.vhd
429行目
	SIGNAL PSGAMP			: STD_LOGIC_VECTOR(7 DOWNTO 0);
                   ↓
	SIGNAL PSGAMP			: STD_LOGIC_VECTOR(9 DOWNTO 0);


package\msx_components.vhd
262行目
			WAVE		: OUT	STD_LOGIC_VECTOR(  7 DOWNTO 0 )
                   ↓
			WAVE		: OUT	STD_LOGIC_VECTOR(  9 DOWNTO 0 )

315行目
			PSGAMP		: IN	STD_LOGIC_VECTOR(  7 DOWNTO 0 );
                   ↓
			PSGAMP		: IN	STD_LOGIC_VECTOR(  9 DOWNTO 0 );


sound\mixer\mixer.vhd
65行目
		PSGAMP			: IN	STD_LOGIC_VECTOR(  7 DOWNTO 0 );
                   ↓
		PSGAMP			: IN	STD_LOGIC_VECTOR(  9 DOWNTO 0 ); 

95行目
	SIGNAL	FF_PREPSG		: STD_LOGIC_VECTOR(  8 DOWNTO 0 );
                   ↓
	SIGNAL	FF_PREPSG		: STD_LOGIC_VECTOR(  9 DOWNTO 0 );

197行目
	WITH MSTRVOL SELECT W_SCC_SFT <=
		W_S( 15 DOWNTO 14 )	& W_SCC( 18 DOWNTO  5 )	WHEN "000",
		W_S( 15 DOWNTO 13 ) & W_SCC( 18 DOWNTO  6 )	WHEN "001",
		W_S( 15 DOWNTO 12 ) & W_SCC( 18 DOWNTO  7 )	WHEN "010",
		W_S( 15 DOWNTO 11 ) & W_SCC( 18 DOWNTO  8 )	WHEN "011",
		W_S( 15 DOWNTO 10 ) & W_SCC( 18 DOWNTO  9 )	WHEN "100",
		W_S( 15 DOWNTO  9 ) & W_SCC( 18 DOWNTO 10 )	WHEN "101",
		W_S( 15 DOWNTO  8 ) & W_SCC( 18 DOWNTO 11 )	WHEN "110",
		W_S( 15 DOWNTO  7 ) & W_SCC( 18 DOWNTO 12 )	WHEN "111",
		(OTHERS => 'X') WHEN OTHERS;
                   ↓
	WITH MSTRVOL SELECT W_SCC_SFT <=
		                      W_SCC( 18 DOWNTO  3 )	WHEN "000",
		W_S( 15 )           & W_SCC( 18 DOWNTO  4 )	WHEN "001",
		W_S( 15 DOWNTO 14 ) & W_SCC( 18 DOWNTO  5 )	WHEN "010",
		W_S( 15 DOWNTO 13 ) & W_SCC( 18 DOWNTO  6 )	WHEN "011",
		W_S( 15 DOWNTO 12 ) & W_SCC( 18 DOWNTO  7 )	WHEN "100",
		W_S( 15 DOWNTO 11 ) & W_SCC( 18 DOWNTO  8 )	WHEN "101",
		W_S( 15 DOWNTO 10 ) & W_SCC( 18 DOWNTO  9 )	WHEN "110",
		W_S( 15 DOWNTO  9 ) & W_SCC( 18 DOWNTO 10 )	WHEN "111",
		(OTHERS => 'X') WHEN OTHERS;

211行目
		IF( CLK21M'EVENT AND CLK21M = '1' )THEN
			FF_PREPSG	<=	(('0'          & PSGAMP  ) + (KEYCLICK & "00000"));
			FF_PRESCC	<=	((SCC1AMPL(14) & SCC1AMPL) + (SCC2AMPL(14) & SCC2AMPL));

			FF_PSG		<=	"000" & SHR( (FF_PREPSG * PSGVOL) &  "0", MSTRVOL );
			FF_SCC		<=	W_SCC_SFT;

			IF( OPLLAMP < C_OPLL_ZERO )THEN
				CHAMP := "00" & SHR( ((C_OPLL_ZERO - OPLLAMP) * OPLLVOL) & "0", MSTRVOL );
				FF_OPLL <= C_AMP_OFFSET - ( CHAMP - CHAMP( 15 DOWNTO 3 ) );
			ELSE
				CHAMP := "00" & SHR( ((OPLLAMP - C_OPLL_ZERO) * OPLLVOL) & "0", MSTRVOL );
				FF_OPLL <= C_AMP_OFFSET + ( CHAMP - CHAMP( 15 DOWNTO 3 ) );
			END IF;
		END IF;
                   ↓
		IF( CLK21M'EVENT AND CLK21M = '1' )THEN
			FF_PREPSG <= (PSGAMP + (KEYCLICK & "000000"));
			FF_PRESCC <= ((SCC1AMPL(14) & SCC1AMPL) + (SCC2AMPL(14) & SCC2AMPL));

			FF_PSG <= "0" & SHR( (FF_PREPSG * ("0" & PSGVOL)) & "0", MSTRVOL );
			FF_SCC <= W_SCC_SFT;

			IF( OPLLAMP < C_OPLL_ZERO )THEN
				CHAMP := SHR(((C_OPLL_ZERO - OPLLAMP) * OPLLVOL) & "000", MSTRVOL );
				FF_OPLL <= C_AMP_OFFSET - ( CHAMP - CHAMP( 15 DOWNTO 3 ) );
			ELSE
				chAmp := SHR(((OpllAmp - c_opll_zero) * OpllVol) & "000", MSTRVOL );
				FF_OPLL <= C_AMP_OFFSET + ( CHAMP - CHAMP( 15 DOWNTO 3 ) );
			END IF;
		END IF;


sound\mixer\psg.vhd
58行目
		WAVE		: OUT	STD_LOGIC_VECTOR(  7 DOWNTO 0 )
                   ↓
		WAVE		: OUT	STD_LOGIC_VECTOR(  9 DOWNTO 0 )

92行目
	WAVE <= W_WAVE( 9 DOWNTO 2 )
                   ↓
	WAVE <= W_WAVE