FPGA: code formatting, update synthesis configuration, timing
This commit is contained in:
parent
630d75cacc
commit
a8d64311c6
@ -80,34 +80,41 @@ assign IS_ROM = ( (MAPPER == 3'b000) ? ((!SNES_ADDR[22] & SNES_ADDR[15])
|
|||||||
|(SNES_ADDR[22]))
|
|(SNES_ADDR[22]))
|
||||||
: 1'b0);
|
: 1'b0);
|
||||||
|
|
||||||
|
assign IS_SAVERAM = ((MAPPER == 3'b000
|
||||||
assign IS_SAVERAM = ((MAPPER == 3'b000 || MAPPER == 3'b010 || MAPPER == 3'b100 || MAPPER == 3'b110 || MAPPER == 3'b111) ? (!SNES_ADDR[22]
|
|| MAPPER == 3'b010
|
||||||
|
|| MAPPER == 3'b100
|
||||||
|
|| MAPPER == 3'b110
|
||||||
|
|| MAPPER == 3'b111)
|
||||||
|
? (!SNES_ADDR[22]
|
||||||
& &SNES_ADDR[21:20]
|
& &SNES_ADDR[21:20]
|
||||||
& &SNES_ADDR[14:13]
|
& &SNES_ADDR[14:13]
|
||||||
& !SNES_ADDR[15]
|
& !SNES_ADDR[15]
|
||||||
)
|
)
|
||||||
/* LoROM: SRAM @ Bank 0x70-0x7d, 0xf0-0xfd
|
/* LoROM: SRAM @ Bank 0x70-0x7d, 0xf0-0xfd Offset 0000-7fff
|
||||||
Offset 0000-7fff TODO: 0000-ffff for
|
TODO: 0000-ffff for small ROMs? */
|
||||||
small ROMs */
|
:(MAPPER == 3'b001
|
||||||
:(MAPPER == 3'b001 || MAPPER == 3'b101) ? (&SNES_ADDR[22:20]
|
|| MAPPER == 3'b101)
|
||||||
|
? (&SNES_ADDR[22:20]
|
||||||
& (SNES_ADDR[19:16] < 4'b1110)
|
& (SNES_ADDR[19:16] < 4'b1110)
|
||||||
& !SNES_ADDR[15])
|
& !SNES_ADDR[15]
|
||||||
/* BS-X: SRAM @ Bank 0x10-0x17
|
)
|
||||||
Offset 5000-5fff */
|
/* BS-X: SRAM @ Bank 0x10-0x17 Offset 5000-5fff */
|
||||||
:(MAPPER == 3'b011) ? ((SNES_ADDR[23:19] == 5'b00010)
|
:(MAPPER == 3'b011)
|
||||||
|
? ((SNES_ADDR[23:19] == 5'b00010)
|
||||||
& (SNES_ADDR[15:12] == 4'b0101)
|
& (SNES_ADDR[15:12] == 4'b0101)
|
||||||
)
|
)
|
||||||
: 1'b0);
|
: 1'b0);
|
||||||
|
|
||||||
|
|
||||||
assign IS_WRITABLE = IS_SAVERAM | (
|
assign IS_WRITABLE = IS_SAVERAM
|
||||||
(MAPPER == 3'b011)
|
|((MAPPER == 3'b011)
|
||||||
? (
|
?((bsx_regs[3] && SNES_ADDR[23:20]==4'b0110)
|
||||||
(bsx_regs[3] && SNES_ADDR[23:20]==4'b0110)
|
|
||||||
|(!bsx_regs[5] && SNES_ADDR[23:20]==4'b0100)
|
|(!bsx_regs[5] && SNES_ADDR[23:20]==4'b0100)
|
||||||
|(!bsx_regs[6] && SNES_ADDR[23:20]==4'b0101)
|
|(!bsx_regs[6] && SNES_ADDR[23:20]==4'b0101)
|
||||||
|(SNES_ADDR[23:19] == 5'b01110)
|
|(SNES_ADDR[23:19] == 5'b01110)
|
||||||
|(SNES_ADDR[23:21] == 3'b001 && SNES_ADDR[15:13] == 3'b011))
|
|(SNES_ADDR[23:21] == 3'b001
|
||||||
|
&& SNES_ADDR[15:13] == 3'b011)
|
||||||
|
)
|
||||||
: 1'b0);
|
: 1'b0);
|
||||||
|
|
||||||
/* BSX regs:
|
/* BSX regs:
|
||||||
@ -122,31 +129,68 @@ assign IS_WRITABLE = IS_SAVERAM | (
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
assign SRAM_ADDR_FULL = (MODE) ? MCU_ADDR
|
assign SRAM_ADDR_FULL = (MODE) ? MCU_ADDR
|
||||||
: ((MAPPER[1:0] == 2'b00) ?
|
:((MAPPER[1:0] == 2'b00)
|
||||||
(IS_SAVERAM ? 24'hE00000 + ((SNES_ADDR[14:0] - 15'h6000) & SAVERAM_MASK)
|
?(IS_SAVERAM
|
||||||
|
? 24'hE00000 + ((SNES_ADDR[14:0] - 15'h6000)
|
||||||
|
& SAVERAM_MASK)
|
||||||
: ({1'b0, SNES_ADDR[22:0]} & ROM_MASK))
|
: ({1'b0, SNES_ADDR[22:0]} & ROM_MASK))
|
||||||
:(MAPPER[1:0] == 2'b01) ?
|
|
||||||
(IS_SAVERAM ? 24'hE00000 + (SNES_ADDR[14:0] & SAVERAM_MASK)
|
:(MAPPER[1:0] == 2'b01)
|
||||||
: ({2'b00, SNES_ADDR[22:16], SNES_ADDR[14:0]} & ROM_MASK))
|
?(IS_SAVERAM
|
||||||
:(MAPPER == 3'b010) ?
|
? 24'hE00000 + (SNES_ADDR[14:0] & SAVERAM_MASK)
|
||||||
(IS_SAVERAM ? 24'hE00000 + ((SNES_ADDR[14:0] - 15'h6000) & SAVERAM_MASK)
|
: ({2'b00, SNES_ADDR[22:16], SNES_ADDR[14:0]}
|
||||||
: ({1'b0, !SNES_ADDR[23], SNES_ADDR[21:0]} & ROM_MASK))
|
& ROM_MASK))
|
||||||
:(MAPPER == 3'b011) ?
|
|
||||||
(IS_SAVERAM ? 24'hE00000 + {SNES_ADDR[18:16], SNES_ADDR[11:0]}
|
:(MAPPER == 3'b010)
|
||||||
: IS_WRITABLE ? (24'h400000 + (SNES_ADDR & 24'h0FFFFF /*7ffff*/))
|
?(IS_SAVERAM
|
||||||
|
? 24'hE00000 + ((SNES_ADDR[14:0] - 15'h6000)
|
||||||
|
& SAVERAM_MASK)
|
||||||
|
: ({1'b0, !SNES_ADDR[23], SNES_ADDR[21:0]}
|
||||||
|
& ROM_MASK))
|
||||||
|
:(MAPPER == 3'b011)
|
||||||
|
?(IS_SAVERAM
|
||||||
|
? 24'hE00000 + {SNES_ADDR[18:16], SNES_ADDR[11:0]}
|
||||||
|
: IS_WRITABLE
|
||||||
|
? (24'h400000 + (SNES_ADDR & 24'h07FFFF))
|
||||||
: ((bsx_regs[7] && SNES_ADDR[23:21] == 3'b000)
|
: ((bsx_regs[7] && SNES_ADDR[23:21] == 3'b000)
|
||||||
|(bsx_regs[8] && SNES_ADDR[23:21] == 3'b100))
|
|(bsx_regs[8] && SNES_ADDR[23:21] == 3'b100))
|
||||||
? (24'h800000 + ({1'b0, SNES_ADDR[23:16], SNES_ADDR[14:0]} & 24'h0FFFFF))
|
?(24'h800000
|
||||||
: ((bsx_regs[1] ? 24'h400000 : 24'h000000)
|
+ ({1'b0, SNES_ADDR[23:16], SNES_ADDR[14:0]}
|
||||||
+ bsx_regs[2] ? ({2'b00, SNES_ADDR[21:0]} & (ROM_MASK /* >> bsx_regs[1] */))
|
& 24'h0FFFFF)
|
||||||
: ({1'b0, SNES_ADDR[23:16], SNES_ADDR[14:0]} & (ROM_MASK /* >> bsx_regs[1] */))))
|
)
|
||||||
:(MAPPER == 3'b110) ?
|
:((bsx_regs[1]
|
||||||
(IS_SAVERAM ? 24'hE00000 + ((SNES_ADDR[14:0] - 15'h6000) & SAVERAM_MASK)
|
? 24'h400000
|
||||||
: (SNES_ADDR[15] ? ({1'b0, SNES_ADDR[23:16], SNES_ADDR[14:0]})
|
: 24'h000000
|
||||||
: ({2'b10, SNES_ADDR[23], SNES_ADDR[21:16], SNES_ADDR[14:0]})))
|
)
|
||||||
:(MAPPER == 3'b111) ?
|
+ bsx_regs[2]
|
||||||
(IS_SAVERAM ? 24'hFF0000 + ((SNES_ADDR[14:0] - 15'h6000) & SAVERAM_MASK)
|
?({2'b00, SNES_ADDR[21:0]}
|
||||||
: (({1'b0, SNES_ADDR[22:0]} & ROM_MASK) + 24'hE00000))
|
& (ROM_MASK /* >> bsx_regs[1] */)
|
||||||
|
)
|
||||||
|
:({1'b0, SNES_ADDR[23:16], SNES_ADDR[14:0]}
|
||||||
|
& (ROM_MASK /* >> bsx_regs[1] */)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
:(MAPPER == 3'b110)
|
||||||
|
?(IS_SAVERAM
|
||||||
|
? 24'hE00000 + ((SNES_ADDR[14:0] - 15'h6000)
|
||||||
|
& SAVERAM_MASK)
|
||||||
|
:(SNES_ADDR[15]
|
||||||
|
?({1'b0, SNES_ADDR[23:16], SNES_ADDR[14:0]})
|
||||||
|
:({2'b10,
|
||||||
|
SNES_ADDR[23],
|
||||||
|
SNES_ADDR[21:16],
|
||||||
|
SNES_ADDR[14:0]}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
:(MAPPER == 3'b111)
|
||||||
|
?(IS_SAVERAM
|
||||||
|
? 24'hFF0000 + ((SNES_ADDR[14:0] - 15'h6000)
|
||||||
|
& SAVERAM_MASK)
|
||||||
|
: (({1'b0, SNES_ADDR[22:0]} & ROM_MASK)
|
||||||
|
+ 24'hE00000)
|
||||||
|
)
|
||||||
: 24'b0);
|
: 24'b0);
|
||||||
|
|
||||||
assign ROM_ADDR = SRAM_ADDR_FULL[23:1];
|
assign ROM_ADDR = SRAM_ADDR_FULL[23:1];
|
||||||
@ -154,7 +198,7 @@ assign ROM_ADDR = SRAM_ADDR_FULL[23:1];
|
|||||||
assign ROM_SEL = 1'b0; // (MODE) ? CS_ARRAY[SRAM_BANK] : IS_SAVERAM ? 4'b1000 : CS_ARRAY[SRAM_BANK];
|
assign ROM_SEL = 1'b0; // (MODE) ? CS_ARRAY[SRAM_BANK] : IS_SAVERAM ? 4'b1000 : CS_ARRAY[SRAM_BANK];
|
||||||
|
|
||||||
assign ROM_ADDR0 = SRAM_ADDR_FULL[0];
|
assign ROM_ADDR0 = SRAM_ADDR_FULL[0];
|
||||||
//488888
|
|
||||||
assign msu_enable = (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfff8) == 16'h2000));
|
assign msu_enable = (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfff8) == 16'h2000));
|
||||||
assign use_bsx = (MAPPER == 3'b011);
|
assign use_bsx = (MAPPER == 3'b011);
|
||||||
|
|
||||||
@ -164,14 +208,16 @@ assign srtc_enable = (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfffe) == 16'h280
|
|||||||
// or DR=60-6f:0000-3fff; SR=60-6f:4000-7fff
|
// or DR=60-6f:0000-3fff; SR=60-6f:4000-7fff
|
||||||
// DSP1 HiROM: DR=00-0f:6000-6fff; SR=00-0f:7000-7fff
|
// DSP1 HiROM: DR=00-0f:6000-6fff; SR=00-0f:7000-7fff
|
||||||
wire dspx_enable_w =
|
wire dspx_enable_w =
|
||||||
(MAPPER == 3'b101) ?
|
(MAPPER == 3'b101)
|
||||||
(ROM_MASK[20] ?
|
?(ROM_MASK[20]
|
||||||
(SNES_ADDR[22] & SNES_ADDR[21] & ~SNES_ADDR[20] & ~SNES_ADDR[15])
|
?(SNES_ADDR[22] & SNES_ADDR[21] & ~SNES_ADDR[20] & ~SNES_ADDR[15])
|
||||||
:(~SNES_ADDR[22] & SNES_ADDR[21] & SNES_ADDR[20] & SNES_ADDR[15])
|
:(~SNES_ADDR[22] & SNES_ADDR[21] & SNES_ADDR[20] & SNES_ADDR[15])
|
||||||
)
|
)
|
||||||
:(MAPPER == 3'b100) ?
|
:(MAPPER == 3'b100)
|
||||||
(~SNES_ADDR[22] & ~SNES_ADDR[21] & ~SNES_ADDR[20] & ~SNES_ADDR[15] & &SNES_ADDR[14:13]/* & CS */)
|
?(~SNES_ADDR[22] & ~SNES_ADDR[21] & ~SNES_ADDR[20] & ~SNES_ADDR[15]
|
||||||
|
& &SNES_ADDR[14:13])
|
||||||
:1'b0;
|
:1'b0;
|
||||||
|
|
||||||
assign dspx_a0 = (MAPPER == 3'b101) ? SNES_ADDR[14]
|
assign dspx_a0 = (MAPPER == 3'b101) ? SNES_ADDR[14]
|
||||||
:(MAPPER == 3'b100) ? SNES_ADDR[12]
|
:(MAPPER == 3'b100) ? SNES_ADDR[12]
|
||||||
:1'b1;
|
:1'b1;
|
||||||
|
|||||||
@ -46,19 +46,28 @@ reg [16:0] flash_cmd0;
|
|||||||
reg [24:0] flash_cmd5555;
|
reg [24:0] flash_cmd5555;
|
||||||
|
|
||||||
wire cart_enable = (use_bsx) && ((snes_addr[23:12] & 12'hf0f) == 12'h005);
|
wire cart_enable = (use_bsx) && ((snes_addr[23:12] & 12'hf0f) == 12'h005);
|
||||||
|
|
||||||
wire base_enable = (use_bsx) && (!snes_addr[22] && (snes_addr[15:0] >= 16'h2188)
|
wire base_enable = (use_bsx) && (!snes_addr[22] && (snes_addr[15:0] >= 16'h2188)
|
||||||
&& (snes_addr[15:0] <= 16'h219f));
|
&& (snes_addr[15:0] <= 16'h219f));
|
||||||
|
|
||||||
wire flash_enable = (snes_addr[23:16] == 8'hc0);
|
wire flash_enable = (snes_addr[23:16] == 8'hc0);
|
||||||
|
|
||||||
wire is_flash_special_address = (flash_addr == 16'h0002
|
wire is_flash_special_address = (flash_addr == 16'h0002
|
||||||
|| flash_addr == 16'h5555
|
|| flash_addr == 16'h5555
|
||||||
|| flash_addr == 16'h2aaa
|
|| flash_addr == 16'h2aaa
|
||||||
|| flash_addr == 16'h0000
|
|| flash_addr == 16'h0000
|
||||||
|| (flash_addr >= 16'hff00 && flash_addr <= 16'hff13));
|
|| (flash_addr >= 16'hff00
|
||||||
|
&& flash_addr <= 16'hff13));
|
||||||
|
|
||||||
wire flash_ovr = (use_bsx) && (flash_enable & flash_ovr_r) && is_flash_special_address;
|
wire flash_ovr = (use_bsx)
|
||||||
|
&& (flash_enable & flash_ovr_r)
|
||||||
|
&& is_flash_special_address;
|
||||||
|
|
||||||
|
assign flash_writable = (use_bsx)
|
||||||
|
&& flash_enable
|
||||||
|
&& flash_we_r
|
||||||
|
&& !is_flash_special_address;
|
||||||
|
|
||||||
assign flash_writable = (use_bsx) && flash_enable && flash_we_r && !is_flash_special_address;
|
|
||||||
assign data_ovr = cart_enable | base_enable | flash_ovr;
|
assign data_ovr = cart_enable | base_enable | flash_ovr;
|
||||||
|
|
||||||
reg [5:0] reg_oe_sreg;
|
reg [5:0] reg_oe_sreg;
|
||||||
|
|||||||
@ -72,8 +72,6 @@ reg [15:0] smpshift;
|
|||||||
reg [15:0] smpdata;
|
reg [15:0] smpdata;
|
||||||
|
|
||||||
assign mclk = cnt[2]; // mclk = clk/8
|
assign mclk = cnt[2]; // mclk = clk/8
|
||||||
//assign lrck = cnt[10]; // lrck = mclk/512
|
|
||||||
//wire sclk = cnt[5]; // sclk = lrck*32
|
|
||||||
assign lrck = cnt[8]; // lrck = mclk/128
|
assign lrck = cnt[8]; // lrck = mclk/128
|
||||||
wire sclk = cnt[3]; // sclk = lrck*32
|
wire sclk = cnt[3]; // sclk = lrck*32
|
||||||
|
|
||||||
|
|||||||
@ -61,23 +61,34 @@ assign BSX_DATA_IN = SNES_DATA;
|
|||||||
assign SRTC_DATA_IN = SNES_DATA;
|
assign SRTC_DATA_IN = SNES_DATA;
|
||||||
assign DSPX_DATA_IN = SNES_DATA;
|
assign DSPX_DATA_IN = SNES_DATA;
|
||||||
|
|
||||||
assign SNES_DATA = SNES_READ ? 8'bZ : (!MCU_OVR ? 8'h00 : (msu_enable ? MSU_DATA_OUT :
|
assign SNES_DATA = SNES_READ ? 8'bZ
|
||||||
bsx_data_ovr ? BSX_DATA_OUT :
|
:(!MCU_OVR ? 8'h00
|
||||||
srtc_enable ? SRTC_DATA_OUT :
|
:(msu_enable ? MSU_DATA_OUT
|
||||||
dspx_enable ? DSPX_DATA_OUT : SNES_OUT_MEM));
|
: bsx_data_ovr ? BSX_DATA_OUT
|
||||||
|
: srtc_enable ? SRTC_DATA_OUT
|
||||||
|
: dspx_enable ? DSPX_DATA_OUT
|
||||||
|
: SNES_OUT_MEM)
|
||||||
|
);
|
||||||
|
|
||||||
assign FROM_ROM_BYTE = (ROM_ADDR0 ? ROM_DATA[7:0] : ROM_DATA[15:8]);
|
assign FROM_ROM_BYTE = (ROM_ADDR0 ? ROM_DATA[7:0] : ROM_DATA[15:8]);
|
||||||
|
|
||||||
assign MCU_OUT_DATA = !MCU_OVR ? (FROM_ROM_BYTE)
|
assign MCU_OUT_DATA = !MCU_OVR ? (FROM_ROM_BYTE)
|
||||||
:(MCU_OUT_MEM);
|
:(MCU_OUT_MEM);
|
||||||
|
|
||||||
assign ROM_DATA[7:0] = ROM_ADDR0 ? (!MCU_OVR ? (!MCU_WRITE ? MCU_IN_DATA : 8'bZ)
|
assign ROM_DATA[7:0] = ROM_ADDR0
|
||||||
|
?(!MCU_OVR ? (!MCU_WRITE ? MCU_IN_DATA : 8'bZ)
|
||||||
: (MODE ? (!MCU_WRITE ? MCU_IN_MEM : 8'bZ)
|
: (MODE ? (!MCU_WRITE ? MCU_IN_MEM : 8'bZ)
|
||||||
: (!SNES_WRITE ? SNES_IN_MEM : 8'bZ)))
|
: (!SNES_WRITE ? SNES_IN_MEM : 8'bZ)
|
||||||
|
)
|
||||||
|
)
|
||||||
:8'bZ;
|
:8'bZ;
|
||||||
assign ROM_DATA[15:8] = ROM_ADDR0 ? 8'bZ : (!MCU_OVR ? (!MCU_WRITE ? MCU_IN_DATA : 8'bZ)
|
|
||||||
|
assign ROM_DATA[15:8] = ROM_ADDR0 ? 8'bZ
|
||||||
|
:(!MCU_OVR ? (!MCU_WRITE ? MCU_IN_DATA : 8'bZ)
|
||||||
: (MODE ? (!MCU_WRITE ? MCU_IN_MEM : 8'bZ)
|
: (MODE ? (!MCU_WRITE ? MCU_IN_MEM : 8'bZ)
|
||||||
: (!SNES_WRITE ? SNES_IN_MEM : 8'bZ)));
|
: (!SNES_WRITE ? SNES_IN_MEM : 8'bZ)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
always @(posedge CLK) begin
|
always @(posedge CLK) begin
|
||||||
if(SNES_DATA_TO_MEM)
|
if(SNES_DATA_TO_MEM)
|
||||||
|
|||||||
@ -72,10 +72,8 @@ module main(
|
|||||||
/* debug */
|
/* debug */
|
||||||
,
|
,
|
||||||
output p113_out
|
output p113_out
|
||||||
//output DCM_IN_STOPPED,
|
|
||||||
//output DCM_FX_STOPPED
|
|
||||||
//input DCM_RST
|
|
||||||
);
|
);
|
||||||
|
|
||||||
assign p113_out = SNES_READ;
|
assign p113_out = SNES_READ;
|
||||||
|
|
||||||
wire [7:0] spi_cmd_data;
|
wire [7:0] spi_cmd_data;
|
||||||
@ -135,7 +133,8 @@ wire dspx_dat_we;
|
|||||||
|
|
||||||
//wire SD_DMA_EN; //SPI_DMA_CTRL;
|
//wire SD_DMA_EN; //SPI_DMA_CTRL;
|
||||||
|
|
||||||
sd_dma snes_sd_dma(.CLK(CLK2),
|
sd_dma snes_sd_dma(
|
||||||
|
.CLK(CLK2),
|
||||||
.SD_DAT(SD_DAT),
|
.SD_DAT(SD_DAT),
|
||||||
.SD_CLK(SD_CLK),
|
.SD_CLK(SD_CLK),
|
||||||
.SD_DMA_EN(SD_DMA_EN),
|
.SD_DMA_EN(SD_DMA_EN),
|
||||||
@ -149,7 +148,8 @@ sd_dma snes_sd_dma(.CLK(CLK2),
|
|||||||
.SD_DMA_PARTIAL_END(SD_DMA_PARTIAL_END)
|
.SD_DMA_PARTIAL_END(SD_DMA_PARTIAL_END)
|
||||||
);
|
);
|
||||||
|
|
||||||
dac snes_dac(.clkin(CLK2),
|
dac snes_dac(
|
||||||
|
.clkin(CLK2),
|
||||||
.sysclk(SNES_SYSCLK),
|
.sysclk(SNES_SYSCLK),
|
||||||
.mclk(DAC_MCLK),
|
.mclk(DAC_MCLK),
|
||||||
.lrck(DAC_LRCK),
|
.lrck(DAC_LRCK),
|
||||||
@ -211,7 +211,8 @@ msu snes_msu (
|
|||||||
.msu_address_ext_write(msu_addr_reset)
|
.msu_address_ext_write(msu_addr_reset)
|
||||||
);
|
);
|
||||||
|
|
||||||
bsx snes_bsx(.clkin(CLK2),
|
bsx snes_bsx(
|
||||||
|
.clkin(CLK2),
|
||||||
.use_bsx(use_bsx),
|
.use_bsx(use_bsx),
|
||||||
.pgm_we(bsx_regs_reset_we),
|
.pgm_we(bsx_regs_reset_we),
|
||||||
.snes_addr(SNES_ADDR),
|
.snes_addr(SNES_ADDR),
|
||||||
@ -227,7 +228,8 @@ bsx snes_bsx(.clkin(CLK2),
|
|||||||
.rtc_data(rtc_data)
|
.rtc_data(rtc_data)
|
||||||
);
|
);
|
||||||
|
|
||||||
spi snes_spi(.clk(CLK2),
|
spi snes_spi(
|
||||||
|
.clk(CLK2),
|
||||||
.MOSI(SPI_MOSI),
|
.MOSI(SPI_MOSI),
|
||||||
.MISO(SPI_MISO),
|
.MISO(SPI_MISO),
|
||||||
.SSEL(SPI_SS),
|
.SSEL(SPI_SS),
|
||||||
@ -322,7 +324,8 @@ mcu_cmd snes_mcu_cmd(
|
|||||||
);
|
);
|
||||||
|
|
||||||
// dcm1: dfs 4x
|
// dcm1: dfs 4x
|
||||||
my_dcm snes_dcm(.CLKIN(CLKIN),
|
my_dcm snes_dcm(
|
||||||
|
.CLKIN(CLKIN),
|
||||||
.CLKFX(CLK2),
|
.CLKFX(CLK2),
|
||||||
.LOCKED(DCM_LOCKED),
|
.LOCKED(DCM_LOCKED),
|
||||||
.RST(DCM_RST),
|
.RST(DCM_RST),
|
||||||
@ -331,44 +334,6 @@ my_dcm snes_dcm(.CLKIN(CLKIN),
|
|||||||
|
|
||||||
assign DCM_RST=0;
|
assign DCM_RST=0;
|
||||||
|
|
||||||
/*
|
|
||||||
dcm_srl16 snes_dcm_resetter(.CLK(CLKIN),
|
|
||||||
.Q(DCM_RST)
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
//wire DCM_FX_STOPPED = DCM_STATUS[2];
|
|
||||||
//always @(posedge CLKIN) begin
|
|
||||||
// if(DCM_FX_STOPPED)
|
|
||||||
// DCM_RSTr <= 1'b1;
|
|
||||||
// else
|
|
||||||
// DCM_RSTr <= 1'b0;
|
|
||||||
//end
|
|
||||||
|
|
||||||
/*reg DO_DCM_RESET, DCM_RESETTING;
|
|
||||||
reg DCM_RSTr;
|
|
||||||
assign DCM_RST = DCM_RSTr;
|
|
||||||
reg [2:0] DCM_RESET_CNT;
|
|
||||||
initial DO_DCM_RESET = 1'b0;
|
|
||||||
initial DCM_RESETTING = 1'b0;
|
|
||||||
|
|
||||||
always @(posedge CLKIN) begin
|
|
||||||
if(!DCM_LOCKED && !DCM_RESETTING) begin
|
|
||||||
DCM_RSTr <= 1'b1;
|
|
||||||
DO_DCM_RESET <= 1'b1;
|
|
||||||
DCM_RESET_CNT <= 3'b0;
|
|
||||||
end else if (DO_DCM_RESET) begin
|
|
||||||
DCM_RSTr <= 1'b0;
|
|
||||||
DCM_RESET_CNT <= DCM_RESET_CNT + 1;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
always @(posedge CLKIN) begin
|
|
||||||
if (DO_DCM_RESET)
|
|
||||||
DCM_RESETTING <= 1'b1;
|
|
||||||
else if (DCM_RESET_CNT == 3'b110)
|
|
||||||
DCM_RESETTING <= 1'b0;
|
|
||||||
end
|
|
||||||
*/
|
|
||||||
wire SNES_RW;
|
wire SNES_RW;
|
||||||
reg [1:0] SNES_READr;
|
reg [1:0] SNES_READr;
|
||||||
reg [1:0] SNES_WRITEr;
|
reg [1:0] SNES_WRITEr;
|
||||||
@ -400,9 +365,6 @@ end
|
|||||||
|
|
||||||
reg ADDR_WRITE;
|
reg ADDR_WRITE;
|
||||||
|
|
||||||
//reg [23:0] SNES_ADDRr;
|
|
||||||
//wire [23:0] SNES_ADDRw = SNES_ADDR;
|
|
||||||
|
|
||||||
wire ROM_SEL;
|
wire ROM_SEL;
|
||||||
|
|
||||||
address snes_addr(
|
address snes_addr(
|
||||||
@ -439,7 +401,8 @@ wire SNES_WRITE_CYCLEw;
|
|||||||
wire MCU_READ_CYCLEw;
|
wire MCU_READ_CYCLEw;
|
||||||
wire MCU_WRITE_CYCLEw;
|
wire MCU_WRITE_CYCLEw;
|
||||||
|
|
||||||
data snes_data(.CLK(CLK2),
|
data snes_data(
|
||||||
|
.CLK(CLK2),
|
||||||
.SNES_READ(SNES_READ),
|
.SNES_READ(SNES_READ),
|
||||||
.SNES_WRITE(SNES_WRITE),
|
.SNES_WRITE(SNES_WRITE),
|
||||||
.MCU_READ(MCU_READ),
|
.MCU_READ(MCU_READ),
|
||||||
@ -523,7 +486,6 @@ assign MODE = !MCU_OVR ? MODE_MCU : MODE_ARRAY[STATEIDX];
|
|||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
CYCLE_RESET = 2'b0;
|
CYCLE_RESET = 2'b0;
|
||||||
|
|
||||||
STATE = STATE_IDLE;
|
STATE = STATE_IDLE;
|
||||||
STATEIDX = 13;
|
STATEIDX = 13;
|
||||||
ROM_WE_MASK = 1'b1;
|
ROM_WE_MASK = 1'b1;
|
||||||
@ -545,21 +507,16 @@ initial begin
|
|||||||
ROM_OE_ARRAY[2'b11] = 14'b0_000000_0000000;
|
ROM_OE_ARRAY[2'b11] = 14'b0_000000_0000000;
|
||||||
|
|
||||||
SNES_DATA_TO_MEM_ARRAY[1'b0] = 14'b0_000100_0000000; // SNES write
|
SNES_DATA_TO_MEM_ARRAY[1'b0] = 14'b0_000100_0000000; // SNES write
|
||||||
/* 13'b0001000000000 */
|
|
||||||
SNES_DATA_TO_MEM_ARRAY[1'b1] = 14'b0_000000_0000000; // SNES read
|
SNES_DATA_TO_MEM_ARRAY[1'b1] = 14'b0_000000_0000000; // SNES read
|
||||||
|
|
||||||
MCU_DATA_TO_MEM_ARRAY[1'b0] = 14'b1_111111_1111111; // MCU write
|
MCU_DATA_TO_MEM_ARRAY[1'b0] = 14'b1_111111_1111111; // MCU write
|
||||||
// MCU_DATA_TO_MEM_ARRAY[1'b0] = 13'b0000000001000; // MCU write
|
|
||||||
|
|
||||||
MCU_DATA_TO_MEM_ARRAY[1'b1] = 14'b0_000000_0000000; // MCU read
|
MCU_DATA_TO_MEM_ARRAY[1'b1] = 14'b0_000000_0000000; // MCU read
|
||||||
|
|
||||||
ROM_DATA_TO_SNES_MEM_ARRAY[1'b0] = 14'b0_000000_0000000; // SNES write
|
ROM_DATA_TO_SNES_MEM_ARRAY[1'b0] = 14'b0_000000_0000000; // SNES write
|
||||||
ROM_DATA_TO_SNES_MEM_ARRAY[1'b1] = 14'b0_000010_0000000; // SNES read
|
ROM_DATA_TO_SNES_MEM_ARRAY[1'b1] = 14'b0_000010_0000000; // SNES read
|
||||||
/* 13'b0000100000000; */
|
|
||||||
|
|
||||||
ROM_DATA_TO_MCU_MEM_ARRAY[1'b0] = 14'b0_000000_0000000; // MCU write
|
ROM_DATA_TO_MCU_MEM_ARRAY[1'b0] = 14'b0_000000_0000000; // MCU write
|
||||||
ROM_DATA_TO_MCU_MEM_ARRAY[1'b1] = 14'b0_000000_0000001; // MCU read
|
ROM_DATA_TO_MCU_MEM_ARRAY[1'b1] = 14'b0_000000_0000001; // MCU read
|
||||||
// SRAM_DATA_TO_MCU_MEM_ARRAY[1'b1] = 13'b0000000000001; // MCU read
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -640,12 +597,15 @@ end
|
|||||||
|
|
||||||
// When in MCU mode, enable SRAM_WE according to MCU programming
|
// When in MCU mode, enable SRAM_WE according to MCU programming
|
||||||
// else enable SRAM_WE according to state&cycle
|
// else enable SRAM_WE according to state&cycle
|
||||||
assign ROM_WE = !MCU_OVR ? MCU_WRITE
|
assign ROM_WE = !MCU_OVR
|
||||||
: ((!IS_FLASHWR & !IS_WRITABLE & !MODE) | ROM_WE_ARRAY[{SNES_WRITE_CYCLE, MCU_WRITE_CYCLE}][STATEIDX]);
|
?MCU_WRITE
|
||||||
|
:((!IS_FLASHWR & !IS_WRITABLE & !MODE)
|
||||||
|
| ROM_WE_ARRAY[{SNES_WRITE_CYCLE, MCU_WRITE_CYCLE}][STATEIDX]);
|
||||||
|
|
||||||
// When in MCU mode, enable SRAM_OE whenever not writing
|
// When in MCU mode, enable SRAM_OE whenever not writing
|
||||||
// else enable SRAM_OE according to state&cycle
|
// else enable SRAM_OE according to state&cycle
|
||||||
assign ROM_OE = !MCU_OVR ? MCU_READ
|
assign ROM_OE = !MCU_OVR
|
||||||
|
?MCU_READ
|
||||||
:ROM_OE_ARRAY[{SNES_WRITE_CYCLE, MCU_WRITE_CYCLE}][STATEIDX];
|
:ROM_OE_ARRAY[{SNES_WRITE_CYCLE, MCU_WRITE_CYCLE}][STATEIDX];
|
||||||
|
|
||||||
assign ROM_CE = 1'b0; // !MCU_OVR ? (MCU_READ & MCU_WRITE) : ROM_SEL;
|
assign ROM_CE = 1'b0; // !MCU_OVR ? (MCU_READ & MCU_WRITE) : ROM_SEL;
|
||||||
@ -664,7 +624,12 @@ assign ROM_BLE = !ROM_WE ? !ROM_ADDR0 : 1'b0;
|
|||||||
assign SNES_DATABUS_OE = dspx_enable ? 1'b0 :
|
assign SNES_DATABUS_OE = dspx_enable ? 1'b0 :
|
||||||
msu_enable ? (SNES_READ & SNES_WRITE) :
|
msu_enable ? (SNES_READ & SNES_WRITE) :
|
||||||
bsx_data_ovr ? (SNES_READ & SNES_WRITE) :
|
bsx_data_ovr ? (SNES_READ & SNES_WRITE) :
|
||||||
srtc_enable ? (SNES_READ & SNES_WRITE) : ((IS_ROM & SNES_CS) | (!IS_ROM & !IS_SAVERAM & !IS_WRITABLE & !IS_FLASHWR) | (SNES_READ & SNES_WRITE));
|
srtc_enable ? (SNES_READ & SNES_WRITE) :
|
||||||
|
((IS_ROM & SNES_CS)
|
||||||
|
|(!IS_ROM & !IS_SAVERAM & !IS_WRITABLE & !IS_FLASHWR)
|
||||||
|
|(SNES_READ & SNES_WRITE)
|
||||||
|
);
|
||||||
|
|
||||||
assign SNES_DATABUS_DIR = !SNES_READ ? 1'b1 : 1'b0;
|
assign SNES_DATABUS_DIR = !SNES_READ ? 1'b1 : 1'b0;
|
||||||
|
|
||||||
assign SNES_DATA_TO_MEM = SNES_DATA_TO_MEM_ARRAY[SNES_WRITE_CYCLE][STATEIDX];
|
assign SNES_DATA_TO_MEM = SNES_DATA_TO_MEM_ARRAY[SNES_WRITE_CYCLE][STATEIDX];
|
||||||
|
|||||||
@ -397,9 +397,13 @@ always @(posedge clk) begin
|
|||||||
8'hec: // release DSPx reset
|
8'hec: // release DSPx reset
|
||||||
dspx_reset_out <= 1'b0;
|
dspx_reset_out <= 1'b0;
|
||||||
endcase
|
endcase
|
||||||
|
|
||||||
end
|
end
|
||||||
if (SD_DMA_NEXTADDR | (mcu_nextaddr & (cmd_data[7:5] == 3'h4) && (cmd_data[3]) && (spi_byte_cnt > (32'h1+cmd_data[4])))) begin
|
|
||||||
|
if (SD_DMA_NEXTADDR | (mcu_nextaddr & (cmd_data[7:5] == 3'h4)
|
||||||
|
&& (cmd_data[3])
|
||||||
|
&& (spi_byte_cnt > (32'h1+cmd_data[4])))
|
||||||
|
)
|
||||||
|
begin
|
||||||
case (SD_DMA_TGTr)
|
case (SD_DMA_TGTr)
|
||||||
2'b00: ADDR_OUT_BUF <= ADDR_OUT_BUF + 1;
|
2'b00: ADDR_OUT_BUF <= ADDR_OUT_BUF + 1;
|
||||||
2'b01: DAC_ADDR_OUT_BUF <= DAC_ADDR_OUT_BUF + 1;
|
2'b01: DAC_ADDR_OUT_BUF <= DAC_ADDR_OUT_BUF + 1;
|
||||||
@ -410,7 +414,7 @@ end
|
|||||||
|
|
||||||
// value fetch during last SPI bit
|
// value fetch during last SPI bit
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
if (spi_bit_cnt == 3'h7)
|
if (spi_bit_cnt == 3'h7) begin
|
||||||
if (cmd_data[7:0] == 8'hF0)
|
if (cmd_data[7:0] == 8'hF0)
|
||||||
MCU_DATA_IN_BUF <= 8'hA5;
|
MCU_DATA_IN_BUF <= 8'hA5;
|
||||||
else if (cmd_data[7:0] == 8'hF1)
|
else if (cmd_data[7:0] == 8'hF1)
|
||||||
@ -459,7 +463,7 @@ always @(posedge clk) begin
|
|||||||
MCU_DATA_IN_BUF <= mcu_data_in;
|
MCU_DATA_IN_BUF <= mcu_data_in;
|
||||||
else
|
else
|
||||||
MCU_DATA_IN_BUF <= cmd_data;
|
MCU_DATA_IN_BUF <= cmd_data;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// nextaddr pulse generation
|
// nextaddr pulse generation
|
||||||
@ -473,14 +477,26 @@ end
|
|||||||
|
|
||||||
// r/w pulse
|
// r/w pulse
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
if ((spi_bit_cnt == 3'h1 || spi_bit_cnt == 3'h2 || spi_bit_cnt == 3'h3) & (cmd_data[7:4] == 4'h9) & (spi_byte_cnt > 32'h1))
|
if ((spi_bit_cnt == 3'h1
|
||||||
|
|| spi_bit_cnt == 3'h2
|
||||||
|
|| spi_bit_cnt == 3'h3
|
||||||
|
)
|
||||||
|
& (cmd_data[7:4] == 4'h9)
|
||||||
|
& (spi_byte_cnt > 32'h1)
|
||||||
|
)
|
||||||
MCU_WRITE_BUF <= 1'b0;
|
MCU_WRITE_BUF <= 1'b0;
|
||||||
else
|
else
|
||||||
MCU_WRITE_BUF <= 1'b1;
|
MCU_WRITE_BUF <= 1'b1;
|
||||||
|
|
||||||
// Read pulse is two spi cycles to ensure that the value
|
// Read pulse is 3 spi cycles to ensure that the value
|
||||||
// is ready in the 2nd cycle in MCU master mode
|
// is ready in the 2nd cycle in MCU master mode
|
||||||
if ((spi_bit_cnt == 3'h5 || spi_bit_cnt == 3'h6 || spi_bit_cnt == 3'h7) & (cmd_data[7:4] == 4'h8) & (spi_byte_cnt > 32'h0))
|
if ((spi_bit_cnt == 3'h5
|
||||||
|
|| spi_bit_cnt == 3'h6
|
||||||
|
|| spi_bit_cnt == 3'h7
|
||||||
|
)
|
||||||
|
& (cmd_data[7:4] == 4'h8)
|
||||||
|
& (spi_byte_cnt > 32'h0)
|
||||||
|
)
|
||||||
MCU_READ_BUF <= 1'b0;
|
MCU_READ_BUF <= 1'b0;
|
||||||
else
|
else
|
||||||
MCU_READ_BUF <= 1'b1;
|
MCU_READ_BUF <= 1'b1;
|
||||||
@ -490,7 +506,14 @@ end
|
|||||||
assign mcu_nextaddr = mcu_nextaddr_buf == 2'b01;
|
assign mcu_nextaddr = mcu_nextaddr_buf == 2'b01;
|
||||||
|
|
||||||
assign mcu_read = MCU_READ_BUF;
|
assign mcu_read = MCU_READ_BUF;
|
||||||
assign mcu_write = SD_DMA_STATUS ? (SD_DMA_TGTr == 2'b00 ? SD_DMA_SRAM_WE : 1'b1) : MCU_WRITE_BUF;
|
|
||||||
|
assign mcu_write = SD_DMA_STATUS
|
||||||
|
?(SD_DMA_TGTr == 2'b00
|
||||||
|
?SD_DMA_SRAM_WE
|
||||||
|
:1'b1
|
||||||
|
)
|
||||||
|
: MCU_WRITE_BUF;
|
||||||
|
|
||||||
assign addr_out = ADDR_OUT_BUF;
|
assign addr_out = ADDR_OUT_BUF;
|
||||||
assign dac_addr_out = DAC_ADDR_OUT_BUF;
|
assign dac_addr_out = DAC_ADDR_OUT_BUF;
|
||||||
assign msu_addr_out = MSU_ADDR_OUT_BUF;
|
assign msu_addr_out = MSU_ADDR_OUT_BUF;
|
||||||
|
|||||||
@ -52,7 +52,8 @@ wire [7:0] msu_data;
|
|||||||
reg [7:0] msu_data_r;
|
reg [7:0] msu_data_r;
|
||||||
|
|
||||||
reg [1:0] msu_address_ext_write_sreg;
|
reg [1:0] msu_address_ext_write_sreg;
|
||||||
always @(posedge clkin) msu_address_ext_write_sreg <= {msu_address_ext_write_sreg[0], msu_address_ext_write};
|
always @(posedge clkin)
|
||||||
|
msu_address_ext_write_sreg <= {msu_address_ext_write_sreg[0], msu_address_ext_write};
|
||||||
wire msu_address_ext_write_rising = (msu_address_ext_write_sreg[1:0] == 2'b01);
|
wire msu_address_ext_write_rising = (msu_address_ext_write_sreg[1:0] == 2'b01);
|
||||||
|
|
||||||
reg [5:0] reg_oe_sreg;
|
reg [5:0] reg_oe_sreg;
|
||||||
@ -89,8 +90,12 @@ initial begin
|
|||||||
data_busy_r <= 1'b1;
|
data_busy_r <= 1'b1;
|
||||||
end
|
end
|
||||||
|
|
||||||
assign status_out = {msu_address_r[13],
|
assign status_out = {msu_address_r[13], // 6
|
||||||
audio_start_r, data_start_r, volume_start_r, audio_ctrl_r, ctrl_start_r};
|
audio_start_r, // 5
|
||||||
|
data_start_r, // 4
|
||||||
|
volume_start_r, // 3
|
||||||
|
audio_ctrl_r, // 2:1
|
||||||
|
ctrl_start_r}; // 0
|
||||||
|
|
||||||
initial msu_address_r = 14'h1234;
|
initial msu_address_r = 14'h1234;
|
||||||
|
|
||||||
@ -101,9 +106,9 @@ msu_databuf snes_msu_databuf (
|
|||||||
.dina(pgm_data), // Bus [7 : 0]
|
.dina(pgm_data), // Bus [7 : 0]
|
||||||
.clkb(clkin),
|
.clkb(clkin),
|
||||||
.addrb(msu_address), // Bus [13 : 0]
|
.addrb(msu_address), // Bus [13 : 0]
|
||||||
.doutb(msu_data)); // Bus [7 : 0]
|
.doutb(msu_data)
|
||||||
|
); // Bus [7 : 0]
|
||||||
|
|
||||||
// reg [7:0] data_out_r;
|
|
||||||
reg [7:0] data_in_r;
|
reg [7:0] data_in_r;
|
||||||
reg [7:0] data_out_r;
|
reg [7:0] data_out_r;
|
||||||
assign reg_data_out = data_out_r;
|
assign reg_data_out = data_out_r;
|
||||||
|
|||||||
@ -110,7 +110,6 @@ end
|
|||||||
wire is_leapyear_feb = (month == 1) && (year[1:0] == 2'b00);
|
wire is_leapyear_feb = (month == 1) && (year[1:0] == 2'b00);
|
||||||
|
|
||||||
always @(posedge clkin) begin
|
always @(posedge clkin) begin
|
||||||
|
|
||||||
if(!tick_cnt) begin
|
if(!tick_cnt) begin
|
||||||
rtc_state <= STATE_SEC1;
|
rtc_state <= STATE_SEC1;
|
||||||
end else begin
|
end else begin
|
||||||
@ -242,7 +241,8 @@ always @(posedge clkin) begin
|
|||||||
end
|
end
|
||||||
STATE_DAY1: begin
|
STATE_DAY1: begin
|
||||||
if(carry) begin
|
if(carry) begin
|
||||||
if(rtc_data_r[31:28] == dom10[month] && rtc_data_r[27:24] == dom1[month] + is_leapyear_feb) begin
|
if(rtc_data_r[31:28] == dom10[month]
|
||||||
|
&& rtc_data_r[27:24] == dom1[month] + is_leapyear_feb) begin
|
||||||
rtc_data_r[27:24] <= 0;
|
rtc_data_r[27:24] <= 0;
|
||||||
carry <= 1;
|
carry <= 1;
|
||||||
end else if (rtc_data_r[27:24] == 9) begin
|
end else if (rtc_data_r[27:24] == 9) begin
|
||||||
@ -344,13 +344,18 @@ always @(posedge clkin) begin
|
|||||||
+(rtc_data_r[55:52] << 1) + (rtc_data_r[55:52] << 3);
|
+(rtc_data_r[55:52] << 1) + (rtc_data_r[55:52] << 3);
|
||||||
|
|
||||||
dow_month <= month + 1;
|
dow_month <= month + 1;
|
||||||
dow_day <= rtc_data_r[27:24] + (rtc_data_r[31:28] << 1) + (rtc_data_r[31:28] << 3);
|
dow_day <= rtc_data_r[27:24]
|
||||||
|
+ (rtc_data_r[31:28] << 1)
|
||||||
|
+ (rtc_data_r[31:28] << 3);
|
||||||
end
|
end
|
||||||
STATE_DOW1: begin
|
STATE_DOW1: begin
|
||||||
year <= dow_year1[1:0];
|
year <= dow_year1[1:0];
|
||||||
if(dow_month <= 2) begin
|
if(dow_month <= 2) begin
|
||||||
dow_month <= dow_month + 10;
|
dow_month <= dow_month + 10;
|
||||||
dow_year <= dow_year1 + (dow_year100 << 2) + (dow_year100 << 5) + (dow_year100 << 6) - 1;
|
dow_year <= dow_year1
|
||||||
|
+ (dow_year100 << 2)
|
||||||
|
+ (dow_year100 << 5)
|
||||||
|
+ (dow_year100 << 6) - 1;
|
||||||
if(dow_year1)
|
if(dow_year1)
|
||||||
dow_year1 <= dow_year1 - 1;
|
dow_year1 <= dow_year1 - 1;
|
||||||
else begin
|
else begin
|
||||||
|
|||||||
@ -297,8 +297,8 @@
|
|||||||
<property xil_pn:name="Output Extended Identifiers" xil_pn:value="false" xil_pn:valueState="default"/>
|
<property xil_pn:name="Output Extended Identifiers" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Output File Name" xil_pn:value="main" xil_pn:valueState="default"/>
|
<property xil_pn:name="Output File Name" xil_pn:value="main" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Overwrite Compiled Libraries" xil_pn:value="false" xil_pn:valueState="default"/>
|
<property xil_pn:name="Overwrite Compiled Libraries" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Pack I/O Registers into IOBs" xil_pn:value="Yes" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Pack I/O Registers into IOBs" xil_pn:value="No" xil_pn:valueState="non-default"/>
|
||||||
<property xil_pn:name="Pack I/O Registers/Latches into IOBs" xil_pn:value="For Inputs and Outputs" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Pack I/O Registers/Latches into IOBs" xil_pn:value="Off" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/>
|
<property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Perform Advanced Analysis" xil_pn:value="false" xil_pn:valueState="default"/>
|
<property xil_pn:name="Perform Advanced Analysis" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Perform Advanced Analysis Post Trace" xil_pn:value="false" xil_pn:valueState="default"/>
|
<property xil_pn:name="Perform Advanced Analysis Post Trace" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||||
@ -327,7 +327,7 @@
|
|||||||
<property xil_pn:name="Regenerate Core" xil_pn:value="Under Current Project Setting" xil_pn:valueState="default"/>
|
<property xil_pn:name="Regenerate Core" xil_pn:value="Under Current Project Setting" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Register Balancing" xil_pn:value="Yes" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Register Balancing" xil_pn:value="Yes" xil_pn:valueState="non-default"/>
|
||||||
<property xil_pn:name="Register Duplication" xil_pn:value="On" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Register Duplication" xil_pn:value="On" xil_pn:valueState="non-default"/>
|
||||||
<property xil_pn:name="Register Duplication Xst" xil_pn:value="false" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Register Duplication Xst" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Release Write Enable (Output Events)" xil_pn:value="Default (6)" xil_pn:valueState="default"/>
|
<property xil_pn:name="Release Write Enable (Output Events)" xil_pn:value="Default (6)" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Rename Design Instance in Testbench File to" xil_pn:value="UUT" xil_pn:valueState="default"/>
|
<property xil_pn:name="Rename Design Instance in Testbench File to" xil_pn:value="UUT" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Rename Top Level Architecture To" xil_pn:value="Structure" xil_pn:valueState="default"/>
|
<property xil_pn:name="Rename Top Level Architecture To" xil_pn:value="Structure" xil_pn:valueState="default"/>
|
||||||
@ -381,8 +381,8 @@
|
|||||||
<property xil_pn:name="Specify Top Level Instance Names Post-Route" xil_pn:value="work.updtest" xil_pn:valueState="default"/>
|
<property xil_pn:name="Specify Top Level Instance Names Post-Route" xil_pn:value="work.updtest" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Specify Top Level Instance Names Post-Translate" xil_pn:value="work.updtest" xil_pn:valueState="default"/>
|
<property xil_pn:name="Specify Top Level Instance Names Post-Translate" xil_pn:value="work.updtest" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/>
|
||||||
<property xil_pn:name="Starting Placer Cost Table (1-100) Map" xil_pn:value="2" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Starting Placer Cost Table (1-100) Map" xil_pn:value="1" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Starting Placer Cost Table (1-100) Par" xil_pn:value="2" xil_pn:valueState="non-default"/>
|
<property xil_pn:name="Starting Placer Cost Table (1-100) Par" xil_pn:value="1" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Structure window" xil_pn:value="true" xil_pn:valueState="default"/>
|
<property xil_pn:name="Structure window" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/>
|
<property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Target Simulator" xil_pn:value="Please Specify" xil_pn:valueState="default"/>
|
<property xil_pn:name="Target Simulator" xil_pn:value="Please Specify" xil_pn:valueState="default"/>
|
||||||
|
|||||||
@ -19,7 +19,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
module spi(input clk,
|
module spi(
|
||||||
|
input clk,
|
||||||
input SCK,
|
input SCK,
|
||||||
input MOSI,
|
input MOSI,
|
||||||
inout MISO,
|
inout MISO,
|
||||||
@ -33,10 +34,7 @@ module spi(input clk,
|
|||||||
input [7:0] input_data,
|
input [7:0] input_data,
|
||||||
output [31:0] byte_cnt,
|
output [31:0] byte_cnt,
|
||||||
output [2:0] bit_cnt
|
output [2:0] bit_cnt
|
||||||
|
);
|
||||||
// SD "DMA" extension
|
|
||||||
/*input sd_dma_sck,
|
|
||||||
input sd_dma_ovr*/);
|
|
||||||
|
|
||||||
reg [7:0] cmd_data_r;
|
reg [7:0] cmd_data_r;
|
||||||
reg [7:0] param_data_r;
|
reg [7:0] param_data_r;
|
||||||
@ -81,7 +79,8 @@ begin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge clk) byte_received <= SSEL_active && SCK_risingedge && (bitcnt==3'b111);
|
always @(posedge clk)
|
||||||
|
byte_received <= SSEL_active && SCK_risingedge && (bitcnt==3'b111);
|
||||||
|
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
if(~SSEL_active)
|
if(~SSEL_active)
|
||||||
|
|||||||
@ -90,7 +90,6 @@ always @(posedge clkin) begin
|
|||||||
end else if(reg_we_rising && enable) begin
|
end else if(reg_we_rising && enable) begin
|
||||||
case (addr_in)
|
case (addr_in)
|
||||||
// 1'b0: // data register is read only
|
// 1'b0: // data register is read only
|
||||||
|
|
||||||
1'b1: // control register
|
1'b1: // control register
|
||||||
case (data_in[3:0])
|
case (data_in[3:0])
|
||||||
4'hd: begin
|
4'hd: begin
|
||||||
@ -129,14 +128,16 @@ always @(posedge clkin) begin
|
|||||||
6: rtc_data_out_r[27:24] <= data_in[3:0];
|
6: rtc_data_out_r[27:24] <= data_in[3:0];
|
||||||
7: rtc_data_out_r[31:28] <= data_in[3:0];
|
7: rtc_data_out_r[31:28] <= data_in[3:0];
|
||||||
8: begin
|
8: begin
|
||||||
rtc_data_out_r[35:32] <= data_in[3:0] < 10 ? data_in[3:0]
|
rtc_data_out_r[35:32] <= (data_in[3:0] < 10)
|
||||||
|
? data_in[3:0]
|
||||||
: data_in[3:0] - 10;
|
: data_in[3:0] - 10;
|
||||||
rtc_data_out_r[39:36] <= data_in[3:0] < 10 ? 0 : 1;
|
rtc_data_out_r[39:36] <= data_in[3:0] < 10 ? 0 : 1;
|
||||||
end
|
end
|
||||||
9: rtc_data_out_r[43:40] <= data_in[3:0];
|
9: rtc_data_out_r[43:40] <= data_in[3:0];
|
||||||
10: rtc_data_out_r[47:44] <= data_in[3:0];
|
10: rtc_data_out_r[47:44] <= data_in[3:0];
|
||||||
11: begin
|
11: begin
|
||||||
rtc_data_out_r[51:48] <= data_in[3:0] < 10 ? data_in[3:0]
|
rtc_data_out_r[51:48] <= (data_in[3:0] < 10)
|
||||||
|
? data_in[3:0]
|
||||||
: data_in[3:0] - 10;
|
: data_in[3:0] - 10;
|
||||||
rtc_data_out_r[55:52] <= data_in[3:0] < 10 ? 1 : 2;
|
rtc_data_out_r[55:52] <= data_in[3:0] < 10 ? 1 : 2;
|
||||||
end
|
end
|
||||||
@ -163,10 +164,14 @@ always @(posedge clkin) begin
|
|||||||
5: data_out_r <= rtc_data_r[23:20];
|
5: data_out_r <= rtc_data_r[23:20];
|
||||||
6: data_out_r <= rtc_data_r[27:24];
|
6: data_out_r <= rtc_data_r[27:24];
|
||||||
7: data_out_r <= rtc_data_r[31:28];
|
7: data_out_r <= rtc_data_r[31:28];
|
||||||
8: data_out_r <= rtc_data_r[35:32] + (rtc_data_r[39:36] << 1) + (rtc_data_r[39:36] << 3);
|
8: data_out_r <= rtc_data_r[35:32]
|
||||||
|
+ (rtc_data_r[39:36] << 1)
|
||||||
|
+ (rtc_data_r[39:36] << 3);
|
||||||
9: data_out_r <= rtc_data_r[43:40];
|
9: data_out_r <= rtc_data_r[43:40];
|
||||||
10: data_out_r <= rtc_data_r[47:44];
|
10: data_out_r <= rtc_data_r[47:44];
|
||||||
11: data_out_r <= rtc_data_r[51:48] + (rtc_data_r[55:52] << 1) + (rtc_data_r[55:52] << 3) - 10;
|
11: data_out_r <= rtc_data_r[51:48]
|
||||||
|
+ (rtc_data_r[55:52] << 1)
|
||||||
|
+ (rtc_data_r[55:52] << 3) - 10;
|
||||||
12: data_out_r <= rtc_data_r[59:56];
|
12: data_out_r <= rtc_data_r[59:56];
|
||||||
15: begin
|
15: begin
|
||||||
rtc_data_r <= rtc_data_in;
|
rtc_data_r <= rtc_data_in;
|
||||||
|
|||||||
@ -132,7 +132,11 @@ upd77c25_datram datram (
|
|||||||
.douta(ram_douta)); // Bus [15 : 0]
|
.douta(ram_douta)); // Bus [15 : 0]
|
||||||
|
|
||||||
assign ram_wea = ((op != I_JP) && op_dst == 4'b1111 && insn_state == STATE_NEXT);
|
assign ram_wea = ((op != I_JP) && op_dst == 4'b1111 && insn_state == STATE_NEXT);
|
||||||
assign ram_addra = {regs_dph | ((insn_state == STATE_ALU2 && op_dst == 4'b1100) ? 4'b0100 : 4'b0000), regs_dpl};
|
assign ram_addra = {regs_dph | ((insn_state == STATE_ALU2 && op_dst == 4'b1100)
|
||||||
|
? 4'b0100
|
||||||
|
: 4'b0000),
|
||||||
|
regs_dpl};
|
||||||
|
|
||||||
reg signed [15:0] regs_k;
|
reg signed [15:0] regs_k;
|
||||||
reg signed [15:0] regs_l;
|
reg signed [15:0] regs_l;
|
||||||
reg [15:0] regs_trb;
|
reg [15:0] regs_trb;
|
||||||
@ -142,7 +146,6 @@ reg [15:0] regs_sr;
|
|||||||
reg [15:0] regs_si;
|
reg [15:0] regs_si;
|
||||||
reg [3:0] regs_sp;
|
reg [3:0] regs_sp;
|
||||||
|
|
||||||
|
|
||||||
reg cond_true;
|
reg cond_true;
|
||||||
|
|
||||||
reg [8:0] jp_brch;
|
reg [8:0] jp_brch;
|
||||||
@ -211,12 +214,12 @@ always @(posedge CLK) reg_nCS_sreg <= {reg_nCS_sreg[6:0], nCS};
|
|||||||
reg [5:0] reg_oe_sreg;
|
reg [5:0] reg_oe_sreg;
|
||||||
initial reg_oe_sreg = 6'b111111;
|
initial reg_oe_sreg = 6'b111111;
|
||||||
always @(posedge CLK) reg_oe_sreg <= {reg_oe_sreg[4:0], nRD};
|
always @(posedge CLK) reg_oe_sreg <= {reg_oe_sreg[4:0], nRD};
|
||||||
wire reg_oe_rising = !reg_nCS_sreg[2] && (reg_oe_sreg[5:0] == 6'b000001);
|
wire reg_oe_rising = !reg_nCS_sreg[4] && (reg_oe_sreg[5:0] == 6'b000001);
|
||||||
|
|
||||||
reg [5:0] reg_we_sreg;
|
reg [5:0] reg_we_sreg;
|
||||||
initial reg_we_sreg = 6'b111111;
|
initial reg_we_sreg = 6'b111111;
|
||||||
always @(posedge CLK) reg_we_sreg <= {reg_we_sreg[4:0], nWR};
|
always @(posedge CLK) reg_we_sreg <= {reg_we_sreg[4:0], nWR};
|
||||||
wire reg_we_rising = !reg_nCS_sreg[2] && (reg_we_sreg[5:0] == 6'b000001);
|
wire reg_we_rising = !reg_nCS_sreg[4] && (reg_we_sreg[5:0] == 6'b000001);
|
||||||
|
|
||||||
reg [7:0] A0r;
|
reg [7:0] A0r;
|
||||||
initial A0r = 8'b11111111;
|
initial A0r = 8'b11111111;
|
||||||
@ -582,7 +585,6 @@ always @(posedge CLK) begin
|
|||||||
end
|
end
|
||||||
STATE_IDLE1: insn_state <= STATE_IDLE2;
|
STATE_IDLE1: insn_state <= STATE_IDLE2;
|
||||||
STATE_IDLE2: insn_state <= STATE_FETCH;
|
STATE_IDLE2: insn_state <= STATE_FETCH;
|
||||||
|
|
||||||
endcase
|
endcase
|
||||||
end else begin
|
end else begin
|
||||||
insn_state <= STATE_IDLE1;
|
insn_state <= STATE_IDLE1;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user