mirror of
https://github.com/UzixLS/TSConf_MiST.git
synced 2025-07-18 23:01:37 +03:00
cleanup gs signals
This commit is contained in:
37
TSConf.sv
37
TSConf.sv
@ -71,9 +71,6 @@ localparam CONF_STR = {
|
|||||||
"TSConf;;",
|
"TSConf;;",
|
||||||
"O12,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;",
|
"O12,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;",
|
||||||
"-;",
|
"-;",
|
||||||
"O34,Stereo mix,None,25%,50%,100%;",
|
|
||||||
"OST,General Sound,512KB,1MB,2MB;",
|
|
||||||
"-;",
|
|
||||||
"OU,CPU Type,NMOS,CMOS;",
|
"OU,CPU Type,NMOS,CMOS;",
|
||||||
"O67,CPU Speed,3.5MHz,7MHz,14MHz;",
|
"O67,CPU Speed,3.5MHz,7MHz,14MHz;",
|
||||||
"O8,CPU Cache,On,Off;",
|
"O8,CPU Cache,On,Off;",
|
||||||
@ -341,12 +338,6 @@ tsconf tsconf
|
|||||||
.SD_CLK(sdclk),
|
.SD_CLK(sdclk),
|
||||||
.SD_CS_N(sdss),
|
.SD_CS_N(sdss),
|
||||||
|
|
||||||
.GS_ADDR(gs_mem_addr),
|
|
||||||
.GS_DI(gs_mem_din),
|
|
||||||
.GS_DO(gs_mem_dout | gs_mem_mask),
|
|
||||||
.GS_RD(gs_mem_rd),
|
|
||||||
.GS_WR(gs_mem_wr),
|
|
||||||
.GS_WAIT(~gs_mem_ready),
|
|
||||||
.SOUND_L(SOUND_L),
|
.SOUND_L(SOUND_L),
|
||||||
.SOUND_R(SOUND_R),
|
.SOUND_R(SOUND_R),
|
||||||
|
|
||||||
@ -367,34 +358,6 @@ tsconf tsconf
|
|||||||
.loader_wr(ioctl_wr && ioctl_download && !ioctl_index && !ioctl_addr[24:16])
|
.loader_wr(ioctl_wr && ioctl_download && !ioctl_index && !ioctl_addr[24:16])
|
||||||
);
|
);
|
||||||
|
|
||||||
wire [20:0] gs_mem_addr;
|
|
||||||
wire [7:0] gs_mem_dout;
|
|
||||||
wire [7:0] gs_mem_din;
|
|
||||||
wire gs_mem_rd;
|
|
||||||
wire gs_mem_wr;
|
|
||||||
wire gs_mem_ready;
|
|
||||||
reg [7:0] gs_mem_mask;
|
|
||||||
|
|
||||||
always_comb begin
|
|
||||||
gs_mem_mask = 0;
|
|
||||||
case(status[29:28])
|
|
||||||
0: if(gs_mem_addr[20:19]) gs_mem_mask = 8'hFF;
|
|
||||||
1: if(gs_mem_addr[20]) gs_mem_mask = 8'hFF;
|
|
||||||
2,3: gs_mem_mask = 0;
|
|
||||||
endcase
|
|
||||||
end
|
|
||||||
|
|
||||||
// ddram ddram
|
|
||||||
// (
|
|
||||||
// .*,
|
|
||||||
// .addr(gs_mem_addr),
|
|
||||||
// .dout(gs_mem_dout),
|
|
||||||
// .din(gs_mem_din),
|
|
||||||
// .we(gs_mem_wr),
|
|
||||||
// .rd(gs_mem_rd),
|
|
||||||
// .ready(gs_mem_ready)
|
|
||||||
// );
|
|
||||||
|
|
||||||
|
|
||||||
reg VSync, HSync;
|
reg VSync, HSync;
|
||||||
always @(posedge clk_sys) begin
|
always @(posedge clk_sys) begin
|
||||||
|
276
rtl/sound/gs.v
276
rtl/sound/gs.v
@ -1,100 +1,101 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
General Sound
|
General Sound
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
18.08.2018 Reworked first verilog version
|
18.08.2018 Reworked first verilog version
|
||||||
19.08.2018 Produce proper signed output
|
19.08.2018 Produce proper signed output
|
||||||
20.08.2018 Use external SDR/DDR RAM for page 2 and up
|
20.08.2018 Use external SDR/DDR RAM for page 2 and up
|
||||||
|
|
||||||
CPU: Z80 @ 28MHz
|
|
||||||
ROM: 32K
|
|
||||||
RAM: up to 4096KB
|
|
||||||
INT: 37.5KHz
|
|
||||||
|
|
||||||
#xxBB Command register - регистр команд, доступный для записи
|
|
||||||
#xxBB Status register - регистр состояния, доступный для чтения
|
|
||||||
bit 7 флаг данных
|
|
||||||
bit <6:1> Не определен
|
|
||||||
bit 0 флаг команд. Этот регистр позволяет определить состояние GS, в частности можно ли прочитать или записать очередной байт данных, или подать очередную команду, и т.п.
|
|
||||||
#xxB3 Data register - регистр данных, доступный для записи. В этот регистр Спектрум записывает данные, например, это могут быть аргументы команд.
|
|
||||||
#xxB3 Output register - регистр вывода, доступный для чтения. Из этого регистра Спектрум читает данные, идущие от GS
|
|
||||||
|
|
||||||
Внутренние порта:
|
|
||||||
#xx00 "расширенная память" - регистр доступный для записи
|
|
||||||
bit <3:0> переключают страницы по 32Kb, страница 0 - ПЗУ
|
|
||||||
bit <7:0> не используются
|
|
||||||
|
|
||||||
порты 1 - 5 "обеспечивают связь с SPECTRUM'ом"
|
|
||||||
#xx01 чтение команды General Sound'ом
|
|
||||||
bit <7:0> код команды
|
|
||||||
#xx02 чтение данных General Sound'ом
|
|
||||||
bit <7:0> данные
|
|
||||||
#xx03 запись данных General Sound'ом для SPECTRUM'a
|
|
||||||
bit <7:0> данные
|
|
||||||
#xx04 чтение слова состояния General Sound'ом
|
|
||||||
bit 0 флаг команд
|
|
||||||
bit 7 флаг данных
|
|
||||||
#xx05 сбрасывает бит D0 (флаг команд) слова состояния
|
|
||||||
|
|
||||||
порты 6 - 9 "регулировка громкости" в каналах 1 - 4
|
|
||||||
#xx06 "регулировка громкости" в канале 1
|
|
||||||
bit <5:0> громкость
|
|
||||||
bit <7:6> не используются
|
|
||||||
#xx07 "регулировка громкости" в канале 2
|
|
||||||
bit <5:0> громкость
|
|
||||||
bit <7:6> не используются
|
|
||||||
#xx08 "регулировка громкости" в канале 3
|
|
||||||
bit <5:0> громкость
|
|
||||||
bit <7:6> не используются
|
|
||||||
#xx09 "регулировка громкости" в канале 4
|
|
||||||
bit <5:0> громкость
|
|
||||||
bit <7:6> не используются
|
|
||||||
|
|
||||||
#xx0A устанавливает бит 7 слова состояния не равным биту 0 порта #xx00
|
|
||||||
#xx0B устанавливает бит 0 слова состояния равным биту 5 порта #xx06
|
|
||||||
|
|
||||||
Распределение памяти
|
|
||||||
#0000 - #3FFF - первые 16Kb ПЗУ
|
|
||||||
#4000 - #7FFF - первые 16Kb первой страницы ОЗУ
|
|
||||||
#8000 - #FFFF - листаемые страницы по 32Kb
|
|
||||||
страница 0 - ПЗУ,
|
|
||||||
страница 1 - первая страница ОЗУ
|
|
||||||
страницы 2... ОЗУ
|
|
||||||
|
|
||||||
Данные в каналы заносятся при чтении процессором ОЗУ по адресам #6000 - #7FFF автоматически.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
module gs #(parameter ROMFILE="gs105b.mif")
|
CPU: Z80 @ 28MHz
|
||||||
|
ROM: 32K
|
||||||
|
RAM: up to 4096KB
|
||||||
|
INT: 37.5KHz
|
||||||
|
|
||||||
|
#xxBB Command register - регистр команд, доступный для записи
|
||||||
|
#xxBB Status register - регистр состояния, доступный для чтения
|
||||||
|
bit 7 флаг данных
|
||||||
|
bit <6:1> Не определен
|
||||||
|
bit 0 флаг команд. Этот регистр позволяет определить состояние GS, в частности можно ли прочитать или записать очередной байт данных, или подать очередную команду, и т.п.
|
||||||
|
#xxB3 Data register - регистр данных, доступный для записи. В этот регистр Спектрум записывает данные, например, это могут быть аргументы команд.
|
||||||
|
#xxB3 Output register - регистр вывода, доступный для чтения. Из этого регистра Спектрум читает данные, идущие от GS
|
||||||
|
|
||||||
|
Внутренние порта:
|
||||||
|
#xx00 "расширенная память" - регистр доступный для записи
|
||||||
|
bit <3:0> переключают страницы по 32Kb, страница 0 - ПЗУ
|
||||||
|
bit <7:0> не используются
|
||||||
|
|
||||||
|
порты 1 - 5 "обеспечивают связь с SPECTRUM'ом"
|
||||||
|
#xx01 чтение команды General Sound'ом
|
||||||
|
bit <7:0> код команды
|
||||||
|
#xx02 чтение данных General Sound'ом
|
||||||
|
bit <7:0> данные
|
||||||
|
#xx03 запись данных General Sound'ом для SPECTRUM'a
|
||||||
|
bit <7:0> данные
|
||||||
|
#xx04 чтение слова состояния General Sound'ом
|
||||||
|
bit 0 флаг команд
|
||||||
|
bit 7 флаг данных
|
||||||
|
#xx05 сбрасывает бит D0 (флаг команд) слова состояния
|
||||||
|
|
||||||
|
порты 6 - 9 "регулировка громкости" в каналах 1 - 4
|
||||||
|
#xx06 "регулировка громкости" в канале 1
|
||||||
|
bit <5:0> громкость
|
||||||
|
bit <7:6> не используются
|
||||||
|
#xx07 "регулировка громкости" в канале 2
|
||||||
|
bit <5:0> громкость
|
||||||
|
bit <7:6> не используются
|
||||||
|
#xx08 "регулировка громкости" в канале 3
|
||||||
|
bit <5:0> громкость
|
||||||
|
bit <7:6> не используются
|
||||||
|
#xx09 "регулировка громкости" в канале 4
|
||||||
|
bit <5:0> громкость
|
||||||
|
bit <7:6> не используются
|
||||||
|
|
||||||
|
#xx0A устанавливает бит 7 слова состояния не равным биту 0 порта #xx00
|
||||||
|
#xx0B устанавливает бит 0 слова состояния равным биту 5 порта #xx06
|
||||||
|
|
||||||
|
Распределение памяти
|
||||||
|
#0000 - #3FFF - первые 16Kb ПЗУ
|
||||||
|
#4000 - #7FFF - первые 16Kb первой страницы ОЗУ
|
||||||
|
#8000 - #FFFF - листаемые страницы по 32Kb
|
||||||
|
страница 0 - ПЗУ,
|
||||||
|
страница 1 - первая страница ОЗУ
|
||||||
|
страницы 2... ОЗУ
|
||||||
|
|
||||||
|
Данные в каналы заносятся при чтении процессором ОЗУ по адресам #6000 - #7FFF автоматически.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
module gs
|
||||||
(
|
(
|
||||||
input RESET,
|
input RESET,
|
||||||
input CLK,
|
input CLK,
|
||||||
input CE,
|
input CE,
|
||||||
|
|
||||||
input A,
|
input A,
|
||||||
input [7:0] DI,
|
input [7:0] DI,
|
||||||
output [7:0] DO,
|
output [7:0] DO,
|
||||||
input CS_n,
|
input CS_n,
|
||||||
input WR_n,
|
input WR_n,
|
||||||
input RD_n,
|
input RD_n,
|
||||||
|
|
||||||
output [20:0] MEM_ADDR,
|
output [20:0] MEM_ADDR,
|
||||||
output [7:0] MEM_DI,
|
output [7:0] MEM_DI,
|
||||||
input [7:0] MEM_DO,
|
input [7:0] MEM_DO,
|
||||||
output MEM_RD,
|
output MEM_RD,
|
||||||
output MEM_WR,
|
output MEM_WR,
|
||||||
input MEM_WAIT,
|
input MEM_WAIT,
|
||||||
|
output MEM_ROM,
|
||||||
|
|
||||||
output [14:0] OUTL,
|
output [14:0] OUTL,
|
||||||
output [14:0] OUTR
|
output [14:0] OUTR
|
||||||
);
|
);
|
||||||
|
|
||||||
// port #xxBB : #xxB3
|
// port #xxBB : #xxB3
|
||||||
assign DO = A ? {bit7, 6'b111111, bit0} : port_03;
|
assign DO = A ? {bit7, 6'b111111, bit0} : port_03;
|
||||||
|
|
||||||
// CPU
|
// CPU
|
||||||
reg int_n;
|
reg int_n;
|
||||||
wire cpu_m1_n;
|
wire cpu_m1_n;
|
||||||
wire cpu_mreq_n;
|
wire cpu_mreq_n;
|
||||||
wire cpu_iorq_n;
|
wire cpu_iorq_n;
|
||||||
@ -119,58 +120,58 @@ T80pa cpu
|
|||||||
.DI(cpu_di_bus)
|
.DI(cpu_di_bus)
|
||||||
);
|
);
|
||||||
|
|
||||||
// INT#
|
// INT#
|
||||||
always @(posedge CLK) begin
|
always @(posedge CLK) begin
|
||||||
reg [9:0] cnt;
|
reg [9:0] cnt;
|
||||||
|
|
||||||
if(CE) begin
|
if(CE) begin
|
||||||
cnt <= cnt + 1'b1;
|
cnt <= cnt + 1'b1;
|
||||||
if (cnt == 746) begin // 37.48kHz
|
if (cnt == 746) begin // 37.48kHz
|
||||||
cnt <= 0;
|
cnt <= 0;
|
||||||
int_n <= 0;
|
int_n <= 0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (~cpu_iorq_n & ~cpu_m1_n) int_n <= 1;
|
if (~cpu_iorq_n & ~cpu_m1_n) int_n <= 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
reg bit7;
|
|
||||||
reg bit0;
|
reg bit7;
|
||||||
|
reg bit0;
|
||||||
always @(posedge CLK) begin
|
always @(posedge CLK) begin
|
||||||
if (~cpu_iorq_n & cpu_m1_n) begin
|
if (~cpu_iorq_n & cpu_m1_n) begin
|
||||||
case(cpu_a_bus[3:0])
|
case(cpu_a_bus[3:0])
|
||||||
'h2: bit7 <= 0;
|
'h2: bit7 <= 0;
|
||||||
'h3: bit7 <= 1;
|
'h3: bit7 <= 1;
|
||||||
'h5: bit0 <= 0;
|
'h5: bit0 <= 0;
|
||||||
'hA: bit7 <= ~port_00[0];
|
'hA: bit7 <= ~port_00[0];
|
||||||
'hB: bit0 <= port_09[5];
|
'hB: bit0 <= port_09[5];
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
else if (~CS_n) begin
|
else if (~CS_n) begin
|
||||||
if (~A & ~RD_n) bit7 <= 0;
|
if (~A & ~RD_n) bit7 <= 0;
|
||||||
if (~A & ~WR_n) bit7 <= 1;
|
if (~A & ~WR_n) bit7 <= 1;
|
||||||
if ( A & ~WR_n) bit0 <= 1;
|
if ( A & ~WR_n) bit0 <= 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
reg [7:0] port_BB;
|
|
||||||
reg [7:0] port_B3;
|
reg [7:0] port_BB;
|
||||||
|
reg [7:0] port_B3;
|
||||||
always @(posedge CLK) begin
|
always @(posedge CLK) begin
|
||||||
if (RESET) begin
|
if (RESET) begin
|
||||||
port_BB <= 0;
|
port_BB <= 0;
|
||||||
port_B3 <= 0;
|
port_B3 <= 0;
|
||||||
end
|
end
|
||||||
else if (~CS_n && ~WR_n) begin
|
else if (~CS_n && ~WR_n) begin
|
||||||
if(A) port_BB <= DI;
|
if(A) port_BB <= DI;
|
||||||
else port_B3 <= DI;
|
else port_B3 <= DI;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
reg [5:0] port_00;
|
reg [5:0] port_00;
|
||||||
reg [7:0] port_03;
|
reg [7:0] port_03;
|
||||||
reg signed [6:0] port_06, port_07, port_08, port_09;
|
reg signed [6:0] port_06 = 0, port_07 = 0, port_08 = 0, port_09 = 0;
|
||||||
reg signed [7:0] ch_a, ch_b, ch_c, ch_d;
|
reg signed [7:0] ch_a, ch_b, ch_c, ch_d;
|
||||||
|
|
||||||
always @(posedge CLK) begin
|
always @(posedge CLK) begin
|
||||||
@ -178,56 +179,45 @@ always @(posedge CLK) begin
|
|||||||
port_00 <= 0;
|
port_00 <= 0;
|
||||||
port_03 <= 0;
|
port_03 <= 0;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (~cpu_iorq_n & ~cpu_wr_n) begin
|
if (~cpu_iorq_n & ~cpu_wr_n) begin
|
||||||
case(cpu_a_bus[3:0])
|
case(cpu_a_bus[3:0])
|
||||||
0: port_00 <= cpu_do_bus[5:0];
|
0: port_00 <= cpu_do_bus[5:0];
|
||||||
3: port_03 <= cpu_do_bus;
|
3: port_03 <= cpu_do_bus;
|
||||||
6: port_06 <= cpu_do_bus[5:0];
|
6: port_06 <= cpu_do_bus[5:0];
|
||||||
7: port_07 <= cpu_do_bus[5:0];
|
7: port_07 <= cpu_do_bus[5:0];
|
||||||
8: port_08 <= cpu_do_bus[5:0];
|
8: port_08 <= cpu_do_bus[5:0];
|
||||||
9: port_09 <= cpu_do_bus[5:0];
|
9: port_09 <= cpu_do_bus[5:0];
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
|
|
||||||
if (~cpu_mreq_n && ~cpu_rd_n && cpu_a_bus[15:13] == 3) begin
|
if (~cpu_mreq_n && ~cpu_rd_n && cpu_a_bus[15:13] == 3 && ~MEM_WAIT) begin
|
||||||
case(cpu_a_bus[9:8])
|
case(cpu_a_bus[9:8])
|
||||||
0: ch_a <= {~mem_do[7],mem_do[6:0]};
|
0: ch_a <= {~MEM_DO[7],MEM_DO[6:0]};
|
||||||
1: ch_b <= {~mem_do[7],mem_do[6:0]};
|
1: ch_b <= {~MEM_DO[7],MEM_DO[6:0]};
|
||||||
2: ch_c <= {~mem_do[7],mem_do[6:0]};
|
2: ch_c <= {~MEM_DO[7],MEM_DO[6:0]};
|
||||||
3: ch_d <= {~mem_do[7],mem_do[6:0]};
|
3: ch_d <= {~MEM_DO[7],MEM_DO[6:0]};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
wire [7:0] cpu_di_bus =
|
wire [7:0] cpu_di_bus =
|
||||||
(~cpu_mreq_n && ~cpu_rd_n && !page_addr[5:1]) ? mem_do :
|
(~cpu_mreq_n && ~cpu_rd_n) ? MEM_DO :
|
||||||
(~cpu_mreq_n && ~cpu_rd_n) ? MEM_DO :
|
(~cpu_iorq_n && ~cpu_rd_n && cpu_a_bus[3:0] == 1) ? port_BB :
|
||||||
(~cpu_iorq_n && ~cpu_rd_n && cpu_a_bus[3:0] == 1) ? port_BB :
|
(~cpu_iorq_n && ~cpu_rd_n && cpu_a_bus[3:0] == 2) ? port_B3 :
|
||||||
(~cpu_iorq_n && ~cpu_rd_n && cpu_a_bus[3:0] == 2) ? port_B3 :
|
(~cpu_iorq_n && ~cpu_rd_n && cpu_a_bus[3:0] == 4) ? {bit7, 6'b111111, bit0} :
|
||||||
(~cpu_iorq_n && ~cpu_rd_n && cpu_a_bus[3:0] == 4) ? {bit7, 6'b111111, bit0} :
|
|
||||||
8'hFF;
|
8'hFF;
|
||||||
|
|
||||||
wire mem_wr = ~cpu_wr_n & ~cpu_mreq_n & |page_addr;
|
|
||||||
wire mem_rd = ~cpu_rd_n & ~cpu_mreq_n;
|
|
||||||
|
|
||||||
wire [5:0] page_addr = cpu_a_bus[15] ? port_00 : cpu_a_bus[14];
|
wire [5:0] page_addr = cpu_a_bus[15] ? port_00 : cpu_a_bus[14];
|
||||||
|
|
||||||
assign MEM_ADDR = {page_addr, &cpu_a_bus[15:14], cpu_a_bus[13:0]};
|
assign MEM_ADDR = {page_addr, &cpu_a_bus[15:14], cpu_a_bus[13:0]};
|
||||||
assign MEM_RD = mem_rd && |page_addr[5:1];
|
assign MEM_RD = ~cpu_rd_n & ~cpu_mreq_n;
|
||||||
assign MEM_WR = mem_wr && |page_addr[5:1];
|
assign MEM_WR = ~cpu_wr_n & ~cpu_mreq_n & ~MEM_ROM;
|
||||||
assign MEM_DI = cpu_do_bus;
|
assign MEM_DI = cpu_do_bus;
|
||||||
|
assign MEM_ROM = ~|page_addr;
|
||||||
|
|
||||||
wire [7:0] mem_do;
|
|
||||||
dpram #(.ADDRWIDTH(16), .MEM_INIT_FILE(ROMFILE)) mem
|
|
||||||
(
|
|
||||||
.clock(CLK),
|
|
||||||
.address_a(MEM_ADDR[15:0]),
|
|
||||||
.wren_a(mem_wr && !page_addr[5:1]),
|
|
||||||
.data_a(cpu_do_bus),
|
|
||||||
.q_a(mem_do)
|
|
||||||
);
|
|
||||||
|
|
||||||
reg signed [14:0] out_a,out_b,out_c,out_d;
|
reg signed [14:0] out_a,out_b,out_c,out_d;
|
||||||
always @(posedge CLK) begin
|
always @(posedge CLK) begin
|
||||||
|
35
rtl/tsconf.v
35
rtl/tsconf.v
@ -88,14 +88,6 @@ module tsconf
|
|||||||
output SD_CLK,
|
output SD_CLK,
|
||||||
output SD_CS_N,
|
output SD_CS_N,
|
||||||
|
|
||||||
// General Sound
|
|
||||||
output [20:0] GS_ADDR,
|
|
||||||
output [7:0] GS_DI,
|
|
||||||
input [7:0] GS_DO,
|
|
||||||
output GS_RD,
|
|
||||||
output GS_WR,
|
|
||||||
input GS_WAIT,
|
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
output [15:0] SOUND_L,
|
output [15:0] SOUND_L,
|
||||||
output [15:0] SOUND_R,
|
output [15:0] SOUND_R,
|
||||||
@ -816,31 +808,38 @@ turbosound SE12
|
|||||||
|
|
||||||
|
|
||||||
// General Sound
|
// General Sound
|
||||||
|
wire [20:0] gs_mem_addr;
|
||||||
|
wire [7:0] gs_mem_di;
|
||||||
|
wire [7:0] gs_mem_do;
|
||||||
|
wire gs_mem_rd;
|
||||||
|
wire gs_mem_wr;
|
||||||
|
wire gs_mem_wait;
|
||||||
|
|
||||||
wire [14:0] gs_l;
|
wire [14:0] gs_l;
|
||||||
wire [14:0] gs_r;
|
wire [14:0] gs_r;
|
||||||
wire [7:0] gs_do_bus;
|
wire [7:0] gs_do_bus;
|
||||||
wire gs_sel = ~cpu_iorq_n & cpu_m1_n & (cpu_a_bus[7:4] == 'hB && cpu_a_bus[2:0] == 'h3);
|
wire gs_sel = ~cpu_iorq_n & cpu_m1_n & (cpu_a_bus[7:4] == 'hB && cpu_a_bus[2:0] == 'h3);
|
||||||
|
|
||||||
gs #("rtl/sound/gs105b.mif") U15
|
gs U15
|
||||||
(
|
(
|
||||||
.RESET(reset | 1'b1),
|
.RESET(reset | 1'b1),
|
||||||
.CLK(clk),
|
.CLK(clk),
|
||||||
.CE(ce),
|
.CE(ce),
|
||||||
|
|
||||||
.A(cpu_a_bus[3]),
|
.A(cpu_a_bus[3]),
|
||||||
.DI(cpu_do_bus),
|
.DI(cpu_do_bus),
|
||||||
.DO(gs_do_bus),
|
.DO(gs_do_bus),
|
||||||
.CS_n(cpu_iorq_n | ~gs_sel),
|
.CS_n(cpu_iorq_n | ~gs_sel),
|
||||||
.WR_n(cpu_wr_n),
|
.WR_n(cpu_wr_n),
|
||||||
.RD_n(cpu_rd_n),
|
.RD_n(cpu_rd_n),
|
||||||
|
|
||||||
.MEM_ADDR(GS_ADDR),
|
.MEM_ADDR(gs_mem_addr),
|
||||||
.MEM_DI(GS_DI),
|
.MEM_DI(gs_mem_di),
|
||||||
.MEM_DO(GS_DO),
|
.MEM_DO(gs_mem_do),
|
||||||
.MEM_RD(GS_RD),
|
.MEM_RD(gs_mem_rd),
|
||||||
.MEM_WR(GS_WR),
|
.MEM_WR(gs_mem_wr),
|
||||||
.MEM_WAIT(GS_WAIT),
|
.MEM_WAIT(gs_mem_wait),
|
||||||
|
|
||||||
.OUTL(gs_l),
|
.OUTL(gs_l),
|
||||||
.OUTR(gs_r)
|
.OUTR(gs_r)
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user