From cce68a82f62dee310e1dff61502b654bbf6e03fa Mon Sep 17 00:00:00 2001 From: Maximilian Rehkopf Date: Mon, 10 Oct 2011 18:53:52 +0200 Subject: [PATCH 01/11] Firmware: remove debug statements; disable SuperCIC pair mode by default --- src/main.c | 4 +--- src/memory.c | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index 5a1cf09..366072c 100644 --- a/src/main.c +++ b/src/main.c @@ -79,7 +79,7 @@ led_pwm(); printf("PCONP=%lx\n", LPC_SC->PCONP); file_init(); - cic_init(1); + cic_init(0); /* setup timer (fpga clk) */ LPC_TIM3->CTCR=0; LPC_TIM3->EMR=EMC0TOGGLE; @@ -95,7 +95,6 @@ printf("PCONP=%lx\n", LPC_SC->PCONP); newcard = 1; } load_bootrle(SRAM_MENU_ADDR); -sram_hexdump(SRAM_MENU_ADDR+0xffc0, 16); set_saveram_mask(0x1fff); set_rom_mask(0x3fffff); set_mapper(0x7); @@ -222,7 +221,6 @@ sram_hexdump(SRAM_MENU_ADDR+0xffc0, 16); printf("test sram\n"); while(!sram_reliable()) cli_entrycheck(); printf("ok\n"); -sram_hexdump(SRAM_DIR_ADDR, 0x300); //while(1) { // delay_ms(1000); // printf("Estimated SNES master clock: %ld Hz\n", get_snes_sysclk()); diff --git a/src/memory.c b/src/memory.c index fcb5b3d..784a115 100644 --- a/src/memory.c +++ b/src/memory.c @@ -439,8 +439,8 @@ uint8_t sram_reliable() { val=sram_readlong(SRAM_SCRATCHPAD); if(val==0x12345678) { score++; -/* } else { - dprintf("i=%d val=%08lX\n", i, val); */ + } else { + printf("i=%d val=%08lX\n", i, val); } } if(score Date: Sun, 23 Oct 2011 04:10:55 +0200 Subject: [PATCH 02/11] FPGA/cx4: initial commit --- verilog/sd2snes_cx4/address.v | 64 + verilog/sd2snes_cx4/cx4.v | 636 +++++ verilog/sd2snes_cx4/dac.v | 160 ++ verilog/sd2snes_cx4/dcm.v | 72 + verilog/sd2snes_cx4/ipcore_dir/cx4_datram.v | 187 ++ verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xco | 105 + .../sd2snes_cx4/ipcore_dir/cx4_datram.xise | 72 + verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.v | 181 ++ verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xco | 105 + .../sd2snes_cx4/ipcore_dir/cx4_datrom.xise | 72 + verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v | 2511 +++++++++++++++++ verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco | 68 + verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise | 378 +++ verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v | 181 ++ verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco | 105 + .../sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise | 72 + verilog/sd2snes_cx4/ipcore_dir/dac_buf.v | 181 ++ verilog/sd2snes_cx4/ipcore_dir/dac_buf.xco | 105 + verilog/sd2snes_cx4/ipcore_dir/dac_buf.xise | 79 + verilog/sd2snes_cx4/ipcore_dir/msu_databuf.v | 181 ++ .../sd2snes_cx4/ipcore_dir/msu_databuf.xco | 105 + .../sd2snes_cx4/ipcore_dir/msu_databuf.xise | 79 + verilog/sd2snes_cx4/main.v | 564 ++++ verilog/sd2snes_cx4/msu.v | 194 ++ verilog/sd2snes_cx4/sd2snes_cx4.xise | 456 +++ verilog/sd2snes_cx4/sd_dma.v | 132 + verilog/sd2snes_cx4/spi.v | 113 + 27 files changed, 7158 insertions(+) create mode 100644 verilog/sd2snes_cx4/address.v create mode 100644 verilog/sd2snes_cx4/cx4.v create mode 100644 verilog/sd2snes_cx4/dac.v create mode 100644 verilog/sd2snes_cx4/dcm.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_datram.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xco create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xise create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xco create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xise create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco create mode 100644 verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise create mode 100644 verilog/sd2snes_cx4/ipcore_dir/dac_buf.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/dac_buf.xco create mode 100644 verilog/sd2snes_cx4/ipcore_dir/dac_buf.xise create mode 100644 verilog/sd2snes_cx4/ipcore_dir/msu_databuf.v create mode 100644 verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xco create mode 100644 verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xise create mode 100644 verilog/sd2snes_cx4/main.v create mode 100644 verilog/sd2snes_cx4/msu.v create mode 100644 verilog/sd2snes_cx4/sd2snes_cx4.xise create mode 100644 verilog/sd2snes_cx4/sd_dma.v create mode 100644 verilog/sd2snes_cx4/spi.v diff --git a/verilog/sd2snes_cx4/address.v b/verilog/sd2snes_cx4/address.v new file mode 100644 index 0000000..e62071d --- /dev/null +++ b/verilog/sd2snes_cx4/address.v @@ -0,0 +1,64 @@ +`timescale 1 ns / 1 ns +////////////////////////////////////////////////////////////////////////////////// +// Company: Rehkopf +// Engineer: Rehkopf +// +// Create Date: 01:13:46 05/09/2009 +// Design Name: +// Module Name: address +// Project Name: +// Target Devices: +// Tool versions: +// Description: Address logic w/ SaveRAM masking +// +// Dependencies: +// +// Revision: +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module address( + input CLK, + input [2:0] MAPPER, // MCU detected mapper + input [23:0] SNES_ADDR, // requested address from SNES + output [23:0] ROM_ADDR, // Address to request from SRAM0 + output ROM_SEL, // enable SRAM0 (active low) + output IS_SAVERAM, // address/CS mapped as SRAM? + output IS_ROM, // address mapped as ROM? + output IS_WRITABLE, // address somehow mapped as writable area? + input [23:0] SAVERAM_MASK, + input [23:0] ROM_MASK, + input use_msu1, + output msu_enable, + output cx4_enable +); + +wire [23:0] SRAM_SNES_ADDR; + +/* Cx4 mapper: + - LoROM (extended to 00-7d, 80-ff) + - MMIO @ 6000-7fff + */ + +assign IS_ROM = (SNES_ADDR[15]); + +assign SRAM_SNES_ADDR = ({2'b00, SNES_ADDR[22:16], SNES_ADDR[14:0]} + & ROM_MASK); + +assign ROM_ADDR = SRAM_SNES_ADDR; + +assign ROM_SEL = 1'b0; + +wire msu_enable_w = use_msu1 & (!SNES_ADDR[22] && ((SNES_ADDR[15:0] & 16'hfff8) == 16'h2000)); +reg [5:0] msu_enable_r; +initial msu_enable_r = 6'b000000; +always @(posedge CLK) msu_enable_r <= {msu_enable_r[4:0], msu_enable_w}; +assign msu_enable = &msu_enable_r[5:2]; + +wire cx4_enable_w = (!SNES_ADDR[22] && (SNES_ADDR[15:13] == 3'b011)); +reg [5:0] cx4_enable_r; +initial cx4_enable_r = 6'b000000; +always @(posedge CLK) cx4_enable_r <= {cx4_enable_r[4:0], cx4_enable_w}; +assign cx4_enable = &cx4_enable_r[5:2]; + +endmodule diff --git a/verilog/sd2snes_cx4/cx4.v b/verilog/sd2snes_cx4/cx4.v new file mode 100644 index 0000000..97286be --- /dev/null +++ b/verilog/sd2snes_cx4/cx4.v @@ -0,0 +1,636 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 23:14:37 10/13/2011 +// Design Name: +// Module Name: cx4 +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module cx4( + input [7:0] DI, + output [7:0] DO, + input [12:0] ADDR, + input CS, + input nRD, + input nWR, + input CLK, + input [23:0] DATROM_DI, + input DATROM_WE, + input [9:0] DATROM_ADDR, + input [7:0] BUS_DI, + output [23:0] BUS_ADDR, + output BUS_RRQ, + input BUS_RDY, + output cx4_active + ); + +reg [2:0] cx4_busy; +parameter BUSY_CACHE = 2'b00; +parameter BUSY_DMA = 2'b01; +parameter BUSY_CPU = 2'b10; + +wire datram_enable = CS & (ADDR[11:0] < 12'hc00); +wire mmio_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] <= 8'b11000); +wire status_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] > 8'b11000); +wire vector_enable = CS & (ADDR[12:5] == 8'b11111011); +wire gpr_enable = CS & (&(ADDR[12:7]) && ADDR[5:4] != 2'b11); +wire pgmrom_enable = CS & (ADDR[12:5] == 8'b11110000); + +wire [7:0] DATRAM_DO; +reg [7:0] MMIO_DOr; +wire [7:0] MMIO_DO; +wire [7:0] STATUS_DO; +wire [7:0] VECTOR_DO; +wire [7:0] GPR_DO; + +assign DO = datram_enable ? DATRAM_DO + : mmio_enable ? MMIO_DO + : status_enable ? STATUS_DO + : vector_enable ? VECTOR_DO + : gpr_enable ? GPR_DO + : 8'h00; + +/* 0x1f40 - 0x1f52: MMIO + SNES: 8 bits / CX4: various */ +reg [23:0] cx4_mmio_dmasrc; +reg [15:0] cx4_mmio_dmalen; +reg [23:0] cx4_mmio_dmatgt; +reg cx4_mmio_cachepage; +reg [23:0] cx4_mmio_pgmoff; +reg [1:0] cx4_mmio_r1f4c; +reg [14:0] cx4_mmio_pgmpage; +reg [7:0] cx4_mmio_pc; +reg [7:0] cx4_mmio_r1f50; +reg cx4_mmio_r1f51; +reg cx4_mmio_r1f52; +/* 0x1f53 - 0x1f5f: status register */ +assign cx4_active = |cx4_busy; +/* 0x1f60 - 0x1f7f: reset vectors */ +reg [7:0] vector [31:0]; +/* 0x1f80 - 0x1faf (0x1fc0 - 0x1fef): general purpose register file + SNES: 8 bits / CX4: 24 bits */ +reg [7:0] gpr [47:0]; +wire [47:0] cpu_mul_result; + +reg [23:0] const [15:0]; + +reg [15:0] cachetag [1:0]; // 15: valid; 14-0: bank number +initial begin + cachetag[0] = 16'h0000; + cachetag[1] = 16'h0000; + cx4_busy = 3'b000; + cx4_mmio_pgmoff = 24'h000000; + cx4_mmio_pgmpage = 15'h0000; + cx4_mmio_dmasrc = 24'h000000; + cx4_mmio_dmalen = 16'h0000; + cx4_mmio_dmatgt = 24'h000000; + const[0] = 24'h000000; + const[1] = 24'hffffff; + const[2] = 24'h00ff00; + const[3] = 24'hff0000; + const[4] = 24'h00ffff; + const[5] = 24'hffff00; + const[6] = 24'h800000; + const[7] = 24'h7fffff; + const[8] = 24'h008000; + const[9] = 24'h007fff; + const[10] = 24'hff7fff; + const[11] = 24'hffff7f; + const[12] = 24'h010000; + const[13] = 24'hfeffff; + const[14] = 24'h000100; + const[15] = 24'h00feff; +end + +assign MMIO_DO = MMIO_DOr; +assign VECTOR_DO = vector [ADDR[4:0]]; +assign GPR_DO = gpr [ADDR[5:0]]; +assign STATUS_DO = {1'b0, cx4_active, 4'b0000, ~cx4_active, 1'b0}; + +reg [7:0] DIr; +always @(posedge CLK) DIr <= DI; + +reg [4:0] datram_enable_sreg; +initial datram_enable_sreg = 5'b11111; +always @(posedge CLK) datram_enable_sreg <= {datram_enable_sreg[3:0], datram_enable}; + +reg [5:0] nWR_sreg; +always @(posedge CLK) nWR_sreg <= {nWR_sreg[4:0], nWR}; +wire WR_EN = (nWR_sreg[5:0] == 6'b000001); +wire DATRAM_WR_EN = datram_enable & WR_EN; +wire MMIO_WR_EN = mmio_enable & WR_EN; +wire VECTOR_WR_EN = vector_enable & WR_EN; +wire GPR_WR_EN = gpr_enable & WR_EN; + +reg [23:0] cpu_idb; // tmp register for reg file read + +/* Need to cache when: + 1f48 is written + AND (selected cache page is invalid + OR selected cache page does not contain requested page already) +*/ +reg CACHE_TRIG_ENr; +reg CACHE_TRIG_EN2r; +initial begin + CACHE_TRIG_ENr = 1'b0; + CACHE_TRIG_EN2r = 1'b0; +end +always @(posedge CLK) CACHE_TRIG_EN2r <= CACHE_TRIG_ENr; +wire CACHE_TRIG_EN = CACHE_TRIG_EN2r; + +reg DMA_TRIG_ENr; +initial DMA_TRIG_ENr = 1'b0; +wire DMA_TRIG_EN = DMA_TRIG_ENr; + +reg CACHE_BUS_RRQr; +reg DMA_BUS_RRQr; +initial begin + CACHE_BUS_RRQr = 1'b0; + DMA_BUS_RRQr = 1'b0; +end +assign BUS_RRQ = CACHE_BUS_RRQr | DMA_BUS_RRQr; + +initial begin + cx4_mmio_r1f50 = 8'h33; + cx4_mmio_r1f51 = 1'b0; + cx4_mmio_r1f52 = 1'b1; +end + +always @(posedge CLK) begin + case (ADDR[4:0]) + 5'h00: MMIO_DOr <= cx4_mmio_dmasrc[7:0]; // 1f40 + 5'h01: MMIO_DOr <= cx4_mmio_dmasrc[15:8]; // 1f41 + 5'h02: MMIO_DOr <= cx4_mmio_dmasrc[23:16]; // 1f42 + 5'h03: MMIO_DOr <= cx4_mmio_dmalen[7:0]; // 1f43 + 5'h04: MMIO_DOr <= cx4_mmio_dmalen[15:8]; // 1f44 + 5'h05: MMIO_DOr <= cx4_mmio_dmatgt[7:0]; // 1f45 + 5'h06: MMIO_DOr <= cx4_mmio_dmatgt[15:8]; // 1f46 + 5'h07: MMIO_DOr <= cx4_mmio_dmatgt[23:16]; // 1f47 + 5'h08: MMIO_DOr <= {7'b0, cx4_mmio_cachepage}; + 5'h09: MMIO_DOr <= cx4_mmio_pgmoff[7:0]; // 1f49 + 5'h0a: MMIO_DOr <= cx4_mmio_pgmoff[15:8]; // 1f4a + 5'h0b: MMIO_DOr <= cx4_mmio_pgmoff[23:16]; // 1f4b + 5'h0c: MMIO_DOr <= {6'b0, cx4_mmio_r1f4c}; // 1f4c + 5'h0d: MMIO_DOr <= cx4_mmio_pgmpage[7:0]; // 1f4d + 5'h0e: MMIO_DOr <= {1'b0, cx4_mmio_pgmpage[14:8]}; // 1f4e + 5'h0f: MMIO_DOr <= cx4_mmio_pc; // 1f4f + 5'h10: MMIO_DOr <= cx4_mmio_r1f50; // 1f50 + 5'h11: MMIO_DOr <= {7'b0, cx4_mmio_r1f51}; // 1f51 + 5'h12: MMIO_DOr <= {7'b0, cx4_mmio_r1f52}; // 1f52 + + 5'h13: MMIO_DOr <= cpu_mul_result[47:40]; // 1f40 + 5'h14: MMIO_DOr <= cpu_mul_result[39:32]; // 1f40 + 5'h15: MMIO_DOr <= cpu_mul_result[31:24]; // 1f40 + 5'h16: MMIO_DOr <= cpu_mul_result[23:16]; // 1f40 + 5'h17: MMIO_DOr <= cpu_mul_result[15:8]; // 1f40 + 5'h18: MMIO_DOr <= cpu_mul_result[7:0]; // 1f40 + + +// 5'h14: MMIO_DOr <= cachetag[0][15:8]; // 1f40 +// 5'h15: MMIO_DOr <= cachetag[0][7:0]; // 1f41 +// 5'h16: MMIO_DOr <= cachetag[1][15:8]; // 1f42 +// 5'h17: MMIO_DOr <= cachetag[1][7:0]; // 1f43 + default: MMIO_DOr <= 8'hff; + endcase +end + +always @(posedge CLK) begin + if(MMIO_WR_EN) begin + case(ADDR[4:0]) + 5'h00: cx4_mmio_dmasrc[7:0] <= DI; // 1f40 + 5'h01: cx4_mmio_dmasrc[15:8] <= DI; // 1f41 + 5'h02: cx4_mmio_dmasrc[23:16] <= DI; // 1f42 + 5'h03: cx4_mmio_dmalen[7:0] <= DI; // 1f43 + 5'h04: cx4_mmio_dmalen[15:8] <= DI; // 1f44 + 5'h05: cx4_mmio_dmatgt[7:0] <= DI; // 1f45 + 5'h06: cx4_mmio_dmatgt[15:8] <= DI; // 1f46 + 5'h07: begin + cx4_mmio_dmatgt[23:16] <= DI; // 1f47 + DMA_TRIG_ENr <= 1'b1; + end + 5'h08: begin + cx4_mmio_cachepage <= DI[0]; // 1f48 + CACHE_TRIG_ENr <= 1'b1; + end + 5'h09: cx4_mmio_pgmoff[7:0] <= DI; // 1f49 + 5'h0a: cx4_mmio_pgmoff[15:8] <= DI; // 1f4a + 5'h0b: cx4_mmio_pgmoff[23:16] <= DI; // 1f4b + 5'h0c: cx4_mmio_r1f4c <= DI[1:0]; // 1f4c + 5'h0d: cx4_mmio_pgmpage[7:0] <= DI; // 1f4d + 5'h0e: cx4_mmio_pgmpage[14:8] <= DI[6:0]; // 1f4e + 5'h0f: cx4_mmio_pc <= DI; // 1f4f + 5'h10: cx4_mmio_r1f50 <= DI & 8'h77; // 1f50 + 5'h11: cx4_mmio_r1f51 <= DI[0]; // 1f51 + 5'h12: cx4_mmio_r1f52 <= DI[0]; // 1f52 + endcase + end else begin + CACHE_TRIG_ENr <= 1'b0; + DMA_TRIG_ENr <= 1'b0; + end +end + +always @(posedge CLK) begin + if(VECTOR_WR_EN) vector[ADDR[4:0]] <= DI; +end + +always @(posedge CLK) begin + if(GPR_WR_EN) gpr[ADDR[5:0]] <= DI; +end + +reg [4:0] CACHE_ST; +parameter ST_CACHE_IDLE = 5'b00001; +parameter ST_CACHE_START = 5'b00010; +parameter ST_CACHE_WAIT = 5'b00100; +parameter ST_CACHE_ADDR = 5'b01000; +parameter ST_CACHE_END = 5'b10000; +initial CACHE_ST = ST_CACHE_IDLE; + +reg [4:0] DMA_ST; +parameter ST_DMA_IDLE = 5'b00001; +parameter ST_DMA_START = 5'b00010; +parameter ST_DMA_WAIT = 5'b00100; +parameter ST_DMA_ADDR = 5'b01000; +parameter ST_DMA_END = 5'b10000; +initial DMA_ST = ST_DMA_IDLE; + +reg [23:0] CACHE_SRC_ADDRr; +wire [22:0] MAPPED_CACHE_SRC_ADDR = {CACHE_SRC_ADDRr[23:16],CACHE_SRC_ADDRr[14:0]}; +reg [23:0] DMA_SRC_ADDRr; +wire [22:0] MAPPED_DMA_SRC_ADDR = {DMA_SRC_ADDRr[23:16],DMA_SRC_ADDRr[14:0]}; + +assign BUS_ADDR = cx4_busy[BUSY_CACHE] ? MAPPED_CACHE_SRC_ADDR + : cx4_busy[BUSY_DMA] ? MAPPED_DMA_SRC_ADDR + : 24'h000000 /* XXX cx4_bus_addr */; + +reg cx4_pgmrom_we; +initial cx4_pgmrom_we = 1'b0; +reg [9:0] cx4_pgmrom_addr; +reg [19:0] cache_count; +initial cache_count = 20'b0; + +always @(posedge CLK) begin + case(CACHE_ST) + ST_CACHE_IDLE: begin + if(CACHE_TRIG_EN + & (~cachetag[cx4_mmio_cachepage][15] + | |(cachetag[cx4_mmio_cachepage][14:0] ^ cx4_mmio_pgmpage))) + begin + CACHE_ST <= ST_CACHE_START; + end else CACHE_ST <= ST_CACHE_IDLE; + end + ST_CACHE_START: begin + cx4_busy[BUSY_CACHE] <= 1'b1; + CACHE_SRC_ADDRr <= cx4_mmio_pgmoff + {cx4_mmio_pgmpage, 9'b0}; + cx4_pgmrom_addr <= {cx4_mmio_cachepage, 9'b0}; + CACHE_ST <= ST_CACHE_WAIT; + cache_count <= 10'b0; + CACHE_BUS_RRQr <= 1'b1; + end + ST_CACHE_WAIT: begin + CACHE_BUS_RRQr <= 1'b0; + if(~CACHE_BUS_RRQr & BUS_RDY) begin + CACHE_ST <= ST_CACHE_ADDR; + cx4_pgmrom_we <= 1'b1; + cache_count <= cache_count + 1; + end else CACHE_ST <= ST_CACHE_WAIT; + end + ST_CACHE_ADDR: begin + cx4_pgmrom_we <= 1'b0; + CACHE_SRC_ADDRr <= CACHE_SRC_ADDRr + 1; + cx4_pgmrom_addr <= cx4_pgmrom_addr + 1; + if(cache_count == 9'h1ff) begin + cx4_busy[BUSY_CACHE] <= 1'b0; + cachetag[cx4_mmio_cachepage] <= {1'b1,cx4_mmio_pgmpage}; + CACHE_ST <= ST_CACHE_IDLE; + end else begin + CACHE_BUS_RRQr <= 1'b1; + CACHE_ST <= ST_CACHE_WAIT; + end + end + endcase +end + +reg cx4_datram_we; +initial cx4_datram_we = 1'b0; +reg [11:0] cx4_datram_addr; +reg [15:0] dma_count; +initial dma_count = 16'b0; + +always @(posedge CLK) begin + case(DMA_ST) + ST_DMA_IDLE: begin + if(DMA_TRIG_EN) begin + DMA_ST <= ST_DMA_START; + end else DMA_ST <= ST_DMA_IDLE; + end + ST_DMA_START: begin + cx4_busy[BUSY_DMA] <= 1'b1; + DMA_SRC_ADDRr <= cx4_mmio_dmasrc; + /* XXX Rename to DMA_TGT_ADDRr and switch */ + cx4_datram_addr <= (cx4_mmio_dmatgt & 24'h000fff); + DMA_ST <= ST_DMA_WAIT; + dma_count <= cx4_mmio_dmalen; + DMA_BUS_RRQr <= 1'b1; + end + ST_DMA_WAIT: begin + DMA_BUS_RRQr <= 1'b0; + if(~DMA_BUS_RRQr & BUS_RDY) begin + DMA_ST <= ST_DMA_ADDR; + /* XXX Rename to DMA_TGT_WEr and switch */ + cx4_datram_we <= 1'b1; + dma_count <= dma_count - 1; + end else DMA_ST <= ST_DMA_WAIT; + end + ST_DMA_ADDR: begin + /* XXX Rename to DMA_TGT_WEr and switch */ + cx4_datram_we <= 1'b0; + DMA_SRC_ADDRr <= DMA_SRC_ADDRr + 1; + cx4_datram_addr <= cx4_datram_addr + 1; + if(dma_count == 16'h0000) begin + cx4_busy[BUSY_DMA] <= 1'b0; + DMA_ST <= ST_DMA_IDLE; + end else begin + DMA_BUS_RRQr <= 1'b1; + DMA_ST <= ST_DMA_WAIT; + end + end + endcase +end + +/*************************** + =========== CPU =========== + ***************************/ +reg [7:0] CPU_STATE; +reg cpu_page; +reg [7:0] cpu_pc; +reg [8:0] cpu_stack [7:0]; +reg [2:0] cpu_sp; +wire [15:0] cpu_op_w; +reg [15:0] cpu_op; +reg [23:0] cpu_a; +reg [23:0] cpu_busdata; +reg [23:0] cpu_romdata; +reg [23:0] cpu_ramdata; +reg [23:0] cpu_busaddr; +reg [23:0] cpu_romaddr; +reg [23:0] cpu_ramaddr; +reg [23:0] cpu_acch; +reg [23:0] cpu_accl; +reg [23:0] cpu_mul_src; + +reg [23:0] cpu_sa; // tmp register for shifted accumulator +reg fl_n; +reg fl_z; +reg fl_c; +reg [15:0] cpu_p; + +reg [9:0] cx4_datrom_addr; +wire [23:0] cx4_datrom_do; +wire [7:0] cx4_datram_do; + +parameter ST_CPU_IDLE = 8'b00000001; +parameter ST_CPU_0 = 8'b00000010; +parameter ST_CPU_1 = 8'b00000100; +parameter ST_CPU_2 = 8'b00001000; +parameter ST_CPU_3 = 8'b00010000; + +initial CPU_STATE <= ST_CPU_IDLE; + +parameter OP_ALU = 4'b0000; +parameter OP_LD = 4'b0001; +parameter OP_ST = 4'b0010; +parameter OP_JP = 4'b0011; +parameter OP_SWP = 4'b0100; +parameter OP_HLT = 4'b0101; +parameter OP_BUS = 4'b0110; +parameter OP_STA = 4'b0111; +parameter OP_NOP = 4'b1111; + + +wire [6:0] op_id = cpu_op_w[15:10]; +reg [7:0] op_param; +reg [2:0] op; +reg [1:0] op_sa; +reg op_imm; +reg op_p; +reg op_call; +reg op_jump; +reg cond_true; +reg cpu_go_rq; +reg cpu_bus_rq; + +always @(posedge CLK) begin + case(CPU_STATE) + ST_CPU_IDLE: begin + if(cpu_go_rq) begin + cpu_pc <= cx4_mmio_pc; + op <= OP_NOP; + CPU_STATE <= ST_CPU_2; + end + else CPU_STATE <= ST_CPU_IDLE; + end + ST_CPU_0: begin // Phase 0: + CPU_STATE <= ST_CPU_1; + case(op) + OP_ALU, OP_LD, OP_SWP: begin + if(cpu_op[15:10] == 6'b111000) cpu_idb <= cpu_a; // reg[imm] <- a + else if(op_imm) cpu_idb <= {16'b0, op_param}; + else casex(op_param) + 8'h00: cpu_idb <= cpu_a; + 8'h01: cpu_idb <= cpu_acch; + 8'h02: cpu_idb <= cpu_accl; + 8'h03: cpu_idb <= cpu_busdata; + 8'h08: cpu_idb <= cpu_romdata; + 8'h0c: cpu_idb <= cpu_ramdata; + 8'h13: cpu_idb <= cpu_busaddr; + 8'h1c: cpu_idb <= cpu_ramaddr; + 8'h5x: cpu_idb <= const[op_param[3:0]]; + 8'h6x: cpu_idb <= {gpr[op_param[3:0]*3+2], + gpr[op_param[3:0]*3+1], + gpr[op_param[3:0]*3]}; + default: cpu_idb <= 24'b0; + endcase + if(op==OP_ALU) begin + case(op_sa) + 2'b00: cpu_sa <= cpu_a; + 2'b01: cpu_sa <= cpu_a << 1; + 2'b10: cpu_sa <= cpu_a << 8; + 2'b11: cpu_sa <= cpu_a << 16; + endcase + end + end + OP_JP: begin + casex(cpu_op[12:8]) + 5'b010xx: cond_true <= 1'b1; + 5'b011xx: cond_true <= fl_z; + 5'b100xx: cond_true <= fl_c; + 5'b101xx: cond_true <= fl_n; + 5'b00101: cond_true <= (fl_c == cpu_op[0]); + 5'b00110: cond_true <= (fl_z == cpu_op[0]); + 5'b00111: cond_true <= (fl_n == cpu_op[0]); + default: cond_true <= 1'b1; + endcase + end + OP_BUS: cpu_bus_rq <= 1'b1; + endcase + end + ST_CPU_1: begin + CPU_STATE <= ST_CPU_2; + case(op) + OP_LD: begin + cx4_datram_addr <= op_imm ? op_param : (cpu_ramaddr + cpu_idb); + cx4_datrom_addr <= cpu_a[9:0]; + end + OP_ST: begin + cx4_datram_addr <= op_imm ? op_param : (cpu_ramaddr + cpu_idb); + cx4_datram_we <= 1'b1; + end + OP_JP: begin + if(cond_true) begin + casex(cpu_op[12:11]) + 2'b01, 2'b10: begin + // TODO if(op_p) + if(op_call) begin + cpu_stack[cpu_sp] <= {cpu_page, cpu_pc+1}; + cpu_sp <= cpu_sp - 1; + end + cpu_pc <= op_param; + end + 2'b00: begin + cpu_pc <= cpu_pc + 2; + end + 2'b11: begin + if(cpu_op[13]) begin + {cpu_page, cpu_pc} <= cpu_stack[cpu_sp+1]; + cpu_sp <= cpu_sp + 1; + end else begin + if(BUS_RDY) cpu_pc <= cpu_pc + 1; + end + end + default: cpu_pc <= cpu_pc + 1; + endcase + end + end + OP_BUS: cpu_bus_rq <= 1'b0; + endcase + end + ST_CPU_2: begin + CPU_STATE <= ST_CPU_3; + case(op) + OP_ST: begin + cx4_datram_we <= 1'b0; + end + endcase + end + ST_CPU_3: begin + CPU_STATE <= ST_CPU_0; + case(op) + OP_LD, OP_SWP: begin + casex(cpu_op[15:8]) + 8'b01100x00: cpu_a <= cpu_idb; + 8'b01100x11: cpu_p <= cpu_idb; + 8'b01111100: cpu_p[7:0] <= op_param; + 8'b01111101: cpu_p[15:8] <= op_param; + 8'b01110000: cpu_romdata <= cx4_datrom_do; + 8'b01101x00: cpu_ramdata[7:0] <= cx4_datram_do; + 8'b01101x01: cpu_ramdata[15:8] <= cx4_datram_do; + 8'b01101x10: cpu_ramdata[23:16] <= cx4_datram_do; + 8'b11110000, 8'b11100000: begin + if(cpu_op[12]) cpu_a <= cpu_idb; + casex(op_param) + 8'h00: cpu_a <= cpu_a; + 8'h01: cpu_acch <= cpu_a; + 8'h02: cpu_accl <= cpu_a; + 8'h03: cpu_busdata <= cpu_a; + 8'h08: cpu_romdata <= cpu_a; + 8'h0c: cpu_ramdata <= cpu_a; + 8'h13: cpu_busaddr <= cpu_a; + 8'h1c: cpu_ramaddr <= cpu_a; + 8'h6x: {gpr[op_param[3:0]*3+2], + gpr[op_param[3:0]*3+1], + gpr[op_param[3:0]*3]} <= cpu_a; + endcase + end + endcase + end + endcase + cpu_op <= cpu_op_w; + op_param <= cpu_op_w[7:0]; + op <= &(op_id) ? OP_HLT + :(op_id[5:4] == 2'b00) ? OP_JP + :(op_id[5:2] == 4'b0110 + || op_id[5:2] == 4'b0111 + ) ? OP_LD + :(op_id[5:1] == 5'b11101) ? OP_ST + :(op_id[5:1] == 5'b01000) ? OP_BUS + :(op_id[5:3] == 3'b010 + || op_id[5:3] == 3'b100 + || op_id[5:3] == 3'b101 + || op_id[5:3] == 3'b110) ? OP_ALU + : (op_id == 6'b111100 || op_id == 6'b111000) ? OP_SWP + : OP_NOP; + op_imm <= cpu_op_w[10]; + op_sa <= cpu_op_w[9:8]; + op_p <= cpu_op_w[9]; + op_call <= cpu_op_w[13]; + cond_true <= 1'b0; + end + endcase +end + + +/*************************** + =========== MEM =========== + ***************************/ +cx4_datrom cx4_datrom ( + .clka(CLK), // input clka + .wea(DATROM_WE), // input [0 : 0] wea + .addra(DATROM_ADDR), // input [9 : 0] addra + .dina(DATROM_DI), // input [23 : 0] dina + .clkb(CLK), // input clkb + .addrb(cx4_datrom_addr), // input [9 : 0] addrb + .doutb(cx4_datrom_do) // output [23 : 0] doutb +); + +cx4_datram cx4_datram ( + .clka(CLK), // input clka + .wea(DATRAM_WR_EN), // input [0 : 0] wea + .addra(ADDR[11:0]), // input [11 : 0] addra + .dina(DI), // input [7 : 0] dina + .douta(DATRAM_DO), // output [7 : 0] douta + .clkb(CLK), // input clkb + .web(cx4_datram_we), // input [0 : 0] web + .addrb(cx4_datram_addr), // input [11 : 0] addrb + .dinb(BUS_DI), // input [7 : 0] dinb + .doutb(cx4_datram_do) // output [7 : 0] doutb +); + +cx4_pgmrom cx4_pgmrom ( + .clka(CLK), // input clka + .wea(cx4_pgmrom_we), // input [0 : 0] wea + .addra(cx4_pgmrom_addr), // input [9 : 0] addra + .dina(BUS_DI), // input [7 : 0] dina + .clkb(CLK), // input clkb + .addrb(cpu_pc), // input [8 : 0] addrb + .doutb(cpu_op_w) // output [15 : 0] doutb +); + +cx4_mul cx4_mul ( + .clk(CLK), // input clk + .a(cpu_a), // input [23 : 0] a + .b(cpu_mul_src), // input [23 : 0] b + .p(cpu_mul_result) // output [47 : 0] p +); +endmodule diff --git a/verilog/sd2snes_cx4/dac.v b/verilog/sd2snes_cx4/dac.v new file mode 100644 index 0000000..6eca076 --- /dev/null +++ b/verilog/sd2snes_cx4/dac.v @@ -0,0 +1,160 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 19:26:11 07/23/2010 +// Design Name: +// Module Name: dac_test +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module dac( + input clkin, + input sysclk, + input we, + input[10:0] pgm_address, + input[7:0] pgm_data, + input[7:0] volume, + input vol_latch, + input play, + input reset, + output sdout, + output lrck, + output mclk, + output DAC_STATUS +); + +reg[8:0] dac_address_r; +wire[8:0] dac_address = dac_address_r; + +wire[31:0] dac_data; +assign DAC_STATUS = dac_address_r[8]; +reg[7:0] vol_reg; +reg[7:0] vol_target_reg; +reg[1:0] vol_latch_reg; +reg vol_valid; +reg[2:0] sysclk_sreg; +wire sysclk_rising = (sysclk_sreg[2:1] == 2'b01); + +reg [25:0] interpol_count; + +always @(posedge clkin) begin + sysclk_sreg <= {sysclk_sreg[1:0], sysclk}; +end + +dac_buf snes_dac_buf ( + .clka(clkin), + .wea(~we), // Bus [0 : 0] + .addra(pgm_address), // Bus [10 : 0] + .dina(pgm_data), // Bus [7 : 0] + .clkb(clkin), + .addrb(dac_address), // Bus [8 : 0] + .doutb(dac_data)); // Bus [31 : 0] + +reg [8:0] cnt; +reg [15:0] smpcnt; +reg [1:0] samples; +reg [15:0] smpshift; + +assign mclk = cnt[2]; // mclk = clk/8 +assign lrck = cnt[8]; // lrck = mclk/128 +wire sclk = cnt[3]; // sclk = lrck*32 + +reg [2:0] lrck_sreg; +reg [2:0] sclk_sreg; +wire lrck_rising = ({lrck_sreg[2:1]} == 2'b01); +wire lrck_falling = ({lrck_sreg[2:1]} == 2'b10); + +wire sclk_rising = ({sclk_sreg[2:1]} == 2'b01); + +wire vol_latch_rising = (vol_latch_reg[1:0] == 2'b01); +reg sdout_reg; +assign sdout = sdout_reg; + +reg [1:0] reset_sreg; +wire reset_rising = (reset_sreg[1:0] == 2'b01); + +reg play_r; + +initial begin + cnt = 9'h100; + smpcnt = 16'b0; + lrck_sreg = 2'b11; + sclk_sreg = 1'b0; + dac_address_r = 10'b0; + vol_valid = 1'b0; + vol_latch_reg = 1'b0; + vol_reg = 8'h0; + vol_target_reg = 8'hff; + samples <= 2'b00; +end + +always @(posedge clkin) begin + if(reset_rising) begin + dac_address_r <= 0; + interpol_count <= 0; + end else if(sysclk_rising) begin + if(interpol_count > 59378938) begin + interpol_count <= interpol_count + 122500 - 59501439; + dac_address_r <= dac_address_r + play_r; + end else begin + interpol_count <= interpol_count + 122500; + end + end +end + +always @(posedge clkin) begin + cnt <= cnt + 1; + lrck_sreg <= {lrck_sreg[1:0], lrck}; + sclk_sreg <= {sclk_sreg[1:0], sclk}; + vol_latch_reg <= {vol_latch_reg[0], vol_latch}; + play_r <= play; + reset_sreg <= {reset_sreg[0], reset}; +end + +always @(posedge clkin) begin + if (vol_latch_rising) begin + vol_valid <= 1'b1; + end + else if(vol_valid) begin + vol_target_reg <= volume; + vol_valid <= 1'b0; + end +end + +// ramp volume only every 4 samples +always @(posedge clkin) begin + if (lrck_rising && &samples[1:0]) begin + if(vol_reg > vol_target_reg) + vol_reg <= vol_reg - 1; + else if(vol_reg < vol_target_reg) + vol_reg <= vol_reg + 1; + end +end + +always @(posedge clkin) begin + if (lrck_rising) begin // right channel + smpshift <= (({16'h0, dac_data[31:16]^16'h8000} * vol_reg) >> 8) ^ 16'h8000; + samples <= samples + 1; + end else if (lrck_falling) begin // left channel + smpshift <= (({16'h0, dac_data[15:0]^16'h8000} * vol_reg) >> 8) ^ 16'h8000; + end else begin + if (sclk_rising) begin + smpcnt <= smpcnt + 1; + sdout_reg <= smpshift[15]; + smpshift <= {smpshift[14:0], 1'b0}; + end + end +end + +endmodule diff --git a/verilog/sd2snes_cx4/dcm.v b/verilog/sd2snes_cx4/dcm.v new file mode 100644 index 0000000..90b516e --- /dev/null +++ b/verilog/sd2snes_cx4/dcm.v @@ -0,0 +1,72 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 13:06:52 06/28/2009 +// Design Name: +// Module Name: dcm +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module my_dcm ( + input CLKIN, + output CLKFX, + output LOCKED, + input RST, + output[7:0] STATUS + ); + + // DCM: Digital Clock Manager Circuit + // Spartan-3 + // Xilinx HDL Language Template, version 11.1 + + DCM #( + .SIM_MODE("SAFE"), // Simulation: "SAFE" vs. "FAST", see "Synthesis and Simulation Design Guide" for details + .CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + .CLKFX_DIVIDE(1), // Can be any integer from 1 to 32 + .CLKFX_MULTIPLY(4), // Can be any integer from 2 to 32 + .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature + .CLKIN_PERIOD(41.667), // Specify period of input clock + .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift of NONE, FIXED or VARIABLE + .CLK_FEEDBACK("NONE"), // Specify clock feedback of NONE, 1X or 2X + .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + // an integer from 0 to 15 + .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis + .DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL + .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE + .FACTORY_JF(16'hFFFF), // FACTORY JF values +// .LOC("DCM_X0Y0"), + .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 255 + .STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE + ) DCM_inst ( + .CLK0(CLK0), // 0 degree DCM CLK output + .CLK180(CLK180), // 180 degree DCM CLK output + .CLK270(CLK270), // 270 degree DCM CLK output + .CLK2X(CLK2X), // 2X DCM CLK output + .CLK2X180(CLK2X180), // 2X, 180 degree DCM CLK out + .CLK90(CLK90), // 90 degree DCM CLK output + .CLKDV(CLKDV), // Divided DCM CLK out (CLKDV_DIVIDE) + .CLKFX(CLKFX), // DCM CLK synthesis out (M/D) + .CLKFX180(CLKFX180), // 180 degree CLK synthesis out + .LOCKED(LOCKED), // DCM LOCK status output + .PSDONE(PSDONE), // Dynamic phase adjust done output + .STATUS(STATUS), // 8-bit DCM status bits output + .CLKFB(CLKFB), // DCM clock feedback + .CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DCM) + .PSCLK(PSCLK), // Dynamic phase adjust clock input + .PSEN(PSEN), // Dynamic phase adjust enable input + .PSINCDEC(PSINCDEC), // Dynamic phase adjust increment/decrement + .RST(RST) // DCM asynchronous reset input + ); +endmodule diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.v new file mode 100644 index 0000000..329617f --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.v @@ -0,0 +1,187 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used solely * +* for design, simulation, implementation and creation of design files * +* limited to Xilinx devices or technologies. Use with non-Xilinx * +* devices or technologies is expressly prohibited and immediately * +* terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY * +* FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY * +* PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE * +* IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS * +* MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY * +* CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY * +* RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY * +* DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * +* PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support appliances, * +* devices, or systems. Use in such applications are expressly * +* prohibited. * +* * +* (c) Copyright 1995-2011 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// You must compile the wrapper file cx4_datram.v when simulating +// the core, cx4_datram. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +`timescale 1ns/1ps + +module cx4_datram( + clka, + wea, + addra, + dina, + douta, + clkb, + web, + addrb, + dinb, + doutb +); + +input clka; +input [0 : 0] wea; +input [11 : 0] addra; +input [7 : 0] dina; +output [7 : 0] douta; +input clkb; +input [0 : 0] web; +input [11 : 0] addrb; +input [7 : 0] dinb; +output [7 : 0] doutb; + +// synthesis translate_off + + BLK_MEM_GEN_V6_2 #( + .C_ADDRA_WIDTH(12), + .C_ADDRB_WIDTH(12), + .C_ALGORITHM(1), + .C_AXI_ID_WIDTH(4), + .C_AXI_SLAVE_TYPE(0), + .C_AXI_TYPE(1), + .C_BYTE_SIZE(9), + .C_COMMON_CLK(1), + .C_DEFAULT_DATA("77"), + .C_DISABLE_WARN_BHV_COLL(0), + .C_DISABLE_WARN_BHV_RANGE(0), + .C_FAMILY("spartan3"), + .C_HAS_AXI_ID(0), + .C_HAS_ENA(0), + .C_HAS_ENB(0), + .C_HAS_INJECTERR(0), + .C_HAS_MEM_OUTPUT_REGS_A(0), + .C_HAS_MEM_OUTPUT_REGS_B(0), + .C_HAS_MUX_OUTPUT_REGS_A(0), + .C_HAS_MUX_OUTPUT_REGS_B(0), + .C_HAS_REGCEA(0), + .C_HAS_REGCEB(0), + .C_HAS_RSTA(0), + .C_HAS_RSTB(0), + .C_HAS_SOFTECC_INPUT_REGS_A(0), + .C_HAS_SOFTECC_OUTPUT_REGS_B(0), + .C_INIT_FILE_NAME("no_coe_file_loaded"), + .C_INITA_VAL("0"), + .C_INITB_VAL("0"), + .C_INTERFACE_TYPE(0), + .C_LOAD_INIT_FILE(0), + .C_MEM_TYPE(2), + .C_MUX_PIPELINE_STAGES(0), + .C_PRIM_TYPE(1), + .C_READ_DEPTH_A(3072), + .C_READ_DEPTH_B(3072), + .C_READ_WIDTH_A(8), + .C_READ_WIDTH_B(8), + .C_RST_PRIORITY_A("CE"), + .C_RST_PRIORITY_B("CE"), + .C_RST_TYPE("SYNC"), + .C_RSTRAM_A(0), + .C_RSTRAM_B(0), + .C_SIM_COLLISION_CHECK("ALL"), + .C_USE_BYTE_WEA(0), + .C_USE_BYTE_WEB(0), + .C_USE_DEFAULT_DATA(1), + .C_USE_ECC(0), + .C_USE_SOFTECC(0), + .C_WEA_WIDTH(1), + .C_WEB_WIDTH(1), + .C_WRITE_DEPTH_A(3072), + .C_WRITE_DEPTH_B(3072), + .C_WRITE_MODE_A("WRITE_FIRST"), + .C_WRITE_MODE_B("WRITE_FIRST"), + .C_WRITE_WIDTH_A(8), + .C_WRITE_WIDTH_B(8), + .C_XDEVICEFAMILY("spartan3") + ) + inst ( + .CLKA(clka), + .WEA(wea), + .ADDRA(addra), + .DINA(dina), + .DOUTA(douta), + .CLKB(clkb), + .WEB(web), + .ADDRB(addrb), + .DINB(dinb), + .DOUTB(doutb), + .RSTA(), + .ENA(), + .REGCEA(), + .RSTB(), + .ENB(), + .REGCEB(), + .INJECTSBITERR(), + .INJECTDBITERR(), + .SBITERR(), + .DBITERR(), + .RDADDRECC(), + .S_ACLK(), + .S_ARESETN(), + .S_AXI_AWID(), + .S_AXI_AWADDR(), + .S_AXI_AWLEN(), + .S_AXI_AWSIZE(), + .S_AXI_AWBURST(), + .S_AXI_AWVALID(), + .S_AXI_AWREADY(), + .S_AXI_WDATA(), + .S_AXI_WSTRB(), + .S_AXI_WLAST(), + .S_AXI_WVALID(), + .S_AXI_WREADY(), + .S_AXI_BID(), + .S_AXI_BRESP(), + .S_AXI_BVALID(), + .S_AXI_BREADY(), + .S_AXI_ARID(), + .S_AXI_ARADDR(), + .S_AXI_ARLEN(), + .S_AXI_ARSIZE(), + .S_AXI_ARBURST(), + .S_AXI_ARVALID(), + .S_AXI_ARREADY(), + .S_AXI_RID(), + .S_AXI_RDATA(), + .S_AXI_RRESP(), + .S_AXI_RLAST(), + .S_AXI_RVALID(), + .S_AXI_RREADY(), + .S_AXI_INJECTSBITERR(), + .S_AXI_INJECTDBITERR(), + .S_AXI_SBITERR(), + .S_AXI_DBITERR(), + .S_AXI_RDADDRECC() + ); + +// synthesis translate_on + +endmodule diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xco new file mode 100644 index 0000000..a793578 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xco @@ -0,0 +1,105 @@ +############################################################## +# +# Xilinx Core Generator version 13.2 +# Date: Sun Oct 16 18:54:12 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:blk_mem_gen:6.2 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s400 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = pq208 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -4 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.2 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=true +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=cx4_datram +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=true +CSET interface_type=Native +CSET load_init_file=false +CSET memory_type=True_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=50 +CSET primitive=8kx2 +CSET read_width_a=8 +CSET read_width_b=8 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=77 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=3072 +CSET write_width_a=8 +CSET write_width_b=8 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-03-11T08:24:14.000Z +# END Extra information +GENERATE +# CRC: a7d60fbd diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xise new file mode 100644 index 0000000..511d066 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_datram.xise @@ -0,0 +1,72 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.v new file mode 100644 index 0000000..3825bab --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.v @@ -0,0 +1,181 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used solely * +* for design, simulation, implementation and creation of design files * +* limited to Xilinx devices or technologies. Use with non-Xilinx * +* devices or technologies is expressly prohibited and immediately * +* terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY * +* FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY * +* PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE * +* IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS * +* MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY * +* CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY * +* RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY * +* DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * +* PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support appliances, * +* devices, or systems. Use in such applications are expressly * +* prohibited. * +* * +* (c) Copyright 1995-2011 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// You must compile the wrapper file cx4_datrom.v when simulating +// the core, cx4_datrom. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +`timescale 1ns/1ps + +module cx4_datrom( + clka, + wea, + addra, + dina, + clkb, + addrb, + doutb +); + +input clka; +input [0 : 0] wea; +input [9 : 0] addra; +input [23 : 0] dina; +input clkb; +input [9 : 0] addrb; +output [23 : 0] doutb; + +// synthesis translate_off + + BLK_MEM_GEN_V6_2 #( + .C_ADDRA_WIDTH(10), + .C_ADDRB_WIDTH(10), + .C_ALGORITHM(1), + .C_AXI_ID_WIDTH(4), + .C_AXI_SLAVE_TYPE(0), + .C_AXI_TYPE(1), + .C_BYTE_SIZE(9), + .C_COMMON_CLK(1), + .C_DEFAULT_DATA("0"), + .C_DISABLE_WARN_BHV_COLL(0), + .C_DISABLE_WARN_BHV_RANGE(0), + .C_FAMILY("spartan3"), + .C_HAS_AXI_ID(0), + .C_HAS_ENA(0), + .C_HAS_ENB(0), + .C_HAS_INJECTERR(0), + .C_HAS_MEM_OUTPUT_REGS_A(0), + .C_HAS_MEM_OUTPUT_REGS_B(0), + .C_HAS_MUX_OUTPUT_REGS_A(0), + .C_HAS_MUX_OUTPUT_REGS_B(0), + .C_HAS_REGCEA(0), + .C_HAS_REGCEB(0), + .C_HAS_RSTA(0), + .C_HAS_RSTB(0), + .C_HAS_SOFTECC_INPUT_REGS_A(0), + .C_HAS_SOFTECC_OUTPUT_REGS_B(0), + .C_INIT_FILE_NAME("no_coe_file_loaded"), + .C_INITA_VAL("0"), + .C_INITB_VAL("0"), + .C_INTERFACE_TYPE(0), + .C_LOAD_INIT_FILE(0), + .C_MEM_TYPE(1), + .C_MUX_PIPELINE_STAGES(0), + .C_PRIM_TYPE(1), + .C_READ_DEPTH_A(1024), + .C_READ_DEPTH_B(1024), + .C_READ_WIDTH_A(24), + .C_READ_WIDTH_B(24), + .C_RST_PRIORITY_A("CE"), + .C_RST_PRIORITY_B("CE"), + .C_RST_TYPE("SYNC"), + .C_RSTRAM_A(0), + .C_RSTRAM_B(0), + .C_SIM_COLLISION_CHECK("ALL"), + .C_USE_BYTE_WEA(0), + .C_USE_BYTE_WEB(0), + .C_USE_DEFAULT_DATA(0), + .C_USE_ECC(0), + .C_USE_SOFTECC(0), + .C_WEA_WIDTH(1), + .C_WEB_WIDTH(1), + .C_WRITE_DEPTH_A(1024), + .C_WRITE_DEPTH_B(1024), + .C_WRITE_MODE_A("WRITE_FIRST"), + .C_WRITE_MODE_B("WRITE_FIRST"), + .C_WRITE_WIDTH_A(24), + .C_WRITE_WIDTH_B(24), + .C_XDEVICEFAMILY("spartan3") + ) + inst ( + .CLKA(clka), + .WEA(wea), + .ADDRA(addra), + .DINA(dina), + .CLKB(clkb), + .ADDRB(addrb), + .DOUTB(doutb), + .RSTA(), + .ENA(), + .REGCEA(), + .DOUTA(), + .RSTB(), + .ENB(), + .REGCEB(), + .WEB(), + .DINB(), + .INJECTSBITERR(), + .INJECTDBITERR(), + .SBITERR(), + .DBITERR(), + .RDADDRECC(), + .S_ACLK(), + .S_ARESETN(), + .S_AXI_AWID(), + .S_AXI_AWADDR(), + .S_AXI_AWLEN(), + .S_AXI_AWSIZE(), + .S_AXI_AWBURST(), + .S_AXI_AWVALID(), + .S_AXI_AWREADY(), + .S_AXI_WDATA(), + .S_AXI_WSTRB(), + .S_AXI_WLAST(), + .S_AXI_WVALID(), + .S_AXI_WREADY(), + .S_AXI_BID(), + .S_AXI_BRESP(), + .S_AXI_BVALID(), + .S_AXI_BREADY(), + .S_AXI_ARID(), + .S_AXI_ARADDR(), + .S_AXI_ARLEN(), + .S_AXI_ARSIZE(), + .S_AXI_ARBURST(), + .S_AXI_ARVALID(), + .S_AXI_ARREADY(), + .S_AXI_RID(), + .S_AXI_RDATA(), + .S_AXI_RRESP(), + .S_AXI_RLAST(), + .S_AXI_RVALID(), + .S_AXI_RREADY(), + .S_AXI_INJECTSBITERR(), + .S_AXI_INJECTDBITERR(), + .S_AXI_SBITERR(), + .S_AXI_DBITERR(), + .S_AXI_RDADDRECC() + ); + +// synthesis translate_on + +endmodule diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xco new file mode 100644 index 0000000..83d9d34 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xco @@ -0,0 +1,105 @@ +############################################################## +# +# Xilinx Core Generator version 13.2 +# Date: Sun Oct 16 12:57:23 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:blk_mem_gen:6.2 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s400 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = pq208 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -4 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.2 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=true +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=cx4_datrom +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=false +CSET interface_type=Native +CSET load_init_file=false +CSET memory_type=Simple_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=24 +CSET read_width_b=24 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=1024 +CSET write_width_a=24 +CSET write_width_b=24 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-03-11T08:24:14.000Z +# END Extra information +GENERATE +# CRC: a25bf9a3 diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xise new file mode 100644 index 0000000..ded48b2 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_datrom.xise @@ -0,0 +1,72 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v new file mode 100644 index 0000000..32e9bad --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v @@ -0,0 +1,2511 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. +//////////////////////////////////////////////////////////////////////////////// +// ____ ____ +// / /\/ / +// /___/ \ / Vendor: Xilinx +// \ \ \/ Version: O.61xd +// \ \ Application: netgen +// / / Filename: cx4_mul.v +// /___/ /\ Timestamp: Fri Oct 21 22:38:27 2011 +// \ \ / \ +// \___\/\___\ +// +// Command : -w -sim -ofmt verilog /home/ikari/prj/sd2snes/verilog/sd2snes_cx4/ipcore_dir/tmp/_cg/cx4_mul.ngc /home/ikari/prj/sd2snes/verilog/sd2snes_cx4/ipcore_dir/tmp/_cg/cx4_mul.v +// Device : 3s400pq208-4 +// Input file : /home/ikari/prj/sd2snes/verilog/sd2snes_cx4/ipcore_dir/tmp/_cg/cx4_mul.ngc +// Output file : /home/ikari/prj/sd2snes/verilog/sd2snes_cx4/ipcore_dir/tmp/_cg/cx4_mul.v +// # of Modules : 1 +// Design Name : cx4_mul +// Xilinx : /mnt/store/bin/Xilinx/13.2/ISE_DS/ISE/ +// +// Purpose: +// This verilog netlist is a verification model and uses simulation +// primitives which may not represent the true implementation of the +// device, however the netlist is functionally correct and should not +// be modified. This file cannot be synthesized and should only be used +// with supported simulation tools. +// +// Reference: +// Command Line Tools User Guide, Chapter 23 and Synthesis and Simulation Design Guide, Chapter 6 +// +//////////////////////////////////////////////////////////////////////////////// + +`timescale 1 ns/1 ps + +module cx4_mul ( + clk, p, a, b +)/* synthesis syn_black_box syn_noprune=1 */; + input clk; + output [47 : 0] p; + input [23 : 0] a; + input [23 : 0] b; + + // synthesis translate_off + + wire sig00000001; + wire sig00000002; + wire sig00000003; + wire sig00000004; + wire sig00000005; + wire sig00000006; + wire sig00000007; + wire sig00000008; + wire sig00000009; + wire sig0000000a; + wire sig0000000b; + wire sig0000000c; + wire sig0000000d; + wire sig0000000e; + wire sig0000000f; + wire sig00000010; + wire sig00000011; + wire sig00000012; + wire sig00000013; + wire sig00000014; + wire sig00000015; + wire sig00000016; + wire sig00000017; + wire sig00000018; + wire sig00000019; + wire sig0000001a; + wire sig0000001b; + wire sig0000001c; + wire sig0000001d; + wire sig0000001e; + wire sig0000001f; + wire sig00000020; + wire sig00000021; + wire sig00000022; + wire sig00000023; + wire sig00000024; + wire sig00000025; + wire sig00000026; + wire sig00000027; + wire sig00000028; + wire sig00000029; + wire sig0000002a; + wire sig0000002b; + wire sig0000002c; + wire sig0000002d; + wire sig0000002e; + wire sig0000002f; + wire sig00000030; + wire sig00000031; + wire sig00000032; + wire sig00000033; + wire sig00000034; + wire sig00000035; + wire sig00000036; + wire sig00000037; + wire sig00000038; + wire sig00000039; + wire sig0000003a; + wire sig0000003b; + wire sig0000003c; + wire sig0000003d; + wire sig0000003e; + wire sig0000003f; + wire sig00000040; + wire sig00000041; + wire sig00000042; + wire sig00000043; + wire sig00000044; + wire sig00000045; + wire sig00000046; + wire sig00000047; + wire sig00000048; + wire sig00000049; + wire sig0000004a; + wire sig0000004b; + wire sig0000004c; + wire sig0000004d; + wire sig0000004e; + wire sig0000004f; + wire sig00000050; + wire sig00000051; + wire sig00000052; + wire sig00000053; + wire sig00000054; + wire sig00000055; + wire sig00000056; + wire sig00000057; + wire sig00000058; + wire sig00000059; + wire sig0000005a; + wire sig0000005b; + wire sig0000005c; + wire sig0000005d; + wire sig0000005e; + wire sig0000005f; + wire sig00000060; + wire sig00000061; + wire sig00000062; + wire sig00000063; + wire sig00000064; + wire sig00000065; + wire sig00000066; + wire sig00000067; + wire sig00000068; + wire sig00000069; + wire sig0000006a; + wire sig0000006b; + wire sig0000006c; + wire sig0000006d; + wire sig0000006e; + wire sig0000006f; + wire sig00000070; + wire sig00000071; + wire sig00000072; + wire sig00000073; + wire sig00000074; + wire sig00000075; + wire sig00000076; + wire sig00000077; + wire sig00000078; + wire sig00000079; + wire sig0000007a; + wire sig0000007b; + wire sig0000007c; + wire sig0000007d; + wire sig0000007e; + wire sig0000007f; + wire sig00000080; + wire sig00000081; + wire sig00000082; + wire sig00000083; + wire sig00000084; + wire sig00000085; + wire sig00000086; + wire sig00000087; + wire sig00000088; + wire sig00000089; + wire sig0000008a; + wire sig0000008b; + wire sig0000008c; + wire sig0000008d; + wire sig0000008e; + wire sig0000008f; + wire sig00000090; + wire sig00000091; + wire sig00000092; + wire sig00000093; + wire sig00000094; + wire sig00000095; + wire sig00000096; + wire sig00000097; + wire sig00000098; + wire sig00000099; + wire sig0000009a; + wire sig0000009b; + wire sig0000009c; + wire sig0000009d; + wire sig0000009e; + wire sig0000009f; + wire sig000000a0; + wire sig000000a1; + wire sig000000a2; + wire sig000000a3; + wire sig000000a4; + wire sig000000a5; + wire sig000000a6; + wire sig000000a7; + wire sig000000a8; + wire sig000000a9; + wire sig000000aa; + wire sig000000ab; + wire sig000000ac; + wire sig000000ad; + wire sig000000ae; + wire sig000000af; + wire sig000000b0; + wire sig000000b1; + wire sig000000b2; + wire sig000000b3; + wire sig000000b4; + wire sig000000b5; + wire sig000000b6; + wire sig000000b7; + wire sig000000b8; + wire sig000000b9; + wire sig000000ba; + wire sig000000bb; + wire sig000000bc; + wire sig000000bd; + wire sig000000be; + wire sig000000bf; + wire sig000000c0; + wire sig000000c1; + wire sig000000c2; + wire sig000000c3; + wire sig000000c4; + wire sig000000c5; + wire sig000000c6; + wire sig000000c7; + wire sig000000c8; + wire sig000000c9; + wire sig000000ca; + wire sig000000cb; + wire sig000000cc; + wire sig000000cd; + wire sig000000ce; + wire sig000000cf; + wire sig000000d0; + wire sig000000d1; + wire sig000000d2; + wire sig000000d3; + wire sig000000d4; + wire sig000000d5; + wire sig000000d6; + wire sig000000d7; + wire sig000000d8; + wire sig000000d9; + wire sig000000da; + wire sig000000db; + wire sig000000dc; + wire sig000000dd; + wire sig000000de; + wire sig000000df; + wire sig000000e0; + wire sig000000e1; + wire sig000000e2; + wire sig000000e3; + wire sig000000e4; + wire sig000000e5; + wire sig000000e6; + wire sig000000e7; + wire sig000000e8; + wire sig000000e9; + wire sig000000ea; + wire sig000000eb; + wire sig000000ec; + wire sig000000ed; + wire sig000000ee; + wire sig000000ef; + wire sig000000f0; + wire sig000000f1; + wire sig000000f2; + wire sig000000f3; + wire sig000000f4; + wire sig000000f5; + wire sig000000f6; + wire sig000000f7; + wire sig000000f8; + wire sig000000f9; + wire sig000000fa; + wire sig000000fb; + wire sig000000fc; + wire sig000000fd; + wire sig000000fe; + wire sig000000ff; + wire sig00000100; + wire sig00000101; + wire sig00000102; + wire sig00000103; + wire sig00000104; + wire sig00000105; + wire sig00000106; + wire sig00000107; + wire sig00000108; + wire sig00000109; + wire sig0000010a; + wire sig0000010b; + wire sig0000010c; + wire sig0000010d; + wire sig0000010e; + wire sig0000010f; + wire sig00000110; + wire sig00000111; + wire sig00000112; + wire sig00000113; + wire sig00000114; + wire sig00000115; + wire sig00000116; + wire sig00000117; + wire sig00000118; + wire sig00000119; + wire sig0000011a; + wire sig0000011b; + wire sig0000011c; + wire sig0000011d; + wire sig0000011e; + wire sig0000011f; + wire sig00000120; + wire sig00000121; + wire sig00000122; + wire sig00000123; + wire sig00000124; + wire sig00000125; + wire sig00000126; + wire sig00000127; + wire sig00000128; + wire sig00000129; + wire sig0000012a; + wire sig0000012b; + wire sig0000012c; + wire sig0000012d; + wire sig0000012e; + wire sig0000012f; + wire sig00000130; + wire sig00000131; + wire sig00000132; + wire sig00000133; + wire sig00000134; + wire sig00000135; + wire sig00000136; + wire sig00000137; + wire sig00000138; + wire sig00000139; + wire sig0000013a; + wire sig0000013b; + wire sig0000013c; + wire sig0000013d; + wire sig0000013e; + wire sig0000013f; + wire sig00000140; + wire sig00000141; + wire sig00000142; + wire sig00000143; + wire sig00000144; + wire sig00000145; + wire sig00000146; + wire sig00000147; + wire sig00000148; + wire sig00000149; + wire sig0000014a; + wire sig0000014b; + wire sig0000014c; + wire sig0000014d; + wire sig0000014e; + wire sig0000014f; + wire sig00000150; + wire sig00000151; + wire sig00000152; + wire sig00000153; + wire sig00000154; + wire sig00000155; + wire sig00000156; + wire sig00000157; + wire sig00000158; + wire sig00000159; + wire sig0000015a; + wire sig0000015b; + wire sig0000015c; + wire sig0000015d; + wire sig0000015e; + wire sig0000015f; + wire sig00000160; + wire sig00000161; + wire sig00000162; + wire sig00000163; + wire sig00000164; + wire \NLW_blk00000003_P<35>_UNCONNECTED ; + wire \NLW_blk00000003_P<34>_UNCONNECTED ; + wire \NLW_blk00000003_P<33>_UNCONNECTED ; + wire \NLW_blk00000003_P<32>_UNCONNECTED ; + wire \NLW_blk00000003_P<31>_UNCONNECTED ; + wire \NLW_blk00000003_P<30>_UNCONNECTED ; + wire \NLW_blk00000003_P<29>_UNCONNECTED ; + wire \NLW_blk00000003_P<28>_UNCONNECTED ; + wire \NLW_blk00000003_P<27>_UNCONNECTED ; + wire \NLW_blk00000003_P<26>_UNCONNECTED ; + wire \NLW_blk00000003_P<25>_UNCONNECTED ; + wire \NLW_blk00000003_P<24>_UNCONNECTED ; + wire \NLW_blk00000003_P<23>_UNCONNECTED ; + wire \NLW_blk00000003_P<22>_UNCONNECTED ; + wire \NLW_blk00000003_P<21>_UNCONNECTED ; + wire \NLW_blk00000003_P<20>_UNCONNECTED ; + wire \NLW_blk00000003_P<19>_UNCONNECTED ; + wire \NLW_blk00000003_P<18>_UNCONNECTED ; + wire \NLW_blk00000003_P<17>_UNCONNECTED ; + wire \NLW_blk00000003_P<16>_UNCONNECTED ; + wire \NLW_blk00000003_P<15>_UNCONNECTED ; + wire \NLW_blk00000003_P<14>_UNCONNECTED ; + wire \NLW_blk00000004_P<35>_UNCONNECTED ; + wire \NLW_blk00000004_P<34>_UNCONNECTED ; + wire \NLW_blk00000004_P<33>_UNCONNECTED ; + wire \NLW_blk00000004_P<32>_UNCONNECTED ; + wire \NLW_blk00000004_P<31>_UNCONNECTED ; + wire \NLW_blk00000004_P<30>_UNCONNECTED ; + wire \NLW_blk00000004_P<29>_UNCONNECTED ; + wire \NLW_blk00000004_P<28>_UNCONNECTED ; + wire \NLW_blk00000004_P<27>_UNCONNECTED ; + wire \NLW_blk00000004_P<26>_UNCONNECTED ; + wire \NLW_blk00000004_P<25>_UNCONNECTED ; + wire \NLW_blk00000004_P<24>_UNCONNECTED ; + wire \NLW_blk00000005_P<35>_UNCONNECTED ; + wire \NLW_blk00000005_P<34>_UNCONNECTED ; + wire \NLW_blk00000005_P<33>_UNCONNECTED ; + wire \NLW_blk00000005_P<32>_UNCONNECTED ; + wire \NLW_blk00000005_P<31>_UNCONNECTED ; + wire \NLW_blk00000005_P<30>_UNCONNECTED ; + wire \NLW_blk00000005_P<29>_UNCONNECTED ; + wire \NLW_blk00000005_P<28>_UNCONNECTED ; + wire \NLW_blk00000005_P<27>_UNCONNECTED ; + wire \NLW_blk00000005_P<26>_UNCONNECTED ; + wire \NLW_blk00000005_P<25>_UNCONNECTED ; + wire \NLW_blk00000005_P<24>_UNCONNECTED ; + wire \NLW_blk00000006_P<35>_UNCONNECTED ; + GND blk00000001 ( + .G(sig00000001) + ); + VCC blk00000002 ( + .P(sig00000002) + ); + MULT18X18S blk00000003 ( + .C(clk), + .CE(sig00000002), + .R(sig00000001), + .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), + .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), + .P({\NLW_blk00000003_P<35>_UNCONNECTED , \NLW_blk00000003_P<34>_UNCONNECTED , \NLW_blk00000003_P<33>_UNCONNECTED , +\NLW_blk00000003_P<32>_UNCONNECTED , \NLW_blk00000003_P<31>_UNCONNECTED , \NLW_blk00000003_P<30>_UNCONNECTED , \NLW_blk00000003_P<29>_UNCONNECTED , +\NLW_blk00000003_P<28>_UNCONNECTED , \NLW_blk00000003_P<27>_UNCONNECTED , \NLW_blk00000003_P<26>_UNCONNECTED , \NLW_blk00000003_P<25>_UNCONNECTED , +\NLW_blk00000003_P<24>_UNCONNECTED , \NLW_blk00000003_P<23>_UNCONNECTED , \NLW_blk00000003_P<22>_UNCONNECTED , \NLW_blk00000003_P<21>_UNCONNECTED , +\NLW_blk00000003_P<20>_UNCONNECTED , \NLW_blk00000003_P<19>_UNCONNECTED , \NLW_blk00000003_P<18>_UNCONNECTED , \NLW_blk00000003_P<17>_UNCONNECTED , +\NLW_blk00000003_P<16>_UNCONNECTED , \NLW_blk00000003_P<15>_UNCONNECTED , \NLW_blk00000003_P<14>_UNCONNECTED , sig000000e5, sig000000e4, sig000000e3, +sig000000e2, sig000000ee, sig000000ed, sig000000ec, sig000000eb, sig000000ea, sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e1}) + ); + MULT18X18S blk00000004 ( + .C(clk), + .CE(sig00000002), + .R(sig00000001), + .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), + .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), + .P({\NLW_blk00000004_P<35>_UNCONNECTED , \NLW_blk00000004_P<34>_UNCONNECTED , \NLW_blk00000004_P<33>_UNCONNECTED , +\NLW_blk00000004_P<32>_UNCONNECTED , \NLW_blk00000004_P<31>_UNCONNECTED , \NLW_blk00000004_P<30>_UNCONNECTED , \NLW_blk00000004_P<29>_UNCONNECTED , +\NLW_blk00000004_P<28>_UNCONNECTED , \NLW_blk00000004_P<27>_UNCONNECTED , \NLW_blk00000004_P<26>_UNCONNECTED , \NLW_blk00000004_P<25>_UNCONNECTED , +\NLW_blk00000004_P<24>_UNCONNECTED , sig000000d8, sig000000d7, sig000000d6, sig000000d5, sig000000d3, sig000000d2, sig000000d1, sig000000d0, +sig000000cf, sig000000ce, sig000000cd, sig000000cc, sig000000cb, sig000000ca, sig000000e0, sig000000df, sig000000de, sig000000dd, sig000000dc, +sig000000db, sig000000da, sig000000d9, sig000000d4, sig000000c9}) + ); + MULT18X18S blk00000005 ( + .C(clk), + .CE(sig00000002), + .R(sig00000001), + .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), + .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), + .P({\NLW_blk00000005_P<35>_UNCONNECTED , \NLW_blk00000005_P<34>_UNCONNECTED , \NLW_blk00000005_P<33>_UNCONNECTED , +\NLW_blk00000005_P<32>_UNCONNECTED , \NLW_blk00000005_P<31>_UNCONNECTED , \NLW_blk00000005_P<30>_UNCONNECTED , \NLW_blk00000005_P<29>_UNCONNECTED , +\NLW_blk00000005_P<28>_UNCONNECTED , \NLW_blk00000005_P<27>_UNCONNECTED , \NLW_blk00000005_P<26>_UNCONNECTED , \NLW_blk00000005_P<25>_UNCONNECTED , +\NLW_blk00000005_P<24>_UNCONNECTED , sig000000c0, sig000000bf, sig000000be, sig000000bd, sig000000bb, sig000000ba, sig000000b9, sig000000b8, +sig000000b7, sig000000b6, sig000000b5, sig000000b4, sig000000b3, sig000000b2, sig000000c8, sig000000c7, sig000000c6, sig000000c5, sig000000c4, +sig000000c3, sig000000c2, sig000000c1, sig000000bc, sig000000b1}) + ); + MULT18X18S blk00000006 ( + .C(clk), + .CE(sig00000002), + .R(sig00000001), + .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), + .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), + .P({\NLW_blk00000006_P<35>_UNCONNECTED , sig000000a9, sig000000a8, sig000000a7, sig000000a6, sig000000a5, sig000000a3, sig000000a2, sig000000a1, +sig000000a0, sig0000009f, sig0000009e, sig0000009d, sig0000009c, sig0000009b, sig0000009a, sig00000098, sig00000097, sig00000096, sig00000095, +sig00000094, sig00000093, sig00000092, sig00000091, sig00000090, sig0000008f, sig000000b0, sig000000af, sig000000ae, sig000000ad, sig000000ac, +sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) + ); + XORCY blk00000007 ( + .CI(sig00000065), + .LI(sig00000086), + .O(p[47]) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000008 ( + .I0(sig0000014e), + .I1(sig0000015b), + .O(sig00000086) + ); + MUXCY blk00000009 ( + .CI(sig00000064), + .DI(sig0000014e), + .S(sig00000085), + .O(sig00000065) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000000a ( + .I0(sig0000014e), + .I1(sig0000015b), + .O(sig00000085) + ); + MUXCY blk0000000b ( + .CI(sig00000062), + .DI(sig0000014e), + .S(sig00000084), + .O(sig00000064) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000000c ( + .I0(sig0000014e), + .I1(sig0000015b), + .O(sig00000084) + ); + XORCY blk0000000d ( + .CI(sig00000061), + .LI(sig00000082), + .O(p[46]) + ); + MUXCY blk0000000e ( + .CI(sig00000061), + .DI(sig0000014e), + .S(sig00000082), + .O(sig00000062) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000000f ( + .I0(sig0000014e), + .I1(sig0000015a), + .O(sig00000082) + ); + XORCY blk00000010 ( + .CI(sig00000060), + .LI(sig00000081), + .O(p[45]) + ); + MUXCY blk00000011 ( + .CI(sig00000060), + .DI(sig0000014e), + .S(sig00000081), + .O(sig00000061) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000012 ( + .I0(sig0000014e), + .I1(sig00000159), + .O(sig00000081) + ); + XORCY blk00000013 ( + .CI(sig0000005f), + .LI(sig00000080), + .O(p[44]) + ); + MUXCY blk00000014 ( + .CI(sig0000005f), + .DI(sig0000014e), + .S(sig00000080), + .O(sig00000060) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000015 ( + .I0(sig0000014e), + .I1(sig00000158), + .O(sig00000080) + ); + XORCY blk00000016 ( + .CI(sig0000005e), + .LI(sig0000007f), + .O(p[43]) + ); + MUXCY blk00000017 ( + .CI(sig0000005e), + .DI(sig0000014e), + .S(sig0000007f), + .O(sig0000005f) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000018 ( + .I0(sig0000014e), + .I1(sig00000164), + .O(sig0000007f) + ); + XORCY blk00000019 ( + .CI(sig0000005d), + .LI(sig0000007e), + .O(p[42]) + ); + MUXCY blk0000001a ( + .CI(sig0000005d), + .DI(sig0000014e), + .S(sig0000007e), + .O(sig0000005e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000001b ( + .I0(sig0000014e), + .I1(sig00000163), + .O(sig0000007e) + ); + XORCY blk0000001c ( + .CI(sig0000005c), + .LI(sig0000007d), + .O(p[41]) + ); + MUXCY blk0000001d ( + .CI(sig0000005c), + .DI(sig0000014e), + .S(sig0000007d), + .O(sig0000005d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000001e ( + .I0(sig0000014e), + .I1(sig00000162), + .O(sig0000007d) + ); + XORCY blk0000001f ( + .CI(sig0000005b), + .LI(sig0000007c), + .O(p[40]) + ); + MUXCY blk00000020 ( + .CI(sig0000005b), + .DI(sig0000014e), + .S(sig0000007c), + .O(sig0000005c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000021 ( + .I0(sig0000014e), + .I1(sig00000161), + .O(sig0000007c) + ); + XORCY blk00000022 ( + .CI(sig0000005a), + .LI(sig0000007b), + .O(p[39]) + ); + MUXCY blk00000023 ( + .CI(sig0000005a), + .DI(sig0000014d), + .S(sig0000007b), + .O(sig0000005b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000024 ( + .I0(sig0000014d), + .I1(sig00000160), + .O(sig0000007b) + ); + XORCY blk00000025 ( + .CI(sig00000059), + .LI(sig0000007a), + .O(p[38]) + ); + MUXCY blk00000026 ( + .CI(sig00000059), + .DI(sig0000014c), + .S(sig0000007a), + .O(sig0000005a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000027 ( + .I0(sig0000014c), + .I1(sig0000015f), + .O(sig0000007a) + ); + XORCY blk00000028 ( + .CI(sig00000057), + .LI(sig00000079), + .O(p[37]) + ); + MUXCY blk00000029 ( + .CI(sig00000057), + .DI(sig0000014b), + .S(sig00000079), + .O(sig00000059) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000002a ( + .I0(sig0000014b), + .I1(sig0000015e), + .O(sig00000079) + ); + XORCY blk0000002b ( + .CI(sig00000056), + .LI(sig00000077), + .O(p[36]) + ); + MUXCY blk0000002c ( + .CI(sig00000056), + .DI(sig00000149), + .S(sig00000077), + .O(sig00000057) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000002d ( + .I0(sig00000149), + .I1(sig0000015d), + .O(sig00000077) + ); + XORCY blk0000002e ( + .CI(sig00000055), + .LI(sig00000076), + .O(p[35]) + ); + MUXCY blk0000002f ( + .CI(sig00000055), + .DI(sig00000148), + .S(sig00000076), + .O(sig00000056) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000030 ( + .I0(sig00000148), + .I1(sig0000015c), + .O(sig00000076) + ); + XORCY blk00000031 ( + .CI(sig00000054), + .LI(sig00000075), + .O(p[34]) + ); + MUXCY blk00000032 ( + .CI(sig00000054), + .DI(sig00000147), + .S(sig00000075), + .O(sig00000055) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000033 ( + .I0(sig00000147), + .I1(sig00000157), + .O(sig00000075) + ); + XORCY blk00000034 ( + .CI(sig00000053), + .LI(sig00000074), + .O(p[33]) + ); + MUXCY blk00000035 ( + .CI(sig00000053), + .DI(sig00000146), + .S(sig00000074), + .O(sig00000054) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000036 ( + .I0(sig00000146), + .I1(sig00000121), + .O(sig00000074) + ); + XORCY blk00000037 ( + .CI(sig00000052), + .LI(sig00000073), + .O(p[32]) + ); + MUXCY blk00000038 ( + .CI(sig00000052), + .DI(sig00000145), + .S(sig00000073), + .O(sig00000053) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000039 ( + .I0(sig00000145), + .I1(sig00000120), + .O(sig00000073) + ); + XORCY blk0000003a ( + .CI(sig00000051), + .LI(sig00000072), + .O(p[31]) + ); + MUXCY blk0000003b ( + .CI(sig00000051), + .DI(sig00000144), + .S(sig00000072), + .O(sig00000052) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000003c ( + .I0(sig00000144), + .I1(sig0000011f), + .O(sig00000072) + ); + XORCY blk0000003d ( + .CI(sig00000050), + .LI(sig00000071), + .O(p[30]) + ); + MUXCY blk0000003e ( + .CI(sig00000050), + .DI(sig00000143), + .S(sig00000071), + .O(sig00000051) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000003f ( + .I0(sig00000143), + .I1(sig0000011e), + .O(sig00000071) + ); + XORCY blk00000040 ( + .CI(sig0000004f), + .LI(sig00000070), + .O(p[29]) + ); + MUXCY blk00000041 ( + .CI(sig0000004f), + .DI(sig00000142), + .S(sig00000070), + .O(sig00000050) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000042 ( + .I0(sig00000142), + .I1(sig0000011d), + .O(sig00000070) + ); + XORCY blk00000043 ( + .CI(sig0000004e), + .LI(sig0000006f), + .O(p[28]) + ); + MUXCY blk00000044 ( + .CI(sig0000004e), + .DI(sig00000141), + .S(sig0000006f), + .O(sig0000004f) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000045 ( + .I0(sig00000141), + .I1(sig0000011c), + .O(sig0000006f) + ); + XORCY blk00000046 ( + .CI(sig0000006c), + .LI(sig0000006e), + .O(p[27]) + ); + MUXCY blk00000047 ( + .CI(sig0000006c), + .DI(sig00000140), + .S(sig0000006e), + .O(sig0000004e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000048 ( + .I0(sig00000140), + .I1(sig0000011b), + .O(sig0000006e) + ); + XORCY blk00000049 ( + .CI(sig0000006b), + .LI(sig0000008d), + .O(p[26]) + ); + MUXCY blk0000004a ( + .CI(sig0000006b), + .DI(sig00000156), + .S(sig0000008d), + .O(sig0000006c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000004b ( + .I0(sig00000156), + .I1(sig00000130), + .O(sig0000008d) + ); + XORCY blk0000004c ( + .CI(sig0000006a), + .LI(sig0000008c), + .O(p[25]) + ); + MUXCY blk0000004d ( + .CI(sig0000006a), + .DI(sig00000155), + .S(sig0000008c), + .O(sig0000006b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000004e ( + .I0(sig00000155), + .I1(sig0000012f), + .O(sig0000008c) + ); + XORCY blk0000004f ( + .CI(sig00000069), + .LI(sig0000008b), + .O(p[24]) + ); + MUXCY blk00000050 ( + .CI(sig00000069), + .DI(sig00000154), + .S(sig0000008b), + .O(sig0000006a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000051 ( + .I0(sig00000154), + .I1(sig0000012e), + .O(sig0000008b) + ); + XORCY blk00000052 ( + .CI(sig00000068), + .LI(sig0000008a), + .O(p[23]) + ); + MUXCY blk00000053 ( + .CI(sig00000068), + .DI(sig00000153), + .S(sig0000008a), + .O(sig00000069) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000054 ( + .I0(sig00000153), + .I1(sig0000012d), + .O(sig0000008a) + ); + XORCY blk00000055 ( + .CI(sig00000067), + .LI(sig00000089), + .O(p[22]) + ); + MUXCY blk00000056 ( + .CI(sig00000067), + .DI(sig00000152), + .S(sig00000089), + .O(sig00000068) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000057 ( + .I0(sig00000152), + .I1(sig0000012c), + .O(sig00000089) + ); + XORCY blk00000058 ( + .CI(sig00000066), + .LI(sig00000088), + .O(p[21]) + ); + MUXCY blk00000059 ( + .CI(sig00000066), + .DI(sig00000151), + .S(sig00000088), + .O(sig00000067) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005a ( + .I0(sig00000151), + .I1(sig0000012b), + .O(sig00000088) + ); + XORCY blk0000005b ( + .CI(sig00000063), + .LI(sig00000087), + .O(p[20]) + ); + MUXCY blk0000005c ( + .CI(sig00000063), + .DI(sig00000150), + .S(sig00000087), + .O(sig00000066) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005d ( + .I0(sig00000150), + .I1(sig0000012a), + .O(sig00000087) + ); + XORCY blk0000005e ( + .CI(sig00000058), + .LI(sig00000083), + .O(p[19]) + ); + MUXCY blk0000005f ( + .CI(sig00000058), + .DI(sig0000014f), + .S(sig00000083), + .O(sig00000063) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000060 ( + .I0(sig0000014f), + .I1(sig00000125), + .O(sig00000083) + ); + XORCY blk00000061 ( + .CI(sig0000004d), + .LI(sig00000078), + .O(p[18]) + ); + MUXCY blk00000062 ( + .CI(sig0000004d), + .DI(sig0000014a), + .S(sig00000078), + .O(sig00000058) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000063 ( + .I0(sig0000014a), + .I1(sig0000011a), + .O(sig00000078) + ); + XORCY blk00000064 ( + .CI(sig00000001), + .LI(sig0000006d), + .O(p[17]) + ); + MUXCY blk00000065 ( + .CI(sig00000001), + .DI(sig0000013f), + .S(sig0000006d), + .O(sig0000004d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000066 ( + .I0(sig0000013f), + .I1(sig00000119), + .O(sig0000006d) + ); + XORCY blk00000067 ( + .CI(sig00000011), + .LI(sig00000029), + .O(sig0000014e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000068 ( + .I0(sig00000100), + .I1(sig00000111), + .O(sig00000029) + ); + XORCY blk00000069 ( + .CI(sig00000010), + .LI(sig00000028), + .O(sig0000014d) + ); + MUXCY blk0000006a ( + .CI(sig00000010), + .DI(sig00000100), + .S(sig00000028), + .O(sig00000011) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000006b ( + .I0(sig00000100), + .I1(sig00000110), + .O(sig00000028) + ); + XORCY blk0000006c ( + .CI(sig0000000f), + .LI(sig00000027), + .O(sig0000014c) + ); + MUXCY blk0000006d ( + .CI(sig0000000f), + .DI(sig00000100), + .S(sig00000027), + .O(sig00000010) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000006e ( + .I0(sig00000100), + .I1(sig0000010f), + .O(sig00000027) + ); + XORCY blk0000006f ( + .CI(sig0000000d), + .LI(sig00000026), + .O(sig0000014b) + ); + MUXCY blk00000070 ( + .CI(sig0000000d), + .DI(sig00000100), + .S(sig00000026), + .O(sig0000000f) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000071 ( + .I0(sig00000100), + .I1(sig0000010e), + .O(sig00000026) + ); + XORCY blk00000072 ( + .CI(sig0000000c), + .LI(sig00000024), + .O(sig00000149) + ); + MUXCY blk00000073 ( + .CI(sig0000000c), + .DI(sig00000100), + .S(sig00000024), + .O(sig0000000d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000074 ( + .I0(sig00000100), + .I1(sig0000010c), + .O(sig00000024) + ); + XORCY blk00000075 ( + .CI(sig0000000b), + .LI(sig00000023), + .O(sig00000148) + ); + MUXCY blk00000076 ( + .CI(sig0000000b), + .DI(sig00000100), + .S(sig00000023), + .O(sig0000000c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000077 ( + .I0(sig00000100), + .I1(sig0000010b), + .O(sig00000023) + ); + XORCY blk00000078 ( + .CI(sig0000000a), + .LI(sig00000022), + .O(sig00000147) + ); + MUXCY blk00000079 ( + .CI(sig0000000a), + .DI(sig00000100), + .S(sig00000022), + .O(sig0000000b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000007a ( + .I0(sig00000100), + .I1(sig0000010a), + .O(sig00000022) + ); + XORCY blk0000007b ( + .CI(sig00000009), + .LI(sig00000021), + .O(sig00000146) + ); + MUXCY blk0000007c ( + .CI(sig00000009), + .DI(sig000000ff), + .S(sig00000021), + .O(sig0000000a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000007d ( + .I0(sig000000ff), + .I1(sig00000109), + .O(sig00000021) + ); + XORCY blk0000007e ( + .CI(sig00000008), + .LI(sig00000020), + .O(sig00000145) + ); + MUXCY blk0000007f ( + .CI(sig00000008), + .DI(sig000000fe), + .S(sig00000020), + .O(sig00000009) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000080 ( + .I0(sig000000fe), + .I1(sig00000108), + .O(sig00000020) + ); + XORCY blk00000081 ( + .CI(sig00000007), + .LI(sig0000001f), + .O(sig00000144) + ); + MUXCY blk00000082 ( + .CI(sig00000007), + .DI(sig000000fd), + .S(sig0000001f), + .O(sig00000008) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000083 ( + .I0(sig000000fd), + .I1(sig00000107), + .O(sig0000001f) + ); + XORCY blk00000084 ( + .CI(sig00000006), + .LI(sig0000001e), + .O(sig00000143) + ); + MUXCY blk00000085 ( + .CI(sig00000006), + .DI(sig000000fc), + .S(sig0000001e), + .O(sig00000007) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000086 ( + .I0(sig000000fc), + .I1(sig00000106), + .O(sig0000001e) + ); + XORCY blk00000087 ( + .CI(sig00000005), + .LI(sig0000001d), + .O(sig00000142) + ); + MUXCY blk00000088 ( + .CI(sig00000005), + .DI(sig000000fb), + .S(sig0000001d), + .O(sig00000006) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000089 ( + .I0(sig000000fb), + .I1(sig00000105), + .O(sig0000001d) + ); + XORCY blk0000008a ( + .CI(sig00000004), + .LI(sig0000001c), + .O(sig00000141) + ); + MUXCY blk0000008b ( + .CI(sig00000004), + .DI(sig000000fa), + .S(sig0000001c), + .O(sig00000005) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000008c ( + .I0(sig000000fa), + .I1(sig00000104), + .O(sig0000001c) + ); + XORCY blk0000008d ( + .CI(sig00000019), + .LI(sig0000001b), + .O(sig00000140) + ); + MUXCY blk0000008e ( + .CI(sig00000019), + .DI(sig000000f9), + .S(sig0000001b), + .O(sig00000004) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000008f ( + .I0(sig000000f9), + .I1(sig00000103), + .O(sig0000001b) + ); + XORCY blk00000090 ( + .CI(sig00000018), + .LI(sig00000031), + .O(sig00000156) + ); + MUXCY blk00000091 ( + .CI(sig00000018), + .DI(sig000000f8), + .S(sig00000031), + .O(sig00000019) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000092 ( + .I0(sig000000f8), + .I1(sig00000118), + .O(sig00000031) + ); + XORCY blk00000093 ( + .CI(sig00000017), + .LI(sig00000030), + .O(sig00000155) + ); + MUXCY blk00000094 ( + .CI(sig00000017), + .DI(sig000000f7), + .S(sig00000030), + .O(sig00000018) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000095 ( + .I0(sig000000f7), + .I1(sig00000117), + .O(sig00000030) + ); + XORCY blk00000096 ( + .CI(sig00000016), + .LI(sig0000002f), + .O(sig00000154) + ); + MUXCY blk00000097 ( + .CI(sig00000016), + .DI(sig000000f6), + .S(sig0000002f), + .O(sig00000017) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000098 ( + .I0(sig000000f6), + .I1(sig00000116), + .O(sig0000002f) + ); + XORCY blk00000099 ( + .CI(sig00000015), + .LI(sig0000002e), + .O(sig00000153) + ); + MUXCY blk0000009a ( + .CI(sig00000015), + .DI(sig000000f5), + .S(sig0000002e), + .O(sig00000016) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000009b ( + .I0(sig000000f5), + .I1(sig00000115), + .O(sig0000002e) + ); + XORCY blk0000009c ( + .CI(sig00000014), + .LI(sig0000002d), + .O(sig00000152) + ); + MUXCY blk0000009d ( + .CI(sig00000014), + .DI(sig000000f4), + .S(sig0000002d), + .O(sig00000015) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000009e ( + .I0(sig000000f4), + .I1(sig00000114), + .O(sig0000002d) + ); + XORCY blk0000009f ( + .CI(sig00000013), + .LI(sig0000002c), + .O(sig00000151) + ); + MUXCY blk000000a0 ( + .CI(sig00000013), + .DI(sig000000f3), + .S(sig0000002c), + .O(sig00000014) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000a1 ( + .I0(sig000000f3), + .I1(sig00000113), + .O(sig0000002c) + ); + XORCY blk000000a2 ( + .CI(sig00000012), + .LI(sig0000002b), + .O(sig00000150) + ); + MUXCY blk000000a3 ( + .CI(sig00000012), + .DI(sig000000f2), + .S(sig0000002b), + .O(sig00000013) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000a4 ( + .I0(sig000000f2), + .I1(sig00000112), + .O(sig0000002b) + ); + XORCY blk000000a5 ( + .CI(sig0000000e), + .LI(sig0000002a), + .O(sig0000014f) + ); + MUXCY blk000000a6 ( + .CI(sig0000000e), + .DI(sig000000f1), + .S(sig0000002a), + .O(sig00000012) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000a7 ( + .I0(sig000000f1), + .I1(sig0000010d), + .O(sig0000002a) + ); + XORCY blk000000a8 ( + .CI(sig00000003), + .LI(sig00000025), + .O(sig0000014a) + ); + MUXCY blk000000a9 ( + .CI(sig00000003), + .DI(sig000000f0), + .S(sig00000025), + .O(sig0000000e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000aa ( + .I0(sig000000f0), + .I1(sig00000102), + .O(sig00000025) + ); + XORCY blk000000ab ( + .CI(sig00000001), + .LI(sig0000001a), + .O(sig0000013f) + ); + MUXCY blk000000ac ( + .CI(sig00000001), + .DI(sig000000ef), + .S(sig0000001a), + .O(sig00000003) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000ad ( + .I0(sig000000ef), + .I1(sig00000101), + .O(sig0000001a) + ); + XORCY blk000000ae ( + .CI(sig00000035), + .LI(sig00000043), + .O(sig0000015b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000af ( + .I0(sig00000129), + .I1(sig00000136), + .O(sig00000043) + ); + XORCY blk000000b0 ( + .CI(sig00000034), + .LI(sig00000042), + .O(sig0000015a) + ); + MUXCY blk000000b1 ( + .CI(sig00000034), + .DI(sig00000129), + .S(sig00000042), + .O(sig00000035) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000b2 ( + .I0(sig00000129), + .I1(sig00000135), + .O(sig00000042) + ); + XORCY blk000000b3 ( + .CI(sig00000033), + .LI(sig00000041), + .O(sig00000159) + ); + MUXCY blk000000b4 ( + .CI(sig00000033), + .DI(sig00000129), + .S(sig00000041), + .O(sig00000034) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000b5 ( + .I0(sig00000129), + .I1(sig00000134), + .O(sig00000041) + ); + XORCY blk000000b6 ( + .CI(sig0000003e), + .LI(sig00000040), + .O(sig00000158) + ); + MUXCY blk000000b7 ( + .CI(sig0000003e), + .DI(sig00000129), + .S(sig00000040), + .O(sig00000033) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000b8 ( + .I0(sig00000129), + .I1(sig00000133), + .O(sig00000040) + ); + XORCY blk000000b9 ( + .CI(sig0000003d), + .LI(sig0000004c), + .O(sig00000164) + ); + MUXCY blk000000ba ( + .CI(sig0000003d), + .DI(sig00000129), + .S(sig0000004c), + .O(sig0000003e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000bb ( + .I0(sig00000129), + .I1(sig0000013e), + .O(sig0000004c) + ); + XORCY blk000000bc ( + .CI(sig0000003c), + .LI(sig0000004b), + .O(sig00000163) + ); + MUXCY blk000000bd ( + .CI(sig0000003c), + .DI(sig00000129), + .S(sig0000004b), + .O(sig0000003d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000be ( + .I0(sig00000129), + .I1(sig0000013d), + .O(sig0000004b) + ); + XORCY blk000000bf ( + .CI(sig0000003b), + .LI(sig0000004a), + .O(sig00000162) + ); + MUXCY blk000000c0 ( + .CI(sig0000003b), + .DI(sig00000129), + .S(sig0000004a), + .O(sig0000003c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000c1 ( + .I0(sig00000129), + .I1(sig0000013c), + .O(sig0000004a) + ); + XORCY blk000000c2 ( + .CI(sig0000003a), + .LI(sig00000049), + .O(sig00000161) + ); + MUXCY blk000000c3 ( + .CI(sig0000003a), + .DI(sig00000129), + .S(sig00000049), + .O(sig0000003b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000c4 ( + .I0(sig00000129), + .I1(sig0000013b), + .O(sig00000049) + ); + XORCY blk000000c5 ( + .CI(sig00000039), + .LI(sig00000048), + .O(sig00000160) + ); + MUXCY blk000000c6 ( + .CI(sig00000039), + .DI(sig00000128), + .S(sig00000048), + .O(sig0000003a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000c7 ( + .I0(sig00000128), + .I1(sig0000013a), + .O(sig00000048) + ); + XORCY blk000000c8 ( + .CI(sig00000038), + .LI(sig00000047), + .O(sig0000015f) + ); + MUXCY blk000000c9 ( + .CI(sig00000038), + .DI(sig00000127), + .S(sig00000047), + .O(sig00000039) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000ca ( + .I0(sig00000127), + .I1(sig00000139), + .O(sig00000047) + ); + XORCY blk000000cb ( + .CI(sig00000037), + .LI(sig00000046), + .O(sig0000015e) + ); + MUXCY blk000000cc ( + .CI(sig00000037), + .DI(sig00000126), + .S(sig00000046), + .O(sig00000038) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000cd ( + .I0(sig00000126), + .I1(sig00000138), + .O(sig00000046) + ); + XORCY blk000000ce ( + .CI(sig00000036), + .LI(sig00000045), + .O(sig0000015d) + ); + MUXCY blk000000cf ( + .CI(sig00000036), + .DI(sig00000124), + .S(sig00000045), + .O(sig00000037) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000d0 ( + .I0(sig00000124), + .I1(sig00000137), + .O(sig00000045) + ); + XORCY blk000000d1 ( + .CI(sig00000032), + .LI(sig00000044), + .O(sig0000015c) + ); + MUXCY blk000000d2 ( + .CI(sig00000032), + .DI(sig00000123), + .S(sig00000044), + .O(sig00000036) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000d3 ( + .I0(sig00000123), + .I1(sig00000132), + .O(sig00000044) + ); + XORCY blk000000d4 ( + .CI(sig00000001), + .LI(sig0000003f), + .O(sig00000157) + ); + MUXCY blk000000d5 ( + .CI(sig00000001), + .DI(sig00000122), + .S(sig0000003f), + .O(sig00000032) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000d6 ( + .I0(sig00000122), + .I1(sig00000131), + .O(sig0000003f) + ); + FD #( + .INIT ( 1'b0 )) + blk000000d7 ( + .C(clk), + .D(sig000000d8), + .Q(sig00000129) + ); + FD #( + .INIT ( 1'b0 )) + blk000000d8 ( + .C(clk), + .D(sig000000d7), + .Q(sig00000128) + ); + FD #( + .INIT ( 1'b0 )) + blk000000d9 ( + .C(clk), + .D(sig000000d6), + .Q(sig00000127) + ); + FD #( + .INIT ( 1'b0 )) + blk000000da ( + .C(clk), + .D(sig000000d5), + .Q(sig00000126) + ); + FD #( + .INIT ( 1'b0 )) + blk000000db ( + .C(clk), + .D(sig000000d3), + .Q(sig00000124) + ); + FD #( + .INIT ( 1'b0 )) + blk000000dc ( + .C(clk), + .D(sig000000d2), + .Q(sig00000123) + ); + FD #( + .INIT ( 1'b0 )) + blk000000dd ( + .C(clk), + .D(sig000000d1), + .Q(sig00000122) + ); + FD #( + .INIT ( 1'b0 )) + blk000000de ( + .C(clk), + .D(sig000000d0), + .Q(sig00000121) + ); + FD #( + .INIT ( 1'b0 )) + blk000000df ( + .C(clk), + .D(sig000000cf), + .Q(sig00000120) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e0 ( + .C(clk), + .D(sig000000ce), + .Q(sig0000011f) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e1 ( + .C(clk), + .D(sig000000cd), + .Q(sig0000011e) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e2 ( + .C(clk), + .D(sig000000cc), + .Q(sig0000011d) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e3 ( + .C(clk), + .D(sig000000cb), + .Q(sig0000011c) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e4 ( + .C(clk), + .D(sig000000ca), + .Q(sig0000011b) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e5 ( + .C(clk), + .D(sig000000e0), + .Q(sig00000130) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e6 ( + .C(clk), + .D(sig000000df), + .Q(sig0000012f) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e7 ( + .C(clk), + .D(sig000000de), + .Q(sig0000012e) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e8 ( + .C(clk), + .D(sig000000dd), + .Q(sig0000012d) + ); + FD #( + .INIT ( 1'b0 )) + blk000000e9 ( + .C(clk), + .D(sig000000dc), + .Q(sig0000012c) + ); + FD #( + .INIT ( 1'b0 )) + blk000000ea ( + .C(clk), + .D(sig000000db), + .Q(sig0000012b) + ); + FD #( + .INIT ( 1'b0 )) + blk000000eb ( + .C(clk), + .D(sig000000da), + .Q(sig0000012a) + ); + FD #( + .INIT ( 1'b0 )) + blk000000ec ( + .C(clk), + .D(sig000000d9), + .Q(sig00000125) + ); + FD #( + .INIT ( 1'b0 )) + blk000000ed ( + .C(clk), + .D(sig000000d4), + .Q(sig0000011a) + ); + FD #( + .INIT ( 1'b0 )) + blk000000ee ( + .C(clk), + .D(sig000000c9), + .Q(sig00000119) + ); + FD #( + .INIT ( 1'b0 )) + blk000000ef ( + .C(clk), + .D(sig000000c0), + .Q(sig00000111) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f0 ( + .C(clk), + .D(sig000000bf), + .Q(sig00000110) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f1 ( + .C(clk), + .D(sig000000be), + .Q(sig0000010f) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f2 ( + .C(clk), + .D(sig000000bd), + .Q(sig0000010e) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f3 ( + .C(clk), + .D(sig000000bb), + .Q(sig0000010c) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f4 ( + .C(clk), + .D(sig000000ba), + .Q(sig0000010b) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f5 ( + .C(clk), + .D(sig000000b9), + .Q(sig0000010a) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f6 ( + .C(clk), + .D(sig000000b8), + .Q(sig00000109) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f7 ( + .C(clk), + .D(sig000000b7), + .Q(sig00000108) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f8 ( + .C(clk), + .D(sig000000b6), + .Q(sig00000107) + ); + FD #( + .INIT ( 1'b0 )) + blk000000f9 ( + .C(clk), + .D(sig000000b5), + .Q(sig00000106) + ); + FD #( + .INIT ( 1'b0 )) + blk000000fa ( + .C(clk), + .D(sig000000b4), + .Q(sig00000105) + ); + FD #( + .INIT ( 1'b0 )) + blk000000fb ( + .C(clk), + .D(sig000000b3), + .Q(sig00000104) + ); + FD #( + .INIT ( 1'b0 )) + blk000000fc ( + .C(clk), + .D(sig000000b2), + .Q(sig00000103) + ); + FD #( + .INIT ( 1'b0 )) + blk000000fd ( + .C(clk), + .D(sig000000c8), + .Q(sig00000118) + ); + FD #( + .INIT ( 1'b0 )) + blk000000fe ( + .C(clk), + .D(sig000000c7), + .Q(sig00000117) + ); + FD #( + .INIT ( 1'b0 )) + blk000000ff ( + .C(clk), + .D(sig000000c6), + .Q(sig00000116) + ); + FD #( + .INIT ( 1'b0 )) + blk00000100 ( + .C(clk), + .D(sig000000c5), + .Q(sig00000115) + ); + FD #( + .INIT ( 1'b0 )) + blk00000101 ( + .C(clk), + .D(sig000000c4), + .Q(sig00000114) + ); + FD #( + .INIT ( 1'b0 )) + blk00000102 ( + .C(clk), + .D(sig000000c3), + .Q(sig00000113) + ); + FD #( + .INIT ( 1'b0 )) + blk00000103 ( + .C(clk), + .D(sig000000c2), + .Q(sig00000112) + ); + FD #( + .INIT ( 1'b0 )) + blk00000104 ( + .C(clk), + .D(sig000000c1), + .Q(sig0000010d) + ); + FD #( + .INIT ( 1'b0 )) + blk00000105 ( + .C(clk), + .D(sig000000bc), + .Q(sig00000102) + ); + FD #( + .INIT ( 1'b0 )) + blk00000106 ( + .C(clk), + .D(sig000000b1), + .Q(sig00000101) + ); + FD #( + .INIT ( 1'b0 )) + blk00000107 ( + .C(clk), + .D(sig000000e5), + .Q(sig00000136) + ); + FD #( + .INIT ( 1'b0 )) + blk00000108 ( + .C(clk), + .D(sig000000e4), + .Q(sig00000135) + ); + FD #( + .INIT ( 1'b0 )) + blk00000109 ( + .C(clk), + .D(sig000000e3), + .Q(sig00000134) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010a ( + .C(clk), + .D(sig000000e2), + .Q(sig00000133) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010b ( + .C(clk), + .D(sig000000ee), + .Q(sig0000013e) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010c ( + .C(clk), + .D(sig000000ed), + .Q(sig0000013d) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010d ( + .C(clk), + .D(sig000000ec), + .Q(sig0000013c) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010e ( + .C(clk), + .D(sig000000eb), + .Q(sig0000013b) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010f ( + .C(clk), + .D(sig000000ea), + .Q(sig0000013a) + ); + FD #( + .INIT ( 1'b0 )) + blk00000110 ( + .C(clk), + .D(sig000000e9), + .Q(sig00000139) + ); + FD #( + .INIT ( 1'b0 )) + blk00000111 ( + .C(clk), + .D(sig000000e8), + .Q(sig00000138) + ); + FD #( + .INIT ( 1'b0 )) + blk00000112 ( + .C(clk), + .D(sig000000e7), + .Q(sig00000137) + ); + FD #( + .INIT ( 1'b0 )) + blk00000113 ( + .C(clk), + .D(sig000000e6), + .Q(sig00000132) + ); + FD #( + .INIT ( 1'b0 )) + blk00000114 ( + .C(clk), + .D(sig000000e1), + .Q(sig00000131) + ); + FD #( + .INIT ( 1'b0 )) + blk00000115 ( + .C(clk), + .D(sig000000a9), + .Q(sig00000100) + ); + FD #( + .INIT ( 1'b0 )) + blk00000116 ( + .C(clk), + .D(sig000000a8), + .Q(sig000000ff) + ); + FD #( + .INIT ( 1'b0 )) + blk00000117 ( + .C(clk), + .D(sig000000a7), + .Q(sig000000fe) + ); + FD #( + .INIT ( 1'b0 )) + blk00000118 ( + .C(clk), + .D(sig000000a6), + .Q(sig000000fd) + ); + FD #( + .INIT ( 1'b0 )) + blk00000119 ( + .C(clk), + .D(sig000000a5), + .Q(sig000000fc) + ); + FD #( + .INIT ( 1'b0 )) + blk0000011a ( + .C(clk), + .D(sig000000a3), + .Q(sig000000fb) + ); + FD #( + .INIT ( 1'b0 )) + blk0000011b ( + .C(clk), + .D(sig000000a2), + .Q(sig000000fa) + ); + FD #( + .INIT ( 1'b0 )) + blk0000011c ( + .C(clk), + .D(sig000000a1), + .Q(sig000000f9) + ); + FD #( + .INIT ( 1'b0 )) + blk0000011d ( + .C(clk), + .D(sig000000a0), + .Q(sig000000f8) + ); + FD #( + .INIT ( 1'b0 )) + blk0000011e ( + .C(clk), + .D(sig0000009f), + .Q(sig000000f7) + ); + FD #( + .INIT ( 1'b0 )) + blk0000011f ( + .C(clk), + .D(sig0000009e), + .Q(sig000000f6) + ); + FD #( + .INIT ( 1'b0 )) + blk00000120 ( + .C(clk), + .D(sig0000009d), + .Q(sig000000f5) + ); + FD #( + .INIT ( 1'b0 )) + blk00000121 ( + .C(clk), + .D(sig0000009c), + .Q(sig000000f4) + ); + FD #( + .INIT ( 1'b0 )) + blk00000122 ( + .C(clk), + .D(sig0000009b), + .Q(sig000000f3) + ); + FD #( + .INIT ( 1'b0 )) + blk00000123 ( + .C(clk), + .D(sig0000009a), + .Q(sig000000f2) + ); + FD #( + .INIT ( 1'b0 )) + blk00000124 ( + .C(clk), + .D(sig00000098), + .Q(sig000000f1) + ); + FD #( + .INIT ( 1'b0 )) + blk00000125 ( + .C(clk), + .D(sig00000097), + .Q(sig000000f0) + ); + FD #( + .INIT ( 1'b0 )) + blk00000126 ( + .C(clk), + .D(sig00000096), + .Q(sig000000ef) + ); + FD #( + .INIT ( 1'b0 )) + blk00000127 ( + .C(clk), + .D(sig00000095), + .Q(p[16]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000128 ( + .C(clk), + .D(sig00000094), + .Q(p[15]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000129 ( + .C(clk), + .D(sig00000093), + .Q(p[14]) + ); + FD #( + .INIT ( 1'b0 )) + blk0000012a ( + .C(clk), + .D(sig00000092), + .Q(p[13]) + ); + FD #( + .INIT ( 1'b0 )) + blk0000012b ( + .C(clk), + .D(sig00000091), + .Q(p[12]) + ); + FD #( + .INIT ( 1'b0 )) + blk0000012c ( + .C(clk), + .D(sig00000090), + .Q(p[11]) + ); + FD #( + .INIT ( 1'b0 )) + blk0000012d ( + .C(clk), + .D(sig0000008f), + .Q(p[10]) + ); + FD #( + .INIT ( 1'b0 )) + blk0000012e ( + .C(clk), + .D(sig000000b0), + .Q(p[9]) + ); + FD #( + .INIT ( 1'b0 )) + blk0000012f ( + .C(clk), + .D(sig000000af), + .Q(p[8]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000130 ( + .C(clk), + .D(sig000000ae), + .Q(p[7]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000131 ( + .C(clk), + .D(sig000000ad), + .Q(p[6]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000132 ( + .C(clk), + .D(sig000000ac), + .Q(p[5]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000133 ( + .C(clk), + .D(sig000000ab), + .Q(p[4]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000134 ( + .C(clk), + .D(sig000000aa), + .Q(p[3]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000135 ( + .C(clk), + .D(sig000000a4), + .Q(p[2]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000136 ( + .C(clk), + .D(sig00000099), + .Q(p[1]) + ); + FD #( + .INIT ( 1'b0 )) + blk00000137 ( + .C(clk), + .D(sig0000008e), + .Q(p[0]) + ); + +// synthesis translate_on + +endmodule + +// synthesis translate_off + +`ifndef GLBL +`define GLBL + +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (weak1, weak0) GSR = GSR_int; + assign (weak1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + +endmodule + +`endif + +// synthesis translate_on diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco new file mode 100644 index 0000000..89401df --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco @@ -0,0 +1,68 @@ +############################################################## +# +# Xilinx Core Generator version 13.2 +# Date: Fri Oct 21 20:38:07 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:mult_gen:11.2 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s400 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = pq208 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -4 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Multiplier xilinx.com:ip:mult_gen:11.2 +# END Select +# BEGIN Parameters +CSET ccmimp=Distributed_Memory +CSET clockenable=false +CSET component_name=cx4_mul +CSET constvalue=129 +CSET internaluser=0 +CSET multiplier_construction=Use_Mults +CSET multtype=Parallel_Multiplier +CSET optgoal=Speed +CSET outputwidthhigh=47 +CSET outputwidthlow=0 +CSET pipestages=2 +CSET portatype=Signed +CSET portawidth=24 +CSET portbtype=Signed +CSET portbwidth=24 +CSET roundpoint=0 +CSET sclrcepriority=SCLR_Overrides_CE +CSET syncclear=false +CSET use_custom_output_width=false +CSET userounding=false +CSET zerodetect=false +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-06-21T06:26:54.000Z +# END Extra information +GENERATE +# CRC: efe4d30e diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise new file mode 100644 index 0000000..12daee6 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise @@ -0,0 +1,378 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v new file mode 100644 index 0000000..88379dd --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v @@ -0,0 +1,181 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used solely * +* for design, simulation, implementation and creation of design files * +* limited to Xilinx devices or technologies. Use with non-Xilinx * +* devices or technologies is expressly prohibited and immediately * +* terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY * +* FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY * +* PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE * +* IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS * +* MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY * +* CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY * +* RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY * +* DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * +* PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support appliances, * +* devices, or systems. Use in such applications are expressly * +* prohibited. * +* * +* (c) Copyright 1995-2011 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// You must compile the wrapper file cx4_pgmrom.v when simulating +// the core, cx4_pgmrom. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +`timescale 1ns/1ps + +module cx4_pgmrom( + clka, + wea, + addra, + dina, + clkb, + addrb, + doutb +); + +input clka; +input [0 : 0] wea; +input [9 : 0] addra; +input [7 : 0] dina; +input clkb; +input [8 : 0] addrb; +output [15 : 0] doutb; + +// synthesis translate_off + + BLK_MEM_GEN_V6_2 #( + .C_ADDRA_WIDTH(10), + .C_ADDRB_WIDTH(9), + .C_ALGORITHM(1), + .C_AXI_ID_WIDTH(4), + .C_AXI_SLAVE_TYPE(0), + .C_AXI_TYPE(1), + .C_BYTE_SIZE(9), + .C_COMMON_CLK(1), + .C_DEFAULT_DATA("0"), + .C_DISABLE_WARN_BHV_COLL(0), + .C_DISABLE_WARN_BHV_RANGE(0), + .C_FAMILY("spartan3"), + .C_HAS_AXI_ID(0), + .C_HAS_ENA(0), + .C_HAS_ENB(0), + .C_HAS_INJECTERR(0), + .C_HAS_MEM_OUTPUT_REGS_A(0), + .C_HAS_MEM_OUTPUT_REGS_B(0), + .C_HAS_MUX_OUTPUT_REGS_A(0), + .C_HAS_MUX_OUTPUT_REGS_B(0), + .C_HAS_REGCEA(0), + .C_HAS_REGCEB(0), + .C_HAS_RSTA(0), + .C_HAS_RSTB(0), + .C_HAS_SOFTECC_INPUT_REGS_A(0), + .C_HAS_SOFTECC_OUTPUT_REGS_B(0), + .C_INIT_FILE_NAME("no_coe_file_loaded"), + .C_INITA_VAL("0"), + .C_INITB_VAL("0"), + .C_INTERFACE_TYPE(0), + .C_LOAD_INIT_FILE(0), + .C_MEM_TYPE(1), + .C_MUX_PIPELINE_STAGES(0), + .C_PRIM_TYPE(1), + .C_READ_DEPTH_A(1024), + .C_READ_DEPTH_B(512), + .C_READ_WIDTH_A(8), + .C_READ_WIDTH_B(16), + .C_RST_PRIORITY_A("CE"), + .C_RST_PRIORITY_B("CE"), + .C_RST_TYPE("SYNC"), + .C_RSTRAM_A(0), + .C_RSTRAM_B(0), + .C_SIM_COLLISION_CHECK("ALL"), + .C_USE_BYTE_WEA(0), + .C_USE_BYTE_WEB(0), + .C_USE_DEFAULT_DATA(0), + .C_USE_ECC(0), + .C_USE_SOFTECC(0), + .C_WEA_WIDTH(1), + .C_WEB_WIDTH(1), + .C_WRITE_DEPTH_A(1024), + .C_WRITE_DEPTH_B(512), + .C_WRITE_MODE_A("WRITE_FIRST"), + .C_WRITE_MODE_B("WRITE_FIRST"), + .C_WRITE_WIDTH_A(8), + .C_WRITE_WIDTH_B(16), + .C_XDEVICEFAMILY("spartan3") + ) + inst ( + .CLKA(clka), + .WEA(wea), + .ADDRA(addra), + .DINA(dina), + .CLKB(clkb), + .ADDRB(addrb), + .DOUTB(doutb), + .RSTA(), + .ENA(), + .REGCEA(), + .DOUTA(), + .RSTB(), + .ENB(), + .REGCEB(), + .WEB(), + .DINB(), + .INJECTSBITERR(), + .INJECTDBITERR(), + .SBITERR(), + .DBITERR(), + .RDADDRECC(), + .S_ACLK(), + .S_ARESETN(), + .S_AXI_AWID(), + .S_AXI_AWADDR(), + .S_AXI_AWLEN(), + .S_AXI_AWSIZE(), + .S_AXI_AWBURST(), + .S_AXI_AWVALID(), + .S_AXI_AWREADY(), + .S_AXI_WDATA(), + .S_AXI_WSTRB(), + .S_AXI_WLAST(), + .S_AXI_WVALID(), + .S_AXI_WREADY(), + .S_AXI_BID(), + .S_AXI_BRESP(), + .S_AXI_BVALID(), + .S_AXI_BREADY(), + .S_AXI_ARID(), + .S_AXI_ARADDR(), + .S_AXI_ARLEN(), + .S_AXI_ARSIZE(), + .S_AXI_ARBURST(), + .S_AXI_ARVALID(), + .S_AXI_ARREADY(), + .S_AXI_RID(), + .S_AXI_RDATA(), + .S_AXI_RRESP(), + .S_AXI_RLAST(), + .S_AXI_RVALID(), + .S_AXI_RREADY(), + .S_AXI_INJECTSBITERR(), + .S_AXI_INJECTDBITERR(), + .S_AXI_SBITERR(), + .S_AXI_DBITERR(), + .S_AXI_RDADDRECC() + ); + +// synthesis translate_on + +endmodule diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco new file mode 100644 index 0000000..59cb743 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco @@ -0,0 +1,105 @@ +############################################################## +# +# Xilinx Core Generator version 13.2 +# Date: Tue Oct 18 18:45:53 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:blk_mem_gen:6.2 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s400 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = pq208 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -4 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.2 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=true +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=cx4_pgmrom +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=false +CSET interface_type=Native +CSET load_init_file=false +CSET memory_type=Simple_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=8 +CSET read_width_b=16 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=1024 +CSET write_width_a=8 +CSET write_width_b=16 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-03-11T08:24:14.000Z +# END Extra information +GENERATE +# CRC: 30264765 diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise new file mode 100644 index 0000000..72cb4ec --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise @@ -0,0 +1,72 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/ipcore_dir/dac_buf.v b/verilog/sd2snes_cx4/ipcore_dir/dac_buf.v new file mode 100644 index 0000000..8e2574d --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/dac_buf.v @@ -0,0 +1,181 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used solely * +* for design, simulation, implementation and creation of design files * +* limited to Xilinx devices or technologies. Use with non-Xilinx * +* devices or technologies is expressly prohibited and immediately * +* terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY * +* FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY * +* PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE * +* IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS * +* MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY * +* CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY * +* RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY * +* DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * +* PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support appliances, * +* devices, or systems. Use in such applications are expressly * +* prohibited. * +* * +* (c) Copyright 1995-2011 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// You must compile the wrapper file dac_buf.v when simulating +// the core, dac_buf. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +`timescale 1ns/1ps + +module dac_buf( + clka, + wea, + addra, + dina, + clkb, + addrb, + doutb +); + +input clka; +input [0 : 0] wea; +input [10 : 0] addra; +input [7 : 0] dina; +input clkb; +input [8 : 0] addrb; +output [31 : 0] doutb; + +// synthesis translate_off + + BLK_MEM_GEN_V6_1 #( + .C_ADDRA_WIDTH(11), + .C_ADDRB_WIDTH(9), + .C_ALGORITHM(1), + .C_AXI_ID_WIDTH(4), + .C_AXI_SLAVE_TYPE(0), + .C_AXI_TYPE(1), + .C_BYTE_SIZE(9), + .C_COMMON_CLK(1), + .C_DEFAULT_DATA("0"), + .C_DISABLE_WARN_BHV_COLL(0), + .C_DISABLE_WARN_BHV_RANGE(0), + .C_FAMILY("spartan3"), + .C_HAS_AXI_ID(0), + .C_HAS_ENA(0), + .C_HAS_ENB(0), + .C_HAS_INJECTERR(0), + .C_HAS_MEM_OUTPUT_REGS_A(0), + .C_HAS_MEM_OUTPUT_REGS_B(0), + .C_HAS_MUX_OUTPUT_REGS_A(0), + .C_HAS_MUX_OUTPUT_REGS_B(0), + .C_HAS_REGCEA(0), + .C_HAS_REGCEB(0), + .C_HAS_RSTA(0), + .C_HAS_RSTB(0), + .C_HAS_SOFTECC_INPUT_REGS_A(0), + .C_HAS_SOFTECC_OUTPUT_REGS_B(0), + .C_INIT_FILE_NAME("no_coe_file_loaded"), + .C_INITA_VAL("0"), + .C_INITB_VAL("0"), + .C_INTERFACE_TYPE(0), + .C_LOAD_INIT_FILE(0), + .C_MEM_TYPE(1), + .C_MUX_PIPELINE_STAGES(0), + .C_PRIM_TYPE(1), + .C_READ_DEPTH_A(2048), + .C_READ_DEPTH_B(512), + .C_READ_WIDTH_A(8), + .C_READ_WIDTH_B(32), + .C_RST_PRIORITY_A("CE"), + .C_RST_PRIORITY_B("CE"), + .C_RST_TYPE("SYNC"), + .C_RSTRAM_A(0), + .C_RSTRAM_B(0), + .C_SIM_COLLISION_CHECK("ALL"), + .C_USE_BYTE_WEA(0), + .C_USE_BYTE_WEB(0), + .C_USE_DEFAULT_DATA(0), + .C_USE_ECC(0), + .C_USE_SOFTECC(0), + .C_WEA_WIDTH(1), + .C_WEB_WIDTH(1), + .C_WRITE_DEPTH_A(2048), + .C_WRITE_DEPTH_B(512), + .C_WRITE_MODE_A("WRITE_FIRST"), + .C_WRITE_MODE_B("WRITE_FIRST"), + .C_WRITE_WIDTH_A(8), + .C_WRITE_WIDTH_B(32), + .C_XDEVICEFAMILY("spartan3") + ) + inst ( + .CLKA(clka), + .WEA(wea), + .ADDRA(addra), + .DINA(dina), + .CLKB(clkb), + .ADDRB(addrb), + .DOUTB(doutb), + .RSTA(), + .ENA(), + .REGCEA(), + .DOUTA(), + .RSTB(), + .ENB(), + .REGCEB(), + .WEB(), + .DINB(), + .INJECTSBITERR(), + .INJECTDBITERR(), + .SBITERR(), + .DBITERR(), + .RDADDRECC(), + .S_ACLK(), + .S_ARESETN(), + .S_AXI_AWID(), + .S_AXI_AWADDR(), + .S_AXI_AWLEN(), + .S_AXI_AWSIZE(), + .S_AXI_AWBURST(), + .S_AXI_AWVALID(), + .S_AXI_AWREADY(), + .S_AXI_WDATA(), + .S_AXI_WSTRB(), + .S_AXI_WLAST(), + .S_AXI_WVALID(), + .S_AXI_WREADY(), + .S_AXI_BID(), + .S_AXI_BRESP(), + .S_AXI_BVALID(), + .S_AXI_BREADY(), + .S_AXI_ARID(), + .S_AXI_ARADDR(), + .S_AXI_ARLEN(), + .S_AXI_ARSIZE(), + .S_AXI_ARBURST(), + .S_AXI_ARVALID(), + .S_AXI_ARREADY(), + .S_AXI_RID(), + .S_AXI_RDATA(), + .S_AXI_RRESP(), + .S_AXI_RLAST(), + .S_AXI_RVALID(), + .S_AXI_RREADY(), + .S_AXI_INJECTSBITERR(), + .S_AXI_INJECTDBITERR(), + .S_AXI_SBITERR(), + .S_AXI_DBITERR(), + .S_AXI_RDADDRECC() + ); + +// synthesis translate_on + +endmodule diff --git a/verilog/sd2snes_cx4/ipcore_dir/dac_buf.xco b/verilog/sd2snes_cx4/ipcore_dir/dac_buf.xco new file mode 100644 index 0000000..24fdf34 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/dac_buf.xco @@ -0,0 +1,105 @@ +############################################################## +# +# Xilinx Core Generator version 13.2 +# Date: Mon Oct 10 19:47:34 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:blk_mem_gen:6.1 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s400 +SET devicefamily = spartan3 +SET flowvendor = Foundation_ISE +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = pq208 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -4 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.1 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=true +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=dac_buf +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=false +CSET interface_type=Native +CSET load_init_file=false +CSET memory_type=Simple_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=8 +CSET read_width_b=32 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=2048 +CSET write_width_a=8 +CSET write_width_b=32 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-06-21T06:43:52.000Z +# END Extra information +GENERATE +# CRC: 60863d15 diff --git a/verilog/sd2snes_cx4/ipcore_dir/dac_buf.xise b/verilog/sd2snes_cx4/ipcore_dir/dac_buf.xise new file mode 100644 index 0000000..e094ff8 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/dac_buf.xise @@ -0,0 +1,79 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.v b/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.v new file mode 100644 index 0000000..4528b98 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.v @@ -0,0 +1,181 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used solely * +* for design, simulation, implementation and creation of design files * +* limited to Xilinx devices or technologies. Use with non-Xilinx * +* devices or technologies is expressly prohibited and immediately * +* terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY * +* FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY * +* PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE * +* IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS * +* MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY * +* CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY * +* RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY * +* DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * +* PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support appliances, * +* devices, or systems. Use in such applications are expressly * +* prohibited. * +* * +* (c) Copyright 1995-2011 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// You must compile the wrapper file msu_databuf.v when simulating +// the core, msu_databuf. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +`timescale 1ns/1ps + +module msu_databuf( + clka, + wea, + addra, + dina, + clkb, + addrb, + doutb +); + +input clka; +input [0 : 0] wea; +input [13 : 0] addra; +input [7 : 0] dina; +input clkb; +input [13 : 0] addrb; +output [7 : 0] doutb; + +// synthesis translate_off + + BLK_MEM_GEN_V6_1 #( + .C_ADDRA_WIDTH(14), + .C_ADDRB_WIDTH(14), + .C_ALGORITHM(1), + .C_AXI_ID_WIDTH(4), + .C_AXI_SLAVE_TYPE(0), + .C_AXI_TYPE(1), + .C_BYTE_SIZE(9), + .C_COMMON_CLK(1), + .C_DEFAULT_DATA("0"), + .C_DISABLE_WARN_BHV_COLL(0), + .C_DISABLE_WARN_BHV_RANGE(0), + .C_FAMILY("spartan3"), + .C_HAS_AXI_ID(0), + .C_HAS_ENA(0), + .C_HAS_ENB(0), + .C_HAS_INJECTERR(0), + .C_HAS_MEM_OUTPUT_REGS_A(0), + .C_HAS_MEM_OUTPUT_REGS_B(0), + .C_HAS_MUX_OUTPUT_REGS_A(0), + .C_HAS_MUX_OUTPUT_REGS_B(0), + .C_HAS_REGCEA(0), + .C_HAS_REGCEB(0), + .C_HAS_RSTA(0), + .C_HAS_RSTB(0), + .C_HAS_SOFTECC_INPUT_REGS_A(0), + .C_HAS_SOFTECC_OUTPUT_REGS_B(0), + .C_INIT_FILE_NAME("no_coe_file_loaded"), + .C_INITA_VAL("0"), + .C_INITB_VAL("0"), + .C_INTERFACE_TYPE(0), + .C_LOAD_INIT_FILE(0), + .C_MEM_TYPE(1), + .C_MUX_PIPELINE_STAGES(0), + .C_PRIM_TYPE(1), + .C_READ_DEPTH_A(16384), + .C_READ_DEPTH_B(16384), + .C_READ_WIDTH_A(8), + .C_READ_WIDTH_B(8), + .C_RST_PRIORITY_A("CE"), + .C_RST_PRIORITY_B("CE"), + .C_RST_TYPE("SYNC"), + .C_RSTRAM_A(0), + .C_RSTRAM_B(0), + .C_SIM_COLLISION_CHECK("ALL"), + .C_USE_BYTE_WEA(0), + .C_USE_BYTE_WEB(0), + .C_USE_DEFAULT_DATA(0), + .C_USE_ECC(0), + .C_USE_SOFTECC(0), + .C_WEA_WIDTH(1), + .C_WEB_WIDTH(1), + .C_WRITE_DEPTH_A(16384), + .C_WRITE_DEPTH_B(16384), + .C_WRITE_MODE_A("WRITE_FIRST"), + .C_WRITE_MODE_B("WRITE_FIRST"), + .C_WRITE_WIDTH_A(8), + .C_WRITE_WIDTH_B(8), + .C_XDEVICEFAMILY("spartan3") + ) + inst ( + .CLKA(clka), + .WEA(wea), + .ADDRA(addra), + .DINA(dina), + .CLKB(clkb), + .ADDRB(addrb), + .DOUTB(doutb), + .RSTA(), + .ENA(), + .REGCEA(), + .DOUTA(), + .RSTB(), + .ENB(), + .REGCEB(), + .WEB(), + .DINB(), + .INJECTSBITERR(), + .INJECTDBITERR(), + .SBITERR(), + .DBITERR(), + .RDADDRECC(), + .S_ACLK(), + .S_ARESETN(), + .S_AXI_AWID(), + .S_AXI_AWADDR(), + .S_AXI_AWLEN(), + .S_AXI_AWSIZE(), + .S_AXI_AWBURST(), + .S_AXI_AWVALID(), + .S_AXI_AWREADY(), + .S_AXI_WDATA(), + .S_AXI_WSTRB(), + .S_AXI_WLAST(), + .S_AXI_WVALID(), + .S_AXI_WREADY(), + .S_AXI_BID(), + .S_AXI_BRESP(), + .S_AXI_BVALID(), + .S_AXI_BREADY(), + .S_AXI_ARID(), + .S_AXI_ARADDR(), + .S_AXI_ARLEN(), + .S_AXI_ARSIZE(), + .S_AXI_ARBURST(), + .S_AXI_ARVALID(), + .S_AXI_ARREADY(), + .S_AXI_RID(), + .S_AXI_RDATA(), + .S_AXI_RRESP(), + .S_AXI_RLAST(), + .S_AXI_RVALID(), + .S_AXI_RREADY(), + .S_AXI_INJECTSBITERR(), + .S_AXI_INJECTDBITERR(), + .S_AXI_SBITERR(), + .S_AXI_DBITERR(), + .S_AXI_RDADDRECC() + ); + +// synthesis translate_on + +endmodule diff --git a/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xco b/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xco new file mode 100644 index 0000000..61a41b5 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xco @@ -0,0 +1,105 @@ +############################################################## +# +# Xilinx Core Generator version 13.2 +# Date: Mon Oct 10 19:48:38 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# Generated from component: xilinx.com:ip:blk_mem_gen:6.1 +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s400 +SET devicefamily = spartan3 +SET flowvendor = Foundation_ISE +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = pq208 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -4 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.1 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=true +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=msu_databuf +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=false +CSET interface_type=Native +CSET load_init_file=false +CSET memory_type=Simple_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=8 +CSET read_width_b=8 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=16384 +CSET write_width_a=8 +CSET write_width_b=8 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-06-21T06:43:52.000Z +# END Extra information +GENERATE +# CRC: bebc21bb diff --git a/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xise b/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xise new file mode 100644 index 0000000..4d2c480 --- /dev/null +++ b/verilog/sd2snes_cx4/ipcore_dir/msu_databuf.xise @@ -0,0 +1,79 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/main.v b/verilog/sd2snes_cx4/main.v new file mode 100644 index 0000000..b8fcf11 --- /dev/null +++ b/verilog/sd2snes_cx4/main.v @@ -0,0 +1,564 @@ +`timescale 1 ns / 1 ns +////////////////////////////////////////////////////////////////////////////////// +// Company: Rehkopf +// Engineer: Rehkopf +// +// Create Date: 01:13:46 05/09/2009 +// Design Name: +// Module Name: main +// Project Name: +// Target Devices: +// Tool versions: +// Description: Master Control FSM +// +// Dependencies: address +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module main( + /* input clock */ + input CLKIN, + + /* SNES signals */ + input [23:0] SNES_ADDR, + input SNES_READ, + input SNES_WRITE, + input SNES_CS, + inout [7:0] SNES_DATA, + input SNES_CPU_CLK, + input SNES_REFRESH, + output SNES_IRQ, + output SNES_DATABUS_OE, + output SNES_DATABUS_DIR, + input SNES_SYSCLK, + + /* SRAM signals */ + /* Bus 1: PSRAM, 128Mbit, 16bit, 70ns */ + inout [15:0] ROM_DATA, + output [22:0] ROM_ADDR, + output ROM_CE, + output ROM_OE, + output ROM_WE, + output ROM_BHE, + output ROM_BLE, + + /* Bus 2: SRAM, 4Mbit, 8bit, 45ns */ + inout [7:0] RAM_DATA, + output [18:0] RAM_ADDR, + output RAM_CE, + output RAM_OE, + output RAM_WE, + + /* MCU signals */ + input SPI_MOSI, + inout SPI_MISO, + input SPI_SS, + inout SPI_SCK, + input MCU_OVR, + output MCU_RDY, + + output DAC_MCLK, + output DAC_LRCK, + output DAC_SDOUT, + + /* SD signals */ + input [3:0] SD_DAT, + inout SD_CMD, + inout SD_CLK, + + /* debug */ + output p113_out +); + +wire [7:0] spi_cmd_data; +wire [7:0] spi_param_data; +wire [7:0] spi_input_data; +wire [31:0] spi_byte_cnt; +wire [2:0] spi_bit_cnt; +wire [23:0] MCU_ADDR; +wire [2:0] MAPPER; +wire [23:0] SAVERAM_MASK; +wire [23:0] ROM_MASK; +wire [7:0] SD_DMA_SRAM_DATA; +wire [1:0] SD_DMA_TGT; +wire [10:0] SD_DMA_PARTIAL_START; +wire [10:0] SD_DMA_PARTIAL_END; + +wire [10:0] dac_addr; +//wire [7:0] dac_volume; +wire [7:0] msu_volumerq_out; +wire [6:0] msu_status_out; +wire [31:0] msu_addressrq_out; +wire [15:0] msu_trackrq_out; +wire [13:0] msu_write_addr; +wire [13:0] msu_ptr_addr; +wire [7:0] MSU_SNES_DATA_IN; +wire [7:0] MSU_SNES_DATA_OUT; +wire [5:0] msu_status_reset_bits; +wire [5:0] msu_status_set_bits; + +wire [7:0] CX4_SNES_DATA_IN; +wire [7:0] CX4_SNES_DATA_OUT; + +wire [23:0] MAPPED_SNES_ADDR; +wire ROM_ADDR0; + +sd_dma snes_sd_dma( + .CLK(CLK2), + .SD_DAT(SD_DAT), + .SD_CLK(SD_CLK), + .SD_DMA_EN(SD_DMA_EN), + .SD_DMA_STATUS(SD_DMA_STATUS), + .SD_DMA_SRAM_WE(SD_DMA_SRAM_WE), + .SD_DMA_SRAM_DATA(SD_DMA_SRAM_DATA), + .SD_DMA_NEXTADDR(SD_DMA_NEXTADDR), + .SD_DMA_PARTIAL(SD_DMA_PARTIAL), + .SD_DMA_PARTIAL_START(SD_DMA_PARTIAL_START), + .SD_DMA_PARTIAL_END(SD_DMA_PARTIAL_END) +); + +wire SD_DMA_TO_ROM = (SD_DMA_STATUS && (SD_DMA_TGT == 2'b00)); + +dac snes_dac( + .clkin(CLK2), + .sysclk(SNES_SYSCLK), + .mclk(DAC_MCLK), + .lrck(DAC_LRCK), + .sdout(DAC_SDOUT), + .we(SD_DMA_TGT==2'b01 ? SD_DMA_SRAM_WE : 1'b1), + .pgm_address(dac_addr), + .pgm_data(SD_DMA_SRAM_DATA), + .DAC_STATUS(DAC_STATUS), + .volume(msu_volumerq_out), + .vol_latch(msu_volume_latch_out), + .play(dac_play), + .reset(dac_reset) +); + +msu snes_msu ( + .clkin(CLK2), + .enable(msu_enable), + .pgm_address(msu_write_addr), + .pgm_data(SD_DMA_SRAM_DATA), + .pgm_we(SD_DMA_TGT==2'b10 ? SD_DMA_SRAM_WE : 1'b1), + .reg_addr(SNES_ADDR[2:0]), + .reg_data_in(MSU_SNES_DATA_IN), + .reg_data_out(MSU_SNES_DATA_OUT), + .reg_oe(SNES_READ), + .reg_we(SNES_WRITE), + .status_out(msu_status_out), + .volume_out(msu_volumerq_out), + .volume_latch_out(msu_volume_latch_out), + .addr_out(msu_addressrq_out), + .track_out(msu_trackrq_out), + .status_reset_bits(msu_status_reset_bits), + .status_set_bits(msu_status_set_bits), + .status_reset_we(msu_status_reset_we), + .msu_address_ext(msu_ptr_addr), + .msu_address_ext_write(msu_addr_reset) +); + +spi snes_spi( + .clk(CLK2), + .MOSI(SPI_MOSI), + .MISO(SPI_MISO), + .SSEL(SPI_SS), + .SCK(SPI_SCK), + .cmd_ready(spi_cmd_ready), + .param_ready(spi_param_ready), + .cmd_data(spi_cmd_data), + .param_data(spi_param_data), + .endmessage(spi_endmessage), + .startmessage(spi_startmessage), + .input_data(spi_input_data), + .byte_cnt(spi_byte_cnt), + .bit_cnt(spi_bit_cnt) +); + +reg [7:0] MCU_DINr; +wire [7:0] MCU_DOUT; + +mcu_cmd snes_mcu_cmd( + .clk(CLK2), + .snes_sysclk(SNES_SYSCLK), + .cmd_ready(spi_cmd_ready), + .param_ready(spi_param_ready), + .cmd_data(spi_cmd_data), + .param_data(spi_param_data), + .mcu_mapper(MAPPER), + .mcu_write(MCU_WRITE), + .mcu_data_in(MCU_DINr), + .mcu_data_out(MCU_DOUT), + .spi_byte_cnt(spi_byte_cnt), + .spi_bit_cnt(spi_bit_cnt), + .spi_data_out(spi_input_data), + .addr_out(MCU_ADDR), + .saveram_mask_out(SAVERAM_MASK), + .rom_mask_out(ROM_MASK), + .SD_DMA_EN(SD_DMA_EN), + .SD_DMA_STATUS(SD_DMA_STATUS), + .SD_DMA_NEXTADDR(SD_DMA_NEXTADDR), + .SD_DMA_SRAM_DATA(SD_DMA_SRAM_DATA), + .SD_DMA_SRAM_WE(SD_DMA_SRAM_WE), + .SD_DMA_TGT(SD_DMA_TGT), + .SD_DMA_PARTIAL(SD_DMA_PARTIAL), + .SD_DMA_PARTIAL_START(SD_DMA_PARTIAL_START), + .SD_DMA_PARTIAL_END(SD_DMA_PARTIAL_END), + .dac_addr_out(dac_addr), + .DAC_STATUS(DAC_STATUS), +// .dac_volume_out(dac_volume), +// .dac_volume_latch_out(dac_vol_latch), + .dac_play_out(dac_play), + .dac_reset_out(dac_reset), + .msu_addr_out(msu_write_addr), + .MSU_STATUS(msu_status_out), + .msu_status_reset_out(msu_status_reset_bits), + .msu_status_set_out(msu_status_set_bits), + .msu_status_reset_we(msu_status_reset_we), + .msu_volumerq(msu_volumerq_out), + .msu_addressrq(msu_addressrq_out), + .msu_trackrq(msu_trackrq_out), + .msu_ptr_out(msu_ptr_addr), + .msu_reset_out(msu_addr_reset), + .mcu_rrq(MCU_RRQ), + .mcu_wrq(MCU_WRQ), + .mcu_rq_rdy(MCU_RDY), + .use_msu1(use_msu1) +); + +wire [7:0] DCM_STATUS; +// dcm1: dfs 4x +my_dcm snes_dcm( + .CLKIN(CLKIN), + .CLKFX(CLK2), + .LOCKED(DCM_LOCKED), + .RST(DCM_RST), + .STATUS(DCM_STATUS) +); + +assign DCM_RST=0; + +reg [5:0] SNES_READr; +reg [5:0] SNES_WRITEr; +reg [5:0] SNES_CPU_CLKr; + +wire SNES_RD_start = (SNES_READr == 6'b111110); +wire SNES_WR_start = (SNES_WRITEr == 6'b111110); +wire SNES_cycle_start = (SNES_CPU_CLKr[5:0] == 6'b000001); +wire SNES_cycle_end = (SNES_CPU_CLKr[5:0] == 6'b111110); + +always @(posedge CLK2) begin + SNES_READr <= {SNES_READr[4:0], SNES_READ}; + SNES_WRITEr <= {SNES_WRITEr[4:0], SNES_WRITE}; + SNES_CPU_CLKr <= {SNES_CPU_CLKr[4:0], SNES_CPU_CLK}; +end + +address snes_addr( + .CLK(CLK2), + .MAPPER(MAPPER), + .SNES_ADDR(SNES_ADDR), // requested address from SNES + .ROM_ADDR(MAPPED_SNES_ADDR), // Address to request from SRAM (active low) + .ROM_SEL(ROM_SEL), // which SRAM unit to access + .IS_SAVERAM(IS_SAVERAM), + .IS_ROM(IS_ROM), + .IS_WRITABLE(IS_WRITABLE), + .SAVERAM_MASK(SAVERAM_MASK), + .ROM_MASK(ROM_MASK), + .use_msu1(use_msu1), + //MSU-1 + .msu_enable(msu_enable), + //CX4 + .cx4_enable(cx4_enable) +); + +reg [7:0] CX4_DINr; +wire [23:0] CX4_ADDR; + +cx4 snes_cx4 ( + .DI(CX4_SNES_DATA_IN), + .DO(CX4_SNES_DATA_OUT), + .ADDR(SNES_ADDR[12:0]), + .CS(cx4_enable), + .nRD(SNES_READ), + .nWR(SNES_WRITE), + .CLK(CLK2), + .DATROM_DI(DATROM_DI), + .DATROM_WE(DATROM_WE), + .DATROM_ADDR(DATROM_ADDR), + .BUS_DI(CX4_DINr), + .BUS_ADDR(CX4_ADDR), + .BUS_RRQ(CX4_RRQ), + .BUS_RDY(CX4_RDY) + ); + +parameter MODE_SNES = 1'b0; +parameter MODE_MCU = 1'b1; + +parameter ST_IDLE = 21'b000000000000000000001; +parameter ST_SNES_RD_ADDR = 21'b000000000000000000010; +parameter ST_SNES_RD_WAIT = 21'b000000000000000000100; +parameter ST_SNES_RD_END = 21'b000000000000000001000; +parameter ST_SNES_WR_ADDR = 21'b000000000000000010000; +parameter ST_SNES_WR_WAIT1= 21'b000000000000000100000; +parameter ST_SNES_WR_DATA = 21'b000000000000001000000; +parameter ST_SNES_WR_WAIT2= 21'b000000000000010000000; +parameter ST_SNES_WR_END = 21'b000000000000100000000; +parameter ST_MCU_RD_ADDR = 21'b000000000001000000000; +parameter ST_MCU_RD_WAIT = 21'b000000000010000000000; +parameter ST_MCU_RD_WAIT2 = 21'b000000000100000000000; +parameter ST_MCU_RD_END = 21'b000000001000000000000; +parameter ST_MCU_WR_ADDR = 21'b000000010000000000000; +parameter ST_MCU_WR_WAIT = 21'b000000100000000000000; +parameter ST_MCU_WR_WAIT2 = 21'b000001000000000000000; +parameter ST_MCU_WR_END = 21'b000010000000000000000; +parameter ST_CX4_RD_ADDR = 21'b000100000000000000000; +parameter ST_CX4_RD_WAIT = 21'b001000000000000000000; +parameter ST_CX4_RD_WAIT2 = 21'b010000000000000000000; +parameter ST_CX4_RD_END = 21'b100000000000000000000; + +parameter ROM_RD_WAIT = 4'h4; +parameter ROM_RD_WAIT_MCU = 4'h6; +parameter ROM_WR_WAIT1 = 4'h2; +parameter ROM_WR_WAIT2 = 4'h3; +parameter ROM_WR_WAIT_MCU = 4'h6; +parameter ROM_RD_WAIT_CX4 = 4'h6; + +reg [20:0] STATE; +initial STATE = ST_IDLE; + +assign MSU_SNES_DATA_IN = SNES_DATA; +assign CX4_SNES_DATA_IN = SNES_DATA; + +reg [7:0] SNES_DINr; +reg [7:0] ROM_DOUTr; + +assign SNES_DATA = (!SNES_READ) ? (msu_enable ? MSU_SNES_DATA_OUT + :cx4_enable ? CX4_SNES_DATA_OUT + :SNES_DINr /*(ROM_ADDR0 ? ROM_DATA[7:0] : ROM_DATA[15:8])*/) : 8'bZ; + +reg [3:0] ST_MEM_DELAYr; +reg MCU_RD_PENDr; +reg MCU_WR_PENDr; +reg CX4_RD_PENDr; +reg [23:0] ROM_ADDRr; +reg NEED_SNES_ADDRr; +always @(posedge CLK2) begin + if(SNES_cycle_end) NEED_SNES_ADDRr <= 1'b1; + else if(STATE & (ST_SNES_RD_END | ST_SNES_WR_END)) NEED_SNES_ADDRr <= 1'b0; +end + +wire IS_CART = IS_ROM | IS_SAVERAM | IS_WRITABLE; +wire ASSERT_SNES_ADDR = SNES_CPU_CLK & NEED_SNES_ADDRr & IS_CART; + +assign ROM_ADDR = (SD_DMA_TO_ROM) ? MCU_ADDR[23:1] : (ASSERT_SNES_ADDR) ? MAPPED_SNES_ADDR[23:1] : ROM_ADDRr[23:1]; +assign ROM_ADDR0 = (SD_DMA_TO_ROM) ? MCU_ADDR[0] : (ASSERT_SNES_ADDR) ? MAPPED_SNES_ADDR[0] : ROM_ADDRr[0]; + +reg ROM_WEr; +initial ROM_WEr = 1'b1; + +reg RQ_MCU_RDYr; +initial RQ_MCU_RDYr = 1'b1; +assign MCU_RDY = RQ_MCU_RDYr; + +always @(posedge CLK2) begin + if(MCU_RRQ) begin + MCU_RD_PENDr <= 1'b1; + RQ_MCU_RDYr <= 1'b0; + end else if(MCU_WRQ) begin + MCU_WR_PENDr <= 1'b1; + RQ_MCU_RDYr <= 1'b0; + end else if(STATE & (ST_MCU_RD_END | ST_MCU_WR_END)) begin + MCU_RD_PENDr <= 1'b0; + MCU_WR_PENDr <= 1'b0; + RQ_MCU_RDYr <= 1'b1; + end +end + +reg RQ_CX4_RDYr; +initial RQ_CX4_RDYr = 1'b1; +assign CX4_RDY = RQ_CX4_RDYr; + +always @(posedge CLK2) begin + if(CX4_RRQ) begin + CX4_RD_PENDr <= 1'b1; + RQ_CX4_RDYr <= 1'b0; + end else if(STATE == ST_CX4_RD_WAIT && ST_MEM_DELAYr == 4'h0) begin + CX4_RD_PENDr <= 1'b0; + RQ_CX4_RDYr <= 1'b1; + end +end + +reg snes_wr_cycle; + +always @(posedge CLK2) begin + if(SNES_cycle_start & IS_CART) begin + STATE <= ST_SNES_RD_ADDR; + end else if(SNES_WR_start & IS_CART) begin + STATE <= ST_SNES_WR_ADDR; + end else begin + case(STATE) + ST_IDLE: begin + ROM_ADDRr <= MAPPED_SNES_ADDR; + if(CX4_RRQ | CX4_RD_PENDr) begin + ROM_ADDRr <= CX4_ADDR; + STATE <= ST_CX4_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; + end + else if(MCU_RD_PENDr) STATE <= ST_MCU_RD_ADDR; + else if(MCU_WR_PENDr) STATE <= ST_MCU_WR_ADDR; + else STATE <= ST_IDLE; + end + ST_SNES_RD_ADDR: begin + STATE <= ST_SNES_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT; + end + ST_SNES_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_RD_END; + else STATE <= ST_SNES_RD_WAIT; + if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; + else SNES_DINr <= ROM_DATA[15:8]; + end + ST_SNES_RD_END: begin + STATE <= ST_IDLE; + if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; + else SNES_DINr <= ROM_DATA[15:8]; + end + ST_SNES_WR_ADDR: begin + ROM_WEr <= (!IS_WRITABLE); + snes_wr_cycle <= 1'b1; + STATE <= ST_SNES_WR_WAIT1; + ST_MEM_DELAYr <= ROM_WR_WAIT1; + end + ST_SNES_WR_WAIT1: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_DATA; + else STATE <= ST_SNES_WR_WAIT1; + end + ST_SNES_WR_DATA: begin + ROM_DOUTr <= SNES_DATA; + ST_MEM_DELAYr <= ROM_WR_WAIT2; + STATE <= ST_SNES_WR_WAIT2; + end + ST_SNES_WR_WAIT2: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_END; + else STATE <= ST_SNES_WR_WAIT2; + end + ST_SNES_WR_END: begin + STATE <= ST_IDLE; + ROM_WEr <= 1'b1; + snes_wr_cycle <= 1'b0; + end + ST_MCU_RD_ADDR: begin + ROM_ADDRr <= MCU_ADDR; + STATE <= ST_MCU_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_MCU; + end + ST_MCU_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_RD_WAIT2; + ST_MEM_DELAYr <= 4'h2; + end + else STATE <= ST_MCU_RD_WAIT; + if(ROM_ADDR0) MCU_DINr <= ROM_DATA[7:0]; + else MCU_DINr <= ROM_DATA[15:8]; + end + ST_MCU_RD_WAIT2: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_RD_END; + end else STATE <= ST_MCU_RD_WAIT2; + end + ST_MCU_RD_END: begin + STATE <= ST_IDLE; + end + ST_MCU_WR_ADDR: begin + ROM_ADDRr <= MCU_ADDR; + STATE <= ST_MCU_WR_WAIT; + ST_MEM_DELAYr <= ROM_WR_WAIT_MCU; + ROM_DOUTr <= MCU_DOUT; + ROM_WEr <= 1'b0; + end + ST_MCU_WR_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + ROM_WEr <= 1'b1; + STATE <= ST_MCU_WR_WAIT2; + ST_MEM_DELAYr <= 4'h2; + end + else STATE <= ST_MCU_WR_WAIT; + end + ST_MCU_WR_WAIT2: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_WR_END; + end else STATE <= ST_MCU_WR_WAIT2; + end + ST_MCU_WR_END: begin + STATE <= ST_IDLE; + end + + ST_CX4_RD_ADDR: begin + ROM_ADDRr <= CX4_ADDR; + STATE <= ST_CX4_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; + end + ST_CX4_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_IDLE; + end + else STATE <= ST_CX4_RD_WAIT; + if(ROM_ADDR0) CX4_DINr <= ROM_DATA[7:0]; + else CX4_DINr <= ROM_DATA[15:8]; + end + ST_CX4_RD_END: begin + STATE <= ST_IDLE; + end + endcase + end +end + +assign ROM_DATA[7:0] = ROM_ADDR0 + ?(SD_DMA_TO_ROM ? (!MCU_WRITE ? MCU_DOUT : 8'bZ) + : (!ROM_WE ? ROM_DOUTr : 8'bZ) + ) + :8'bZ; + +assign ROM_DATA[15:8] = ROM_ADDR0 ? 8'bZ + :(SD_DMA_TO_ROM ? (!MCU_WRITE ? MCU_DOUT : 8'bZ) + : (!ROM_WE ? ROM_DOUTr : 8'bZ) + ); + +assign ROM_WE = SD_DMA_TO_ROM + ?MCU_WRITE + :ROM_WEr | (ASSERT_SNES_ADDR & ~snes_wr_cycle); + +// OE always active. Overridden by WE when needed. +assign ROM_OE = 1'b0; + +assign ROM_CE = 1'b0; + +assign ROM_BHE = !ROM_WE ? ROM_ADDR0 : 1'b0; +assign ROM_BLE = !ROM_WE ? !ROM_ADDR0 : 1'b0; + +assign SNES_DATABUS_OE = msu_enable ? 1'b0 : + cx4_enable ? 1'b0 : + ((IS_ROM & SNES_CS) + |(!IS_ROM & !IS_SAVERAM & !IS_WRITABLE) + |(SNES_READ & SNES_WRITE) + ); + +assign SNES_DATABUS_DIR = !SNES_READ ? 1'b1 : 1'b0; + +assign IRQ_DIR = 1'b0; +assign SNES_IRQ = 1'bZ; + +assign p113_out = 1'b0; + +endmodule diff --git a/verilog/sd2snes_cx4/msu.v b/verilog/sd2snes_cx4/msu.v new file mode 100644 index 0000000..32b106a --- /dev/null +++ b/verilog/sd2snes_cx4/msu.v @@ -0,0 +1,194 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 14:55:04 12/14/2010 +// Design Name: +// Module Name: msu +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module msu( + input clkin, + input enable, + input [13:0] pgm_address, + input [7:0] pgm_data, + input pgm_we, + input [2:0] reg_addr, + input [7:0] reg_data_in, + output [7:0] reg_data_out, + input reg_oe, + input reg_we, + output [6:0] status_out, + output [7:0] volume_out, + output volume_latch_out, + output [31:0] addr_out, + output [15:0] track_out, + input [5:0] status_reset_bits, + input [5:0] status_set_bits, + input status_reset_we, + input [13:0] msu_address_ext, + input msu_address_ext_write +); + +reg [2:0] reg_addr_r [3:0]; +always @(posedge clkin) begin + reg_addr_r[3] <= reg_addr_r[2]; + reg_addr_r[2] <= reg_addr_r[1]; + reg_addr_r[1] <= reg_addr_r[0]; + reg_addr_r[0] <= reg_addr; +end + + +reg [1:0] status_reset_we_r; +always @(posedge clkin) status_reset_we_r = {status_reset_we_r[0], status_reset_we}; +wire status_reset_en = (status_reset_we_r == 2'b01); + +reg [13:0] msu_address_r; +wire [13:0] msu_address = msu_address_r; + +wire [7:0] msu_data; + +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}; +wire msu_address_ext_write_rising = (msu_address_ext_write_sreg[1:0] == 2'b01); + +reg [4:0] reg_enable_sreg; +initial reg_enable_sreg = 5'b11111; +always @(posedge clkin) reg_enable_sreg <= {reg_enable_sreg[3:0], enable}; + +reg [5:0] reg_oe_sreg; +always @(posedge clkin) reg_oe_sreg <= {reg_oe_sreg[4:0], reg_oe}; +wire reg_oe_rising = reg_enable_sreg[4] && (reg_oe_sreg[5:0] == 6'b000001); + +reg [5:0] reg_we_sreg; +always @(posedge clkin) reg_we_sreg <= {reg_we_sreg[4:0], reg_we}; +wire reg_we_rising = reg_enable_sreg[4] && (reg_we_sreg[5:0] == 6'b000001); + +reg [31:0] addr_out_r; +assign addr_out = addr_out_r; + +reg [15:0] track_out_r; +assign track_out = track_out_r; + +reg [7:0] volume_r; +assign volume_out = volume_r; + +reg volume_start_r; +assign volume_latch_out = volume_start_r; + +reg audio_start_r; +reg audio_busy_r; +reg data_start_r; +reg data_busy_r; +reg ctrl_start_r; +reg [1:0] audio_ctrl_r; +reg [1:0] audio_status_r; + +initial begin + audio_busy_r <= 1'b1; + data_busy_r <= 1'b1; +end + +assign status_out = {msu_address_r[13], // 6 + 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; + +msu_databuf snes_msu_databuf ( + .clka(clkin), + .wea(~pgm_we), // Bus [0 : 0] + .addra(pgm_address), // Bus [13 : 0] + .dina(pgm_data), // Bus [7 : 0] + .clkb(clkin), + .addrb(msu_address), // Bus [13 : 0] + .doutb(msu_data) +); // Bus [7 : 0] + +reg [7:0] data_out_r; +assign reg_data_out = data_out_r; + +always @(posedge clkin) begin + case(reg_addr_r[3]) + 3'h0: data_out_r <= {data_busy_r, audio_busy_r, audio_status_r, 4'b0001}; + 3'h1: data_out_r <= msu_data; + 3'h2: data_out_r <= 8'h53; + 3'h3: data_out_r <= 8'h2d; + 3'h4: data_out_r <= 8'h4d; + 3'h5: data_out_r <= 8'h53; + 3'h6: data_out_r <= 8'h55; + 3'h7: data_out_r <= 8'h31; + endcase +end + +always @(posedge clkin) begin + if(reg_we_rising) begin + case(reg_addr_r[3]) + 3'h0: addr_out_r[7:0] <= reg_data_in; + 3'h1: addr_out_r[15:8] <= reg_data_in; + 3'h2: addr_out_r[23:16] <= reg_data_in; + 3'h3: begin + addr_out_r[31:24] <= reg_data_in; + data_start_r <= 1'b1; + data_busy_r <= 1'b1; + end + 3'h4: begin + track_out_r[7:0] <= reg_data_in; + end + 3'h5: begin + track_out_r[15:8] <= reg_data_in; + audio_start_r <= 1'b1; + audio_busy_r <= 1'b1; + end + 3'h6: begin + volume_r <= reg_data_in; + volume_start_r <= 1'b1; + end + 3'h7: begin + if(!audio_busy_r) begin + audio_ctrl_r <= reg_data_in[1:0]; + ctrl_start_r <= 1'b1; + end + end + endcase + end else if (status_reset_en) begin + audio_busy_r <= (audio_busy_r | status_set_bits[5]) & ~status_reset_bits[5]; + if(status_reset_bits[5]) audio_start_r <= 1'b0; + + data_busy_r <= (data_busy_r | status_set_bits[4]) & ~status_reset_bits[4]; + if(status_reset_bits[4]) data_start_r <= 1'b0; + +// volume_start_r <= (volume_start_r | status_set_bits[3]) & ~status_reset_bits[3]; + + audio_status_r <= (audio_status_r | status_set_bits[2:1]) & ~status_reset_bits[2:1]; + + ctrl_start_r <= (ctrl_start_r | status_set_bits[0]) & ~status_reset_bits[0]; + end else begin + volume_start_r <= 1'b0; + end +end + +always @(posedge clkin) begin + if(msu_address_ext_write_rising) + msu_address_r <= msu_address_ext; + else if(reg_addr_r[3] == 3'h1 && reg_oe_rising) begin + msu_address_r <= msu_address_r + 1; + end +end + +endmodule diff --git a/verilog/sd2snes_cx4/sd2snes_cx4.xise b/verilog/sd2snes_cx4/sd2snes_cx4.xise new file mode 100644 index 0000000..0c67fd3 --- /dev/null +++ b/verilog/sd2snes_cx4/sd2snes_cx4.xise @@ -0,0 +1,456 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/verilog/sd2snes_cx4/sd_dma.v b/verilog/sd2snes_cx4/sd_dma.v new file mode 100644 index 0000000..0d7d2c8 --- /dev/null +++ b/verilog/sd2snes_cx4/sd_dma.v @@ -0,0 +1,132 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 19:19:08 12/01/2010 +// Design Name: +// Module Name: sd_dma +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module sd_dma( + input [3:0] SD_DAT, + inout SD_CLK, + input CLK, + input SD_DMA_EN, + output SD_DMA_STATUS, + output SD_DMA_SRAM_WE, + output SD_DMA_NEXTADDR, + output [7:0] SD_DMA_SRAM_DATA, + input SD_DMA_PARTIAL, + input [10:0] SD_DMA_PARTIAL_START, + input [10:0] SD_DMA_PARTIAL_END +); + +reg [10:0] SD_DMA_STARTr; +reg [10:0] SD_DMA_ENDr; +reg SD_DMA_PARTIALr; +always @(posedge CLK) SD_DMA_PARTIALr <= SD_DMA_PARTIAL; + +reg SD_DMA_DONEr; +reg[1:0] SD_DMA_DONEr2; +initial begin + SD_DMA_DONEr2 = 2'b00; + SD_DMA_DONEr = 1'b0; +end +always @(posedge CLK) SD_DMA_DONEr2 <= {SD_DMA_DONEr2[0], SD_DMA_DONEr}; +wire SD_DMA_DONE_rising = (SD_DMA_DONEr2[1:0] == 2'b01); + +reg [1:0] SD_DMA_ENr; +initial SD_DMA_ENr = 2'b00; +always @(posedge CLK) SD_DMA_ENr <= {SD_DMA_ENr[0], SD_DMA_EN}; +wire SD_DMA_EN_rising = (SD_DMA_ENr [1:0] == 2'b01); + +reg SD_DMA_STATUSr; +assign SD_DMA_STATUS = SD_DMA_STATUSr; + +// we need 1042 cycles (startbit + 1024 nibbles + 16 crc + stopbit) +reg [10:0] cyclecnt; +initial cyclecnt = 11'd0; + +reg SD_DMA_SRAM_WEr; +initial SD_DMA_SRAM_WEr = 1'b1; +assign SD_DMA_SRAM_WE = (cyclecnt < 1025 && SD_DMA_STATUSr) ? SD_DMA_SRAM_WEr : 1'b1; + +reg SD_DMA_NEXTADDRr; +assign SD_DMA_NEXTADDR = (cyclecnt < 1025 && SD_DMA_STATUSr) ? SD_DMA_NEXTADDRr : 1'b0; + +reg[7:0] SD_DMA_SRAM_DATAr; +assign SD_DMA_SRAM_DATA = SD_DMA_SRAM_DATAr; + +// we have 4 internal cycles per SD clock, 8 per RAM byte write +reg [2:0] clkcnt; +initial clkcnt = 3'b000; +reg SD_CLKr; +always @(posedge CLK) SD_CLKr <= clkcnt[1]; +assign SD_CLK = SD_DMA_STATUSr ? SD_CLKr : 1'bZ; + +always @(posedge CLK) begin + if(SD_DMA_EN_rising) begin + SD_DMA_STATUSr <= 1'b1; + SD_DMA_STARTr <= (SD_DMA_PARTIALr ? SD_DMA_PARTIAL_START : 11'h0); + SD_DMA_ENDr <= (SD_DMA_PARTIALr ? SD_DMA_PARTIAL_END : 11'd1024); + end + else if (SD_DMA_DONE_rising) SD_DMA_STATUSr <= 1'b0; +end + +always @(posedge CLK) begin + if(cyclecnt == 1042) SD_DMA_DONEr <= 1; + else SD_DMA_DONEr <= 0; +end + +always @(posedge CLK) begin + if(SD_DMA_EN_rising || !SD_DMA_STATUSr) begin + clkcnt <= 0; + end else begin + if(SD_DMA_STATUSr) begin + clkcnt <= clkcnt + 1; + end + end +end + +always @(posedge CLK) begin + if(SD_DMA_EN_rising || !SD_DMA_STATUSr) cyclecnt <= 0; + else if(clkcnt[1:0] == 2'b11) cyclecnt <= cyclecnt + 1; +end + +// we have 8 clk cycles to complete one RAM write +// (4 clk cycles per SD_CLK; 2 SD_CLK cycles per byte) +always @(posedge CLK) begin + if(SD_DMA_STATUSr) begin + case(clkcnt[2:0]) + 3'h0: begin + SD_DMA_SRAM_WEr <= 1'b1; + SD_DMA_SRAM_DATAr[7:4] <= SD_DAT; + if(cyclecnt>SD_DMA_STARTr && cyclecnt <= SD_DMA_ENDr) SD_DMA_NEXTADDRr <= 1'b1; + end + 3'h1: + SD_DMA_NEXTADDRr <= 1'b0; +// 3'h2: + 3'h3: + if(cyclecnt>=SD_DMA_STARTr && cyclecnt < SD_DMA_ENDr) SD_DMA_SRAM_WEr <= 1'b0; + 3'h4: + SD_DMA_SRAM_DATAr[3:0] <= SD_DAT; +// 3'h5: +// 3'h6: +// 3'h7: + endcase + end +end + +endmodule + diff --git a/verilog/sd2snes_cx4/spi.v b/verilog/sd2snes_cx4/spi.v new file mode 100644 index 0000000..cb6bf79 --- /dev/null +++ b/verilog/sd2snes_cx4/spi.v @@ -0,0 +1,113 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 21:16:09 07/10/2009 +// Design Name: +// Module Name: spi +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// + +////////////////////////////////////////////////////////////////////////////////// +module spi( + input clk, + input SCK, + input MOSI, + inout MISO, + input SSEL, + output cmd_ready, + output param_ready, + output [7:0] cmd_data, + output [7:0] param_data, + output endmessage, + output startmessage, + input [7:0] input_data, + output [31:0] byte_cnt, + output [2:0] bit_cnt +); + +reg [7:0] cmd_data_r; +reg [7:0] param_data_r; + +reg [1:0] SSELr; always @(posedge clk) SSELr <= {SSELr[0], SSEL}; +wire SSEL_active = ~SSELr[1]; // SSEL is active low +wire SSEL_startmessage = (SSELr[1:0]==2'b10); // message starts at falling edge +wire SSEL_endmessage = (SSELr[1:0]==2'b01); // message stops at rising edge +assign endmessage = SSEL_endmessage; +assign startmessage = SSEL_startmessage; + +// bit count for one SPI byte + byte count for the message +reg [2:0] bitcnt; +reg [31:0] byte_cnt_r; + +reg byte_received; // high when a byte has been received +reg [7:0] byte_data_received; + +assign bit_cnt = bitcnt; + +always @(posedge SCK) begin + if(SSEL) bitcnt <= 3'b000; + else begin + bitcnt <= bitcnt + 3'b001; + byte_data_received <= {byte_data_received[6:0], MOSI}; + end + if(~SSEL && bitcnt==3'b111) byte_received <= 1'b1; + else byte_received <= 1'b0; +end + +reg [1:0] byte_received_r; +always @(posedge clk) byte_received_r <= {byte_received_r[0], byte_received}; +wire byte_received_sync = (byte_received_r == 2'b01); + +always @(posedge clk) begin + if(~SSEL_active) + byte_cnt_r <= 16'h0000; + else if(byte_received_sync) begin + byte_cnt_r <= byte_cnt_r + 16'h0001; + end +end + +reg [7:0] byte_data_sent; + +assign MISO = ~SSEL ? input_data[7-bitcnt] : 1'bZ; // send MSB first + +reg cmd_ready_r; +reg param_ready_r; +reg cmd_ready_r2; +reg param_ready_r2; +assign cmd_ready = cmd_ready_r; +assign param_ready = param_ready_r; +assign cmd_data = cmd_data_r; +assign param_data = param_data_r; +assign byte_cnt = byte_cnt_r; + +always @(posedge clk) cmd_ready_r2 = byte_received_sync && byte_cnt_r == 32'h0; +always @(posedge clk) param_ready_r2 = byte_received_sync && byte_cnt_r > 32'h0; + +// fill registers +always @(posedge clk) begin + if (SSEL_startmessage) + cmd_data_r <= 8'h00; + else if(cmd_ready_r2) + cmd_data_r <= byte_data_received; + else if(param_ready_r2) + param_data_r <= byte_data_received; +end + +// delay ready signals by one clock +always @(posedge clk) begin + cmd_ready_r <= cmd_ready_r2; + param_ready_r <= param_ready_r2; +end + +endmodule From fb9a28bf38cb63d12eef8a916dd160736bf64c5f Mon Sep 17 00:00:00 2001 From: ikari Date: Sun, 23 Oct 2011 20:56:07 +0200 Subject: [PATCH 03/11] FPGA/cx4: rework CPU FSM (ALU still missing) --- verilog/sd2snes_cx4/cx4.v | 751 +++++++++++++++++++++----------------- 1 file changed, 421 insertions(+), 330 deletions(-) diff --git a/verilog/sd2snes_cx4/cx4.v b/verilog/sd2snes_cx4/cx4.v index 97286be..6d62b47 100644 --- a/verilog/sd2snes_cx4/cx4.v +++ b/verilog/sd2snes_cx4/cx4.v @@ -19,22 +19,22 @@ // ////////////////////////////////////////////////////////////////////////////////// module cx4( - input [7:0] DI, - output [7:0] DO, - input [12:0] ADDR, - input CS, - input nRD, - input nWR, - input CLK, - input [23:0] DATROM_DI, - input DATROM_WE, - input [9:0] DATROM_ADDR, - input [7:0] BUS_DI, - output [23:0] BUS_ADDR, - output BUS_RRQ, - input BUS_RDY, - output cx4_active - ); + input [7:0] DI, + output [7:0] DO, + input [12:0] ADDR, + input CS, + input nRD, + input nWR, + input CLK, + input [23:0] DATROM_DI, + input DATROM_WE, + input [9:0] DATROM_ADDR, + input [7:0] BUS_DI, + output [23:0] BUS_ADDR, + output BUS_RRQ, + input BUS_RDY, + output cx4_active +); reg [2:0] cx4_busy; parameter BUSY_CACHE = 2'b00; @@ -57,10 +57,10 @@ wire [7:0] GPR_DO; assign DO = datram_enable ? DATRAM_DO : mmio_enable ? MMIO_DO - : status_enable ? STATUS_DO - : vector_enable ? VECTOR_DO - : gpr_enable ? GPR_DO - : 8'h00; + : status_enable ? STATUS_DO + : vector_enable ? VECTOR_DO + : gpr_enable ? GPR_DO + : 8'h00; /* 0x1f40 - 0x1f52: MMIO SNES: 8 bits / CX4: various */ @@ -138,8 +138,8 @@ reg [23:0] cpu_idb; // tmp register for reg file read /* Need to cache when: 1f48 is written - AND (selected cache page is invalid - OR selected cache page does not contain requested page already) + AND (selected cache page is invalid + OR selected cache page does not contain requested page already) */ reg CACHE_TRIG_ENr; reg CACHE_TRIG_EN2r; @@ -162,6 +162,9 @@ initial begin end assign BUS_RRQ = CACHE_BUS_RRQr | DMA_BUS_RRQr; +reg cpu_go_en_r; +initial cpu_go_en_r = 1'b0; + initial begin cx4_mmio_r1f50 = 8'h33; cx4_mmio_r1f51 = 1'b0; @@ -170,74 +173,78 @@ end always @(posedge CLK) begin case (ADDR[4:0]) - 5'h00: MMIO_DOr <= cx4_mmio_dmasrc[7:0]; // 1f40 - 5'h01: MMIO_DOr <= cx4_mmio_dmasrc[15:8]; // 1f41 - 5'h02: MMIO_DOr <= cx4_mmio_dmasrc[23:16]; // 1f42 - 5'h03: MMIO_DOr <= cx4_mmio_dmalen[7:0]; // 1f43 - 5'h04: MMIO_DOr <= cx4_mmio_dmalen[15:8]; // 1f44 - 5'h05: MMIO_DOr <= cx4_mmio_dmatgt[7:0]; // 1f45 - 5'h06: MMIO_DOr <= cx4_mmio_dmatgt[15:8]; // 1f46 - 5'h07: MMIO_DOr <= cx4_mmio_dmatgt[23:16]; // 1f47 - 5'h08: MMIO_DOr <= {7'b0, cx4_mmio_cachepage}; - 5'h09: MMIO_DOr <= cx4_mmio_pgmoff[7:0]; // 1f49 - 5'h0a: MMIO_DOr <= cx4_mmio_pgmoff[15:8]; // 1f4a - 5'h0b: MMIO_DOr <= cx4_mmio_pgmoff[23:16]; // 1f4b - 5'h0c: MMIO_DOr <= {6'b0, cx4_mmio_r1f4c}; // 1f4c - 5'h0d: MMIO_DOr <= cx4_mmio_pgmpage[7:0]; // 1f4d - 5'h0e: MMIO_DOr <= {1'b0, cx4_mmio_pgmpage[14:8]}; // 1f4e - 5'h0f: MMIO_DOr <= cx4_mmio_pc; // 1f4f - 5'h10: MMIO_DOr <= cx4_mmio_r1f50; // 1f50 + 5'h00: MMIO_DOr <= cx4_mmio_dmasrc[7:0]; // 1f40 + 5'h01: MMIO_DOr <= cx4_mmio_dmasrc[15:8]; // 1f41 + 5'h02: MMIO_DOr <= cx4_mmio_dmasrc[23:16]; // 1f42 + 5'h03: MMIO_DOr <= cx4_mmio_dmalen[7:0]; // 1f43 + 5'h04: MMIO_DOr <= cx4_mmio_dmalen[15:8]; // 1f44 + 5'h05: MMIO_DOr <= cx4_mmio_dmatgt[7:0]; // 1f45 + 5'h06: MMIO_DOr <= cx4_mmio_dmatgt[15:8]; // 1f46 + 5'h07: MMIO_DOr <= cx4_mmio_dmatgt[23:16]; // 1f47 + 5'h08: MMIO_DOr <= {7'b0, cx4_mmio_cachepage}; + 5'h09: MMIO_DOr <= cx4_mmio_pgmoff[7:0]; // 1f49 + 5'h0a: MMIO_DOr <= cx4_mmio_pgmoff[15:8]; // 1f4a + 5'h0b: MMIO_DOr <= cx4_mmio_pgmoff[23:16]; // 1f4b + 5'h0c: MMIO_DOr <= {6'b0, cx4_mmio_r1f4c}; // 1f4c + 5'h0d: MMIO_DOr <= cx4_mmio_pgmpage[7:0]; // 1f4d + 5'h0e: MMIO_DOr <= {1'b0, cx4_mmio_pgmpage[14:8]}; // 1f4e + 5'h0f: MMIO_DOr <= cx4_mmio_pc; // 1f4f + 5'h10: MMIO_DOr <= cx4_mmio_r1f50; // 1f50 5'h11: MMIO_DOr <= {7'b0, cx4_mmio_r1f51}; // 1f51 - 5'h12: MMIO_DOr <= {7'b0, cx4_mmio_r1f52}; // 1f52 - - 5'h13: MMIO_DOr <= cpu_mul_result[47:40]; // 1f40 - 5'h14: MMIO_DOr <= cpu_mul_result[39:32]; // 1f40 - 5'h15: MMIO_DOr <= cpu_mul_result[31:24]; // 1f40 - 5'h16: MMIO_DOr <= cpu_mul_result[23:16]; // 1f40 - 5'h17: MMIO_DOr <= cpu_mul_result[15:8]; // 1f40 - 5'h18: MMIO_DOr <= cpu_mul_result[7:0]; // 1f40 + 5'h12: MMIO_DOr <= {7'b0, cx4_mmio_r1f52}; // 1f52 - -// 5'h14: MMIO_DOr <= cachetag[0][15:8]; // 1f40 -// 5'h15: MMIO_DOr <= cachetag[0][7:0]; // 1f41 -// 5'h16: MMIO_DOr <= cachetag[1][15:8]; // 1f42 -// 5'h17: MMIO_DOr <= cachetag[1][7:0]; // 1f43 - default: MMIO_DOr <= 8'hff; + 5'h13: MMIO_DOr <= cpu_mul_result[47:40]; // 1f40 + 5'h14: MMIO_DOr <= cpu_mul_result[39:32]; // 1f40 + 5'h15: MMIO_DOr <= cpu_mul_result[31:24]; // 1f40 + 5'h16: MMIO_DOr <= cpu_mul_result[23:16]; // 1f40 + 5'h17: MMIO_DOr <= cpu_mul_result[15:8]; // 1f40 + 5'h18: MMIO_DOr <= cpu_mul_result[7:0]; // 1f40 + + +// 5'h14: MMIO_DOr <= cachetag[0][15:8]; // 1f40 +// 5'h15: MMIO_DOr <= cachetag[0][7:0]; // 1f41 +// 5'h16: MMIO_DOr <= cachetag[1][15:8]; // 1f42 +// 5'h17: MMIO_DOr <= cachetag[1][7:0]; // 1f43 + default: MMIO_DOr <= 8'hff; endcase end always @(posedge CLK) begin if(MMIO_WR_EN) begin case(ADDR[4:0]) - 5'h00: cx4_mmio_dmasrc[7:0] <= DI; // 1f40 - 5'h01: cx4_mmio_dmasrc[15:8] <= DI; // 1f41 - 5'h02: cx4_mmio_dmasrc[23:16] <= DI; // 1f42 - 5'h03: cx4_mmio_dmalen[7:0] <= DI; // 1f43 - 5'h04: cx4_mmio_dmalen[15:8] <= DI; // 1f44 - 5'h05: cx4_mmio_dmatgt[7:0] <= DI; // 1f45 - 5'h06: cx4_mmio_dmatgt[15:8] <= DI; // 1f46 - 5'h07: begin - cx4_mmio_dmatgt[23:16] <= DI; // 1f47 - DMA_TRIG_ENr <= 1'b1; - end - 5'h08: begin - cx4_mmio_cachepage <= DI[0]; // 1f48 - CACHE_TRIG_ENr <= 1'b1; - end - 5'h09: cx4_mmio_pgmoff[7:0] <= DI; // 1f49 - 5'h0a: cx4_mmio_pgmoff[15:8] <= DI; // 1f4a - 5'h0b: cx4_mmio_pgmoff[23:16] <= DI; // 1f4b - 5'h0c: cx4_mmio_r1f4c <= DI[1:0]; // 1f4c - 5'h0d: cx4_mmio_pgmpage[7:0] <= DI; // 1f4d - 5'h0e: cx4_mmio_pgmpage[14:8] <= DI[6:0]; // 1f4e - 5'h0f: cx4_mmio_pc <= DI; // 1f4f - 5'h10: cx4_mmio_r1f50 <= DI & 8'h77; // 1f50 - 5'h11: cx4_mmio_r1f51 <= DI[0]; // 1f51 - 5'h12: cx4_mmio_r1f52 <= DI[0]; // 1f52 - endcase + 5'h00: cx4_mmio_dmasrc[7:0] <= DI; // 1f40 + 5'h01: cx4_mmio_dmasrc[15:8] <= DI; // 1f41 + 5'h02: cx4_mmio_dmasrc[23:16] <= DI; // 1f42 + 5'h03: cx4_mmio_dmalen[7:0] <= DI; // 1f43 + 5'h04: cx4_mmio_dmalen[15:8] <= DI; // 1f44 + 5'h05: cx4_mmio_dmatgt[7:0] <= DI; // 1f45 + 5'h06: cx4_mmio_dmatgt[15:8] <= DI; // 1f46 + 5'h07: begin + cx4_mmio_dmatgt[23:16] <= DI; // 1f47 + DMA_TRIG_ENr <= 1'b1; + end + 5'h08: begin + cx4_mmio_cachepage <= DI[0]; // 1f48 + CACHE_TRIG_ENr <= 1'b1; + end + 5'h09: cx4_mmio_pgmoff[7:0] <= DI; // 1f49 + 5'h0a: cx4_mmio_pgmoff[15:8] <= DI; // 1f4a + 5'h0b: cx4_mmio_pgmoff[23:16] <= DI; // 1f4b + 5'h0c: cx4_mmio_r1f4c <= DI[1:0]; // 1f4c + 5'h0d: cx4_mmio_pgmpage[7:0] <= DI; // 1f4d + 5'h0e: cx4_mmio_pgmpage[14:8] <= DI[6:0]; // 1f4e + 5'h0f: begin + cx4_mmio_pc <= DI; // 1f4f + cpu_go_en_r <= 1'b1; + end + 5'h10: cx4_mmio_r1f50 <= DI & 8'h77; // 1f50 + 5'h11: cx4_mmio_r1f51 <= DI[0]; // 1f51 + 5'h12: cx4_mmio_r1f52 <= DI[0]; // 1f52 + endcase end else begin CACHE_TRIG_ENr <= 1'b0; - DMA_TRIG_ENr <= 1'b0; + DMA_TRIG_ENr <= 1'b0; + cpu_go_en_r <= 1'b0; end end @@ -245,10 +252,6 @@ always @(posedge CLK) begin if(VECTOR_WR_EN) vector[ADDR[4:0]] <= DI; end -always @(posedge CLK) begin - if(GPR_WR_EN) gpr[ADDR[5:0]] <= DI; -end - reg [4:0] CACHE_ST; parameter ST_CACHE_IDLE = 5'b00001; parameter ST_CACHE_START = 5'b00010; @@ -272,7 +275,7 @@ wire [22:0] MAPPED_DMA_SRC_ADDR = {DMA_SRC_ADDRr[23:16],DMA_SRC_ADDRr[14:0]}; assign BUS_ADDR = cx4_busy[BUSY_CACHE] ? MAPPED_CACHE_SRC_ADDR : cx4_busy[BUSY_DMA] ? MAPPED_DMA_SRC_ADDR - : 24'h000000 /* XXX cx4_bus_addr */; + : 24'h800000 /* XXX cx4_bus_addr */; reg cx4_pgmrom_we; initial cx4_pgmrom_we = 1'b0; @@ -282,97 +285,101 @@ initial cache_count = 20'b0; always @(posedge CLK) begin case(CACHE_ST) - ST_CACHE_IDLE: begin - if(CACHE_TRIG_EN - & (~cachetag[cx4_mmio_cachepage][15] - | |(cachetag[cx4_mmio_cachepage][14:0] ^ cx4_mmio_pgmpage))) + ST_CACHE_IDLE: begin + if(CACHE_TRIG_EN + & (~cachetag[cx4_mmio_cachepage][15] + | |(cachetag[cx4_mmio_cachepage][14:0] ^ cx4_mmio_pgmpage))) begin - CACHE_ST <= ST_CACHE_START; - end else CACHE_ST <= ST_CACHE_IDLE; - end - ST_CACHE_START: begin - cx4_busy[BUSY_CACHE] <= 1'b1; - CACHE_SRC_ADDRr <= cx4_mmio_pgmoff + {cx4_mmio_pgmpage, 9'b0}; - cx4_pgmrom_addr <= {cx4_mmio_cachepage, 9'b0}; - CACHE_ST <= ST_CACHE_WAIT; - cache_count <= 10'b0; + CACHE_ST <= ST_CACHE_START; + end else CACHE_ST <= ST_CACHE_IDLE; + end + ST_CACHE_START: begin + cx4_busy[BUSY_CACHE] <= 1'b1; + CACHE_SRC_ADDRr <= cx4_mmio_pgmoff + {cx4_mmio_pgmpage, 9'b0}; + cx4_pgmrom_addr <= {cx4_mmio_cachepage, 9'b0}; + CACHE_ST <= ST_CACHE_WAIT; + cache_count <= 10'b0; CACHE_BUS_RRQr <= 1'b1; - end - ST_CACHE_WAIT: begin - CACHE_BUS_RRQr <= 1'b0; - if(~CACHE_BUS_RRQr & BUS_RDY) begin - CACHE_ST <= ST_CACHE_ADDR; - cx4_pgmrom_we <= 1'b1; - cache_count <= cache_count + 1; - end else CACHE_ST <= ST_CACHE_WAIT; - end - ST_CACHE_ADDR: begin - cx4_pgmrom_we <= 1'b0; - CACHE_SRC_ADDRr <= CACHE_SRC_ADDRr + 1; - cx4_pgmrom_addr <= cx4_pgmrom_addr + 1; - if(cache_count == 9'h1ff) begin - cx4_busy[BUSY_CACHE] <= 1'b0; - cachetag[cx4_mmio_cachepage] <= {1'b1,cx4_mmio_pgmpage}; - CACHE_ST <= ST_CACHE_IDLE; - end else begin - CACHE_BUS_RRQr <= 1'b1; - CACHE_ST <= ST_CACHE_WAIT; - end - end + end + ST_CACHE_WAIT: begin + CACHE_BUS_RRQr <= 1'b0; + if(~CACHE_BUS_RRQr & BUS_RDY) begin + CACHE_ST <= ST_CACHE_ADDR; + cx4_pgmrom_we <= 1'b1; + cache_count <= cache_count + 1; + end else CACHE_ST <= ST_CACHE_WAIT; + end + ST_CACHE_ADDR: begin + cx4_pgmrom_we <= 1'b0; + CACHE_SRC_ADDRr <= CACHE_SRC_ADDRr + 1; + cx4_pgmrom_addr <= cx4_pgmrom_addr + 1; + if(cache_count == 9'h1ff) begin + cx4_busy[BUSY_CACHE] <= 1'b0; + cachetag[cx4_mmio_cachepage] <= {1'b1,cx4_mmio_pgmpage}; + CACHE_ST <= ST_CACHE_IDLE; + end else begin + CACHE_BUS_RRQr <= 1'b1; + CACHE_ST <= ST_CACHE_WAIT; + end + end endcase end -reg cx4_datram_we; -initial cx4_datram_we = 1'b0; -reg [11:0] cx4_datram_addr; +reg cx4_dma_datram_we; +reg cx4_cpu_datram_we; +initial cx4_dma_datram_we = 1'b0; +initial cx4_cpu_datram_we = 1'b0; +wire cx4_datram_we = cx4_dma_datram_we | cx4_cpu_datram_we; +reg [11:0] cx4_dma_datram_addr; +reg [11:0] cx4_cpu_datram_addr; +wire [11:0] cx4_datram_addr = cx4_busy[BUSY_DMA] ? cx4_dma_datram_addr : cx4_cpu_datram_addr; +reg [23:0] cx4_cpu_datram_di; +wire [23:0] cx4_datram_di = cx4_busy[BUSY_DMA] ? BUS_DI : cx4_cpu_datram_di; reg [15:0] dma_count; initial dma_count = 16'b0; always @(posedge CLK) begin case(DMA_ST) - ST_DMA_IDLE: begin - if(DMA_TRIG_EN) begin - DMA_ST <= ST_DMA_START; - end else DMA_ST <= ST_DMA_IDLE; - end - ST_DMA_START: begin - cx4_busy[BUSY_DMA] <= 1'b1; - DMA_SRC_ADDRr <= cx4_mmio_dmasrc; - /* XXX Rename to DMA_TGT_ADDRr and switch */ - cx4_datram_addr <= (cx4_mmio_dmatgt & 24'h000fff); - DMA_ST <= ST_DMA_WAIT; - dma_count <= cx4_mmio_dmalen; + ST_DMA_IDLE: begin + if(DMA_TRIG_EN) begin + DMA_ST <= ST_DMA_START; + end else DMA_ST <= ST_DMA_IDLE; + end + ST_DMA_START: begin + cx4_busy[BUSY_DMA] <= 1'b1; + DMA_SRC_ADDRr <= cx4_mmio_dmasrc; + cx4_dma_datram_addr <= (cx4_mmio_dmatgt & 24'h000fff); + DMA_ST <= ST_DMA_WAIT; + dma_count <= cx4_mmio_dmalen; DMA_BUS_RRQr <= 1'b1; - end - ST_DMA_WAIT: begin - DMA_BUS_RRQr <= 1'b0; - if(~DMA_BUS_RRQr & BUS_RDY) begin - DMA_ST <= ST_DMA_ADDR; - /* XXX Rename to DMA_TGT_WEr and switch */ - cx4_datram_we <= 1'b1; - dma_count <= dma_count - 1; - end else DMA_ST <= ST_DMA_WAIT; - end - ST_DMA_ADDR: begin - /* XXX Rename to DMA_TGT_WEr and switch */ - cx4_datram_we <= 1'b0; - DMA_SRC_ADDRr <= DMA_SRC_ADDRr + 1; - cx4_datram_addr <= cx4_datram_addr + 1; - if(dma_count == 16'h0000) begin - cx4_busy[BUSY_DMA] <= 1'b0; - DMA_ST <= ST_DMA_IDLE; - end else begin - DMA_BUS_RRQr <= 1'b1; - DMA_ST <= ST_DMA_WAIT; - end - end + end + ST_DMA_WAIT: begin + DMA_BUS_RRQr <= 1'b0; + if(~DMA_BUS_RRQr & BUS_RDY) begin + DMA_ST <= ST_DMA_ADDR; + cx4_dma_datram_we <= 1'b1; + dma_count <= dma_count - 1; + end else DMA_ST <= ST_DMA_WAIT; + end + ST_DMA_ADDR: begin + cx4_dma_datram_we <= 1'b0; + DMA_SRC_ADDRr <= DMA_SRC_ADDRr + 1; + cx4_dma_datram_addr <= cx4_dma_datram_addr + 1; + if(dma_count == 16'h0000) begin + cx4_busy[BUSY_DMA] <= 1'b0; + DMA_ST <= ST_DMA_IDLE; + end else begin + DMA_BUS_RRQr <= 1'b1; + DMA_ST <= ST_DMA_WAIT; + end + end endcase end /*************************** =========== CPU =========== ***************************/ -reg [7:0] CPU_STATE; +reg [4:0] CPU_STATE; reg cpu_page; reg [7:0] cpu_pc; reg [8:0] cpu_stack [7:0]; @@ -396,200 +403,284 @@ reg fl_z; reg fl_c; reg [15:0] cpu_p; -reg [9:0] cx4_datrom_addr; +wire [9:0] cx4_datrom_addr = cpu_a[9:0]; wire [23:0] cx4_datrom_do; wire [7:0] cx4_datram_do; -parameter ST_CPU_IDLE = 8'b00000001; -parameter ST_CPU_0 = 8'b00000010; -parameter ST_CPU_1 = 8'b00000100; -parameter ST_CPU_2 = 8'b00001000; -parameter ST_CPU_3 = 8'b00010000; +parameter ST_CPU_IDLE = 5'b00001; +parameter ST_CPU_0 = 5'b00010; +parameter ST_CPU_1 = 5'b00100; +parameter ST_CPU_2 = 5'b01000; +parameter ST_CPU_3 = 5'b10000; initial CPU_STATE <= ST_CPU_IDLE; -parameter OP_ALU = 4'b0000; -parameter OP_LD = 4'b0001; -parameter OP_ST = 4'b0010; -parameter OP_JP = 4'b0011; -parameter OP_SWP = 4'b0100; -parameter OP_HLT = 4'b0101; -parameter OP_BUS = 4'b0110; -parameter OP_STA = 4'b0111; -parameter OP_NOP = 4'b1111; - +parameter OP_NOP = 4'b0000; +parameter OP_JP = 4'b0001; +parameter OP_SKIP = 4'b0010; +parameter OP_RT = 4'b0011; +parameter OP_LD = 4'b0100; +parameter OP_ST = 4'b0101; +parameter OP_SWP = 4'b0110; +parameter OP_RDROM = 4'b0111; +parameter OP_RDRAM = 4'b1000; +parameter OP_WRRAM = 4'b1001; +parameter OP_ALU = 4'b1010; +parameter OP_MUL = 4'b1011; +parameter OP_WAI = 4'b1100; +parameter OP_BUS = 4'b1101; +parameter OP_HLT = 4'b1110; wire [6:0] op_id = cpu_op_w[15:10]; reg [7:0] op_param; -reg [2:0] op; +reg [3:0] op; reg [1:0] op_sa; reg op_imm; reg op_p; reg op_call; reg op_jump; -reg cond_true; -reg cpu_go_rq; +reg condtrue; reg cpu_bus_rq; always @(posedge CLK) begin case(CPU_STATE) ST_CPU_IDLE: begin - if(cpu_go_rq) begin - cpu_pc <= cx4_mmio_pc; - op <= OP_NOP; - CPU_STATE <= ST_CPU_2; - end - else CPU_STATE <= ST_CPU_IDLE; - end - ST_CPU_0: begin // Phase 0: - CPU_STATE <= ST_CPU_1; + if(cpu_go_en_r) begin + cpu_pc <= cx4_mmio_pc; + op <= OP_NOP; + CPU_STATE <= ST_CPU_2; + cx4_busy[BUSY_CPU] <= 1'b1; + end + else CPU_STATE <= ST_CPU_IDLE; + end + ST_CPU_0: begin // Phase 0: + if(op == OP_HLT) begin + cx4_busy[BUSY_CPU] <= 1'b0; + CPU_STATE <= ST_CPU_IDLE; + end + else CPU_STATE <= ST_CPU_1; case(op) - OP_ALU, OP_LD, OP_SWP: begin - if(cpu_op[15:10] == 6'b111000) cpu_idb <= cpu_a; // reg[imm] <- a - else if(op_imm) cpu_idb <= {16'b0, op_param}; - else casex(op_param) - 8'h00: cpu_idb <= cpu_a; - 8'h01: cpu_idb <= cpu_acch; - 8'h02: cpu_idb <= cpu_accl; - 8'h03: cpu_idb <= cpu_busdata; - 8'h08: cpu_idb <= cpu_romdata; - 8'h0c: cpu_idb <= cpu_ramdata; - 8'h13: cpu_idb <= cpu_busaddr; - 8'h1c: cpu_idb <= cpu_ramaddr; - 8'h5x: cpu_idb <= const[op_param[3:0]]; - 8'h6x: cpu_idb <= {gpr[op_param[3:0]*3+2], - gpr[op_param[3:0]*3+1], - gpr[op_param[3:0]*3]}; - default: cpu_idb <= 24'b0; - endcase - if(op==OP_ALU) begin - case(op_sa) - 2'b00: cpu_sa <= cpu_a; - 2'b01: cpu_sa <= cpu_a << 1; - 2'b10: cpu_sa <= cpu_a << 8; - 2'b11: cpu_sa <= cpu_a << 16; - endcase - end - end - OP_JP: begin - casex(cpu_op[12:8]) - 5'b010xx: cond_true <= 1'b1; - 5'b011xx: cond_true <= fl_z; - 5'b100xx: cond_true <= fl_c; - 5'b101xx: cond_true <= fl_n; - 5'b00101: cond_true <= (fl_c == cpu_op[0]); - 5'b00110: cond_true <= (fl_z == cpu_op[0]); - 5'b00111: cond_true <= (fl_n == cpu_op[0]); - default: cond_true <= 1'b1; - endcase - end - OP_BUS: cpu_bus_rq <= 1'b1; - endcase - end - ST_CPU_1: begin - CPU_STATE <= ST_CPU_2; - case(op) - OP_LD: begin - cx4_datram_addr <= op_imm ? op_param : (cpu_ramaddr + cpu_idb); - cx4_datrom_addr <= cpu_a[9:0]; - end - OP_ST: begin - cx4_datram_addr <= op_imm ? op_param : (cpu_ramaddr + cpu_idb); - cx4_datram_we <= 1'b1; - end - OP_JP: begin - if(cond_true) begin - casex(cpu_op[12:11]) - 2'b01, 2'b10: begin - // TODO if(op_p) - if(op_call) begin - cpu_stack[cpu_sp] <= {cpu_page, cpu_pc+1}; - cpu_sp <= cpu_sp - 1; - end - cpu_pc <= op_param; - end - 2'b00: begin - cpu_pc <= cpu_pc + 2; - end - 2'b11: begin - if(cpu_op[13]) begin - {cpu_page, cpu_pc} <= cpu_stack[cpu_sp+1]; - cpu_sp <= cpu_sp + 1; - end else begin - if(BUS_RDY) cpu_pc <= cpu_pc + 1; - end - end - default: cpu_pc <= cpu_pc + 1; - endcase - end - end - OP_BUS: cpu_bus_rq <= 1'b0; - endcase - end - ST_CPU_2: begin + OP_JP: begin + case(cpu_op[11:10]) + 2'b10: condtrue <= 1'b1; + 2'b11: condtrue <= fl_z; + 2'b00: condtrue <= fl_c; + 2'b01: condtrue <= fl_n; + endcase + end + OP_SKIP: begin + case(cpu_op[9:8]) + 2'b01: condtrue <= (fl_c == cpu_op[0]); + 2'b10: condtrue <= (fl_z == cpu_op[0]); + 2'b11: condtrue <= (fl_n == cpu_op[0]); + endcase + end + OP_LD, OP_SWP, OP_ALU, OP_MUL: begin + if(op_imm) cpu_idb <= {16'b0, op_param}; + else casex(op_param) + 8'h00: cpu_idb <= cpu_a; + 8'h01: cpu_idb <= cpu_acch; + 8'h02: cpu_idb <= cpu_accl; + 8'h03: cpu_idb <= cpu_busdata; + 8'h08: cpu_idb <= cpu_romdata; + 8'h0c: cpu_idb <= cpu_ramdata; + 8'h13: cpu_idb <= cpu_busaddr; + 8'h1c: cpu_idb <= cpu_ramaddr; + 8'h5x: cpu_idb <= const[op_param[3:0]]; + 8'h6x: cpu_idb <= {gpr[op_param[3:0]*3+2], + gpr[op_param[3:0]*3+1], + gpr[op_param[3:0]*3]}; + default: cpu_idb <= 24'b0; + endcase + if(op==OP_ALU) begin + case(op_sa) + 2'b00: cpu_sa <= cpu_a; + 2'b01: cpu_sa <= cpu_a << 1; + 2'b10: cpu_sa <= cpu_a << 8; + 2'b11: cpu_sa <= cpu_a << 16; + endcase + end + end + OP_ST: begin + cpu_idb <= cpu_a; + end + OP_RDRAM, OP_WRRAM: begin + if(op_imm) cpu_ramaddr <= {16'b0, op_param}; + else casex(op_param) + 8'h00: cx4_cpu_datram_addr <= cpu_a; + 8'h01: cx4_cpu_datram_addr <= cpu_acch; + 8'h02: cx4_cpu_datram_addr <= cpu_accl; + 8'h03: cx4_cpu_datram_addr <= cpu_busdata; + 8'h08: cx4_cpu_datram_addr <= cpu_romdata; + 8'h0c: cx4_cpu_datram_addr <= cpu_ramdata; + 8'h13: cx4_cpu_datram_addr <= cpu_busaddr; + 8'h1c: cx4_cpu_datram_addr <= cpu_ramaddr; + 8'h5x: cx4_cpu_datram_addr <= const[op_param[3:0]]; + 8'h6x: cx4_cpu_datram_addr <= {gpr[op_param[3:0]*3+2], + gpr[op_param[3:0]*3+1], + gpr[op_param[3:0]*3]}; + default: cx4_cpu_datram_addr <= 24'b0; + endcase + end + endcase + end + ST_CPU_1: begin + CPU_STATE <= ST_CPU_2; + case(op) + OP_JP: begin + if(condtrue) begin + if(op_call) begin + cpu_stack[cpu_sp] <= cpu_pc + 1; + cpu_sp <= cpu_sp + 1; + end + cpu_pc <= op_param; + end + end + OP_SKIP: begin + if(condtrue) begin + cpu_pc <= cpu_pc + 2; + end + end + OP_RT: begin + cpu_pc <= cpu_stack[cpu_sp - 1]; + cpu_sp <= cpu_sp - 1; + end + OP_LD, OP_ST, OP_SWP, OP_RDROM, OP_RDRAM, OP_WRRAM, OP_ALU, OP_MUL, OP_BUS: + cpu_pc <= cpu_pc + 1; + OP_WAI: if(BUS_RDY) cpu_pc <= cpu_pc + 1; + default: cpu_pc <= cpu_pc + 1; + endcase + end + ST_CPU_2: begin CPU_STATE <= ST_CPU_3; - case(op) - OP_ST: begin - cx4_datram_we <= 1'b0; - end - endcase - end - ST_CPU_3: begin + case(op) + OP_LD: begin + casex(cpu_op[11:8]) + 4'b0x00: cpu_a <= cpu_idb; + 4'b0x11: cpu_p <= cpu_idb; + 4'b1100: cpu_p[7:0] <= op_param; + 4'b1101: cpu_p[15:8] <= op_param; + endcase + end + OP_ST: begin + casex(op_param) + 8'h00: cpu_a <= cpu_idb; + 8'h01: cpu_acch <= cpu_idb; + 8'h02: cpu_accl <= cpu_idb; + 8'h03: cpu_busdata <= cpu_idb; + 8'h08: cpu_romdata <= cpu_idb; + 8'h0c: cpu_ramdata <= cpu_idb; + 8'h13: cpu_busaddr <= cpu_idb; + 8'h1c: cpu_ramaddr <= cpu_idb; + endcase + end + OP_SWP: begin + casex(op_param) + 8'h00: cpu_a <= cpu_a; + 8'h01: cpu_acch <= cpu_a; + 8'h02: cpu_accl <= cpu_a; + 8'h03: cpu_busdata <= cpu_a; + 8'h08: cpu_romdata <= cpu_a; + 8'h0c: cpu_ramdata <= cpu_a; + 8'h13: cpu_busaddr <= cpu_a; + 8'h1c: cpu_ramaddr <= cpu_a; + endcase + end + OP_RDROM: cpu_romdata <= cx4_datrom_do; + OP_RDRAM: cpu_ramdata <= cx4_datram_do; + OP_WRRAM: begin + case(cpu_op[9:8]) + 2'b00: cx4_cpu_datram_di[7:0] <= cpu_ramdata[7:0]; + 2'b01: cx4_cpu_datram_di[15:8] <= cpu_ramdata[15:8]; + 2'b10: cx4_cpu_datram_di[23:16] <= cpu_ramdata[23:16]; + endcase + cx4_cpu_datram_we <= 1'b1; + end + OP_ALU: begin + /* XXX TODO FUCK YEAH ALU */ + end + OP_BUS: cpu_bus_rq <= 1'b1; + endcase + end + ST_CPU_3: begin CPU_STATE <= ST_CPU_0; - case(op) - OP_LD, OP_SWP: begin - casex(cpu_op[15:8]) - 8'b01100x00: cpu_a <= cpu_idb; - 8'b01100x11: cpu_p <= cpu_idb; - 8'b01111100: cpu_p[7:0] <= op_param; - 8'b01111101: cpu_p[15:8] <= op_param; - 8'b01110000: cpu_romdata <= cx4_datrom_do; - 8'b01101x00: cpu_ramdata[7:0] <= cx4_datram_do; - 8'b01101x01: cpu_ramdata[15:8] <= cx4_datram_do; - 8'b01101x10: cpu_ramdata[23:16] <= cx4_datram_do; - 8'b11110000, 8'b11100000: begin - if(cpu_op[12]) cpu_a <= cpu_idb; - casex(op_param) - 8'h00: cpu_a <= cpu_a; - 8'h01: cpu_acch <= cpu_a; - 8'h02: cpu_accl <= cpu_a; - 8'h03: cpu_busdata <= cpu_a; - 8'h08: cpu_romdata <= cpu_a; - 8'h0c: cpu_ramdata <= cpu_a; - 8'h13: cpu_busaddr <= cpu_a; - 8'h1c: cpu_ramaddr <= cpu_a; - 8'h6x: {gpr[op_param[3:0]*3+2], - gpr[op_param[3:0]*3+1], - gpr[op_param[3:0]*3]} <= cpu_a; - endcase - end - endcase - end - endcase - cpu_op <= cpu_op_w; - op_param <= cpu_op_w[7:0]; - op <= &(op_id) ? OP_HLT - :(op_id[5:4] == 2'b00) ? OP_JP - :(op_id[5:2] == 4'b0110 - || op_id[5:2] == 4'b0111 - ) ? OP_LD - :(op_id[5:1] == 5'b11101) ? OP_ST - :(op_id[5:1] == 5'b01000) ? OP_BUS - :(op_id[5:3] == 3'b010 - || op_id[5:3] == 3'b100 - || op_id[5:3] == 3'b101 - || op_id[5:3] == 3'b110) ? OP_ALU - : (op_id == 6'b111100 || op_id == 6'b111000) ? OP_SWP - : OP_NOP; - op_imm <= cpu_op_w[10]; - op_sa <= cpu_op_w[9:8]; - op_p <= cpu_op_w[9]; - op_call <= cpu_op_w[13]; - cond_true <= 1'b0; - end + case(op) + OP_SWP: cpu_a <= cpu_idb; + OP_WRRAM: cx4_cpu_datram_we <= 1'b0; + OP_ALU: begin + /* XXX TODO FUCKING FLAGS */ + end + OP_MUL: begin + cpu_acch <= cpu_mul_result[47:24]; + cpu_accl <= cpu_mul_result[23:0]; + fl_z <= (cpu_mul_result == 48'b0); + fl_n <= cpu_mul_result[47]; + end + OP_BUS: cpu_bus_rq <= 1'b0; + endcase + cpu_op <= cpu_op_w; + casex(cpu_op_w[15:11]) + 5'b00000: op <= OP_NOP; + + 5'b00x01: op <= OP_JP; + 5'b00x10: op <= OP_JP; + 5'b00100: op <= OP_SKIP; + 5'b00111: op <= OP_RT; + + 5'b01100: op <= OP_LD; + 5'b01111: op <= OP_LD; + 5'b11100: op <= OP_ST; + 5'b11110: op <= OP_SWP; + + 5'b01110: op <= OP_RDROM; + 5'b01101: op <= OP_RDRAM; + 5'b11101: op <= OP_WRRAM; + + 5'b01001: op <= OP_ALU; + 5'b01010: op <= OP_ALU; + 5'b01011: op <= OP_ALU; + 5'b10000: op <= OP_ALU; + 5'b10001: op <= OP_ALU; + 5'b10010: op <= OP_ALU; + 5'b10101: op <= OP_ALU; + 5'b10110: op <= OP_ALU; + 5'b10111: op <= OP_ALU; + 5'b11000: op <= OP_ALU; + 5'b11001: op <= OP_ALU; + 5'b11010: op <= OP_ALU; + 5'b11011: op <= OP_ALU; + 5'b10011: op <= OP_MUL; + + 5'b00011: op <= OP_WAI; + 5'b01000: op <= OP_BUS; + + 5'b11111: op <= OP_HLT; + endcase + op_imm <= cpu_op_w[10]; + op_p <= cpu_op_w[9]; + op_call <= cpu_op_w[13]; + end endcase end +// gpr write, either by CPU or by MMIO +always @(posedge CLK) begin + if(CPU_STATE == ST_CPU_2 + && (op == OP_SWP) + && (op_param[7:4] == 8'h6)) begin + gpr[op_param[3:0]*3+2] <= cpu_a[23:16]; + gpr[op_param[3:0]*3+1] <= cpu_a[15:8]; + gpr[op_param[3:0]*3] <= cpu_a[7:0]; + end + else if(CPU_STATE == ST_CPU_2 + && (op == OP_ST) + && (op_param[7:4] == 8'h6)) begin + gpr[op_param[3:0]*3+2] <= cpu_idb[23:16]; + gpr[op_param[3:0]*3+1] <= cpu_idb[15:8]; + gpr[op_param[3:0]*3] <= cpu_idb[7:0]; + end + else if(GPR_WR_EN) gpr[ADDR[5:0]] <= DI; +end /*************************** =========== MEM =========== @@ -613,7 +704,7 @@ cx4_datram cx4_datram ( .clkb(CLK), // input clkb .web(cx4_datram_we), // input [0 : 0] web .addrb(cx4_datram_addr), // input [11 : 0] addrb - .dinb(BUS_DI), // input [7 : 0] dinb + .dinb(cx4_datram_di), // input [7 : 0] dinb .doutb(cx4_datram_do) // output [7 : 0] doutb ); @@ -630,7 +721,7 @@ cx4_pgmrom cx4_pgmrom ( cx4_mul cx4_mul ( .clk(CLK), // input clk .a(cpu_a), // input [23 : 0] a - .b(cpu_mul_src), // input [23 : 0] b + .b(cpu_idb), // input [23 : 0] b .p(cpu_mul_result) // output [47 : 0] p ); endmodule From fc53d173bf259117d490b1088165de0151591f81 Mon Sep 17 00:00:00 2001 From: ikari Date: Thu, 27 Oct 2011 15:37:44 +0200 Subject: [PATCH 04/11] basic build instructions --- src/README | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/README diff --git a/src/README b/src/README new file mode 100644 index 0000000..8829d25 --- /dev/null +++ b/src/README @@ -0,0 +1,85 @@ +How to build: + +a) Build requirements + * make + * Cortex M3 toolchain + * snescom/sneslink + * Xilinx FPGA synthesis tool (e.g. ISE WebPack) + * PIC assembler + +b) Cortex M3 toolchain + * obtain the cm3-toolchain builder: + git clone http://snowcat.de/toolchain-cm3.git/ + * build the cm3-toolchain. Some tools, libraries, and headers are required, + including but probably not limited to: + - libz-dev + - libcloog-ppl-dev + - texinfo + - libmpfr-dev + - libgmp3-dev + - gawk + - bison + - recode + - flex + - libncurses5-dev + - libexpat-dev + - make + - gcc + Newer gccs complain when compiling binutils, so you may have to add + '--disable-werror' to the compiler options for binutils in the Makefile. + The Makefile will install immediately so make sure you can write to the + installation directory. + +c) snescom/sneslink + * http://bisqwit.iki.fi/source/snescom.html + +d) ISE WebPack + * http://www.xilinx.com/products/design-tools/ise-design-suite/ise-webpack.htm + +e) PIC assembler + * e.g. GPUTILS, http://gputils.sourceforge.net/ + +f) general order of operations + 1) program the PIC (cic/supercic/supercic-key.asm) + 2) build and program the bootloader. + 3) build the firmware and copy it to the memory card + 4) build the snes menu and copy it to the memory card + 5) build and compress the FPGA configuration and copy it to the memory card + 6) insert memory card, power on; the bootloader should begin flashing the + firmware and boot it + +1) Programming the PIC +Use a PIC assembler + programmer of your choice and program a PIC12F629 with +cic/supercic/supercic-key.asm. Make sure that the clock source is set to +EC_OSC and MCLRE is disabled. +After programming you can solder the PIC to the board and short JP401. +Open JP401 in case you need to reprogram the PIC on board. + +2) Building & programming the bootloader +The Makefile is prepared for JTAG programming using OpenOCD 0.4 and an FT2232 +based USB-JTAG adapter. +Connect a JTAG cable to J401 (14-pin header). The pinout is printed on the +board. cd to src/bootldr and make && make program. + +3) Building the firmware +cd to src/utils and make. +cd to src/ and make. +You should obtain a firmware file called obj/firmware.img. Copy this file to +/sd2snes/firmware.img. + +4) Building the SNES menu +snescom is required. +cd to snes/ and make. +Copy the resulting file menu.bin to /sd2snes/menu.bin. + +5) Building the FPGA configuration +Compile the RLE compressor in utils/rle.c: + $ gcc -Wall -o rle rle.c + +Load verilog/sd2snes/sd2snes.xise in Xilinx ISE (or create your own project). +Target is a XC3S400-4PQ208. +Generate the programming file and compress it using utils/rle.c: + $ rle main.bit fpga_base.bit + +Copy fpga_base.bit to /sd2snes/fpga_base.bit + From 8c76dfbeb67cf17be69bd92f2e867a0f5080cb2a Mon Sep 17 00:00:00 2001 From: ikari Date: Thu, 27 Oct 2011 15:42:13 +0200 Subject: [PATCH 05/11] FPGA/Cx4: WIP --- src/fpga_spi.h | 1 + src/memory.c | 37 +- src/smc.c | 22 +- src/smc.h | 4 +- verilog/sd2snes/sd2snes.xise | 38 +- verilog/sd2snes_cx4/cx4.v | 368 ++- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v | 2844 ++++++++++------- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco | 6 +- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise | 314 +- verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v | 4 +- verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco | 8 +- .../sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise | 4 +- verilog/sd2snes_cx4/main.v | 16 +- verilog/sd2snes_cx4/sd2snes_cx4.xise | 22 +- 14 files changed, 2009 insertions(+), 1679 deletions(-) diff --git a/src/fpga_spi.h b/src/fpga_spi.h index 201179f..d04a954 100644 --- a/src/fpga_spi.h +++ b/src/fpga_spi.h @@ -50,6 +50,7 @@ #define FPGA_SPI_FAST() spi_set_speed(SPI_SPEED_FPGA_FAST) #define FPGA_SPI_SLOW() spi_set_speed(SPI_SPEED_FPGA_SLOW) +#define FEAT_CX4 (1 << 4) #define FEAT_MSU1 (1 << 3) #define FEAT_SRTC (1 << 2) #define FEAT_ST0010 (1 << 1) diff --git a/src/memory.c b/src/memory.c index 784a115..3797114 100644 --- a/src/memory.c +++ b/src/memory.c @@ -226,18 +226,16 @@ uint32_t load_rom(uint8_t* filename, uint32_t base_addr, uint8_t flags) { sram_writebyte(0xfc, rombase+0xd5); set_fpga_time(0x0220110301180530LL); } - if(romprops.has_dspx) { - printf("DSPx game. Loading firmware image %s...\n", romprops.necdsp_fw); - if(romprops.has_st0010) { - load_dspx(romprops.necdsp_fw, 1); - } else { - load_dspx(romprops.necdsp_fw, 0); - if(file_res && romprops.necdsp_fw == DSPFW_1) { - load_dspx(DSPFW_1B, 0); - } +fpga_pgm((uint8_t*)"/sd2snes/cx4.bit"); + if(romprops.has_dspx || romprops.has_cx4) { + printf("DSPx game. Loading firmware image %s...\n", romprops.dsp_fw); + load_dspx(romprops.dsp_fw, romprops.fpga_features); + /* fallback to DSP1B firmware if DSP1.bin is not present */ + if(file_res && romprops.dsp_fw == DSPFW_1) { + load_dspx(DSPFW_1B, romprops.fpga_features); } if(file_res) { - snes_menu_errmsg(MENU_ERR_NODSP, (void*)romprops.necdsp_fw); + snes_menu_errmsg(MENU_ERR_NODSP, (void*)romprops.dsp_fw); } } uint32_t rammask; @@ -494,22 +492,29 @@ uint64_t sram_gettime(uint32_t base_addr) { return result & 0x00ffffffffffffffLL; } -void load_dspx(const uint8_t *filename, uint8_t st0010) { +void load_dspx(const uint8_t *filename, uint8_t coretype) { UINT bytes_read; DWORD filesize; uint16_t word_cnt; uint8_t wordsize_cnt = 0; uint16_t sector_remaining = 0; uint16_t sector_cnt = 0; - uint16_t pgmsize = 2048; - uint16_t datsize; + uint16_t pgmsize = 0; + uint16_t datsize = 0; uint32_t pgmdata = 0; uint16_t datdata = 0; - if(st0010) { + if(coretype & FEAT_ST0010) { datsize = 1536; - } else { + pgmsize = 2048; + } else if (coretype & FEAT_DSPX) { datsize = 1024; + pgmsize = 2048; + } else if (coretype & FEAT_CX4) { + datsize = 0; + pgmsize = 1024; /* Cx4 data ROM */ + } else { + printf("load_dspx: unknown core (%02x)!\n", coretype); } file_open((uint8_t*)filename, FA_READ); @@ -539,7 +544,7 @@ void load_dspx(const uint8_t *filename, uint8_t st0010) { } wordsize_cnt = 0; - if(st0010) { + if(coretype & FEAT_ST0010) { file_seek(0xc000); sector_remaining = 0; } diff --git a/src/smc.c b/src/smc.c index 0cf17b6..202c2ff 100644 --- a/src/smc.c +++ b/src/smc.c @@ -83,6 +83,7 @@ void smc_id(snes_romprops_t* props) { props->has_dspx = 0; props->has_st0010 = 0; + props->has_cx4 = 0; props->fpga_features = 0; for(uint8_t num = 0; num < 6; num++) { if(!file_readblock(header, hdr_addr[num], sizeof(snes_header_t)) @@ -144,39 +145,44 @@ void smc_id(snes_romprops_t* props) { props->mapper_id = 0; if(header->map == 0x31 && (header->carttype == 0x03 || header->carttype == 0x05)) { props->has_dspx = 1; - props->necdsp_fw = DSPFW_1B; + props->dsp_fw = DSPFW_1B; props->fpga_features |= FEAT_DSPX; } break; case 0x20: /* LoROM */ props->mapper_id = 1; - if ((header->map == 0x20 && header->carttype == 0x03) || + if (header->map == 0x20 && header->carttype == 0xf3) { + props->has_cx4 = 1; + props->dsp_fw = CX4FW; + props->fpga_features |= FEAT_CX4; + } + else if ((header->map == 0x20 && header->carttype == 0x03) || (header->map == 0x30 && header->carttype == 0x05 && header->licensee != 0xb2)) { props->has_dspx = 1; props->fpga_features |= FEAT_DSPX; // Pilotwings uses DSP1 instead of DSP1B if(!memcmp(header->name, "PILOTWINGS", 10)) { - props->necdsp_fw = DSPFW_1; + props->dsp_fw = DSPFW_1; } else { - props->necdsp_fw = DSPFW_1B; + props->dsp_fw = DSPFW_1B; } } else if (header->map == 0x20 && header->carttype == 0x05) { props->has_dspx = 1; - props->necdsp_fw = DSPFW_2; + props->dsp_fw = DSPFW_2; props->fpga_features |= FEAT_DSPX; } else if (header->map == 0x30 && header->carttype == 0x05 && header->licensee == 0xb2) { props->has_dspx = 1; - props->necdsp_fw = DSPFW_3; + props->dsp_fw = DSPFW_3; props->fpga_features |= FEAT_DSPX; } else if (header->map == 0x30 && header->carttype == 0x03) { props->has_dspx = 1; - props->necdsp_fw = DSPFW_4; + props->dsp_fw = DSPFW_4; props->fpga_features |= FEAT_DSPX; } else if (header->map == 0x30 && header->carttype == 0xf6 && header->romsize >= 0xa) { props->has_dspx = 1; props->has_st0010 = 1; - props->necdsp_fw = DSPFW_ST0010; + props->dsp_fw = DSPFW_ST0010; props->fpga_features |= FEAT_ST0010; header->ramsize = 2; } diff --git a/src/smc.h b/src/smc.h index 54062fe..561078f 100644 --- a/src/smc.h +++ b/src/smc.h @@ -33,6 +33,7 @@ #define DSPFW_4 ((const uint8_t*)"/sd2snes/dsp4.bin") #define DSPFW_1B ((const uint8_t*)"/sd2snes/dsp1b.bin") #define DSPFW_ST0010 ((const uint8_t*)"/sd2snes/st0010.bin") +#define CX4FW ((const uint8_t*)"/sd2snes/cx4.bin") typedef struct _snes_header { uint8_t maker[2]; /* 0xB0 */ @@ -60,10 +61,11 @@ typedef struct _snes_romprops { uint32_t expramsize_bytes; /* ExpRAM size in bytes */ uint32_t ramsize_bytes; /* CartRAM size in bytes */ uint32_t romsize_bytes; /* ROM size in bytes (rounded up) */ - const uint8_t* necdsp_fw; /* NEC DSP ROM filename */ + const uint8_t* dsp_fw; /* DSP (NEC / Hitachi) ROM filename */ uint8_t has_dspx; /* DSP[1-4] presence flag */ uint8_t has_st0010; /* st0010 presence flag (additional to dspx)*/ uint8_t has_msu1; /* MSU1 presence flag */ + uint8_t has_cx4; /* CX4 presence flag */ uint8_t fpga_features; /* feature/peripheral enable bits*/ snes_header_t header; /* original header from ROM image */ } snes_romprops_t; diff --git a/verilog/sd2snes/sd2snes.xise b/verilog/sd2snes/sd2snes.xise index c897c80..2923d2b 100644 --- a/verilog/sd2snes/sd2snes.xise +++ b/verilog/sd2snes/sd2snes.xise @@ -16,55 +16,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72,7 +72,7 @@ - + @@ -90,11 +90,11 @@ - + - + @@ -377,8 +377,8 @@ - - + + @@ -433,7 +433,7 @@ - + diff --git a/verilog/sd2snes_cx4/cx4.v b/verilog/sd2snes_cx4/cx4.v index 6d62b47..4eb055b 100644 --- a/verilog/sd2snes_cx4/cx4.v +++ b/verilog/sd2snes_cx4/cx4.v @@ -42,11 +42,12 @@ parameter BUSY_DMA = 2'b01; parameter BUSY_CPU = 2'b10; wire datram_enable = CS & (ADDR[11:0] < 12'hc00); -wire mmio_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] <= 8'b11000); -wire status_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] > 8'b11000); +wire mmio_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] <= 8'b11001); +wire status_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] > 8'b11001); wire vector_enable = CS & (ADDR[12:5] == 8'b11111011); wire gpr_enable = CS & (&(ADDR[12:7]) && ADDR[5:4] != 2'b11); wire pgmrom_enable = CS & (ADDR[12:5] == 8'b11110000); +wire debug_enable = CS & (&(ADDR[12:7]) && &(ADDR[5:4])); wire [7:0] DATRAM_DO; reg [7:0] MMIO_DOr; @@ -54,12 +55,15 @@ wire [7:0] MMIO_DO; wire [7:0] STATUS_DO; wire [7:0] VECTOR_DO; wire [7:0] GPR_DO; +wire [7:0] DEBUG_DO; +reg [7:0] DEBUG_DOr; assign DO = datram_enable ? DATRAM_DO : mmio_enable ? MMIO_DO : status_enable ? STATUS_DO : vector_enable ? VECTOR_DO : gpr_enable ? GPR_DO + : debug_enable ? DEBUG_DO : 8'h00; /* 0x1f40 - 0x1f52: MMIO @@ -87,7 +91,20 @@ wire [47:0] cpu_mul_result; reg [23:0] const [15:0]; reg [15:0] cachetag [1:0]; // 15: valid; 14-0: bank number +reg [14:0] cache_pgmpage; +reg [14:0] cpu_cache_pgmpage; +reg cache_cachepage; +reg cpu_cache_cachepage; +reg cpu_cache_done; +reg [7:0] cpu_pc_stack [7:0]; +reg [7:0] cpu_page_stack; + initial begin + cache_pgmpage = 15'b0; + cpu_cache_pgmpage = 15'b0; + cache_cachepage = 1'b0; + cpu_cache_cachepage = 1'b0; + cpu_cache_done = 1'b0; cachetag[0] = 16'h0000; cachetag[1] = 16'h0000; cx4_busy = 3'b000; @@ -112,12 +129,22 @@ initial begin const[13] = 24'hfeffff; const[14] = 24'h000100; const[15] = 24'h00feff; + cpu_pc_stack[0] = 8'b0; + cpu_pc_stack[1] = 8'b0; + cpu_pc_stack[2] = 8'b0; + cpu_pc_stack[3] = 8'b0; + cpu_pc_stack[4] = 8'b0; + cpu_pc_stack[5] = 8'b0; + cpu_pc_stack[6] = 8'b0; + cpu_pc_stack[7] = 8'b0; + cpu_page_stack = 8'b0; end assign MMIO_DO = MMIO_DOr; assign VECTOR_DO = vector [ADDR[4:0]]; assign GPR_DO = gpr [ADDR[5:0]]; assign STATUS_DO = {1'b0, cx4_active, 4'b0000, ~cx4_active, 1'b0}; +assign DEBUG_DO = DEBUG_DOr; reg [7:0] DIr; always @(posedge CLK) DIr <= DI; @@ -143,9 +170,11 @@ reg [23:0] cpu_idb; // tmp register for reg file read */ reg CACHE_TRIG_ENr; reg CACHE_TRIG_EN2r; +reg cpu_cache_en; initial begin CACHE_TRIG_ENr = 1'b0; CACHE_TRIG_EN2r = 1'b0; + cpu_cache_en = 1'b0; end always @(posedge CLK) CACHE_TRIG_EN2r <= CACHE_TRIG_ENr; wire CACHE_TRIG_EN = CACHE_TRIG_EN2r; @@ -156,11 +185,19 @@ wire DMA_TRIG_EN = DMA_TRIG_ENr; reg CACHE_BUS_RRQr; reg DMA_BUS_RRQr; +reg cpu_bus_rq; + initial begin CACHE_BUS_RRQr = 1'b0; DMA_BUS_RRQr = 1'b0; + cpu_bus_rq = 1'b0; end -assign BUS_RRQ = CACHE_BUS_RRQr | DMA_BUS_RRQr; + +assign BUS_RRQ = CACHE_BUS_RRQr | DMA_BUS_RRQr | cpu_bus_rq; + +reg cpu_page; +reg [14:0] cpu_p; +reg [7:0] cpu_pc; reg cpu_go_en_r; initial cpu_go_en_r = 1'b0; @@ -192,23 +229,31 @@ always @(posedge CLK) begin 5'h10: MMIO_DOr <= cx4_mmio_r1f50; // 1f50 5'h11: MMIO_DOr <= {7'b0, cx4_mmio_r1f51}; // 1f51 5'h12: MMIO_DOr <= {7'b0, cx4_mmio_r1f52}; // 1f52 - - 5'h13: MMIO_DOr <= cpu_mul_result[47:40]; // 1f40 - 5'h14: MMIO_DOr <= cpu_mul_result[39:32]; // 1f40 - 5'h15: MMIO_DOr <= cpu_mul_result[31:24]; // 1f40 - 5'h16: MMIO_DOr <= cpu_mul_result[23:16]; // 1f40 - 5'h17: MMIO_DOr <= cpu_mul_result[15:8]; // 1f40 - 5'h18: MMIO_DOr <= cpu_mul_result[7:0]; // 1f40 - - -// 5'h14: MMIO_DOr <= cachetag[0][15:8]; // 1f40 -// 5'h15: MMIO_DOr <= cachetag[0][7:0]; // 1f41 -// 5'h16: MMIO_DOr <= cachetag[1][15:8]; // 1f42 -// 5'h17: MMIO_DOr <= cachetag[1][7:0]; // 1f43 default: MMIO_DOr <= 8'hff; endcase end +always @(posedge CLK) begin + case(ADDR[3:0]) + 4'h0: DEBUG_DOr <= cachetag[0][15:8]; // 1f40 + 4'h1: DEBUG_DOr <= cachetag[0][7:0]; // 1f41 + 4'h2: DEBUG_DOr <= cachetag[1][15:8]; // 1f42 + 4'h3: DEBUG_DOr <= cachetag[1][7:0]; // 1f43 + 4'h4: DEBUG_DOr <= cpu_page; + 4'h5: DEBUG_DOr <= cpu_p; + 4'h6: DEBUG_DOr <= cpu_pc; + 4'h7: DEBUG_DOr <= cx4_busy; + 4'h8: DEBUG_DOr <= cpu_page_stack[0]; + 4'h9: DEBUG_DOr <= cpu_pc_stack[0]; + 4'ha: DEBUG_DOr <= cpu_page_stack[1]; + 4'hb: DEBUG_DOr <= cpu_pc_stack[1]; + 4'hc: DEBUG_DOr <= cpu_page_stack[2]; + 4'hd: DEBUG_DOr <= cpu_pc_stack[2]; + 4'he: DEBUG_DOr <= cpu_page_stack[3]; + 4'hf: DEBUG_DOr <= cpu_pc_stack[3]; + endcase +end + always @(posedge CLK) begin if(MMIO_WR_EN) begin case(ADDR[4:0]) @@ -272,10 +317,11 @@ reg [23:0] CACHE_SRC_ADDRr; wire [22:0] MAPPED_CACHE_SRC_ADDR = {CACHE_SRC_ADDRr[23:16],CACHE_SRC_ADDRr[14:0]}; reg [23:0] DMA_SRC_ADDRr; wire [22:0] MAPPED_DMA_SRC_ADDR = {DMA_SRC_ADDRr[23:16],DMA_SRC_ADDRr[14:0]}; +wire [22:0] MAPPED_CPU_BUS_ADDR; assign BUS_ADDR = cx4_busy[BUSY_CACHE] ? MAPPED_CACHE_SRC_ADDR : cx4_busy[BUSY_DMA] ? MAPPED_DMA_SRC_ADDR - : 24'h800000 /* XXX cx4_bus_addr */; + : MAPPED_CPU_BUS_ADDR; reg cx4_pgmrom_we; initial cx4_pgmrom_we = 1'b0; @@ -288,15 +334,24 @@ always @(posedge CLK) begin ST_CACHE_IDLE: begin if(CACHE_TRIG_EN & (~cachetag[cx4_mmio_cachepage][15] - | |(cachetag[cx4_mmio_cachepage][14:0] ^ cx4_mmio_pgmpage))) - begin + | |(cachetag[cx4_mmio_cachepage][14:0] ^ cx4_mmio_pgmpage))) begin CACHE_ST <= ST_CACHE_START; - end else CACHE_ST <= ST_CACHE_IDLE; + cache_pgmpage <= cx4_mmio_pgmpage; + cache_cachepage <= cx4_mmio_cachepage; + end else if(cpu_cache_en + & (~cachetag[~cpu_page][15] + | |(cachetag[~cpu_page][14:0] ^ cpu_p))) begin + CACHE_ST <= ST_CACHE_START; + cache_pgmpage <= cpu_p; + cache_cachepage <= ~cpu_page; + cx4_busy[BUSY_CACHE] <= 1'b1; + end + else CACHE_ST <= ST_CACHE_IDLE; end ST_CACHE_START: begin cx4_busy[BUSY_CACHE] <= 1'b1; - CACHE_SRC_ADDRr <= cx4_mmio_pgmoff + {cx4_mmio_pgmpage, 9'b0}; - cx4_pgmrom_addr <= {cx4_mmio_cachepage, 9'b0}; + CACHE_SRC_ADDRr <= cx4_mmio_pgmoff + {cache_pgmpage, 9'b0}; + cx4_pgmrom_addr <= {cache_cachepage, 9'b0}; CACHE_ST <= ST_CACHE_WAIT; cache_count <= 10'b0; CACHE_BUS_RRQr <= 1'b1; @@ -315,7 +370,7 @@ always @(posedge CLK) begin cx4_pgmrom_addr <= cx4_pgmrom_addr + 1; if(cache_count == 9'h1ff) begin cx4_busy[BUSY_CACHE] <= 1'b0; - cachetag[cx4_mmio_cachepage] <= {1'b1,cx4_mmio_pgmpage}; + cachetag[cache_cachepage] <= {1'b1,cache_pgmpage}; CACHE_ST <= ST_CACHE_IDLE; end else begin CACHE_BUS_RRQr <= 1'b1; @@ -334,7 +389,7 @@ reg [11:0] cx4_dma_datram_addr; reg [11:0] cx4_cpu_datram_addr; wire [11:0] cx4_datram_addr = cx4_busy[BUSY_DMA] ? cx4_dma_datram_addr : cx4_cpu_datram_addr; reg [23:0] cx4_cpu_datram_di; -wire [23:0] cx4_datram_di = cx4_busy[BUSY_DMA] ? BUS_DI : cx4_cpu_datram_di; +wire [7:0] cx4_datram_di = cx4_busy[BUSY_DMA] ? BUS_DI : cx4_cpu_datram_di; reg [15:0] dma_count; initial dma_count = 16'b0; @@ -380,10 +435,8 @@ end =========== CPU =========== ***************************/ reg [4:0] CPU_STATE; -reg cpu_page; -reg [7:0] cpu_pc; -reg [8:0] cpu_stack [7:0]; reg [2:0] cpu_sp; +initial cpu_sp = 3'b000; wire [15:0] cpu_op_w; reg [15:0] cpu_op; reg [23:0] cpu_a; @@ -391,17 +444,20 @@ reg [23:0] cpu_busdata; reg [23:0] cpu_romdata; reg [23:0] cpu_ramdata; reg [23:0] cpu_busaddr; +assign MAPPED_CPU_BUS_ADDR = {cpu_busaddr[23:16], cpu_busaddr[14:0]}; reg [23:0] cpu_romaddr; reg [23:0] cpu_ramaddr; reg [23:0] cpu_acch; reg [23:0] cpu_accl; reg [23:0] cpu_mul_src; +reg [24:0] cpu_alu_res; +reg [23:0] cpu_dummy; +reg [23:0] cpu_tmp; reg [23:0] cpu_sa; // tmp register for shifted accumulator reg fl_n; reg fl_z; reg fl_c; -reg [15:0] cpu_p; wire [9:0] cx4_datrom_addr = cpu_a[9:0]; wire [23:0] cx4_datrom_do; @@ -413,49 +469,63 @@ parameter ST_CPU_1 = 5'b00100; parameter ST_CPU_2 = 5'b01000; parameter ST_CPU_3 = 5'b10000; -initial CPU_STATE <= ST_CPU_IDLE; +initial CPU_STATE = ST_CPU_IDLE; -parameter OP_NOP = 4'b0000; -parameter OP_JP = 4'b0001; -parameter OP_SKIP = 4'b0010; -parameter OP_RT = 4'b0011; -parameter OP_LD = 4'b0100; -parameter OP_ST = 4'b0101; -parameter OP_SWP = 4'b0110; -parameter OP_RDROM = 4'b0111; -parameter OP_RDRAM = 4'b1000; -parameter OP_WRRAM = 4'b1001; -parameter OP_ALU = 4'b1010; -parameter OP_MUL = 4'b1011; -parameter OP_WAI = 4'b1100; -parameter OP_BUS = 4'b1101; -parameter OP_HLT = 4'b1110; +parameter OP_NOP = 5'b00000; +parameter OP_JP = 5'b00001; +parameter OP_SKIP = 5'b00010; +parameter OP_RT = 5'b00011; +parameter OP_LD = 5'b00100; +parameter OP_ST = 5'b00101; +parameter OP_SWP = 5'b00110; +parameter OP_RDROM = 5'b00111; +parameter OP_RDRAM = 5'b01000; +parameter OP_WRRAM = 5'b01001; +parameter OP_ALU = 5'b01010; +parameter OP_MUL = 5'b01011; +parameter OP_WAI = 5'b01100; +parameter OP_BUS = 5'b01101; +parameter OP_CMP = 5'b01110; +parameter OP_SEX = 5'b01111; +parameter OP_HLT = 5'b10000; wire [6:0] op_id = cpu_op_w[15:10]; reg [7:0] op_param; -reg [3:0] op; +reg [4:0] op; reg [1:0] op_sa; reg op_imm; reg op_p; reg op_call; reg op_jump; reg condtrue; -reg cpu_bus_rq; + +/* XXX DEBUG */ +reg [23:0] dbg_cnt; +initial dbg_cnt = 24'b0; +always @(posedge CLK) dbg_cnt <= dbg_cnt + 1; +wire step_enable = 1'b1; always @(posedge CLK) begin + if(cpu_go_en_r) cx4_busy[BUSY_CPU] <= 1'b1; + else if((op == OP_HLT) && step_enable) cx4_busy[BUSY_CPU] <= 1'b0; +end + +always @(posedge CLK) begin +if(step_enable | cpu_go_en_r) begin case(CPU_STATE) ST_CPU_IDLE: begin if(cpu_go_en_r) begin cpu_pc <= cx4_mmio_pc; + cpu_page <= cx4_mmio_cachepage; + cpu_p <= cx4_mmio_pgmpage; op <= OP_NOP; CPU_STATE <= ST_CPU_2; - cx4_busy[BUSY_CPU] <= 1'b1; end else CPU_STATE <= ST_CPU_IDLE; end ST_CPU_0: begin // Phase 0: + cpu_cache_en <= 1'b0; if(op == OP_HLT) begin - cx4_busy[BUSY_CPU] <= 1'b0; CPU_STATE <= ST_CPU_IDLE; end else CPU_STATE <= ST_CPU_1; @@ -475,7 +545,7 @@ always @(posedge CLK) begin 2'b11: condtrue <= (fl_n == cpu_op[0]); endcase end - OP_LD, OP_SWP, OP_ALU, OP_MUL: begin + OP_LD, OP_ALU, OP_MUL, OP_CMP, OP_SEX: begin if(op_imm) cpu_idb <= {16'b0, op_param}; else casex(op_param) 8'h00: cpu_idb <= cpu_a; @@ -492,7 +562,7 @@ always @(posedge CLK) begin gpr[op_param[3:0]*3]}; default: cpu_idb <= 24'b0; endcase - if(op==OP_ALU) begin + if(op==OP_ALU || op==OP_CMP) begin case(op_sa) 2'b00: cpu_sa <= cpu_a; 2'b01: cpu_sa <= cpu_a << 1; @@ -504,8 +574,26 @@ always @(posedge CLK) begin OP_ST: begin cpu_idb <= cpu_a; end + OP_SWP: begin + cpu_idb <= cpu_a; + casex(op_param) + 8'h00: cpu_tmp <= cpu_a; + 8'h01: cpu_tmp <= cpu_acch; + 8'h02: cpu_tmp <= cpu_accl; + 8'h03: cpu_tmp <= cpu_busdata; + 8'h08: cpu_tmp <= cpu_romdata; + 8'h0c: cpu_tmp <= cpu_ramdata; + 8'h13: cpu_tmp <= cpu_busaddr; + 8'h1c: cpu_tmp <= cpu_ramaddr; + 8'h5x: cpu_tmp <= const[op_param[3:0]]; + 8'h6x: cpu_tmp <= {gpr[op_param[3:0]*3+2], + gpr[op_param[3:0]*3+1], + gpr[op_param[3:0]*3]}; + default: cpu_tmp <= 24'b0; + endcase + end OP_RDRAM, OP_WRRAM: begin - if(op_imm) cpu_ramaddr <= {16'b0, op_param}; + if(op_imm) cx4_cpu_datram_addr <= {16'b0, op_param} + cpu_ramaddr; else casex(op_param) 8'h00: cx4_cpu_datram_addr <= cpu_a; 8'h01: cx4_cpu_datram_addr <= cpu_acch; @@ -522,32 +610,39 @@ always @(posedge CLK) begin default: cx4_cpu_datram_addr <= 24'b0; endcase end + OP_BUS: cpu_bus_rq <= 1'b1; endcase end ST_CPU_1: begin CPU_STATE <= ST_CPU_2; case(op) OP_JP: begin - if(condtrue) begin - if(op_call) begin - cpu_stack[cpu_sp] <= cpu_pc + 1; - cpu_sp <= cpu_sp + 1; - end - cpu_pc <= op_param; + if(!cx4_busy[BUSY_CACHE]) begin + if(condtrue) begin + if(op_call) begin + cpu_page_stack[cpu_sp] <= cpu_page; + cpu_pc_stack[cpu_sp] <= cpu_pc + 1; + cpu_sp <= cpu_sp + 1; + end + cpu_pc <= op_param; + cpu_page <= cpu_page ^ op_p; + end else cpu_pc <= cpu_pc + 1; end end OP_SKIP: begin - if(condtrue) begin - cpu_pc <= cpu_pc + 2; - end + if(condtrue) cpu_pc <= cpu_pc + 2; + else cpu_pc <= cpu_pc + 1; end OP_RT: begin - cpu_pc <= cpu_stack[cpu_sp - 1]; + cpu_page <= cpu_page_stack[cpu_sp - 1]; + cpu_pc <= cpu_pc_stack[cpu_sp - 1]; cpu_sp <= cpu_sp - 1; end - OP_LD, OP_ST, OP_SWP, OP_RDROM, OP_RDRAM, OP_WRRAM, OP_ALU, OP_MUL, OP_BUS: - cpu_pc <= cpu_pc + 1; OP_WAI: if(BUS_RDY) cpu_pc <= cpu_pc + 1; + OP_BUS: begin + cpu_bus_rq <= 1'b0; + cpu_pc <= cpu_pc + 1; + end default: cpu_pc <= cpu_pc + 1; endcase end @@ -559,56 +654,101 @@ always @(posedge CLK) begin 4'b0x00: cpu_a <= cpu_idb; 4'b0x11: cpu_p <= cpu_idb; 4'b1100: cpu_p[7:0] <= op_param; - 4'b1101: cpu_p[15:8] <= op_param; + 4'b1101: cpu_p[14:8] <= op_param; endcase end - OP_ST: begin - casex(op_param) - 8'h00: cpu_a <= cpu_idb; + OP_ST, OP_SWP: begin + casex(op_param) +// 8'h00: cpu_a <= cpu_idb; 8'h01: cpu_acch <= cpu_idb; 8'h02: cpu_accl <= cpu_idb; - 8'h03: cpu_busdata <= cpu_idb; +// 8'h03: cpu_busdata <= cpu_idb; 8'h08: cpu_romdata <= cpu_idb; 8'h0c: cpu_ramdata <= cpu_idb; 8'h13: cpu_busaddr <= cpu_idb; 8'h1c: cpu_ramaddr <= cpu_idb; endcase - end - OP_SWP: begin - casex(op_param) - 8'h00: cpu_a <= cpu_a; - 8'h01: cpu_acch <= cpu_a; - 8'h02: cpu_accl <= cpu_a; - 8'h03: cpu_busdata <= cpu_a; - 8'h08: cpu_romdata <= cpu_a; - 8'h0c: cpu_ramdata <= cpu_a; - 8'h13: cpu_busaddr <= cpu_a; - 8'h1c: cpu_ramaddr <= cpu_a; - endcase + if(op==OP_SWP) cpu_a <= cpu_tmp; end OP_RDROM: cpu_romdata <= cx4_datrom_do; - OP_RDRAM: cpu_ramdata <= cx4_datram_do; + OP_RDRAM: begin + case(cpu_op[9:8]) + 2'b00: cpu_ramdata[7:0] <= cx4_datram_do; + 2'b01: cpu_ramdata[15:8] <= cx4_datram_do; + 2'b10: cpu_ramdata[23:16] <= cx4_datram_do; + endcase + end OP_WRRAM: begin case(cpu_op[9:8]) - 2'b00: cx4_cpu_datram_di[7:0] <= cpu_ramdata[7:0]; - 2'b01: cx4_cpu_datram_di[15:8] <= cpu_ramdata[15:8]; - 2'b10: cx4_cpu_datram_di[23:16] <= cpu_ramdata[23:16]; + 2'b00: cx4_cpu_datram_di <= cpu_ramdata[7:0]; + 2'b01: cx4_cpu_datram_di <= cpu_ramdata[15:8]; + 2'b10: cx4_cpu_datram_di <= cpu_ramdata[23:16]; endcase cx4_cpu_datram_we <= 1'b1; end - OP_ALU: begin - /* XXX TODO FUCK YEAH ALU */ + OP_CMP: begin + case(cpu_op[15:11]) + 5'b01001: cpu_alu_res <= cpu_idb - cpu_sa; + 5'b01010: cpu_alu_res <= cpu_sa - cpu_idb; + endcase + end + OP_SEX: begin + case(cpu_op[9:8]) + 2'b01: cpu_alu_res <= {{16{cpu_idb[7]}}, cpu_idb[7:0]}; + 2'b10: cpu_alu_res <= {{8{cpu_idb[15]}}, cpu_idb[15:0]}; + endcase + end + OP_ALU: begin + case(cpu_op[15:11]) + 5'b10000: cpu_alu_res <= cpu_sa + cpu_idb; + 5'b10001: cpu_alu_res <= cpu_idb - cpu_sa; + 5'b10010: cpu_alu_res <= cpu_sa - cpu_idb; + 5'b10101: cpu_alu_res <= cpu_sa ^ cpu_idb; + 5'b10110: cpu_alu_res <= cpu_sa & cpu_idb; + 5'b10111: cpu_alu_res <= cpu_sa | cpu_idb; + 5'b11000: cpu_alu_res <= cpu_a >> cpu_idb; + 5'b11001: cpu_alu_res <= $signed(cpu_a) >>> cpu_idb; + 5'b11010: {cpu_alu_res[23:0]} <= {cpu_a, cpu_a} >> cpu_idb; + 5'b11011: cpu_alu_res <= cpu_a << cpu_idb; + endcase end - OP_BUS: cpu_bus_rq <= 1'b1; endcase end ST_CPU_3: begin CPU_STATE <= ST_CPU_0; case(op) - OP_SWP: cpu_a <= cpu_idb; + OP_LD: begin + casex(cpu_op[11:8]) + 4'b0x11: cpu_cache_en <= 1'b1; + 4'b1100: cpu_cache_en <= 1'b1; + endcase + end + OP_BUS: cpu_busaddr <= cpu_busaddr + 1; OP_WRRAM: cx4_cpu_datram_we <= 1'b0; + OP_CMP: begin + fl_n <= cpu_alu_res[23]; + fl_z <= cpu_alu_res[23:0] == 24'b0; + fl_c <= ~cpu_alu_res[24]; + end + OP_SEX: cpu_a <= cpu_alu_res[23:0]; OP_ALU: begin - /* XXX TODO FUCKING FLAGS */ + cpu_a <= cpu_alu_res[23:0]; + case(cpu_op[15:11]) + 5'b10000: begin + fl_n <= cpu_alu_res[23]; + fl_z <= cpu_alu_res[23:0] == 24'b0; + fl_c <= cpu_alu_res[24]; + end + 5'b10001, 5'b10010: begin + fl_n <= cpu_alu_res[23]; + fl_z <= cpu_alu_res[23:0] == 24'b0; + fl_c <= ~cpu_alu_res[24]; + end + default: begin + fl_n <= cpu_alu_res[23]; + fl_z <= cpu_alu_res[23:0] == 24'b0; + end + endcase end OP_MUL: begin cpu_acch <= cpu_mul_result[47:24]; @@ -616,7 +756,6 @@ always @(posedge CLK) begin fl_z <= (cpu_mul_result == 48'b0); fl_n <= cpu_mul_result[47]; end - OP_BUS: cpu_bus_rq <= 1'b0; endcase cpu_op <= cpu_op_w; casex(cpu_op_w[15:11]) @@ -636,9 +775,9 @@ always @(posedge CLK) begin 5'b01101: op <= OP_RDRAM; 5'b11101: op <= OP_WRRAM; - 5'b01001: op <= OP_ALU; - 5'b01010: op <= OP_ALU; - 5'b01011: op <= OP_ALU; + 5'b01001: op <= OP_CMP; + 5'b01010: op <= OP_CMP; + 5'b01011: op <= OP_SEX; 5'b10000: op <= OP_ALU; 5'b10001: op <= OP_ALU; 5'b10010: op <= OP_ALU; @@ -659,22 +798,45 @@ always @(posedge CLK) begin op_imm <= cpu_op_w[10]; op_p <= cpu_op_w[9]; op_call <= cpu_op_w[13]; + op_param <= cpu_op_w[7:0]; + op_sa <= cpu_op_w[9:8]; end endcase end +end + +reg[2:0] BUSRD_STATE; +parameter ST_BUSRD_IDLE = 2'b01; +parameter ST_BUSRD_WAIT = 2'b10; +initial BUSRD_STATE = ST_BUSRD_IDLE; + +always @(posedge CLK) begin + if(CPU_STATE == ST_CPU_2 + && (op == OP_ST || op == OP_SWP) + && op_param == 8'h03) + cpu_busdata <= cpu_idb; + else begin + case(BUSRD_STATE) + ST_BUSRD_IDLE: begin + if(cpu_bus_rq) begin + BUSRD_STATE <= ST_BUSRD_WAIT; + end + end + ST_BUSRD_WAIT: begin + if(BUS_RDY) BUSRD_STATE <= ST_BUSRD_IDLE; + else BUSRD_STATE <= ST_BUSRD_WAIT; + if(~cpu_busaddr[22]) cpu_busdata <= BUS_DI; + else cpu_busdata <= 8'h00; + end + endcase + end +end // gpr write, either by CPU or by MMIO always @(posedge CLK) begin if(CPU_STATE == ST_CPU_2 - && (op == OP_SWP) - && (op_param[7:4] == 8'h6)) begin - gpr[op_param[3:0]*3+2] <= cpu_a[23:16]; - gpr[op_param[3:0]*3+1] <= cpu_a[15:8]; - gpr[op_param[3:0]*3] <= cpu_a[7:0]; - end - else if(CPU_STATE == ST_CPU_2 - && (op == OP_ST) - && (op_param[7:4] == 8'h6)) begin + && (op == OP_ST || op == OP_SWP) + && (op_param[7:4] == 4'h6)) begin gpr[op_param[3:0]*3+2] <= cpu_idb[23:16]; gpr[op_param[3:0]*3+1] <= cpu_idb[15:8]; gpr[op_param[3:0]*3] <= cpu_idb[7:0]; @@ -714,7 +876,7 @@ cx4_pgmrom cx4_pgmrom ( .addra(cx4_pgmrom_addr), // input [9 : 0] addra .dina(BUS_DI), // input [7 : 0] dina .clkb(CLK), // input clkb - .addrb(cpu_pc), // input [8 : 0] addrb + .addrb({cpu_page,cpu_pc}), // input [8 : 0] addrb .doutb(cpu_op_w) // output [15 : 0] doutb ); diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v index 32e9bad..ebb89bc 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v @@ -7,7 +7,7 @@ // \ \ \/ Version: O.61xd // \ \ Application: netgen // / / Filename: cx4_mul.v -// /___/ /\ Timestamp: Fri Oct 21 22:38:27 2011 +// /___/ /\ Timestamp: Tue Oct 25 00:04:23 2011 // \ \ / \ // \___\/\___\ // @@ -399,6 +399,54 @@ module cx4_mul ( wire sig00000162; wire sig00000163; wire sig00000164; + wire sig00000165; + wire sig00000166; + wire sig00000167; + wire sig00000168; + wire sig00000169; + wire sig0000016a; + wire sig0000016b; + wire sig0000016c; + wire sig0000016d; + wire sig0000016e; + wire sig0000016f; + wire sig00000170; + wire sig00000171; + wire sig00000172; + wire sig00000173; + wire sig00000174; + wire sig00000175; + wire sig00000176; + wire sig00000177; + wire sig00000178; + wire sig00000179; + wire sig0000017a; + wire sig0000017b; + wire sig0000017c; + wire sig0000017d; + wire sig0000017e; + wire sig0000017f; + wire sig00000180; + wire sig00000181; + wire sig00000182; + wire sig00000183; + wire sig00000184; + wire sig00000185; + wire sig00000186; + wire sig00000187; + wire sig00000188; + wire sig00000189; + wire sig0000018a; + wire sig0000018b; + wire sig0000018c; + wire sig0000018d; + wire sig0000018e; + wire sig0000018f; + wire sig00000190; + wire sig00000191; + wire sig00000192; + wire sig00000193; + wire sig00000194; wire \NLW_blk00000003_P<35>_UNCONNECTED ; wire \NLW_blk00000003_P<34>_UNCONNECTED ; wire \NLW_blk00000003_P<33>_UNCONNECTED ; @@ -447,15 +495,15 @@ module cx4_mul ( wire \NLW_blk00000005_P<24>_UNCONNECTED ; wire \NLW_blk00000006_P<35>_UNCONNECTED ; GND blk00000001 ( - .G(sig00000001) + .G(sig00000012) ); VCC blk00000002 ( - .P(sig00000002) + .P(sig00000013) ); MULT18X18S blk00000003 ( .C(clk), - .CE(sig00000002), - .R(sig00000001), + .CE(sig00000013), + .R(sig00000012), .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), .P({\NLW_blk00000003_P<35>_UNCONNECTED , \NLW_blk00000003_P<34>_UNCONNECTED , \NLW_blk00000003_P<33>_UNCONNECTED , @@ -463,1638 +511,1638 @@ module cx4_mul ( \NLW_blk00000003_P<28>_UNCONNECTED , \NLW_blk00000003_P<27>_UNCONNECTED , \NLW_blk00000003_P<26>_UNCONNECTED , \NLW_blk00000003_P<25>_UNCONNECTED , \NLW_blk00000003_P<24>_UNCONNECTED , \NLW_blk00000003_P<23>_UNCONNECTED , \NLW_blk00000003_P<22>_UNCONNECTED , \NLW_blk00000003_P<21>_UNCONNECTED , \NLW_blk00000003_P<20>_UNCONNECTED , \NLW_blk00000003_P<19>_UNCONNECTED , \NLW_blk00000003_P<18>_UNCONNECTED , \NLW_blk00000003_P<17>_UNCONNECTED , -\NLW_blk00000003_P<16>_UNCONNECTED , \NLW_blk00000003_P<15>_UNCONNECTED , \NLW_blk00000003_P<14>_UNCONNECTED , sig000000e5, sig000000e4, sig000000e3, -sig000000e2, sig000000ee, sig000000ed, sig000000ec, sig000000eb, sig000000ea, sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e1}) +\NLW_blk00000003_P<16>_UNCONNECTED , \NLW_blk00000003_P<15>_UNCONNECTED , \NLW_blk00000003_P<14>_UNCONNECTED , sig000000f6, sig000000f5, sig000000f4, +sig000000f3, sig000000ff, sig000000fe, sig000000fd, sig000000fc, sig000000fb, sig000000fa, sig000000f9, sig000000f8, sig000000f7, sig000000f2}) ); MULT18X18S blk00000004 ( .C(clk), - .CE(sig00000002), - .R(sig00000001), + .CE(sig00000013), + .R(sig00000012), .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), - .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), + .B({sig00000012, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), .P({\NLW_blk00000004_P<35>_UNCONNECTED , \NLW_blk00000004_P<34>_UNCONNECTED , \NLW_blk00000004_P<33>_UNCONNECTED , \NLW_blk00000004_P<32>_UNCONNECTED , \NLW_blk00000004_P<31>_UNCONNECTED , \NLW_blk00000004_P<30>_UNCONNECTED , \NLW_blk00000004_P<29>_UNCONNECTED , \NLW_blk00000004_P<28>_UNCONNECTED , \NLW_blk00000004_P<27>_UNCONNECTED , \NLW_blk00000004_P<26>_UNCONNECTED , \NLW_blk00000004_P<25>_UNCONNECTED , -\NLW_blk00000004_P<24>_UNCONNECTED , sig000000d8, sig000000d7, sig000000d6, sig000000d5, sig000000d3, sig000000d2, sig000000d1, sig000000d0, -sig000000cf, sig000000ce, sig000000cd, sig000000cc, sig000000cb, sig000000ca, sig000000e0, sig000000df, sig000000de, sig000000dd, sig000000dc, -sig000000db, sig000000da, sig000000d9, sig000000d4, sig000000c9}) +\NLW_blk00000004_P<24>_UNCONNECTED , sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e4, sig000000e3, sig000000e2, sig000000e1, +sig000000e0, sig000000df, sig000000de, sig000000dd, sig000000dc, sig000000db, sig000000f1, sig000000f0, sig000000ef, sig000000ee, sig000000ed, +sig000000ec, sig000000eb, sig000000ea, sig000000e5, sig000000da}) ); MULT18X18S blk00000005 ( .C(clk), - .CE(sig00000002), - .R(sig00000001), - .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), + .CE(sig00000013), + .R(sig00000012), + .A({sig00000012, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), .P({\NLW_blk00000005_P<35>_UNCONNECTED , \NLW_blk00000005_P<34>_UNCONNECTED , \NLW_blk00000005_P<33>_UNCONNECTED , \NLW_blk00000005_P<32>_UNCONNECTED , \NLW_blk00000005_P<31>_UNCONNECTED , \NLW_blk00000005_P<30>_UNCONNECTED , \NLW_blk00000005_P<29>_UNCONNECTED , \NLW_blk00000005_P<28>_UNCONNECTED , \NLW_blk00000005_P<27>_UNCONNECTED , \NLW_blk00000005_P<26>_UNCONNECTED , \NLW_blk00000005_P<25>_UNCONNECTED , -\NLW_blk00000005_P<24>_UNCONNECTED , sig000000c0, sig000000bf, sig000000be, sig000000bd, sig000000bb, sig000000ba, sig000000b9, sig000000b8, -sig000000b7, sig000000b6, sig000000b5, sig000000b4, sig000000b3, sig000000b2, sig000000c8, sig000000c7, sig000000c6, sig000000c5, sig000000c4, -sig000000c3, sig000000c2, sig000000c1, sig000000bc, sig000000b1}) +\NLW_blk00000005_P<24>_UNCONNECTED , sig000000d1, sig000000d0, sig000000cf, sig000000ce, sig000000cc, sig000000cb, sig000000ca, sig000000c9, +sig000000c8, sig000000c7, sig000000c6, sig000000c5, sig000000c4, sig000000c3, sig000000d9, sig000000d8, sig000000d7, sig000000d6, sig000000d5, +sig000000d4, sig000000d3, sig000000d2, sig000000cd, sig000000c2}) ); MULT18X18S blk00000006 ( .C(clk), - .CE(sig00000002), - .R(sig00000001), - .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), - .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), - .P({\NLW_blk00000006_P<35>_UNCONNECTED , sig000000a9, sig000000a8, sig000000a7, sig000000a6, sig000000a5, sig000000a3, sig000000a2, sig000000a1, -sig000000a0, sig0000009f, sig0000009e, sig0000009d, sig0000009c, sig0000009b, sig0000009a, sig00000098, sig00000097, sig00000096, sig00000095, -sig00000094, sig00000093, sig00000092, sig00000091, sig00000090, sig0000008f, sig000000b0, sig000000af, sig000000ae, sig000000ad, sig000000ac, -sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) + .CE(sig00000013), + .R(sig00000012), + .A({sig00000012, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), + .B({sig00000012, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), + .P({\NLW_blk00000006_P<35>_UNCONNECTED , sig000000ba, sig000000b9, sig000000b8, sig000000b7, sig000000b6, sig000000b4, sig000000b3, sig000000b2, +sig000000b1, sig000000b0, sig000000af, sig000000ae, sig000000ad, sig000000ac, sig000000ab, sig000000a9, sig000000a8, sig000000a7, sig000000a6, +sig000000a5, sig000000a4, sig000000a3, sig000000a2, sig000000a1, sig000000a0, sig000000c1, sig000000c0, sig000000bf, sig000000be, sig000000bd, +sig000000bc, sig000000bb, sig000000b5, sig000000aa, sig0000009f}) ); XORCY blk00000007 ( - .CI(sig00000065), - .LI(sig00000086), - .O(p[47]) + .CI(sig00000076), + .LI(sig00000097), + .O(sig0000018f) ); LUT2 #( .INIT ( 4'h6 )) blk00000008 ( - .I0(sig0000014e), - .I1(sig0000015b), - .O(sig00000086) + .I0(sig0000016c), + .I1(sig0000015f), + .O(sig00000097) ); MUXCY blk00000009 ( + .CI(sig00000075), + .DI(sig0000015f), + .S(sig00000096), + .O(sig00000076) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000000a ( + .I0(sig0000016c), + .I1(sig0000015f), + .O(sig00000096) + ); + MUXCY blk0000000b ( + .CI(sig00000073), + .DI(sig0000015f), + .S(sig00000095), + .O(sig00000075) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000000c ( + .I0(sig0000016c), + .I1(sig0000015f), + .O(sig00000095) + ); + XORCY blk0000000d ( + .CI(sig00000072), + .LI(sig00000093), + .O(sig0000018b) + ); + MUXCY blk0000000e ( + .CI(sig00000072), + .DI(sig0000015f), + .S(sig00000093), + .O(sig00000073) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000000f ( + .I0(sig0000016b), + .I1(sig0000015f), + .O(sig00000093) + ); + XORCY blk00000010 ( + .CI(sig00000071), + .LI(sig00000092), + .O(sig0000018a) + ); + MUXCY blk00000011 ( + .CI(sig00000071), + .DI(sig0000015f), + .S(sig00000092), + .O(sig00000072) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000012 ( + .I0(sig0000016a), + .I1(sig0000015f), + .O(sig00000092) + ); + XORCY blk00000013 ( + .CI(sig00000070), + .LI(sig00000091), + .O(sig00000189) + ); + MUXCY blk00000014 ( + .CI(sig00000070), + .DI(sig0000015f), + .S(sig00000091), + .O(sig00000071) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000015 ( + .I0(sig00000169), + .I1(sig0000015f), + .O(sig00000091) + ); + XORCY blk00000016 ( + .CI(sig0000006f), + .LI(sig00000090), + .O(sig00000188) + ); + MUXCY blk00000017 ( + .CI(sig0000006f), + .DI(sig0000015f), + .S(sig00000090), + .O(sig00000070) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000018 ( + .I0(sig00000175), + .I1(sig0000015f), + .O(sig00000090) + ); + XORCY blk00000019 ( + .CI(sig0000006e), + .LI(sig0000008f), + .O(sig00000187) + ); + MUXCY blk0000001a ( + .CI(sig0000006e), + .DI(sig0000015f), + .S(sig0000008f), + .O(sig0000006f) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000001b ( + .I0(sig00000174), + .I1(sig0000015f), + .O(sig0000008f) + ); + XORCY blk0000001c ( + .CI(sig0000006d), + .LI(sig0000008e), + .O(sig00000186) + ); + MUXCY blk0000001d ( + .CI(sig0000006d), + .DI(sig0000015f), + .S(sig0000008e), + .O(sig0000006e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000001e ( + .I0(sig00000173), + .I1(sig0000015f), + .O(sig0000008e) + ); + XORCY blk0000001f ( + .CI(sig0000006c), + .LI(sig0000008d), + .O(sig00000185) + ); + MUXCY blk00000020 ( + .CI(sig0000006c), + .DI(sig0000015f), + .S(sig0000008d), + .O(sig0000006d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000021 ( + .I0(sig00000172), + .I1(sig0000015f), + .O(sig0000008d) + ); + XORCY blk00000022 ( + .CI(sig0000006b), + .LI(sig0000008c), + .O(sig00000184) + ); + MUXCY blk00000023 ( + .CI(sig0000006b), + .DI(sig0000015e), + .S(sig0000008c), + .O(sig0000006c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000024 ( + .I0(sig00000171), + .I1(sig0000015e), + .O(sig0000008c) + ); + XORCY blk00000025 ( + .CI(sig0000006a), + .LI(sig0000008b), + .O(sig00000183) + ); + MUXCY blk00000026 ( + .CI(sig0000006a), + .DI(sig0000015d), + .S(sig0000008b), + .O(sig0000006b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000027 ( + .I0(sig00000170), + .I1(sig0000015d), + .O(sig0000008b) + ); + XORCY blk00000028 ( + .CI(sig00000068), + .LI(sig0000008a), + .O(sig00000182) + ); + MUXCY blk00000029 ( + .CI(sig00000068), + .DI(sig0000015c), + .S(sig0000008a), + .O(sig0000006a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000002a ( + .I0(sig0000016f), + .I1(sig0000015c), + .O(sig0000008a) + ); + XORCY blk0000002b ( + .CI(sig00000067), + .LI(sig00000088), + .O(sig00000180) + ); + MUXCY blk0000002c ( + .CI(sig00000067), + .DI(sig0000015a), + .S(sig00000088), + .O(sig00000068) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000002d ( + .I0(sig0000016e), + .I1(sig0000015a), + .O(sig00000088) + ); + XORCY blk0000002e ( + .CI(sig00000066), + .LI(sig00000087), + .O(sig0000017f) + ); + MUXCY blk0000002f ( + .CI(sig00000066), + .DI(sig00000159), + .S(sig00000087), + .O(sig00000067) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000030 ( + .I0(sig0000016d), + .I1(sig00000159), + .O(sig00000087) + ); + XORCY blk00000031 ( + .CI(sig00000065), + .LI(sig00000086), + .O(sig0000017e) + ); + MUXCY blk00000032 ( + .CI(sig00000065), + .DI(sig00000158), + .S(sig00000086), + .O(sig00000066) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000033 ( + .I0(sig00000168), + .I1(sig00000158), + .O(sig00000086) + ); + XORCY blk00000034 ( .CI(sig00000064), - .DI(sig0000014e), + .LI(sig00000085), + .O(sig0000017d) + ); + MUXCY blk00000035 ( + .CI(sig00000064), + .DI(sig00000157), .S(sig00000085), .O(sig00000065) ); LUT2 #( .INIT ( 4'h6 )) - blk0000000a ( - .I0(sig0000014e), - .I1(sig0000015b), + blk00000036 ( + .I0(sig00000132), + .I1(sig00000157), .O(sig00000085) ); - MUXCY blk0000000b ( - .CI(sig00000062), - .DI(sig0000014e), + XORCY blk00000037 ( + .CI(sig00000063), + .LI(sig00000084), + .O(sig0000017c) + ); + MUXCY blk00000038 ( + .CI(sig00000063), + .DI(sig00000156), .S(sig00000084), .O(sig00000064) ); LUT2 #( .INIT ( 4'h6 )) - blk0000000c ( - .I0(sig0000014e), - .I1(sig0000015b), + blk00000039 ( + .I0(sig00000131), + .I1(sig00000156), .O(sig00000084) ); - XORCY blk0000000d ( - .CI(sig00000061), - .LI(sig00000082), - .O(p[46]) - ); - MUXCY blk0000000e ( - .CI(sig00000061), - .DI(sig0000014e), - .S(sig00000082), - .O(sig00000062) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000000f ( - .I0(sig0000014e), - .I1(sig0000015a), - .O(sig00000082) - ); - XORCY blk00000010 ( - .CI(sig00000060), - .LI(sig00000081), - .O(p[45]) - ); - MUXCY blk00000011 ( - .CI(sig00000060), - .DI(sig0000014e), - .S(sig00000081), - .O(sig00000061) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000012 ( - .I0(sig0000014e), - .I1(sig00000159), - .O(sig00000081) - ); - XORCY blk00000013 ( - .CI(sig0000005f), - .LI(sig00000080), - .O(p[44]) - ); - MUXCY blk00000014 ( - .CI(sig0000005f), - .DI(sig0000014e), - .S(sig00000080), - .O(sig00000060) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000015 ( - .I0(sig0000014e), - .I1(sig00000158), - .O(sig00000080) - ); - XORCY blk00000016 ( - .CI(sig0000005e), - .LI(sig0000007f), - .O(p[43]) - ); - MUXCY blk00000017 ( - .CI(sig0000005e), - .DI(sig0000014e), - .S(sig0000007f), - .O(sig0000005f) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000018 ( - .I0(sig0000014e), - .I1(sig00000164), - .O(sig0000007f) - ); - XORCY blk00000019 ( - .CI(sig0000005d), - .LI(sig0000007e), - .O(p[42]) - ); - MUXCY blk0000001a ( - .CI(sig0000005d), - .DI(sig0000014e), - .S(sig0000007e), - .O(sig0000005e) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000001b ( - .I0(sig0000014e), - .I1(sig00000163), - .O(sig0000007e) - ); - XORCY blk0000001c ( - .CI(sig0000005c), - .LI(sig0000007d), - .O(p[41]) - ); - MUXCY blk0000001d ( - .CI(sig0000005c), - .DI(sig0000014e), - .S(sig0000007d), - .O(sig0000005d) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000001e ( - .I0(sig0000014e), - .I1(sig00000162), - .O(sig0000007d) - ); - XORCY blk0000001f ( - .CI(sig0000005b), - .LI(sig0000007c), - .O(p[40]) - ); - MUXCY blk00000020 ( - .CI(sig0000005b), - .DI(sig0000014e), - .S(sig0000007c), - .O(sig0000005c) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000021 ( - .I0(sig0000014e), - .I1(sig00000161), - .O(sig0000007c) - ); - XORCY blk00000022 ( - .CI(sig0000005a), - .LI(sig0000007b), - .O(p[39]) - ); - MUXCY blk00000023 ( - .CI(sig0000005a), - .DI(sig0000014d), - .S(sig0000007b), - .O(sig0000005b) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000024 ( - .I0(sig0000014d), - .I1(sig00000160), - .O(sig0000007b) - ); - XORCY blk00000025 ( - .CI(sig00000059), - .LI(sig0000007a), - .O(p[38]) - ); - MUXCY blk00000026 ( - .CI(sig00000059), - .DI(sig0000014c), - .S(sig0000007a), - .O(sig0000005a) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000027 ( - .I0(sig0000014c), - .I1(sig0000015f), - .O(sig0000007a) - ); - XORCY blk00000028 ( - .CI(sig00000057), - .LI(sig00000079), - .O(p[37]) - ); - MUXCY blk00000029 ( - .CI(sig00000057), - .DI(sig0000014b), - .S(sig00000079), - .O(sig00000059) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000002a ( - .I0(sig0000014b), - .I1(sig0000015e), - .O(sig00000079) - ); - XORCY blk0000002b ( - .CI(sig00000056), - .LI(sig00000077), - .O(p[36]) - ); - MUXCY blk0000002c ( - .CI(sig00000056), - .DI(sig00000149), - .S(sig00000077), - .O(sig00000057) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000002d ( - .I0(sig00000149), - .I1(sig0000015d), - .O(sig00000077) - ); - XORCY blk0000002e ( - .CI(sig00000055), - .LI(sig00000076), - .O(p[35]) - ); - MUXCY blk0000002f ( - .CI(sig00000055), - .DI(sig00000148), - .S(sig00000076), - .O(sig00000056) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000030 ( - .I0(sig00000148), - .I1(sig0000015c), - .O(sig00000076) - ); - XORCY blk00000031 ( - .CI(sig00000054), - .LI(sig00000075), - .O(p[34]) - ); - MUXCY blk00000032 ( - .CI(sig00000054), - .DI(sig00000147), - .S(sig00000075), - .O(sig00000055) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000033 ( - .I0(sig00000147), - .I1(sig00000157), - .O(sig00000075) - ); - XORCY blk00000034 ( - .CI(sig00000053), - .LI(sig00000074), - .O(p[33]) - ); - MUXCY blk00000035 ( - .CI(sig00000053), - .DI(sig00000146), - .S(sig00000074), - .O(sig00000054) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000036 ( - .I0(sig00000146), - .I1(sig00000121), - .O(sig00000074) - ); - XORCY blk00000037 ( - .CI(sig00000052), - .LI(sig00000073), - .O(p[32]) - ); - MUXCY blk00000038 ( - .CI(sig00000052), - .DI(sig00000145), - .S(sig00000073), - .O(sig00000053) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000039 ( - .I0(sig00000145), - .I1(sig00000120), - .O(sig00000073) - ); XORCY blk0000003a ( - .CI(sig00000051), - .LI(sig00000072), - .O(p[31]) + .CI(sig00000062), + .LI(sig00000083), + .O(sig0000017b) ); MUXCY blk0000003b ( - .CI(sig00000051), - .DI(sig00000144), - .S(sig00000072), - .O(sig00000052) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000003c ( - .I0(sig00000144), - .I1(sig0000011f), - .O(sig00000072) - ); - XORCY blk0000003d ( - .CI(sig00000050), - .LI(sig00000071), - .O(p[30]) - ); - MUXCY blk0000003e ( - .CI(sig00000050), - .DI(sig00000143), - .S(sig00000071), - .O(sig00000051) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000003f ( - .I0(sig00000143), - .I1(sig0000011e), - .O(sig00000071) - ); - XORCY blk00000040 ( - .CI(sig0000004f), - .LI(sig00000070), - .O(p[29]) - ); - MUXCY blk00000041 ( - .CI(sig0000004f), - .DI(sig00000142), - .S(sig00000070), - .O(sig00000050) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000042 ( - .I0(sig00000142), - .I1(sig0000011d), - .O(sig00000070) - ); - XORCY blk00000043 ( - .CI(sig0000004e), - .LI(sig0000006f), - .O(p[28]) - ); - MUXCY blk00000044 ( - .CI(sig0000004e), - .DI(sig00000141), - .S(sig0000006f), - .O(sig0000004f) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000045 ( - .I0(sig00000141), - .I1(sig0000011c), - .O(sig0000006f) - ); - XORCY blk00000046 ( - .CI(sig0000006c), - .LI(sig0000006e), - .O(p[27]) - ); - MUXCY blk00000047 ( - .CI(sig0000006c), - .DI(sig00000140), - .S(sig0000006e), - .O(sig0000004e) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000048 ( - .I0(sig00000140), - .I1(sig0000011b), - .O(sig0000006e) - ); - XORCY blk00000049 ( - .CI(sig0000006b), - .LI(sig0000008d), - .O(p[26]) - ); - MUXCY blk0000004a ( - .CI(sig0000006b), - .DI(sig00000156), - .S(sig0000008d), - .O(sig0000006c) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000004b ( - .I0(sig00000156), - .I1(sig00000130), - .O(sig0000008d) - ); - XORCY blk0000004c ( - .CI(sig0000006a), - .LI(sig0000008c), - .O(p[25]) - ); - MUXCY blk0000004d ( - .CI(sig0000006a), + .CI(sig00000062), .DI(sig00000155), - .S(sig0000008c), - .O(sig0000006b) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000004e ( - .I0(sig00000155), - .I1(sig0000012f), - .O(sig0000008c) - ); - XORCY blk0000004f ( - .CI(sig00000069), - .LI(sig0000008b), - .O(p[24]) - ); - MUXCY blk00000050 ( - .CI(sig00000069), - .DI(sig00000154), - .S(sig0000008b), - .O(sig0000006a) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000051 ( - .I0(sig00000154), - .I1(sig0000012e), - .O(sig0000008b) - ); - XORCY blk00000052 ( - .CI(sig00000068), - .LI(sig0000008a), - .O(p[23]) - ); - MUXCY blk00000053 ( - .CI(sig00000068), - .DI(sig00000153), - .S(sig0000008a), - .O(sig00000069) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000054 ( - .I0(sig00000153), - .I1(sig0000012d), - .O(sig0000008a) - ); - XORCY blk00000055 ( - .CI(sig00000067), - .LI(sig00000089), - .O(p[22]) - ); - MUXCY blk00000056 ( - .CI(sig00000067), - .DI(sig00000152), - .S(sig00000089), - .O(sig00000068) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000057 ( - .I0(sig00000152), - .I1(sig0000012c), - .O(sig00000089) - ); - XORCY blk00000058 ( - .CI(sig00000066), - .LI(sig00000088), - .O(p[21]) - ); - MUXCY blk00000059 ( - .CI(sig00000066), - .DI(sig00000151), - .S(sig00000088), - .O(sig00000067) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000005a ( - .I0(sig00000151), - .I1(sig0000012b), - .O(sig00000088) - ); - XORCY blk0000005b ( - .CI(sig00000063), - .LI(sig00000087), - .O(p[20]) - ); - MUXCY blk0000005c ( - .CI(sig00000063), - .DI(sig00000150), - .S(sig00000087), - .O(sig00000066) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000005d ( - .I0(sig00000150), - .I1(sig0000012a), - .O(sig00000087) - ); - XORCY blk0000005e ( - .CI(sig00000058), - .LI(sig00000083), - .O(p[19]) - ); - MUXCY blk0000005f ( - .CI(sig00000058), - .DI(sig0000014f), .S(sig00000083), .O(sig00000063) ); LUT2 #( .INIT ( 4'h6 )) - blk00000060 ( - .I0(sig0000014f), - .I1(sig00000125), + blk0000003c ( + .I0(sig00000130), + .I1(sig00000155), .O(sig00000083) ); + XORCY blk0000003d ( + .CI(sig00000061), + .LI(sig00000082), + .O(sig0000017a) + ); + MUXCY blk0000003e ( + .CI(sig00000061), + .DI(sig00000154), + .S(sig00000082), + .O(sig00000062) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000003f ( + .I0(sig0000012f), + .I1(sig00000154), + .O(sig00000082) + ); + XORCY blk00000040 ( + .CI(sig00000060), + .LI(sig00000081), + .O(sig00000179) + ); + MUXCY blk00000041 ( + .CI(sig00000060), + .DI(sig00000153), + .S(sig00000081), + .O(sig00000061) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000042 ( + .I0(sig0000012e), + .I1(sig00000153), + .O(sig00000081) + ); + XORCY blk00000043 ( + .CI(sig0000005f), + .LI(sig00000080), + .O(sig00000178) + ); + MUXCY blk00000044 ( + .CI(sig0000005f), + .DI(sig00000152), + .S(sig00000080), + .O(sig00000060) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000045 ( + .I0(sig0000012d), + .I1(sig00000152), + .O(sig00000080) + ); + XORCY blk00000046 ( + .CI(sig0000007d), + .LI(sig0000007f), + .O(sig00000177) + ); + MUXCY blk00000047 ( + .CI(sig0000007d), + .DI(sig00000151), + .S(sig0000007f), + .O(sig0000005f) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000048 ( + .I0(sig0000012c), + .I1(sig00000151), + .O(sig0000007f) + ); + XORCY blk00000049 ( + .CI(sig0000007c), + .LI(sig0000009e), + .O(sig00000194) + ); + MUXCY blk0000004a ( + .CI(sig0000007c), + .DI(sig00000167), + .S(sig0000009e), + .O(sig0000007d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000004b ( + .I0(sig00000141), + .I1(sig00000167), + .O(sig0000009e) + ); + XORCY blk0000004c ( + .CI(sig0000007b), + .LI(sig0000009d), + .O(sig00000193) + ); + MUXCY blk0000004d ( + .CI(sig0000007b), + .DI(sig00000166), + .S(sig0000009d), + .O(sig0000007c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000004e ( + .I0(sig00000140), + .I1(sig00000166), + .O(sig0000009d) + ); + XORCY blk0000004f ( + .CI(sig0000007a), + .LI(sig0000009c), + .O(sig00000192) + ); + MUXCY blk00000050 ( + .CI(sig0000007a), + .DI(sig00000165), + .S(sig0000009c), + .O(sig0000007b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000051 ( + .I0(sig0000013f), + .I1(sig00000165), + .O(sig0000009c) + ); + XORCY blk00000052 ( + .CI(sig00000079), + .LI(sig0000009b), + .O(sig00000191) + ); + MUXCY blk00000053 ( + .CI(sig00000079), + .DI(sig00000164), + .S(sig0000009b), + .O(sig0000007a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000054 ( + .I0(sig0000013e), + .I1(sig00000164), + .O(sig0000009b) + ); + XORCY blk00000055 ( + .CI(sig00000078), + .LI(sig0000009a), + .O(sig00000190) + ); + MUXCY blk00000056 ( + .CI(sig00000078), + .DI(sig00000163), + .S(sig0000009a), + .O(sig00000079) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000057 ( + .I0(sig0000013d), + .I1(sig00000163), + .O(sig0000009a) + ); + XORCY blk00000058 ( + .CI(sig00000077), + .LI(sig00000099), + .O(sig0000018e) + ); + MUXCY blk00000059 ( + .CI(sig00000077), + .DI(sig00000162), + .S(sig00000099), + .O(sig00000078) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005a ( + .I0(sig0000013c), + .I1(sig00000162), + .O(sig00000099) + ); + XORCY blk0000005b ( + .CI(sig00000074), + .LI(sig00000098), + .O(sig0000018d) + ); + MUXCY blk0000005c ( + .CI(sig00000074), + .DI(sig00000161), + .S(sig00000098), + .O(sig00000077) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005d ( + .I0(sig0000013b), + .I1(sig00000161), + .O(sig00000098) + ); + XORCY blk0000005e ( + .CI(sig00000069), + .LI(sig00000094), + .O(sig0000018c) + ); + MUXCY blk0000005f ( + .CI(sig00000069), + .DI(sig00000160), + .S(sig00000094), + .O(sig00000074) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000060 ( + .I0(sig00000136), + .I1(sig00000160), + .O(sig00000094) + ); XORCY blk00000061 ( - .CI(sig0000004d), - .LI(sig00000078), - .O(p[18]) + .CI(sig0000005e), + .LI(sig00000089), + .O(sig00000181) ); MUXCY blk00000062 ( - .CI(sig0000004d), - .DI(sig0000014a), - .S(sig00000078), - .O(sig00000058) + .CI(sig0000005e), + .DI(sig0000015b), + .S(sig00000089), + .O(sig00000069) ); LUT2 #( .INIT ( 4'h6 )) blk00000063 ( - .I0(sig0000014a), - .I1(sig0000011a), - .O(sig00000078) + .I0(sig0000012b), + .I1(sig0000015b), + .O(sig00000089) ); XORCY blk00000064 ( - .CI(sig00000001), - .LI(sig0000006d), - .O(p[17]) + .CI(sig00000012), + .LI(sig0000007e), + .O(sig00000176) ); MUXCY blk00000065 ( - .CI(sig00000001), - .DI(sig0000013f), - .S(sig0000006d), - .O(sig0000004d) + .CI(sig00000012), + .DI(sig00000150), + .S(sig0000007e), + .O(sig0000005e) ); LUT2 #( .INIT ( 4'h6 )) blk00000066 ( - .I0(sig0000013f), - .I1(sig00000119), - .O(sig0000006d) + .I0(sig0000012a), + .I1(sig00000150), + .O(sig0000007e) ); XORCY blk00000067 ( - .CI(sig00000011), - .LI(sig00000029), - .O(sig0000014e) + .CI(sig00000022), + .LI(sig0000003a), + .O(sig0000015f) ); LUT2 #( .INIT ( 4'h6 )) blk00000068 ( - .I0(sig00000100), - .I1(sig00000111), - .O(sig00000029) + .I0(sig00000111), + .I1(sig00000122), + .O(sig0000003a) ); XORCY blk00000069 ( - .CI(sig00000010), - .LI(sig00000028), - .O(sig0000014d) + .CI(sig00000021), + .LI(sig00000039), + .O(sig0000015e) ); MUXCY blk0000006a ( - .CI(sig00000010), - .DI(sig00000100), - .S(sig00000028), - .O(sig00000011) + .CI(sig00000021), + .DI(sig00000111), + .S(sig00000039), + .O(sig00000022) ); LUT2 #( .INIT ( 4'h6 )) blk0000006b ( - .I0(sig00000100), - .I1(sig00000110), - .O(sig00000028) + .I0(sig00000121), + .I1(sig00000111), + .O(sig00000039) ); XORCY blk0000006c ( - .CI(sig0000000f), - .LI(sig00000027), - .O(sig0000014c) + .CI(sig00000020), + .LI(sig00000038), + .O(sig0000015d) ); MUXCY blk0000006d ( - .CI(sig0000000f), - .DI(sig00000100), - .S(sig00000027), - .O(sig00000010) + .CI(sig00000020), + .DI(sig00000111), + .S(sig00000038), + .O(sig00000021) ); LUT2 #( .INIT ( 4'h6 )) blk0000006e ( - .I0(sig00000100), - .I1(sig0000010f), - .O(sig00000027) + .I0(sig00000120), + .I1(sig00000111), + .O(sig00000038) ); XORCY blk0000006f ( - .CI(sig0000000d), - .LI(sig00000026), - .O(sig0000014b) + .CI(sig0000001e), + .LI(sig00000037), + .O(sig0000015c) ); MUXCY blk00000070 ( - .CI(sig0000000d), - .DI(sig00000100), - .S(sig00000026), - .O(sig0000000f) + .CI(sig0000001e), + .DI(sig00000111), + .S(sig00000037), + .O(sig00000020) ); LUT2 #( .INIT ( 4'h6 )) blk00000071 ( - .I0(sig00000100), - .I1(sig0000010e), - .O(sig00000026) + .I0(sig0000011f), + .I1(sig00000111), + .O(sig00000037) ); XORCY blk00000072 ( - .CI(sig0000000c), - .LI(sig00000024), - .O(sig00000149) + .CI(sig0000001d), + .LI(sig00000035), + .O(sig0000015a) ); MUXCY blk00000073 ( - .CI(sig0000000c), - .DI(sig00000100), - .S(sig00000024), - .O(sig0000000d) + .CI(sig0000001d), + .DI(sig00000111), + .S(sig00000035), + .O(sig0000001e) ); LUT2 #( .INIT ( 4'h6 )) blk00000074 ( - .I0(sig00000100), - .I1(sig0000010c), - .O(sig00000024) + .I0(sig0000011d), + .I1(sig00000111), + .O(sig00000035) ); XORCY blk00000075 ( - .CI(sig0000000b), - .LI(sig00000023), - .O(sig00000148) + .CI(sig0000001c), + .LI(sig00000034), + .O(sig00000159) ); MUXCY blk00000076 ( - .CI(sig0000000b), - .DI(sig00000100), - .S(sig00000023), - .O(sig0000000c) + .CI(sig0000001c), + .DI(sig00000111), + .S(sig00000034), + .O(sig0000001d) ); LUT2 #( .INIT ( 4'h6 )) blk00000077 ( - .I0(sig00000100), - .I1(sig0000010b), - .O(sig00000023) + .I0(sig0000011c), + .I1(sig00000111), + .O(sig00000034) ); XORCY blk00000078 ( - .CI(sig0000000a), - .LI(sig00000022), - .O(sig00000147) + .CI(sig0000001b), + .LI(sig00000033), + .O(sig00000158) ); MUXCY blk00000079 ( - .CI(sig0000000a), - .DI(sig00000100), - .S(sig00000022), - .O(sig0000000b) + .CI(sig0000001b), + .DI(sig00000111), + .S(sig00000033), + .O(sig0000001c) ); LUT2 #( .INIT ( 4'h6 )) blk0000007a ( - .I0(sig00000100), - .I1(sig0000010a), - .O(sig00000022) + .I0(sig0000011b), + .I1(sig00000111), + .O(sig00000033) ); XORCY blk0000007b ( - .CI(sig00000009), - .LI(sig00000021), - .O(sig00000146) + .CI(sig0000001a), + .LI(sig00000032), + .O(sig00000157) ); MUXCY blk0000007c ( - .CI(sig00000009), - .DI(sig000000ff), - .S(sig00000021), - .O(sig0000000a) + .CI(sig0000001a), + .DI(sig00000110), + .S(sig00000032), + .O(sig0000001b) ); LUT2 #( .INIT ( 4'h6 )) blk0000007d ( - .I0(sig000000ff), - .I1(sig00000109), - .O(sig00000021) + .I0(sig00000110), + .I1(sig0000011a), + .O(sig00000032) ); XORCY blk0000007e ( - .CI(sig00000008), - .LI(sig00000020), - .O(sig00000145) + .CI(sig00000019), + .LI(sig00000031), + .O(sig00000156) ); MUXCY blk0000007f ( - .CI(sig00000008), - .DI(sig000000fe), - .S(sig00000020), - .O(sig00000009) + .CI(sig00000019), + .DI(sig0000010f), + .S(sig00000031), + .O(sig0000001a) ); LUT2 #( .INIT ( 4'h6 )) blk00000080 ( - .I0(sig000000fe), - .I1(sig00000108), - .O(sig00000020) + .I0(sig0000010f), + .I1(sig00000119), + .O(sig00000031) ); XORCY blk00000081 ( - .CI(sig00000007), - .LI(sig0000001f), - .O(sig00000144) + .CI(sig00000018), + .LI(sig00000030), + .O(sig00000155) ); MUXCY blk00000082 ( - .CI(sig00000007), - .DI(sig000000fd), - .S(sig0000001f), - .O(sig00000008) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000083 ( - .I0(sig000000fd), - .I1(sig00000107), - .O(sig0000001f) - ); - XORCY blk00000084 ( - .CI(sig00000006), - .LI(sig0000001e), - .O(sig00000143) - ); - MUXCY blk00000085 ( - .CI(sig00000006), - .DI(sig000000fc), - .S(sig0000001e), - .O(sig00000007) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000086 ( - .I0(sig000000fc), - .I1(sig00000106), - .O(sig0000001e) - ); - XORCY blk00000087 ( - .CI(sig00000005), - .LI(sig0000001d), - .O(sig00000142) - ); - MUXCY blk00000088 ( - .CI(sig00000005), - .DI(sig000000fb), - .S(sig0000001d), - .O(sig00000006) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000089 ( - .I0(sig000000fb), - .I1(sig00000105), - .O(sig0000001d) - ); - XORCY blk0000008a ( - .CI(sig00000004), - .LI(sig0000001c), - .O(sig00000141) - ); - MUXCY blk0000008b ( - .CI(sig00000004), - .DI(sig000000fa), - .S(sig0000001c), - .O(sig00000005) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000008c ( - .I0(sig000000fa), - .I1(sig00000104), - .O(sig0000001c) - ); - XORCY blk0000008d ( - .CI(sig00000019), - .LI(sig0000001b), - .O(sig00000140) - ); - MUXCY blk0000008e ( - .CI(sig00000019), - .DI(sig000000f9), - .S(sig0000001b), - .O(sig00000004) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000008f ( - .I0(sig000000f9), - .I1(sig00000103), - .O(sig0000001b) - ); - XORCY blk00000090 ( .CI(sig00000018), - .LI(sig00000031), - .O(sig00000156) - ); - MUXCY blk00000091 ( - .CI(sig00000018), - .DI(sig000000f8), - .S(sig00000031), + .DI(sig0000010e), + .S(sig00000030), .O(sig00000019) ); LUT2 #( .INIT ( 4'h6 )) - blk00000092 ( - .I0(sig000000f8), + blk00000083 ( + .I0(sig0000010e), .I1(sig00000118), - .O(sig00000031) + .O(sig00000030) ); - XORCY blk00000093 ( + XORCY blk00000084 ( .CI(sig00000017), - .LI(sig00000030), - .O(sig00000155) + .LI(sig0000002f), + .O(sig00000154) ); - MUXCY blk00000094 ( + MUXCY blk00000085 ( .CI(sig00000017), - .DI(sig000000f7), - .S(sig00000030), + .DI(sig0000010d), + .S(sig0000002f), .O(sig00000018) ); LUT2 #( .INIT ( 4'h6 )) - blk00000095 ( - .I0(sig000000f7), + blk00000086 ( + .I0(sig0000010d), .I1(sig00000117), - .O(sig00000030) + .O(sig0000002f) ); - XORCY blk00000096 ( + XORCY blk00000087 ( .CI(sig00000016), - .LI(sig0000002f), - .O(sig00000154) + .LI(sig0000002e), + .O(sig00000153) ); - MUXCY blk00000097 ( + MUXCY blk00000088 ( .CI(sig00000016), - .DI(sig000000f6), - .S(sig0000002f), + .DI(sig0000010c), + .S(sig0000002e), .O(sig00000017) ); LUT2 #( .INIT ( 4'h6 )) - blk00000098 ( - .I0(sig000000f6), + blk00000089 ( + .I0(sig0000010c), .I1(sig00000116), - .O(sig0000002f) + .O(sig0000002e) ); - XORCY blk00000099 ( + XORCY blk0000008a ( .CI(sig00000015), - .LI(sig0000002e), - .O(sig00000153) + .LI(sig0000002d), + .O(sig00000152) ); - MUXCY blk0000009a ( + MUXCY blk0000008b ( .CI(sig00000015), - .DI(sig000000f5), - .S(sig0000002e), + .DI(sig0000010b), + .S(sig0000002d), .O(sig00000016) ); LUT2 #( .INIT ( 4'h6 )) - blk0000009b ( - .I0(sig000000f5), + blk0000008c ( + .I0(sig0000010b), .I1(sig00000115), - .O(sig0000002e) + .O(sig0000002d) ); - XORCY blk0000009c ( - .CI(sig00000014), - .LI(sig0000002d), - .O(sig00000152) + XORCY blk0000008d ( + .CI(sig0000002a), + .LI(sig0000002c), + .O(sig00000151) ); - MUXCY blk0000009d ( - .CI(sig00000014), - .DI(sig000000f4), - .S(sig0000002d), + MUXCY blk0000008e ( + .CI(sig0000002a), + .DI(sig0000010a), + .S(sig0000002c), .O(sig00000015) ); LUT2 #( .INIT ( 4'h6 )) - blk0000009e ( - .I0(sig000000f4), + blk0000008f ( + .I0(sig0000010a), .I1(sig00000114), - .O(sig0000002d) + .O(sig0000002c) + ); + XORCY blk00000090 ( + .CI(sig00000029), + .LI(sig00000042), + .O(sig00000167) + ); + MUXCY blk00000091 ( + .CI(sig00000029), + .DI(sig00000109), + .S(sig00000042), + .O(sig0000002a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000092 ( + .I0(sig00000109), + .I1(sig00000129), + .O(sig00000042) + ); + XORCY blk00000093 ( + .CI(sig00000028), + .LI(sig00000041), + .O(sig00000166) + ); + MUXCY blk00000094 ( + .CI(sig00000028), + .DI(sig00000108), + .S(sig00000041), + .O(sig00000029) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000095 ( + .I0(sig00000108), + .I1(sig00000128), + .O(sig00000041) + ); + XORCY blk00000096 ( + .CI(sig00000027), + .LI(sig00000040), + .O(sig00000165) + ); + MUXCY blk00000097 ( + .CI(sig00000027), + .DI(sig00000107), + .S(sig00000040), + .O(sig00000028) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000098 ( + .I0(sig00000107), + .I1(sig00000127), + .O(sig00000040) + ); + XORCY blk00000099 ( + .CI(sig00000026), + .LI(sig0000003f), + .O(sig00000164) + ); + MUXCY blk0000009a ( + .CI(sig00000026), + .DI(sig00000106), + .S(sig0000003f), + .O(sig00000027) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000009b ( + .I0(sig00000106), + .I1(sig00000126), + .O(sig0000003f) + ); + XORCY blk0000009c ( + .CI(sig00000025), + .LI(sig0000003e), + .O(sig00000163) + ); + MUXCY blk0000009d ( + .CI(sig00000025), + .DI(sig00000105), + .S(sig0000003e), + .O(sig00000026) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000009e ( + .I0(sig00000105), + .I1(sig00000125), + .O(sig0000003e) ); XORCY blk0000009f ( - .CI(sig00000013), - .LI(sig0000002c), - .O(sig00000151) + .CI(sig00000024), + .LI(sig0000003d), + .O(sig00000162) ); MUXCY blk000000a0 ( - .CI(sig00000013), - .DI(sig000000f3), - .S(sig0000002c), - .O(sig00000014) + .CI(sig00000024), + .DI(sig00000104), + .S(sig0000003d), + .O(sig00000025) ); LUT2 #( .INIT ( 4'h6 )) blk000000a1 ( - .I0(sig000000f3), - .I1(sig00000113), - .O(sig0000002c) + .I0(sig00000104), + .I1(sig00000124), + .O(sig0000003d) ); XORCY blk000000a2 ( - .CI(sig00000012), - .LI(sig0000002b), - .O(sig00000150) + .CI(sig00000023), + .LI(sig0000003c), + .O(sig00000161) ); MUXCY blk000000a3 ( - .CI(sig00000012), - .DI(sig000000f2), - .S(sig0000002b), - .O(sig00000013) + .CI(sig00000023), + .DI(sig00000103), + .S(sig0000003c), + .O(sig00000024) ); LUT2 #( .INIT ( 4'h6 )) blk000000a4 ( - .I0(sig000000f2), - .I1(sig00000112), - .O(sig0000002b) + .I0(sig00000103), + .I1(sig00000123), + .O(sig0000003c) ); XORCY blk000000a5 ( - .CI(sig0000000e), - .LI(sig0000002a), - .O(sig0000014f) + .CI(sig0000001f), + .LI(sig0000003b), + .O(sig00000160) ); MUXCY blk000000a6 ( - .CI(sig0000000e), - .DI(sig000000f1), - .S(sig0000002a), - .O(sig00000012) + .CI(sig0000001f), + .DI(sig00000102), + .S(sig0000003b), + .O(sig00000023) ); LUT2 #( .INIT ( 4'h6 )) blk000000a7 ( - .I0(sig000000f1), - .I1(sig0000010d), - .O(sig0000002a) + .I0(sig00000102), + .I1(sig0000011e), + .O(sig0000003b) ); XORCY blk000000a8 ( - .CI(sig00000003), - .LI(sig00000025), - .O(sig0000014a) + .CI(sig00000014), + .LI(sig00000036), + .O(sig0000015b) ); MUXCY blk000000a9 ( - .CI(sig00000003), - .DI(sig000000f0), - .S(sig00000025), - .O(sig0000000e) + .CI(sig00000014), + .DI(sig00000101), + .S(sig00000036), + .O(sig0000001f) ); LUT2 #( .INIT ( 4'h6 )) blk000000aa ( - .I0(sig000000f0), - .I1(sig00000102), - .O(sig00000025) + .I0(sig00000101), + .I1(sig00000113), + .O(sig00000036) ); XORCY blk000000ab ( - .CI(sig00000001), - .LI(sig0000001a), - .O(sig0000013f) + .CI(sig00000012), + .LI(sig0000002b), + .O(sig00000150) ); MUXCY blk000000ac ( - .CI(sig00000001), - .DI(sig000000ef), - .S(sig0000001a), - .O(sig00000003) + .CI(sig00000012), + .DI(sig00000100), + .S(sig0000002b), + .O(sig00000014) ); LUT2 #( .INIT ( 4'h6 )) blk000000ad ( - .I0(sig000000ef), - .I1(sig00000101), - .O(sig0000001a) + .I0(sig00000100), + .I1(sig00000112), + .O(sig0000002b) ); XORCY blk000000ae ( - .CI(sig00000035), - .LI(sig00000043), - .O(sig0000015b) + .CI(sig00000046), + .LI(sig00000054), + .O(sig0000016c) ); LUT2 #( .INIT ( 4'h6 )) blk000000af ( - .I0(sig00000129), - .I1(sig00000136), - .O(sig00000043) + .I0(sig0000013a), + .I1(sig00000147), + .O(sig00000054) ); XORCY blk000000b0 ( - .CI(sig00000034), - .LI(sig00000042), - .O(sig0000015a) + .CI(sig00000045), + .LI(sig00000053), + .O(sig0000016b) ); MUXCY blk000000b1 ( - .CI(sig00000034), - .DI(sig00000129), - .S(sig00000042), - .O(sig00000035) + .CI(sig00000045), + .DI(sig0000013a), + .S(sig00000053), + .O(sig00000046) ); LUT2 #( .INIT ( 4'h6 )) blk000000b2 ( - .I0(sig00000129), - .I1(sig00000135), - .O(sig00000042) + .I0(sig00000146), + .I1(sig0000013a), + .O(sig00000053) ); XORCY blk000000b3 ( - .CI(sig00000033), - .LI(sig00000041), - .O(sig00000159) + .CI(sig00000044), + .LI(sig00000052), + .O(sig0000016a) ); MUXCY blk000000b4 ( - .CI(sig00000033), - .DI(sig00000129), - .S(sig00000041), - .O(sig00000034) + .CI(sig00000044), + .DI(sig0000013a), + .S(sig00000052), + .O(sig00000045) ); LUT2 #( .INIT ( 4'h6 )) blk000000b5 ( - .I0(sig00000129), - .I1(sig00000134), - .O(sig00000041) + .I0(sig00000145), + .I1(sig0000013a), + .O(sig00000052) ); XORCY blk000000b6 ( - .CI(sig0000003e), - .LI(sig00000040), - .O(sig00000158) + .CI(sig0000004f), + .LI(sig00000051), + .O(sig00000169) ); MUXCY blk000000b7 ( - .CI(sig0000003e), - .DI(sig00000129), - .S(sig00000040), - .O(sig00000033) + .CI(sig0000004f), + .DI(sig0000013a), + .S(sig00000051), + .O(sig00000044) ); LUT2 #( .INIT ( 4'h6 )) blk000000b8 ( - .I0(sig00000129), - .I1(sig00000133), - .O(sig00000040) + .I0(sig00000144), + .I1(sig0000013a), + .O(sig00000051) ); XORCY blk000000b9 ( - .CI(sig0000003d), - .LI(sig0000004c), - .O(sig00000164) + .CI(sig0000004e), + .LI(sig0000005d), + .O(sig00000175) ); MUXCY blk000000ba ( - .CI(sig0000003d), - .DI(sig00000129), - .S(sig0000004c), - .O(sig0000003e) + .CI(sig0000004e), + .DI(sig0000013a), + .S(sig0000005d), + .O(sig0000004f) ); LUT2 #( .INIT ( 4'h6 )) blk000000bb ( - .I0(sig00000129), - .I1(sig0000013e), - .O(sig0000004c) + .I0(sig0000014f), + .I1(sig0000013a), + .O(sig0000005d) ); XORCY blk000000bc ( - .CI(sig0000003c), - .LI(sig0000004b), - .O(sig00000163) + .CI(sig0000004d), + .LI(sig0000005c), + .O(sig00000174) ); MUXCY blk000000bd ( - .CI(sig0000003c), - .DI(sig00000129), - .S(sig0000004b), - .O(sig0000003d) + .CI(sig0000004d), + .DI(sig0000013a), + .S(sig0000005c), + .O(sig0000004e) ); LUT2 #( .INIT ( 4'h6 )) blk000000be ( - .I0(sig00000129), - .I1(sig0000013d), - .O(sig0000004b) + .I0(sig0000014e), + .I1(sig0000013a), + .O(sig0000005c) ); XORCY blk000000bf ( - .CI(sig0000003b), - .LI(sig0000004a), - .O(sig00000162) + .CI(sig0000004c), + .LI(sig0000005b), + .O(sig00000173) ); MUXCY blk000000c0 ( - .CI(sig0000003b), - .DI(sig00000129), - .S(sig0000004a), - .O(sig0000003c) + .CI(sig0000004c), + .DI(sig0000013a), + .S(sig0000005b), + .O(sig0000004d) ); LUT2 #( .INIT ( 4'h6 )) blk000000c1 ( - .I0(sig00000129), - .I1(sig0000013c), - .O(sig0000004a) + .I0(sig0000014d), + .I1(sig0000013a), + .O(sig0000005b) ); XORCY blk000000c2 ( - .CI(sig0000003a), - .LI(sig00000049), - .O(sig00000161) + .CI(sig0000004b), + .LI(sig0000005a), + .O(sig00000172) ); MUXCY blk000000c3 ( - .CI(sig0000003a), - .DI(sig00000129), - .S(sig00000049), - .O(sig0000003b) + .CI(sig0000004b), + .DI(sig0000013a), + .S(sig0000005a), + .O(sig0000004c) ); LUT2 #( .INIT ( 4'h6 )) blk000000c4 ( - .I0(sig00000129), - .I1(sig0000013b), - .O(sig00000049) + .I0(sig0000014c), + .I1(sig0000013a), + .O(sig0000005a) ); XORCY blk000000c5 ( - .CI(sig00000039), - .LI(sig00000048), - .O(sig00000160) + .CI(sig0000004a), + .LI(sig00000059), + .O(sig00000171) ); MUXCY blk000000c6 ( - .CI(sig00000039), - .DI(sig00000128), - .S(sig00000048), - .O(sig0000003a) + .CI(sig0000004a), + .DI(sig00000139), + .S(sig00000059), + .O(sig0000004b) ); LUT2 #( .INIT ( 4'h6 )) blk000000c7 ( - .I0(sig00000128), - .I1(sig0000013a), - .O(sig00000048) + .I0(sig00000139), + .I1(sig0000014b), + .O(sig00000059) ); XORCY blk000000c8 ( - .CI(sig00000038), - .LI(sig00000047), - .O(sig0000015f) + .CI(sig00000049), + .LI(sig00000058), + .O(sig00000170) ); MUXCY blk000000c9 ( - .CI(sig00000038), - .DI(sig00000127), - .S(sig00000047), - .O(sig00000039) + .CI(sig00000049), + .DI(sig00000138), + .S(sig00000058), + .O(sig0000004a) ); LUT2 #( .INIT ( 4'h6 )) blk000000ca ( - .I0(sig00000127), - .I1(sig00000139), - .O(sig00000047) + .I0(sig00000138), + .I1(sig0000014a), + .O(sig00000058) ); XORCY blk000000cb ( - .CI(sig00000037), - .LI(sig00000046), - .O(sig0000015e) + .CI(sig00000048), + .LI(sig00000057), + .O(sig0000016f) ); MUXCY blk000000cc ( - .CI(sig00000037), - .DI(sig00000126), - .S(sig00000046), - .O(sig00000038) + .CI(sig00000048), + .DI(sig00000137), + .S(sig00000057), + .O(sig00000049) ); LUT2 #( .INIT ( 4'h6 )) blk000000cd ( - .I0(sig00000126), - .I1(sig00000138), - .O(sig00000046) + .I0(sig00000137), + .I1(sig00000149), + .O(sig00000057) ); XORCY blk000000ce ( - .CI(sig00000036), - .LI(sig00000045), - .O(sig0000015d) + .CI(sig00000047), + .LI(sig00000056), + .O(sig0000016e) ); MUXCY blk000000cf ( - .CI(sig00000036), - .DI(sig00000124), - .S(sig00000045), - .O(sig00000037) + .CI(sig00000047), + .DI(sig00000135), + .S(sig00000056), + .O(sig00000048) ); LUT2 #( .INIT ( 4'h6 )) blk000000d0 ( - .I0(sig00000124), - .I1(sig00000137), - .O(sig00000045) + .I0(sig00000135), + .I1(sig00000148), + .O(sig00000056) ); XORCY blk000000d1 ( - .CI(sig00000032), - .LI(sig00000044), - .O(sig0000015c) + .CI(sig00000043), + .LI(sig00000055), + .O(sig0000016d) ); MUXCY blk000000d2 ( - .CI(sig00000032), - .DI(sig00000123), - .S(sig00000044), - .O(sig00000036) + .CI(sig00000043), + .DI(sig00000134), + .S(sig00000055), + .O(sig00000047) ); LUT2 #( .INIT ( 4'h6 )) blk000000d3 ( - .I0(sig00000123), - .I1(sig00000132), - .O(sig00000044) + .I0(sig00000134), + .I1(sig00000143), + .O(sig00000055) ); XORCY blk000000d4 ( - .CI(sig00000001), - .LI(sig0000003f), - .O(sig00000157) + .CI(sig00000012), + .LI(sig00000050), + .O(sig00000168) ); MUXCY blk000000d5 ( - .CI(sig00000001), - .DI(sig00000122), - .S(sig0000003f), - .O(sig00000032) + .CI(sig00000012), + .DI(sig00000133), + .S(sig00000050), + .O(sig00000043) ); LUT2 #( .INIT ( 4'h6 )) blk000000d6 ( - .I0(sig00000122), - .I1(sig00000131), - .O(sig0000003f) + .I0(sig00000133), + .I1(sig00000142), + .O(sig00000050) ); FD #( .INIT ( 1'b0 )) blk000000d7 ( .C(clk), - .D(sig000000d8), - .Q(sig00000129) + .D(sig0000018f), + .Q(p[47]) ); FD #( .INIT ( 1'b0 )) blk000000d8 ( .C(clk), - .D(sig000000d7), - .Q(sig00000128) + .D(sig0000018b), + .Q(p[46]) ); FD #( .INIT ( 1'b0 )) blk000000d9 ( .C(clk), - .D(sig000000d6), - .Q(sig00000127) + .D(sig0000018a), + .Q(p[45]) ); FD #( .INIT ( 1'b0 )) blk000000da ( .C(clk), - .D(sig000000d5), - .Q(sig00000126) + .D(sig00000189), + .Q(p[44]) ); FD #( .INIT ( 1'b0 )) blk000000db ( .C(clk), - .D(sig000000d3), - .Q(sig00000124) + .D(sig00000188), + .Q(p[43]) ); FD #( .INIT ( 1'b0 )) blk000000dc ( .C(clk), - .D(sig000000d2), - .Q(sig00000123) + .D(sig00000187), + .Q(p[42]) ); FD #( .INIT ( 1'b0 )) blk000000dd ( .C(clk), - .D(sig000000d1), - .Q(sig00000122) + .D(sig00000186), + .Q(p[41]) ); FD #( .INIT ( 1'b0 )) blk000000de ( .C(clk), - .D(sig000000d0), - .Q(sig00000121) + .D(sig00000185), + .Q(p[40]) ); FD #( .INIT ( 1'b0 )) blk000000df ( .C(clk), - .D(sig000000cf), - .Q(sig00000120) + .D(sig00000184), + .Q(p[39]) ); FD #( .INIT ( 1'b0 )) blk000000e0 ( .C(clk), - .D(sig000000ce), - .Q(sig0000011f) + .D(sig00000183), + .Q(p[38]) ); FD #( .INIT ( 1'b0 )) blk000000e1 ( .C(clk), - .D(sig000000cd), - .Q(sig0000011e) + .D(sig00000182), + .Q(p[37]) ); FD #( .INIT ( 1'b0 )) blk000000e2 ( .C(clk), - .D(sig000000cc), - .Q(sig0000011d) + .D(sig00000180), + .Q(p[36]) ); FD #( .INIT ( 1'b0 )) blk000000e3 ( .C(clk), - .D(sig000000cb), - .Q(sig0000011c) + .D(sig0000017f), + .Q(p[35]) ); FD #( .INIT ( 1'b0 )) blk000000e4 ( .C(clk), - .D(sig000000ca), - .Q(sig0000011b) + .D(sig0000017e), + .Q(p[34]) ); FD #( .INIT ( 1'b0 )) blk000000e5 ( .C(clk), - .D(sig000000e0), - .Q(sig00000130) + .D(sig0000017d), + .Q(p[33]) ); FD #( .INIT ( 1'b0 )) blk000000e6 ( .C(clk), - .D(sig000000df), - .Q(sig0000012f) + .D(sig0000017c), + .Q(p[32]) ); FD #( .INIT ( 1'b0 )) blk000000e7 ( .C(clk), - .D(sig000000de), - .Q(sig0000012e) + .D(sig0000017b), + .Q(p[31]) ); FD #( .INIT ( 1'b0 )) blk000000e8 ( .C(clk), - .D(sig000000dd), - .Q(sig0000012d) + .D(sig0000017a), + .Q(p[30]) ); FD #( .INIT ( 1'b0 )) blk000000e9 ( .C(clk), - .D(sig000000dc), - .Q(sig0000012c) + .D(sig00000179), + .Q(p[29]) ); FD #( .INIT ( 1'b0 )) blk000000ea ( .C(clk), - .D(sig000000db), - .Q(sig0000012b) + .D(sig00000178), + .Q(p[28]) ); FD #( .INIT ( 1'b0 )) blk000000eb ( .C(clk), - .D(sig000000da), - .Q(sig0000012a) + .D(sig00000177), + .Q(p[27]) ); FD #( .INIT ( 1'b0 )) blk000000ec ( .C(clk), - .D(sig000000d9), - .Q(sig00000125) + .D(sig00000194), + .Q(p[26]) ); FD #( .INIT ( 1'b0 )) blk000000ed ( .C(clk), - .D(sig000000d4), - .Q(sig0000011a) + .D(sig00000193), + .Q(p[25]) ); FD #( .INIT ( 1'b0 )) blk000000ee ( .C(clk), - .D(sig000000c9), - .Q(sig00000119) + .D(sig00000192), + .Q(p[24]) ); FD #( .INIT ( 1'b0 )) blk000000ef ( .C(clk), - .D(sig000000c0), - .Q(sig00000111) + .D(sig00000191), + .Q(p[23]) ); FD #( .INIT ( 1'b0 )) blk000000f0 ( .C(clk), - .D(sig000000bf), - .Q(sig00000110) + .D(sig00000190), + .Q(p[22]) ); FD #( .INIT ( 1'b0 )) blk000000f1 ( .C(clk), - .D(sig000000be), - .Q(sig0000010f) + .D(sig0000018e), + .Q(p[21]) ); FD #( .INIT ( 1'b0 )) blk000000f2 ( .C(clk), - .D(sig000000bd), - .Q(sig0000010e) + .D(sig0000018d), + .Q(p[20]) ); FD #( .INIT ( 1'b0 )) blk000000f3 ( .C(clk), - .D(sig000000bb), - .Q(sig0000010c) + .D(sig0000018c), + .Q(p[19]) ); FD #( .INIT ( 1'b0 )) blk000000f4 ( .C(clk), - .D(sig000000ba), - .Q(sig0000010b) + .D(sig00000181), + .Q(p[18]) ); FD #( .INIT ( 1'b0 )) blk000000f5 ( .C(clk), - .D(sig000000b9), - .Q(sig0000010a) + .D(sig00000176), + .Q(p[17]) ); FD #( .INIT ( 1'b0 )) blk000000f6 ( .C(clk), - .D(sig000000b8), - .Q(sig00000109) + .D(sig000000f6), + .Q(sig00000147) ); FD #( .INIT ( 1'b0 )) blk000000f7 ( .C(clk), - .D(sig000000b7), - .Q(sig00000108) + .D(sig000000f5), + .Q(sig00000146) ); FD #( .INIT ( 1'b0 )) blk000000f8 ( .C(clk), - .D(sig000000b6), - .Q(sig00000107) + .D(sig000000f4), + .Q(sig00000145) ); FD #( .INIT ( 1'b0 )) blk000000f9 ( .C(clk), - .D(sig000000b5), - .Q(sig00000106) + .D(sig000000f3), + .Q(sig00000144) ); FD #( .INIT ( 1'b0 )) blk000000fa ( .C(clk), - .D(sig000000b4), - .Q(sig00000105) + .D(sig000000ff), + .Q(sig0000014f) ); FD #( .INIT ( 1'b0 )) blk000000fb ( .C(clk), - .D(sig000000b3), - .Q(sig00000104) + .D(sig000000fe), + .Q(sig0000014e) ); FD #( .INIT ( 1'b0 )) blk000000fc ( .C(clk), - .D(sig000000b2), - .Q(sig00000103) + .D(sig000000fd), + .Q(sig0000014d) ); FD #( .INIT ( 1'b0 )) blk000000fd ( .C(clk), - .D(sig000000c8), - .Q(sig00000118) + .D(sig000000fc), + .Q(sig0000014c) ); FD #( .INIT ( 1'b0 )) blk000000fe ( .C(clk), - .D(sig000000c7), - .Q(sig00000117) + .D(sig000000fb), + .Q(sig0000014b) ); FD #( .INIT ( 1'b0 )) blk000000ff ( .C(clk), - .D(sig000000c6), - .Q(sig00000116) + .D(sig000000fa), + .Q(sig0000014a) ); FD #( .INIT ( 1'b0 )) blk00000100 ( .C(clk), - .D(sig000000c5), - .Q(sig00000115) + .D(sig000000f9), + .Q(sig00000149) ); FD #( .INIT ( 1'b0 )) blk00000101 ( .C(clk), - .D(sig000000c4), - .Q(sig00000114) + .D(sig000000f8), + .Q(sig00000148) ); FD #( .INIT ( 1'b0 )) blk00000102 ( .C(clk), - .D(sig000000c3), - .Q(sig00000113) + .D(sig000000f7), + .Q(sig00000143) ); FD #( .INIT ( 1'b0 )) blk00000103 ( .C(clk), - .D(sig000000c2), - .Q(sig00000112) + .D(sig000000f2), + .Q(sig00000142) ); FD #( .INIT ( 1'b0 )) blk00000104 ( .C(clk), - .D(sig000000c1), - .Q(sig0000010d) + .D(sig000000e9), + .Q(sig0000013a) ); FD #( .INIT ( 1'b0 )) blk00000105 ( .C(clk), - .D(sig000000bc), - .Q(sig00000102) + .D(sig000000e8), + .Q(sig00000139) ); FD #( .INIT ( 1'b0 )) blk00000106 ( .C(clk), - .D(sig000000b1), - .Q(sig00000101) + .D(sig000000e7), + .Q(sig00000138) ); FD #( .INIT ( 1'b0 )) blk00000107 ( .C(clk), - .D(sig000000e5), - .Q(sig00000136) + .D(sig000000e6), + .Q(sig00000137) ); FD #( .INIT ( 1'b0 )) @@ -2120,316 +2168,720 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) FD #( .INIT ( 1'b0 )) blk0000010b ( + .C(clk), + .D(sig000000e1), + .Q(sig00000132) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010c ( + .C(clk), + .D(sig000000e0), + .Q(sig00000131) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010d ( + .C(clk), + .D(sig000000df), + .Q(sig00000130) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010e ( + .C(clk), + .D(sig000000de), + .Q(sig0000012f) + ); + FD #( + .INIT ( 1'b0 )) + blk0000010f ( + .C(clk), + .D(sig000000dd), + .Q(sig0000012e) + ); + FD #( + .INIT ( 1'b0 )) + blk00000110 ( + .C(clk), + .D(sig000000dc), + .Q(sig0000012d) + ); + FD #( + .INIT ( 1'b0 )) + blk00000111 ( + .C(clk), + .D(sig000000db), + .Q(sig0000012c) + ); + FD #( + .INIT ( 1'b0 )) + blk00000112 ( + .C(clk), + .D(sig000000f1), + .Q(sig00000141) + ); + FD #( + .INIT ( 1'b0 )) + blk00000113 ( + .C(clk), + .D(sig000000f0), + .Q(sig00000140) + ); + FD #( + .INIT ( 1'b0 )) + blk00000114 ( + .C(clk), + .D(sig000000ef), + .Q(sig0000013f) + ); + FD #( + .INIT ( 1'b0 )) + blk00000115 ( .C(clk), .D(sig000000ee), .Q(sig0000013e) ); FD #( .INIT ( 1'b0 )) - blk0000010c ( + blk00000116 ( .C(clk), .D(sig000000ed), .Q(sig0000013d) ); FD #( .INIT ( 1'b0 )) - blk0000010d ( + blk00000117 ( .C(clk), .D(sig000000ec), .Q(sig0000013c) ); FD #( .INIT ( 1'b0 )) - blk0000010e ( + blk00000118 ( .C(clk), .D(sig000000eb), .Q(sig0000013b) ); - FD #( - .INIT ( 1'b0 )) - blk0000010f ( - .C(clk), - .D(sig000000ea), - .Q(sig0000013a) - ); - FD #( - .INIT ( 1'b0 )) - blk00000110 ( - .C(clk), - .D(sig000000e9), - .Q(sig00000139) - ); - FD #( - .INIT ( 1'b0 )) - blk00000111 ( - .C(clk), - .D(sig000000e8), - .Q(sig00000138) - ); - FD #( - .INIT ( 1'b0 )) - blk00000112 ( - .C(clk), - .D(sig000000e7), - .Q(sig00000137) - ); - FD #( - .INIT ( 1'b0 )) - blk00000113 ( - .C(clk), - .D(sig000000e6), - .Q(sig00000132) - ); - FD #( - .INIT ( 1'b0 )) - blk00000114 ( - .C(clk), - .D(sig000000e1), - .Q(sig00000131) - ); - FD #( - .INIT ( 1'b0 )) - blk00000115 ( - .C(clk), - .D(sig000000a9), - .Q(sig00000100) - ); - FD #( - .INIT ( 1'b0 )) - blk00000116 ( - .C(clk), - .D(sig000000a8), - .Q(sig000000ff) - ); - FD #( - .INIT ( 1'b0 )) - blk00000117 ( - .C(clk), - .D(sig000000a7), - .Q(sig000000fe) - ); - FD #( - .INIT ( 1'b0 )) - blk00000118 ( - .C(clk), - .D(sig000000a6), - .Q(sig000000fd) - ); FD #( .INIT ( 1'b0 )) blk00000119 ( .C(clk), - .D(sig000000a5), - .Q(sig000000fc) + .D(sig000000ea), + .Q(sig00000136) ); FD #( .INIT ( 1'b0 )) blk0000011a ( .C(clk), - .D(sig000000a3), - .Q(sig000000fb) + .D(sig000000e5), + .Q(sig0000012b) ); FD #( .INIT ( 1'b0 )) blk0000011b ( .C(clk), - .D(sig000000a2), - .Q(sig000000fa) + .D(sig000000da), + .Q(sig0000012a) ); FD #( .INIT ( 1'b0 )) blk0000011c ( .C(clk), - .D(sig000000a1), - .Q(sig000000f9) + .D(sig000000d1), + .Q(sig00000122) ); FD #( .INIT ( 1'b0 )) blk0000011d ( .C(clk), - .D(sig000000a0), - .Q(sig000000f8) + .D(sig000000d0), + .Q(sig00000121) ); FD #( .INIT ( 1'b0 )) blk0000011e ( .C(clk), - .D(sig0000009f), - .Q(sig000000f7) + .D(sig000000cf), + .Q(sig00000120) ); FD #( .INIT ( 1'b0 )) blk0000011f ( .C(clk), - .D(sig0000009e), - .Q(sig000000f6) + .D(sig000000ce), + .Q(sig0000011f) ); FD #( .INIT ( 1'b0 )) blk00000120 ( .C(clk), - .D(sig0000009d), - .Q(sig000000f5) + .D(sig000000cc), + .Q(sig0000011d) ); FD #( .INIT ( 1'b0 )) blk00000121 ( .C(clk), - .D(sig0000009c), - .Q(sig000000f4) + .D(sig000000cb), + .Q(sig0000011c) ); FD #( .INIT ( 1'b0 )) blk00000122 ( .C(clk), - .D(sig0000009b), - .Q(sig000000f3) + .D(sig000000ca), + .Q(sig0000011b) ); FD #( .INIT ( 1'b0 )) blk00000123 ( .C(clk), - .D(sig0000009a), - .Q(sig000000f2) + .D(sig000000c9), + .Q(sig0000011a) ); FD #( .INIT ( 1'b0 )) blk00000124 ( .C(clk), - .D(sig00000098), - .Q(sig000000f1) + .D(sig000000c8), + .Q(sig00000119) ); FD #( .INIT ( 1'b0 )) blk00000125 ( .C(clk), - .D(sig00000097), - .Q(sig000000f0) + .D(sig000000c7), + .Q(sig00000118) ); FD #( .INIT ( 1'b0 )) blk00000126 ( .C(clk), - .D(sig00000096), - .Q(sig000000ef) + .D(sig000000c6), + .Q(sig00000117) ); FD #( .INIT ( 1'b0 )) blk00000127 ( .C(clk), - .D(sig00000095), - .Q(p[16]) + .D(sig000000c5), + .Q(sig00000116) ); FD #( .INIT ( 1'b0 )) blk00000128 ( .C(clk), - .D(sig00000094), - .Q(p[15]) + .D(sig000000c4), + .Q(sig00000115) ); FD #( .INIT ( 1'b0 )) blk00000129 ( .C(clk), - .D(sig00000093), - .Q(p[14]) + .D(sig000000c3), + .Q(sig00000114) ); FD #( .INIT ( 1'b0 )) blk0000012a ( .C(clk), - .D(sig00000092), - .Q(p[13]) + .D(sig000000d9), + .Q(sig00000129) ); FD #( .INIT ( 1'b0 )) blk0000012b ( .C(clk), - .D(sig00000091), - .Q(p[12]) + .D(sig000000d8), + .Q(sig00000128) ); FD #( .INIT ( 1'b0 )) blk0000012c ( .C(clk), - .D(sig00000090), - .Q(p[11]) + .D(sig000000d7), + .Q(sig00000127) ); FD #( .INIT ( 1'b0 )) blk0000012d ( .C(clk), - .D(sig0000008f), - .Q(p[10]) + .D(sig000000d6), + .Q(sig00000126) ); FD #( .INIT ( 1'b0 )) blk0000012e ( .C(clk), - .D(sig000000b0), - .Q(p[9]) + .D(sig000000d5), + .Q(sig00000125) ); FD #( .INIT ( 1'b0 )) blk0000012f ( .C(clk), - .D(sig000000af), - .Q(p[8]) + .D(sig000000d4), + .Q(sig00000124) ); FD #( .INIT ( 1'b0 )) blk00000130 ( .C(clk), - .D(sig000000ae), - .Q(p[7]) + .D(sig000000d3), + .Q(sig00000123) ); FD #( .INIT ( 1'b0 )) blk00000131 ( .C(clk), - .D(sig000000ad), - .Q(p[6]) + .D(sig000000d2), + .Q(sig0000011e) ); FD #( .INIT ( 1'b0 )) blk00000132 ( .C(clk), - .D(sig000000ac), - .Q(p[5]) + .D(sig000000cd), + .Q(sig00000113) ); FD #( .INIT ( 1'b0 )) blk00000133 ( .C(clk), - .D(sig000000ab), - .Q(p[4]) + .D(sig000000c2), + .Q(sig00000112) ); FD #( .INIT ( 1'b0 )) blk00000134 ( .C(clk), - .D(sig000000aa), - .Q(p[3]) + .D(sig000000ba), + .Q(sig00000111) ); FD #( .INIT ( 1'b0 )) blk00000135 ( .C(clk), - .D(sig000000a4), - .Q(p[2]) + .D(sig000000b9), + .Q(sig00000110) ); FD #( .INIT ( 1'b0 )) blk00000136 ( .C(clk), - .D(sig00000099), - .Q(p[1]) + .D(sig000000b8), + .Q(sig0000010f) ); FD #( .INIT ( 1'b0 )) blk00000137 ( .C(clk), - .D(sig0000008e), + .D(sig000000b7), + .Q(sig0000010e) + ); + FD #( + .INIT ( 1'b0 )) + blk00000138 ( + .C(clk), + .D(sig000000b6), + .Q(sig0000010d) + ); + FD #( + .INIT ( 1'b0 )) + blk00000139 ( + .C(clk), + .D(sig000000b4), + .Q(sig0000010c) + ); + FD #( + .INIT ( 1'b0 )) + blk0000013a ( + .C(clk), + .D(sig000000b3), + .Q(sig0000010b) + ); + FD #( + .INIT ( 1'b0 )) + blk0000013b ( + .C(clk), + .D(sig000000b2), + .Q(sig0000010a) + ); + FD #( + .INIT ( 1'b0 )) + blk0000013c ( + .C(clk), + .D(sig000000b1), + .Q(sig00000109) + ); + FD #( + .INIT ( 1'b0 )) + blk0000013d ( + .C(clk), + .D(sig000000b0), + .Q(sig00000108) + ); + FD #( + .INIT ( 1'b0 )) + blk0000013e ( + .C(clk), + .D(sig000000af), + .Q(sig00000107) + ); + FD #( + .INIT ( 1'b0 )) + blk0000013f ( + .C(clk), + .D(sig000000ae), + .Q(sig00000106) + ); + FD #( + .INIT ( 1'b0 )) + blk00000140 ( + .C(clk), + .D(sig000000ad), + .Q(sig00000105) + ); + FD #( + .INIT ( 1'b0 )) + blk00000141 ( + .C(clk), + .D(sig000000ac), + .Q(sig00000104) + ); + FD #( + .INIT ( 1'b0 )) + blk00000142 ( + .C(clk), + .D(sig000000ab), + .Q(sig00000103) + ); + FD #( + .INIT ( 1'b0 )) + blk00000143 ( + .C(clk), + .D(sig000000a9), + .Q(sig00000102) + ); + FD #( + .INIT ( 1'b0 )) + blk00000144 ( + .C(clk), + .D(sig000000a8), + .Q(sig00000101) + ); + FD #( + .INIT ( 1'b0 )) + blk00000145 ( + .C(clk), + .D(sig000000a7), + .Q(sig00000100) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000146 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a4), + .Q(sig00000007) + ); + FD #( + .INIT ( 1'b0 )) + blk00000147 ( + .C(clk), + .D(sig00000007), + .Q(p[14]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000148 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a6), + .Q(sig00000009) + ); + FD #( + .INIT ( 1'b0 )) + blk00000149 ( + .C(clk), + .D(sig00000009), + .Q(p[16]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk0000014a ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a5), + .Q(sig00000008) + ); + FD #( + .INIT ( 1'b0 )) + blk0000014b ( + .C(clk), + .D(sig00000008), + .Q(p[15]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk0000014c ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a3), + .Q(sig00000006) + ); + FD #( + .INIT ( 1'b0 )) + blk0000014d ( + .C(clk), + .D(sig00000006), + .Q(p[13]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk0000014e ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a2), + .Q(sig00000005) + ); + FD #( + .INIT ( 1'b0 )) + blk0000014f ( + .C(clk), + .D(sig00000005), + .Q(p[12]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000150 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a1), + .Q(sig00000004) + ); + FD #( + .INIT ( 1'b0 )) + blk00000151 ( + .C(clk), + .D(sig00000004), + .Q(p[11]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000152 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000a0), + .Q(sig00000003) + ); + FD #( + .INIT ( 1'b0 )) + blk00000153 ( + .C(clk), + .D(sig00000003), + .Q(p[10]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000154 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000c1), + .Q(sig00000011) + ); + FD #( + .INIT ( 1'b0 )) + blk00000155 ( + .C(clk), + .D(sig00000011), + .Q(p[9]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000156 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000c0), + .Q(sig00000010) + ); + FD #( + .INIT ( 1'b0 )) + blk00000157 ( + .C(clk), + .D(sig00000010), + .Q(p[8]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000158 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000bf), + .Q(sig0000000f) + ); + FD #( + .INIT ( 1'b0 )) + blk00000159 ( + .C(clk), + .D(sig0000000f), + .Q(p[7]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk0000015a ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000be), + .Q(sig0000000e) + ); + FD #( + .INIT ( 1'b0 )) + blk0000015b ( + .C(clk), + .D(sig0000000e), + .Q(p[6]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk0000015c ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000bd), + .Q(sig0000000d) + ); + FD #( + .INIT ( 1'b0 )) + blk0000015d ( + .C(clk), + .D(sig0000000d), + .Q(p[5]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk0000015e ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000bc), + .Q(sig0000000c) + ); + FD #( + .INIT ( 1'b0 )) + blk0000015f ( + .C(clk), + .D(sig0000000c), + .Q(p[4]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000160 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000bb), + .Q(sig0000000b) + ); + FD #( + .INIT ( 1'b0 )) + blk00000161 ( + .C(clk), + .D(sig0000000b), + .Q(p[3]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000162 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000b5), + .Q(sig0000000a) + ); + FD #( + .INIT ( 1'b0 )) + blk00000163 ( + .C(clk), + .D(sig0000000a), + .Q(p[2]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000164 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig000000aa), + .Q(sig00000002) + ); + FD #( + .INIT ( 1'b0 )) + blk00000165 ( + .C(clk), + .D(sig00000002), + .Q(p[1]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + blk00000166 ( + .A0(sig00000012), + .A1(sig00000012), + .A2(sig00000012), + .A3(sig00000012), + .CLK(clk), + .D(sig0000009f), + .Q(sig00000001) + ); + FD #( + .INIT ( 1'b0 )) + blk00000167 ( + .C(clk), + .D(sig00000001), .Q(p[0]) ); diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco index 89401df..2273be6 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version 13.2 -# Date: Fri Oct 21 20:38:07 2011 +# Date: Mon Oct 24 22:04:01 2011 # ############################################################## # @@ -49,7 +49,7 @@ CSET multtype=Parallel_Multiplier CSET optgoal=Speed CSET outputwidthhigh=47 CSET outputwidthlow=0 -CSET pipestages=2 +CSET pipestages=3 CSET portatype=Signed CSET portawidth=24 CSET portbtype=Signed @@ -65,4 +65,4 @@ CSET zerodetect=false MISC pkg_timestamp=2011-06-21T06:26:54.000Z # END Extra information GENERATE -# CRC: efe4d30e +# CRC: fd22ef14 diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise index 12daee6..1efcbc5 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise @@ -29,335 +29,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + + diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v index 88379dd..fb18653 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.v @@ -83,11 +83,11 @@ output [15 : 0] doutb; .C_HAS_RSTB(0), .C_HAS_SOFTECC_INPUT_REGS_A(0), .C_HAS_SOFTECC_OUTPUT_REGS_B(0), - .C_INIT_FILE_NAME("no_coe_file_loaded"), + .C_INIT_FILE_NAME("cx4_pgmrom.mif"), .C_INITA_VAL("0"), .C_INITB_VAL("0"), .C_INTERFACE_TYPE(0), - .C_LOAD_INIT_FILE(0), + .C_LOAD_INIT_FILE(1), .C_MEM_TYPE(1), .C_MUX_PIPELINE_STAGES(0), .C_PRIM_TYPE(1), diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco index 59cb743..3e5d771 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version 13.2 -# Date: Tue Oct 18 18:45:53 2011 +# Date: Sun Oct 23 22:07:47 2011 # ############################################################## # @@ -46,7 +46,7 @@ CSET axi_id_width=4 CSET axi_slave_type=Memory_Slave CSET axi_type=AXI4_Full CSET byte_size=9 -CSET coe_file=no_coe_file_loaded +CSET coe_file=/home/ikari/prj/sd2snes/verilog/sd2snes_cx4/cx4_e.coe CSET collision_warnings=ALL CSET component_name=cx4_pgmrom CSET disable_collision_warnings=false @@ -58,7 +58,7 @@ CSET enable_b=Always_Enabled CSET error_injection_type=Single_Bit_Error_Injection CSET fill_remaining_memory_locations=false CSET interface_type=Native -CSET load_init_file=false +CSET load_init_file=true CSET memory_type=Simple_Dual_Port_RAM CSET operating_mode_a=WRITE_FIRST CSET operating_mode_b=WRITE_FIRST @@ -102,4 +102,4 @@ CSET write_width_b=16 MISC pkg_timestamp=2011-03-11T08:24:14.000Z # END Extra information GENERATE -# CRC: 30264765 +# CRC: a9280b11 diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise index 72cb4ec..81e9188 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_pgmrom.xise @@ -50,8 +50,8 @@ - - + + diff --git a/verilog/sd2snes_cx4/main.v b/verilog/sd2snes_cx4/main.v index b8fcf11..93c69dd 100644 --- a/verilog/sd2snes_cx4/main.v +++ b/verilog/sd2snes_cx4/main.v @@ -106,6 +106,10 @@ wire [7:0] CX4_SNES_DATA_OUT; wire [23:0] MAPPED_SNES_ADDR; wire ROM_ADDR0; +wire [23:0] cx4_datrom_data; +wire [9:0] cx4_datrom_addr; +wire cx4_datrom_we; + sd_dma snes_sd_dma( .CLK(CLK2), .SD_DAT(SD_DAT), @@ -226,7 +230,11 @@ mcu_cmd snes_mcu_cmd( .mcu_rrq(MCU_RRQ), .mcu_wrq(MCU_WRQ), .mcu_rq_rdy(MCU_RDY), - .use_msu1(use_msu1) + .use_msu1(use_msu1), + .cx4_datrom_addr_out(cx4_datrom_addr), + .cx4_datrom_data_out(cx4_datrom_data), + .cx4_datrom_we_out(cx4_datrom_we), + .cx4_reset_out(cx4_reset) ); wire [7:0] DCM_STATUS; @@ -285,9 +293,9 @@ cx4 snes_cx4 ( .nRD(SNES_READ), .nWR(SNES_WRITE), .CLK(CLK2), - .DATROM_DI(DATROM_DI), - .DATROM_WE(DATROM_WE), - .DATROM_ADDR(DATROM_ADDR), + .DATROM_DI(cx4_datrom_data), + .DATROM_WE(cx4_datrom_we), + .DATROM_ADDR(cx4_datrom_addr), .BUS_DI(CX4_DINr), .BUS_ADDR(CX4_ADDR), .BUS_RRQ(CX4_RRQ), diff --git a/verilog/sd2snes_cx4/sd2snes_cx4.xise b/verilog/sd2snes_cx4/sd2snes_cx4.xise index 0c67fd3..82ca3c5 100644 --- a/verilog/sd2snes_cx4/sd2snes_cx4.xise +++ b/verilog/sd2snes_cx4/sd2snes_cx4.xise @@ -283,14 +283,14 @@ - - + + - + @@ -311,7 +311,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -338,8 +338,8 @@ - - + + @@ -361,13 +361,13 @@ - + - - + + @@ -405,7 +405,7 @@ - + From 7643790fedd67f2ac3a126c47b2d6fb202ef9ff7 Mon Sep 17 00:00:00 2001 From: ikari Date: Sun, 30 Oct 2011 01:53:56 +0200 Subject: [PATCH 06/11] FPGA/Cx4: fully operational except reset vector area --- verilog/sd2snes_cx4/cx4.v | 212 +- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v | 3058 ++++++++----------- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco | 6 +- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise | 4 +- verilog/sd2snes_cx4/main.v | 240 +- verilog/sd2snes_cx4/sd2snes_cx4.xise | 8 +- 6 files changed, 1535 insertions(+), 1993 deletions(-) diff --git a/verilog/sd2snes_cx4/cx4.v b/verilog/sd2snes_cx4/cx4.v index 4eb055b..06d943d 100644 --- a/verilog/sd2snes_cx4/cx4.v +++ b/verilog/sd2snes_cx4/cx4.v @@ -42,28 +42,24 @@ parameter BUSY_DMA = 2'b01; parameter BUSY_CPU = 2'b10; wire datram_enable = CS & (ADDR[11:0] < 12'hc00); -wire mmio_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] <= 8'b11001); -wire status_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] > 8'b11001); +wire mmio_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] < 5'b10011); +wire status_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] >= 5'b10011); wire vector_enable = CS & (ADDR[12:5] == 8'b11111011); wire gpr_enable = CS & (&(ADDR[12:7]) && ADDR[5:4] != 2'b11); wire pgmrom_enable = CS & (ADDR[12:5] == 8'b11110000); -wire debug_enable = CS & (&(ADDR[12:7]) && &(ADDR[5:4])); wire [7:0] DATRAM_DO; -reg [7:0] MMIO_DOr; +reg [7:0] MMIO_DOr; wire [7:0] MMIO_DO; wire [7:0] STATUS_DO; wire [7:0] VECTOR_DO; wire [7:0] GPR_DO; -wire [7:0] DEBUG_DO; -reg [7:0] DEBUG_DOr; assign DO = datram_enable ? DATRAM_DO : mmio_enable ? MMIO_DO : status_enable ? STATUS_DO : vector_enable ? VECTOR_DO : gpr_enable ? GPR_DO - : debug_enable ? DEBUG_DO : 8'h00; /* 0x1f40 - 0x1f52: MMIO @@ -71,33 +67,37 @@ assign DO = datram_enable ? DATRAM_DO reg [23:0] cx4_mmio_dmasrc; reg [15:0] cx4_mmio_dmalen; reg [23:0] cx4_mmio_dmatgt; -reg cx4_mmio_cachepage; +reg cx4_mmio_cachepage; reg [23:0] cx4_mmio_pgmoff; -reg [1:0] cx4_mmio_r1f4c; +reg [1:0] cx4_mmio_savepage; reg [14:0] cx4_mmio_pgmpage; -reg [7:0] cx4_mmio_pc; -reg [7:0] cx4_mmio_r1f50; -reg cx4_mmio_r1f51; -reg cx4_mmio_r1f52; +reg [7:0] cx4_mmio_pc; +reg [7:0] cx4_mmio_r1f50; +reg cx4_mmio_r1f51; +reg cx4_mmio_r1f52; /* 0x1f53 - 0x1f5f: status register */ assign cx4_active = |cx4_busy; /* 0x1f60 - 0x1f7f: reset vectors */ -reg [7:0] vector [31:0]; +reg [7:0] vector [31:0]; /* 0x1f80 - 0x1faf (0x1fc0 - 0x1fef): general purpose register file SNES: 8 bits / CX4: 24 bits */ -reg [7:0] gpr [47:0]; +reg [7:0] gpr [47:0]; wire [47:0] cpu_mul_result; +reg [14:0] cx4_mmio_pagemem[1:0]; + reg [23:0] const [15:0]; -reg [15:0] cachetag [1:0]; // 15: valid; 14-0: bank number +reg [14:0] cachetag [1:0]; // 14-0: bank number +reg [1:0] cachevalid; + reg [14:0] cache_pgmpage; reg [14:0] cpu_cache_pgmpage; -reg cache_cachepage; -reg cpu_cache_cachepage; -reg cpu_cache_done; -reg [7:0] cpu_pc_stack [7:0]; -reg [7:0] cpu_page_stack; +reg cache_cachepage; +reg cpu_cache_cachepage; +reg cpu_cache_done; +reg [7:0] cpu_pc_stack [7:0]; +reg [7:0] cpu_page_stack; initial begin cache_pgmpage = 15'b0; @@ -105,14 +105,16 @@ initial begin cache_cachepage = 1'b0; cpu_cache_cachepage = 1'b0; cpu_cache_done = 1'b0; - cachetag[0] = 16'h0000; - cachetag[1] = 16'h0000; + cachetag[0] = 14'h0000; + cachetag[1] = 14'h0000; + cachevalid = 2'b00; cx4_busy = 3'b000; cx4_mmio_pgmoff = 24'h000000; cx4_mmio_pgmpage = 15'h0000; cx4_mmio_dmasrc = 24'h000000; cx4_mmio_dmalen = 16'h0000; cx4_mmio_dmatgt = 24'h000000; + cx4_mmio_savepage = 2'b00; const[0] = 24'h000000; const[1] = 24'hffffff; const[2] = 24'h00ff00; @@ -144,7 +146,6 @@ assign MMIO_DO = MMIO_DOr; assign VECTOR_DO = vector [ADDR[4:0]]; assign GPR_DO = gpr [ADDR[5:0]]; assign STATUS_DO = {1'b0, cx4_active, 4'b0000, ~cx4_active, 1'b0}; -assign DEBUG_DO = DEBUG_DOr; reg [7:0] DIr; always @(posedge CLK) DIr <= DI; @@ -198,6 +199,11 @@ assign BUS_RRQ = CACHE_BUS_RRQr | DMA_BUS_RRQr | cpu_bus_rq; reg cpu_page; reg [14:0] cpu_p; reg [7:0] cpu_pc; +reg [23:0] cpu_a; +reg fl_n; +reg fl_z; +reg fl_c; + reg cpu_go_en_r; initial cpu_go_en_r = 1'b0; @@ -222,69 +228,58 @@ always @(posedge CLK) begin 5'h09: MMIO_DOr <= cx4_mmio_pgmoff[7:0]; // 1f49 5'h0a: MMIO_DOr <= cx4_mmio_pgmoff[15:8]; // 1f4a 5'h0b: MMIO_DOr <= cx4_mmio_pgmoff[23:16]; // 1f4b - 5'h0c: MMIO_DOr <= {6'b0, cx4_mmio_r1f4c}; // 1f4c + 5'h0c: MMIO_DOr <= {6'b0, cx4_mmio_savepage}; // 1f4c 5'h0d: MMIO_DOr <= cx4_mmio_pgmpage[7:0]; // 1f4d 5'h0e: MMIO_DOr <= {1'b0, cx4_mmio_pgmpage[14:8]}; // 1f4e 5'h0f: MMIO_DOr <= cx4_mmio_pc; // 1f4f 5'h10: MMIO_DOr <= cx4_mmio_r1f50; // 1f50 5'h11: MMIO_DOr <= {7'b0, cx4_mmio_r1f51}; // 1f51 - 5'h12: MMIO_DOr <= {7'b0, cx4_mmio_r1f52}; // 1f52 + 5'h12: MMIO_DOr <= {7'b0, cx4_mmio_r1f52}; // 1f52 default: MMIO_DOr <= 8'hff; endcase end -always @(posedge CLK) begin - case(ADDR[3:0]) - 4'h0: DEBUG_DOr <= cachetag[0][15:8]; // 1f40 - 4'h1: DEBUG_DOr <= cachetag[0][7:0]; // 1f41 - 4'h2: DEBUG_DOr <= cachetag[1][15:8]; // 1f42 - 4'h3: DEBUG_DOr <= cachetag[1][7:0]; // 1f43 - 4'h4: DEBUG_DOr <= cpu_page; - 4'h5: DEBUG_DOr <= cpu_p; - 4'h6: DEBUG_DOr <= cpu_pc; - 4'h7: DEBUG_DOr <= cx4_busy; - 4'h8: DEBUG_DOr <= cpu_page_stack[0]; - 4'h9: DEBUG_DOr <= cpu_pc_stack[0]; - 4'ha: DEBUG_DOr <= cpu_page_stack[1]; - 4'hb: DEBUG_DOr <= cpu_pc_stack[1]; - 4'hc: DEBUG_DOr <= cpu_page_stack[2]; - 4'hd: DEBUG_DOr <= cpu_pc_stack[2]; - 4'he: DEBUG_DOr <= cpu_page_stack[3]; - 4'hf: DEBUG_DOr <= cpu_pc_stack[3]; - endcase -end - always @(posedge CLK) begin if(MMIO_WR_EN) begin case(ADDR[4:0]) - 5'h00: cx4_mmio_dmasrc[7:0] <= DI; // 1f40 - 5'h01: cx4_mmio_dmasrc[15:8] <= DI; // 1f41 - 5'h02: cx4_mmio_dmasrc[23:16] <= DI; // 1f42 - 5'h03: cx4_mmio_dmalen[7:0] <= DI; // 1f43 - 5'h04: cx4_mmio_dmalen[15:8] <= DI; // 1f44 - 5'h05: cx4_mmio_dmatgt[7:0] <= DI; // 1f45 - 5'h06: cx4_mmio_dmatgt[15:8] <= DI; // 1f46 + 5'h00: cx4_mmio_dmasrc[7:0] <= DIr; // 1f40 + 5'h01: cx4_mmio_dmasrc[15:8] <= DIr; // 1f41 + 5'h02: cx4_mmio_dmasrc[23:16] <= DIr; // 1f42 + 5'h03: cx4_mmio_dmalen[7:0] <= DIr; // 1f43 + 5'h04: cx4_mmio_dmalen[15:8] <= DIr; // 1f44 + 5'h05: cx4_mmio_dmatgt[7:0] <= DIr; // 1f45 + 5'h06: cx4_mmio_dmatgt[15:8] <= DIr; // 1f46 5'h07: begin - cx4_mmio_dmatgt[23:16] <= DI; // 1f47 + cx4_mmio_dmatgt[23:16] <= DIr; // 1f47 DMA_TRIG_ENr <= 1'b1; end 5'h08: begin - cx4_mmio_cachepage <= DI[0]; // 1f48 + cx4_mmio_cachepage <= DIr[0]; // 1f48 CACHE_TRIG_ENr <= 1'b1; end - 5'h09: cx4_mmio_pgmoff[7:0] <= DI; // 1f49 - 5'h0a: cx4_mmio_pgmoff[15:8] <= DI; // 1f4a - 5'h0b: cx4_mmio_pgmoff[23:16] <= DI; // 1f4b - 5'h0c: cx4_mmio_r1f4c <= DI[1:0]; // 1f4c - 5'h0d: cx4_mmio_pgmpage[7:0] <= DI; // 1f4d - 5'h0e: cx4_mmio_pgmpage[14:8] <= DI[6:0]; // 1f4e + 5'h09: cx4_mmio_pgmoff[7:0] <= DIr; // 1f49 + 5'h0a: cx4_mmio_pgmoff[15:8] <= DIr; // 1f4a + 5'h0b: cx4_mmio_pgmoff[23:16] <= DIr; // 1f4b + 5'h0c: begin + cx4_mmio_savepage <= DIr[1:0]; + if(DIr[0]) cx4_mmio_pagemem[0] <= cx4_mmio_pgmpage; + if(DIr[1]) cx4_mmio_pagemem[1] <= cx4_mmio_pgmpage; + end + 5'h0d: cx4_mmio_pgmpage[7:0] <= DIr; // 1f4d + 5'h0e: cx4_mmio_pgmpage[14:8] <= DIr[6:0]; // 1f4e 5'h0f: begin - cx4_mmio_pc <= DI; // 1f4f + cx4_mmio_pc <= DIr; // 1f4f + if(cx4_mmio_savepage[0] + && cx4_mmio_pagemem[0] == cx4_mmio_pgmpage) + cx4_mmio_cachepage <= 1'b0; + else if(cx4_mmio_savepage[1] + && cx4_mmio_pagemem[1] == cx4_mmio_pgmpage) + cx4_mmio_cachepage <= 1'b1; cpu_go_en_r <= 1'b1; end - 5'h10: cx4_mmio_r1f50 <= DI & 8'h77; // 1f50 - 5'h11: cx4_mmio_r1f51 <= DI[0]; // 1f51 - 5'h12: cx4_mmio_r1f52 <= DI[0]; // 1f52 + 5'h10: cx4_mmio_r1f50 <= DIr & 8'h77; // 1f50 + 5'h11: cx4_mmio_r1f51 <= DIr[0]; // 1f51 + 5'h12: cx4_mmio_r1f52 <= DIr[0]; // 1f52 endcase end else begin CACHE_TRIG_ENr <= 1'b0; @@ -294,7 +289,7 @@ always @(posedge CLK) begin end always @(posedge CLK) begin - if(VECTOR_WR_EN) vector[ADDR[4:0]] <= DI; + if(VECTOR_WR_EN) vector[ADDR[4:0]] <= DIr; end reg [4:0] CACHE_ST; @@ -333,14 +328,14 @@ always @(posedge CLK) begin case(CACHE_ST) ST_CACHE_IDLE: begin if(CACHE_TRIG_EN - & (~cachetag[cx4_mmio_cachepage][15] - | |(cachetag[cx4_mmio_cachepage][14:0] ^ cx4_mmio_pgmpage))) begin + & (~cachevalid[cx4_mmio_cachepage] + | |(cachetag[cx4_mmio_cachepage] ^ cx4_mmio_pgmpage))) begin CACHE_ST <= ST_CACHE_START; cache_pgmpage <= cx4_mmio_pgmpage; cache_cachepage <= cx4_mmio_cachepage; end else if(cpu_cache_en - & (~cachetag[~cpu_page][15] - | |(cachetag[~cpu_page][14:0] ^ cpu_p))) begin + & (~cachevalid[~cpu_page] + | |(cachetag[~cpu_page] ^ cpu_p))) begin CACHE_ST <= ST_CACHE_START; cache_pgmpage <= cpu_p; cache_cachepage <= ~cpu_page; @@ -370,7 +365,8 @@ always @(posedge CLK) begin cx4_pgmrom_addr <= cx4_pgmrom_addr + 1; if(cache_count == 9'h1ff) begin cx4_busy[BUSY_CACHE] <= 1'b0; - cachetag[cache_cachepage] <= {1'b1,cache_pgmpage}; + cachetag[cache_cachepage] <= cache_pgmpage; + cachevalid[cache_cachepage] <= 1'b1; CACHE_ST <= ST_CACHE_IDLE; end else begin CACHE_BUS_RRQr <= 1'b1; @@ -439,7 +435,6 @@ reg [2:0] cpu_sp; initial cpu_sp = 3'b000; wire [15:0] cpu_op_w; reg [15:0] cpu_op; -reg [23:0] cpu_a; reg [23:0] cpu_busdata; reg [23:0] cpu_romdata; reg [23:0] cpu_ramdata; @@ -455,9 +450,6 @@ reg [23:0] cpu_dummy; reg [23:0] cpu_tmp; reg [23:0] cpu_sa; // tmp register for shifted accumulator -reg fl_n; -reg fl_z; -reg fl_c; wire [9:0] cx4_datrom_addr = cpu_a[9:0]; wire [23:0] cx4_datrom_do; @@ -499,19 +491,24 @@ reg op_call; reg op_jump; reg condtrue; -/* XXX DEBUG */ -reg [23:0] dbg_cnt; -initial dbg_cnt = 24'b0; -always @(posedge CLK) dbg_cnt <= dbg_cnt + 1; -wire step_enable = 1'b1; - always @(posedge CLK) begin if(cpu_go_en_r) cx4_busy[BUSY_CPU] <= 1'b1; - else if((op == OP_HLT) && step_enable) cx4_busy[BUSY_CPU] <= 1'b0; + else if(op == OP_HLT) cx4_busy[BUSY_CPU] <= 1'b0; end always @(posedge CLK) begin -if(step_enable | cpu_go_en_r) begin + case(op_sa) + 2'b00: cpu_sa <= cpu_a; + 2'b01: cpu_sa <= cpu_a << 1; + 2'b10: cpu_sa <= cpu_a << 8; + 2'b11: cpu_sa <= cpu_a << 16; + endcase +end + +reg jp_docache; +initial jp_docache = 1'b0; + +always @(posedge CLK) begin case(CPU_STATE) ST_CPU_IDLE: begin if(cpu_go_en_r) begin @@ -537,6 +534,10 @@ if(step_enable | cpu_go_en_r) begin 2'b00: condtrue <= fl_c; 2'b01: condtrue <= fl_n; endcase + if(op_p && !jp_docache) begin + jp_docache <= 1'b1; + cpu_cache_en <= 1'b1; + end end OP_SKIP: begin case(cpu_op[9:8]) @@ -562,14 +563,6 @@ if(step_enable | cpu_go_en_r) begin gpr[op_param[3:0]*3]}; default: cpu_idb <= 24'b0; endcase - if(op==OP_ALU || op==OP_CMP) begin - case(op_sa) - 2'b00: cpu_sa <= cpu_a; - 2'b01: cpu_sa <= cpu_a << 1; - 2'b10: cpu_sa <= cpu_a << 8; - 2'b11: cpu_sa <= cpu_a << 16; - endcase - end end OP_ST: begin cpu_idb <= cpu_a; @@ -615,9 +608,12 @@ if(step_enable | cpu_go_en_r) begin end ST_CPU_1: begin CPU_STATE <= ST_CPU_2; + condtrue <= 1'b0; case(op) OP_JP: begin - if(!cx4_busy[BUSY_CACHE]) begin + cpu_cache_en <= 1'b0; + if(!cpu_cache_en && !cx4_busy[BUSY_CACHE]) begin + jp_docache <= 1'b0; if(condtrue) begin if(op_call) begin cpu_page_stack[cpu_sp] <= cpu_page; @@ -659,10 +655,8 @@ if(step_enable | cpu_go_en_r) begin end OP_ST, OP_SWP: begin casex(op_param) -// 8'h00: cpu_a <= cpu_idb; 8'h01: cpu_acch <= cpu_idb; 8'h02: cpu_accl <= cpu_idb; -// 8'h03: cpu_busdata <= cpu_idb; 8'h08: cpu_romdata <= cpu_idb; 8'h0c: cpu_ramdata <= cpu_idb; 8'h13: cpu_busaddr <= cpu_idb; @@ -707,8 +701,8 @@ if(step_enable | cpu_go_en_r) begin 5'b10110: cpu_alu_res <= cpu_sa & cpu_idb; 5'b10111: cpu_alu_res <= cpu_sa | cpu_idb; 5'b11000: cpu_alu_res <= cpu_a >> cpu_idb; - 5'b11001: cpu_alu_res <= $signed(cpu_a) >>> cpu_idb; - 5'b11010: {cpu_alu_res[23:0]} <= {cpu_a, cpu_a} >> cpu_idb; + 5'b11001: cpu_alu_res <= ($signed(cpu_a)) >>> cpu_idb; + 5'b11010: {cpu_dummy, cpu_alu_res[23:0]} <= {cpu_a, cpu_a} >> cpu_idb; 5'b11011: cpu_alu_res <= cpu_a << cpu_idb; endcase end @@ -717,12 +711,6 @@ if(step_enable | cpu_go_en_r) begin ST_CPU_3: begin CPU_STATE <= ST_CPU_0; case(op) - OP_LD: begin - casex(cpu_op[11:8]) - 4'b0x11: cpu_cache_en <= 1'b1; - 4'b1100: cpu_cache_en <= 1'b1; - endcase - end OP_BUS: cpu_busaddr <= cpu_busaddr + 1; OP_WRRAM: cx4_cpu_datram_we <= 1'b0; OP_CMP: begin @@ -803,12 +791,14 @@ if(step_enable | cpu_go_en_r) begin end endcase end -end reg[2:0] BUSRD_STATE; -parameter ST_BUSRD_IDLE = 2'b01; -parameter ST_BUSRD_WAIT = 2'b10; +parameter ST_BUSRD_IDLE = 3'b001; +parameter ST_BUSRD_WAIT = 3'b010; +parameter ST_BUSRD_END = 3'b100; initial BUSRD_STATE = ST_BUSRD_IDLE; +reg cpu_bus_rq2; +always @(posedge CLK) cpu_bus_rq2 <= cpu_bus_rq; always @(posedge CLK) begin if(CPU_STATE == ST_CPU_2 @@ -818,13 +808,15 @@ always @(posedge CLK) begin else begin case(BUSRD_STATE) ST_BUSRD_IDLE: begin - if(cpu_bus_rq) begin + if(cpu_bus_rq2) begin BUSRD_STATE <= ST_BUSRD_WAIT; end end ST_BUSRD_WAIT: begin - if(BUS_RDY) BUSRD_STATE <= ST_BUSRD_IDLE; + if(BUS_RDY) BUSRD_STATE <= ST_BUSRD_END; else BUSRD_STATE <= ST_BUSRD_WAIT; + end + ST_BUSRD_END: begin if(~cpu_busaddr[22]) cpu_busdata <= BUS_DI; else cpu_busdata <= 8'h00; end @@ -841,7 +833,7 @@ always @(posedge CLK) begin gpr[op_param[3:0]*3+1] <= cpu_idb[15:8]; gpr[op_param[3:0]*3] <= cpu_idb[7:0]; end - else if(GPR_WR_EN) gpr[ADDR[5:0]] <= DI; + else if(GPR_WR_EN) gpr[ADDR[5:0]] <= DIr; end /*************************** @@ -861,7 +853,7 @@ cx4_datram cx4_datram ( .clka(CLK), // input clka .wea(DATRAM_WR_EN), // input [0 : 0] wea .addra(ADDR[11:0]), // input [11 : 0] addra - .dina(DI), // input [7 : 0] dina + .dina(DIr), // input [7 : 0] dina .douta(DATRAM_DO), // output [7 : 0] douta .clkb(CLK), // input clkb .web(cx4_datram_we), // input [0 : 0] web diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v index ebb89bc..da8b924 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v @@ -7,7 +7,7 @@ // \ \ \/ Version: O.61xd // \ \ Application: netgen // / / Filename: cx4_mul.v -// /___/ /\ Timestamp: Tue Oct 25 00:04:23 2011 +// /___/ /\ Timestamp: Fri Oct 28 10:30:51 2011 // \ \ / \ // \___\/\___\ // @@ -399,54 +399,6 @@ module cx4_mul ( wire sig00000162; wire sig00000163; wire sig00000164; - wire sig00000165; - wire sig00000166; - wire sig00000167; - wire sig00000168; - wire sig00000169; - wire sig0000016a; - wire sig0000016b; - wire sig0000016c; - wire sig0000016d; - wire sig0000016e; - wire sig0000016f; - wire sig00000170; - wire sig00000171; - wire sig00000172; - wire sig00000173; - wire sig00000174; - wire sig00000175; - wire sig00000176; - wire sig00000177; - wire sig00000178; - wire sig00000179; - wire sig0000017a; - wire sig0000017b; - wire sig0000017c; - wire sig0000017d; - wire sig0000017e; - wire sig0000017f; - wire sig00000180; - wire sig00000181; - wire sig00000182; - wire sig00000183; - wire sig00000184; - wire sig00000185; - wire sig00000186; - wire sig00000187; - wire sig00000188; - wire sig00000189; - wire sig0000018a; - wire sig0000018b; - wire sig0000018c; - wire sig0000018d; - wire sig0000018e; - wire sig0000018f; - wire sig00000190; - wire sig00000191; - wire sig00000192; - wire sig00000193; - wire sig00000194; wire \NLW_blk00000003_P<35>_UNCONNECTED ; wire \NLW_blk00000003_P<34>_UNCONNECTED ; wire \NLW_blk00000003_P<33>_UNCONNECTED ; @@ -495,15 +447,15 @@ module cx4_mul ( wire \NLW_blk00000005_P<24>_UNCONNECTED ; wire \NLW_blk00000006_P<35>_UNCONNECTED ; GND blk00000001 ( - .G(sig00000012) + .G(sig00000001) ); VCC blk00000002 ( - .P(sig00000013) + .P(sig00000002) ); MULT18X18S blk00000003 ( .C(clk), - .CE(sig00000013), - .R(sig00000012), + .CE(sig00000002), + .R(sig00000001), .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), .P({\NLW_blk00000003_P<35>_UNCONNECTED , \NLW_blk00000003_P<34>_UNCONNECTED , \NLW_blk00000003_P<33>_UNCONNECTED , @@ -511,1638 +463,1638 @@ module cx4_mul ( \NLW_blk00000003_P<28>_UNCONNECTED , \NLW_blk00000003_P<27>_UNCONNECTED , \NLW_blk00000003_P<26>_UNCONNECTED , \NLW_blk00000003_P<25>_UNCONNECTED , \NLW_blk00000003_P<24>_UNCONNECTED , \NLW_blk00000003_P<23>_UNCONNECTED , \NLW_blk00000003_P<22>_UNCONNECTED , \NLW_blk00000003_P<21>_UNCONNECTED , \NLW_blk00000003_P<20>_UNCONNECTED , \NLW_blk00000003_P<19>_UNCONNECTED , \NLW_blk00000003_P<18>_UNCONNECTED , \NLW_blk00000003_P<17>_UNCONNECTED , -\NLW_blk00000003_P<16>_UNCONNECTED , \NLW_blk00000003_P<15>_UNCONNECTED , \NLW_blk00000003_P<14>_UNCONNECTED , sig000000f6, sig000000f5, sig000000f4, -sig000000f3, sig000000ff, sig000000fe, sig000000fd, sig000000fc, sig000000fb, sig000000fa, sig000000f9, sig000000f8, sig000000f7, sig000000f2}) +\NLW_blk00000003_P<16>_UNCONNECTED , \NLW_blk00000003_P<15>_UNCONNECTED , \NLW_blk00000003_P<14>_UNCONNECTED , sig000000e5, sig000000e4, sig000000e3, +sig000000e2, sig000000ee, sig000000ed, sig000000ec, sig000000eb, sig000000ea, sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e1}) ); MULT18X18S blk00000004 ( .C(clk), - .CE(sig00000013), - .R(sig00000012), + .CE(sig00000002), + .R(sig00000001), .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), - .B({sig00000012, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), + .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), .P({\NLW_blk00000004_P<35>_UNCONNECTED , \NLW_blk00000004_P<34>_UNCONNECTED , \NLW_blk00000004_P<33>_UNCONNECTED , \NLW_blk00000004_P<32>_UNCONNECTED , \NLW_blk00000004_P<31>_UNCONNECTED , \NLW_blk00000004_P<30>_UNCONNECTED , \NLW_blk00000004_P<29>_UNCONNECTED , \NLW_blk00000004_P<28>_UNCONNECTED , \NLW_blk00000004_P<27>_UNCONNECTED , \NLW_blk00000004_P<26>_UNCONNECTED , \NLW_blk00000004_P<25>_UNCONNECTED , -\NLW_blk00000004_P<24>_UNCONNECTED , sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e4, sig000000e3, sig000000e2, sig000000e1, -sig000000e0, sig000000df, sig000000de, sig000000dd, sig000000dc, sig000000db, sig000000f1, sig000000f0, sig000000ef, sig000000ee, sig000000ed, -sig000000ec, sig000000eb, sig000000ea, sig000000e5, sig000000da}) +\NLW_blk00000004_P<24>_UNCONNECTED , sig000000d8, sig000000d7, sig000000d6, sig000000d5, sig000000d3, sig000000d2, sig000000d1, sig000000d0, +sig000000cf, sig000000ce, sig000000cd, sig000000cc, sig000000cb, sig000000ca, sig000000e0, sig000000df, sig000000de, sig000000dd, sig000000dc, +sig000000db, sig000000da, sig000000d9, sig000000d4, sig000000c9}) ); MULT18X18S blk00000005 ( .C(clk), - .CE(sig00000013), - .R(sig00000012), - .A({sig00000012, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), + .CE(sig00000002), + .R(sig00000001), + .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), .P({\NLW_blk00000005_P<35>_UNCONNECTED , \NLW_blk00000005_P<34>_UNCONNECTED , \NLW_blk00000005_P<33>_UNCONNECTED , \NLW_blk00000005_P<32>_UNCONNECTED , \NLW_blk00000005_P<31>_UNCONNECTED , \NLW_blk00000005_P<30>_UNCONNECTED , \NLW_blk00000005_P<29>_UNCONNECTED , \NLW_blk00000005_P<28>_UNCONNECTED , \NLW_blk00000005_P<27>_UNCONNECTED , \NLW_blk00000005_P<26>_UNCONNECTED , \NLW_blk00000005_P<25>_UNCONNECTED , -\NLW_blk00000005_P<24>_UNCONNECTED , sig000000d1, sig000000d0, sig000000cf, sig000000ce, sig000000cc, sig000000cb, sig000000ca, sig000000c9, -sig000000c8, sig000000c7, sig000000c6, sig000000c5, sig000000c4, sig000000c3, sig000000d9, sig000000d8, sig000000d7, sig000000d6, sig000000d5, -sig000000d4, sig000000d3, sig000000d2, sig000000cd, sig000000c2}) +\NLW_blk00000005_P<24>_UNCONNECTED , sig000000c0, sig000000bf, sig000000be, sig000000bd, sig000000bb, sig000000ba, sig000000b9, sig000000b8, +sig000000b7, sig000000b6, sig000000b5, sig000000b4, sig000000b3, sig000000b2, sig000000c8, sig000000c7, sig000000c6, sig000000c5, sig000000c4, +sig000000c3, sig000000c2, sig000000c1, sig000000bc, sig000000b1}) ); MULT18X18S blk00000006 ( .C(clk), - .CE(sig00000013), - .R(sig00000012), - .A({sig00000012, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), - .B({sig00000012, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), - .P({\NLW_blk00000006_P<35>_UNCONNECTED , sig000000ba, sig000000b9, sig000000b8, sig000000b7, sig000000b6, sig000000b4, sig000000b3, sig000000b2, -sig000000b1, sig000000b0, sig000000af, sig000000ae, sig000000ad, sig000000ac, sig000000ab, sig000000a9, sig000000a8, sig000000a7, sig000000a6, -sig000000a5, sig000000a4, sig000000a3, sig000000a2, sig000000a1, sig000000a0, sig000000c1, sig000000c0, sig000000bf, sig000000be, sig000000bd, -sig000000bc, sig000000bb, sig000000b5, sig000000aa, sig0000009f}) + .CE(sig00000002), + .R(sig00000001), + .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), + .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), + .P({\NLW_blk00000006_P<35>_UNCONNECTED , sig000000a9, sig000000a8, sig000000a7, sig000000a6, sig000000a5, sig000000a3, sig000000a2, sig000000a1, +sig000000a0, sig0000009f, sig0000009e, sig0000009d, sig0000009c, sig0000009b, sig0000009a, sig00000098, sig00000097, sig00000096, sig00000095, +sig00000094, sig00000093, sig00000092, sig00000091, sig00000090, sig0000008f, sig000000b0, sig000000af, sig000000ae, sig000000ad, sig000000ac, +sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); XORCY blk00000007 ( - .CI(sig00000076), - .LI(sig00000097), - .O(sig0000018f) + .CI(sig00000065), + .LI(sig00000086), + .O(p[47]) ); LUT2 #( .INIT ( 4'h6 )) blk00000008 ( - .I0(sig0000016c), - .I1(sig0000015f), - .O(sig00000097) - ); - MUXCY blk00000009 ( - .CI(sig00000075), - .DI(sig0000015f), - .S(sig00000096), - .O(sig00000076) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000000a ( - .I0(sig0000016c), - .I1(sig0000015f), - .O(sig00000096) - ); - MUXCY blk0000000b ( - .CI(sig00000073), - .DI(sig0000015f), - .S(sig00000095), - .O(sig00000075) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000000c ( - .I0(sig0000016c), - .I1(sig0000015f), - .O(sig00000095) - ); - XORCY blk0000000d ( - .CI(sig00000072), - .LI(sig00000093), - .O(sig0000018b) - ); - MUXCY blk0000000e ( - .CI(sig00000072), - .DI(sig0000015f), - .S(sig00000093), - .O(sig00000073) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000000f ( - .I0(sig0000016b), - .I1(sig0000015f), - .O(sig00000093) - ); - XORCY blk00000010 ( - .CI(sig00000071), - .LI(sig00000092), - .O(sig0000018a) - ); - MUXCY blk00000011 ( - .CI(sig00000071), - .DI(sig0000015f), - .S(sig00000092), - .O(sig00000072) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000012 ( - .I0(sig0000016a), - .I1(sig0000015f), - .O(sig00000092) - ); - XORCY blk00000013 ( - .CI(sig00000070), - .LI(sig00000091), - .O(sig00000189) - ); - MUXCY blk00000014 ( - .CI(sig00000070), - .DI(sig0000015f), - .S(sig00000091), - .O(sig00000071) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000015 ( - .I0(sig00000169), - .I1(sig0000015f), - .O(sig00000091) - ); - XORCY blk00000016 ( - .CI(sig0000006f), - .LI(sig00000090), - .O(sig00000188) - ); - MUXCY blk00000017 ( - .CI(sig0000006f), - .DI(sig0000015f), - .S(sig00000090), - .O(sig00000070) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000018 ( - .I0(sig00000175), - .I1(sig0000015f), - .O(sig00000090) - ); - XORCY blk00000019 ( - .CI(sig0000006e), - .LI(sig0000008f), - .O(sig00000187) - ); - MUXCY blk0000001a ( - .CI(sig0000006e), - .DI(sig0000015f), - .S(sig0000008f), - .O(sig0000006f) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000001b ( - .I0(sig00000174), - .I1(sig0000015f), - .O(sig0000008f) - ); - XORCY blk0000001c ( - .CI(sig0000006d), - .LI(sig0000008e), - .O(sig00000186) - ); - MUXCY blk0000001d ( - .CI(sig0000006d), - .DI(sig0000015f), - .S(sig0000008e), - .O(sig0000006e) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000001e ( - .I0(sig00000173), - .I1(sig0000015f), - .O(sig0000008e) - ); - XORCY blk0000001f ( - .CI(sig0000006c), - .LI(sig0000008d), - .O(sig00000185) - ); - MUXCY blk00000020 ( - .CI(sig0000006c), - .DI(sig0000015f), - .S(sig0000008d), - .O(sig0000006d) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000021 ( - .I0(sig00000172), - .I1(sig0000015f), - .O(sig0000008d) - ); - XORCY blk00000022 ( - .CI(sig0000006b), - .LI(sig0000008c), - .O(sig00000184) - ); - MUXCY blk00000023 ( - .CI(sig0000006b), - .DI(sig0000015e), - .S(sig0000008c), - .O(sig0000006c) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000024 ( - .I0(sig00000171), - .I1(sig0000015e), - .O(sig0000008c) - ); - XORCY blk00000025 ( - .CI(sig0000006a), - .LI(sig0000008b), - .O(sig00000183) - ); - MUXCY blk00000026 ( - .CI(sig0000006a), - .DI(sig0000015d), - .S(sig0000008b), - .O(sig0000006b) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000027 ( - .I0(sig00000170), - .I1(sig0000015d), - .O(sig0000008b) - ); - XORCY blk00000028 ( - .CI(sig00000068), - .LI(sig0000008a), - .O(sig00000182) - ); - MUXCY blk00000029 ( - .CI(sig00000068), - .DI(sig0000015c), - .S(sig0000008a), - .O(sig0000006a) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000002a ( - .I0(sig0000016f), - .I1(sig0000015c), - .O(sig0000008a) - ); - XORCY blk0000002b ( - .CI(sig00000067), - .LI(sig00000088), - .O(sig00000180) - ); - MUXCY blk0000002c ( - .CI(sig00000067), - .DI(sig0000015a), - .S(sig00000088), - .O(sig00000068) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000002d ( - .I0(sig0000016e), - .I1(sig0000015a), - .O(sig00000088) - ); - XORCY blk0000002e ( - .CI(sig00000066), - .LI(sig00000087), - .O(sig0000017f) - ); - MUXCY blk0000002f ( - .CI(sig00000066), - .DI(sig00000159), - .S(sig00000087), - .O(sig00000067) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000030 ( - .I0(sig0000016d), - .I1(sig00000159), - .O(sig00000087) - ); - XORCY blk00000031 ( - .CI(sig00000065), - .LI(sig00000086), - .O(sig0000017e) - ); - MUXCY blk00000032 ( - .CI(sig00000065), - .DI(sig00000158), - .S(sig00000086), - .O(sig00000066) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000033 ( - .I0(sig00000168), - .I1(sig00000158), + .I0(sig0000014e), + .I1(sig0000015b), .O(sig00000086) ); - XORCY blk00000034 ( + MUXCY blk00000009 ( .CI(sig00000064), - .LI(sig00000085), - .O(sig0000017d) - ); - MUXCY blk00000035 ( - .CI(sig00000064), - .DI(sig00000157), + .DI(sig0000014e), .S(sig00000085), .O(sig00000065) ); LUT2 #( .INIT ( 4'h6 )) - blk00000036 ( - .I0(sig00000132), - .I1(sig00000157), + blk0000000a ( + .I0(sig0000014e), + .I1(sig0000015b), .O(sig00000085) ); - XORCY blk00000037 ( - .CI(sig00000063), - .LI(sig00000084), - .O(sig0000017c) - ); - MUXCY blk00000038 ( - .CI(sig00000063), - .DI(sig00000156), + MUXCY blk0000000b ( + .CI(sig00000062), + .DI(sig0000014e), .S(sig00000084), .O(sig00000064) ); LUT2 #( .INIT ( 4'h6 )) - blk00000039 ( - .I0(sig00000131), - .I1(sig00000156), + blk0000000c ( + .I0(sig0000014e), + .I1(sig0000015b), .O(sig00000084) ); - XORCY blk0000003a ( - .CI(sig00000062), - .LI(sig00000083), - .O(sig0000017b) - ); - MUXCY blk0000003b ( - .CI(sig00000062), - .DI(sig00000155), - .S(sig00000083), - .O(sig00000063) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000003c ( - .I0(sig00000130), - .I1(sig00000155), - .O(sig00000083) - ); - XORCY blk0000003d ( + XORCY blk0000000d ( .CI(sig00000061), .LI(sig00000082), - .O(sig0000017a) + .O(p[46]) ); - MUXCY blk0000003e ( + MUXCY blk0000000e ( .CI(sig00000061), - .DI(sig00000154), + .DI(sig0000014e), .S(sig00000082), .O(sig00000062) ); LUT2 #( .INIT ( 4'h6 )) - blk0000003f ( - .I0(sig0000012f), - .I1(sig00000154), + blk0000000f ( + .I0(sig0000014e), + .I1(sig0000015a), .O(sig00000082) ); - XORCY blk00000040 ( + XORCY blk00000010 ( .CI(sig00000060), .LI(sig00000081), - .O(sig00000179) + .O(p[45]) ); - MUXCY blk00000041 ( + MUXCY blk00000011 ( .CI(sig00000060), - .DI(sig00000153), + .DI(sig0000014e), .S(sig00000081), .O(sig00000061) ); LUT2 #( .INIT ( 4'h6 )) - blk00000042 ( - .I0(sig0000012e), - .I1(sig00000153), + blk00000012 ( + .I0(sig0000014e), + .I1(sig00000159), .O(sig00000081) ); - XORCY blk00000043 ( + XORCY blk00000013 ( .CI(sig0000005f), .LI(sig00000080), - .O(sig00000178) + .O(p[44]) ); - MUXCY blk00000044 ( + MUXCY blk00000014 ( .CI(sig0000005f), - .DI(sig00000152), + .DI(sig0000014e), .S(sig00000080), .O(sig00000060) ); LUT2 #( .INIT ( 4'h6 )) - blk00000045 ( - .I0(sig0000012d), - .I1(sig00000152), + blk00000015 ( + .I0(sig0000014e), + .I1(sig00000158), .O(sig00000080) ); - XORCY blk00000046 ( - .CI(sig0000007d), + XORCY blk00000016 ( + .CI(sig0000005e), .LI(sig0000007f), - .O(sig00000177) + .O(p[43]) ); - MUXCY blk00000047 ( - .CI(sig0000007d), - .DI(sig00000151), + MUXCY blk00000017 ( + .CI(sig0000005e), + .DI(sig0000014e), .S(sig0000007f), .O(sig0000005f) ); LUT2 #( .INIT ( 4'h6 )) - blk00000048 ( - .I0(sig0000012c), - .I1(sig00000151), + blk00000018 ( + .I0(sig0000014e), + .I1(sig00000164), .O(sig0000007f) ); - XORCY blk00000049 ( - .CI(sig0000007c), - .LI(sig0000009e), - .O(sig00000194) - ); - MUXCY blk0000004a ( - .CI(sig0000007c), - .DI(sig00000167), - .S(sig0000009e), - .O(sig0000007d) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000004b ( - .I0(sig00000141), - .I1(sig00000167), - .O(sig0000009e) - ); - XORCY blk0000004c ( - .CI(sig0000007b), - .LI(sig0000009d), - .O(sig00000193) - ); - MUXCY blk0000004d ( - .CI(sig0000007b), - .DI(sig00000166), - .S(sig0000009d), - .O(sig0000007c) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000004e ( - .I0(sig00000140), - .I1(sig00000166), - .O(sig0000009d) - ); - XORCY blk0000004f ( - .CI(sig0000007a), - .LI(sig0000009c), - .O(sig00000192) - ); - MUXCY blk00000050 ( - .CI(sig0000007a), - .DI(sig00000165), - .S(sig0000009c), - .O(sig0000007b) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000051 ( - .I0(sig0000013f), - .I1(sig00000165), - .O(sig0000009c) - ); - XORCY blk00000052 ( - .CI(sig00000079), - .LI(sig0000009b), - .O(sig00000191) - ); - MUXCY blk00000053 ( - .CI(sig00000079), - .DI(sig00000164), - .S(sig0000009b), - .O(sig0000007a) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000054 ( - .I0(sig0000013e), - .I1(sig00000164), - .O(sig0000009b) - ); - XORCY blk00000055 ( - .CI(sig00000078), - .LI(sig0000009a), - .O(sig00000190) - ); - MUXCY blk00000056 ( - .CI(sig00000078), - .DI(sig00000163), - .S(sig0000009a), - .O(sig00000079) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000057 ( - .I0(sig0000013d), - .I1(sig00000163), - .O(sig0000009a) - ); - XORCY blk00000058 ( - .CI(sig00000077), - .LI(sig00000099), - .O(sig0000018e) - ); - MUXCY blk00000059 ( - .CI(sig00000077), - .DI(sig00000162), - .S(sig00000099), - .O(sig00000078) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000005a ( - .I0(sig0000013c), - .I1(sig00000162), - .O(sig00000099) - ); - XORCY blk0000005b ( - .CI(sig00000074), - .LI(sig00000098), - .O(sig0000018d) - ); - MUXCY blk0000005c ( - .CI(sig00000074), - .DI(sig00000161), - .S(sig00000098), - .O(sig00000077) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000005d ( - .I0(sig0000013b), - .I1(sig00000161), - .O(sig00000098) - ); - XORCY blk0000005e ( - .CI(sig00000069), - .LI(sig00000094), - .O(sig0000018c) - ); - MUXCY blk0000005f ( - .CI(sig00000069), - .DI(sig00000160), - .S(sig00000094), - .O(sig00000074) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000060 ( - .I0(sig00000136), - .I1(sig00000160), - .O(sig00000094) - ); - XORCY blk00000061 ( - .CI(sig0000005e), - .LI(sig00000089), - .O(sig00000181) - ); - MUXCY blk00000062 ( - .CI(sig0000005e), - .DI(sig0000015b), - .S(sig00000089), - .O(sig00000069) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000063 ( - .I0(sig0000012b), - .I1(sig0000015b), - .O(sig00000089) - ); - XORCY blk00000064 ( - .CI(sig00000012), + XORCY blk00000019 ( + .CI(sig0000005d), .LI(sig0000007e), - .O(sig00000176) + .O(p[42]) ); - MUXCY blk00000065 ( - .CI(sig00000012), - .DI(sig00000150), + MUXCY blk0000001a ( + .CI(sig0000005d), + .DI(sig0000014e), .S(sig0000007e), .O(sig0000005e) ); LUT2 #( .INIT ( 4'h6 )) - blk00000066 ( - .I0(sig0000012a), - .I1(sig00000150), + blk0000001b ( + .I0(sig0000014e), + .I1(sig00000163), .O(sig0000007e) ); - XORCY blk00000067 ( - .CI(sig00000022), - .LI(sig0000003a), - .O(sig0000015f) + XORCY blk0000001c ( + .CI(sig0000005c), + .LI(sig0000007d), + .O(p[41]) + ); + MUXCY blk0000001d ( + .CI(sig0000005c), + .DI(sig0000014e), + .S(sig0000007d), + .O(sig0000005d) ); LUT2 #( .INIT ( 4'h6 )) - blk00000068 ( - .I0(sig00000111), - .I1(sig00000122), - .O(sig0000003a) + blk0000001e ( + .I0(sig0000014e), + .I1(sig00000162), + .O(sig0000007d) ); - XORCY blk00000069 ( - .CI(sig00000021), - .LI(sig00000039), - .O(sig0000015e) + XORCY blk0000001f ( + .CI(sig0000005b), + .LI(sig0000007c), + .O(p[40]) ); - MUXCY blk0000006a ( - .CI(sig00000021), - .DI(sig00000111), - .S(sig00000039), - .O(sig00000022) + MUXCY blk00000020 ( + .CI(sig0000005b), + .DI(sig0000014e), + .S(sig0000007c), + .O(sig0000005c) ); LUT2 #( .INIT ( 4'h6 )) - blk0000006b ( - .I0(sig00000121), - .I1(sig00000111), - .O(sig00000039) + blk00000021 ( + .I0(sig0000014e), + .I1(sig00000161), + .O(sig0000007c) ); - XORCY blk0000006c ( - .CI(sig00000020), - .LI(sig00000038), - .O(sig0000015d) + XORCY blk00000022 ( + .CI(sig0000005a), + .LI(sig0000007b), + .O(p[39]) ); - MUXCY blk0000006d ( - .CI(sig00000020), - .DI(sig00000111), - .S(sig00000038), - .O(sig00000021) + MUXCY blk00000023 ( + .CI(sig0000005a), + .DI(sig0000014d), + .S(sig0000007b), + .O(sig0000005b) ); LUT2 #( .INIT ( 4'h6 )) - blk0000006e ( - .I0(sig00000120), - .I1(sig00000111), - .O(sig00000038) + blk00000024 ( + .I0(sig0000014d), + .I1(sig00000160), + .O(sig0000007b) ); - XORCY blk0000006f ( - .CI(sig0000001e), - .LI(sig00000037), - .O(sig0000015c) + XORCY blk00000025 ( + .CI(sig00000059), + .LI(sig0000007a), + .O(p[38]) ); - MUXCY blk00000070 ( - .CI(sig0000001e), - .DI(sig00000111), - .S(sig00000037), - .O(sig00000020) + MUXCY blk00000026 ( + .CI(sig00000059), + .DI(sig0000014c), + .S(sig0000007a), + .O(sig0000005a) ); LUT2 #( .INIT ( 4'h6 )) - blk00000071 ( - .I0(sig0000011f), - .I1(sig00000111), - .O(sig00000037) + blk00000027 ( + .I0(sig0000014c), + .I1(sig0000015f), + .O(sig0000007a) ); - XORCY blk00000072 ( - .CI(sig0000001d), - .LI(sig00000035), - .O(sig0000015a) + XORCY blk00000028 ( + .CI(sig00000057), + .LI(sig00000079), + .O(p[37]) ); - MUXCY blk00000073 ( - .CI(sig0000001d), - .DI(sig00000111), - .S(sig00000035), - .O(sig0000001e) + MUXCY blk00000029 ( + .CI(sig00000057), + .DI(sig0000014b), + .S(sig00000079), + .O(sig00000059) ); LUT2 #( .INIT ( 4'h6 )) - blk00000074 ( - .I0(sig0000011d), - .I1(sig00000111), - .O(sig00000035) + blk0000002a ( + .I0(sig0000014b), + .I1(sig0000015e), + .O(sig00000079) ); - XORCY blk00000075 ( - .CI(sig0000001c), - .LI(sig00000034), - .O(sig00000159) + XORCY blk0000002b ( + .CI(sig00000056), + .LI(sig00000077), + .O(p[36]) ); - MUXCY blk00000076 ( - .CI(sig0000001c), - .DI(sig00000111), - .S(sig00000034), - .O(sig0000001d) + MUXCY blk0000002c ( + .CI(sig00000056), + .DI(sig00000149), + .S(sig00000077), + .O(sig00000057) ); LUT2 #( .INIT ( 4'h6 )) - blk00000077 ( - .I0(sig0000011c), - .I1(sig00000111), - .O(sig00000034) + blk0000002d ( + .I0(sig00000149), + .I1(sig0000015d), + .O(sig00000077) ); - XORCY blk00000078 ( - .CI(sig0000001b), - .LI(sig00000033), - .O(sig00000158) + XORCY blk0000002e ( + .CI(sig00000055), + .LI(sig00000076), + .O(p[35]) ); - MUXCY blk00000079 ( - .CI(sig0000001b), - .DI(sig00000111), - .S(sig00000033), - .O(sig0000001c) + MUXCY blk0000002f ( + .CI(sig00000055), + .DI(sig00000148), + .S(sig00000076), + .O(sig00000056) ); LUT2 #( .INIT ( 4'h6 )) - blk0000007a ( - .I0(sig0000011b), - .I1(sig00000111), - .O(sig00000033) + blk00000030 ( + .I0(sig00000148), + .I1(sig0000015c), + .O(sig00000076) ); - XORCY blk0000007b ( - .CI(sig0000001a), - .LI(sig00000032), - .O(sig00000157) + XORCY blk00000031 ( + .CI(sig00000054), + .LI(sig00000075), + .O(p[34]) ); - MUXCY blk0000007c ( - .CI(sig0000001a), - .DI(sig00000110), - .S(sig00000032), - .O(sig0000001b) + MUXCY blk00000032 ( + .CI(sig00000054), + .DI(sig00000147), + .S(sig00000075), + .O(sig00000055) ); LUT2 #( .INIT ( 4'h6 )) - blk0000007d ( - .I0(sig00000110), - .I1(sig0000011a), - .O(sig00000032) + blk00000033 ( + .I0(sig00000147), + .I1(sig00000157), + .O(sig00000075) ); - XORCY blk0000007e ( - .CI(sig00000019), - .LI(sig00000031), - .O(sig00000156) + XORCY blk00000034 ( + .CI(sig00000053), + .LI(sig00000074), + .O(p[33]) ); - MUXCY blk0000007f ( - .CI(sig00000019), - .DI(sig0000010f), - .S(sig00000031), - .O(sig0000001a) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000080 ( - .I0(sig0000010f), - .I1(sig00000119), - .O(sig00000031) - ); - XORCY blk00000081 ( - .CI(sig00000018), - .LI(sig00000030), - .O(sig00000155) - ); - MUXCY blk00000082 ( - .CI(sig00000018), - .DI(sig0000010e), - .S(sig00000030), - .O(sig00000019) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000083 ( - .I0(sig0000010e), - .I1(sig00000118), - .O(sig00000030) - ); - XORCY blk00000084 ( - .CI(sig00000017), - .LI(sig0000002f), - .O(sig00000154) - ); - MUXCY blk00000085 ( - .CI(sig00000017), - .DI(sig0000010d), - .S(sig0000002f), - .O(sig00000018) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000086 ( - .I0(sig0000010d), - .I1(sig00000117), - .O(sig0000002f) - ); - XORCY blk00000087 ( - .CI(sig00000016), - .LI(sig0000002e), - .O(sig00000153) - ); - MUXCY blk00000088 ( - .CI(sig00000016), - .DI(sig0000010c), - .S(sig0000002e), - .O(sig00000017) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000089 ( - .I0(sig0000010c), - .I1(sig00000116), - .O(sig0000002e) - ); - XORCY blk0000008a ( - .CI(sig00000015), - .LI(sig0000002d), - .O(sig00000152) - ); - MUXCY blk0000008b ( - .CI(sig00000015), - .DI(sig0000010b), - .S(sig0000002d), - .O(sig00000016) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000008c ( - .I0(sig0000010b), - .I1(sig00000115), - .O(sig0000002d) - ); - XORCY blk0000008d ( - .CI(sig0000002a), - .LI(sig0000002c), - .O(sig00000151) - ); - MUXCY blk0000008e ( - .CI(sig0000002a), - .DI(sig0000010a), - .S(sig0000002c), - .O(sig00000015) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000008f ( - .I0(sig0000010a), - .I1(sig00000114), - .O(sig0000002c) - ); - XORCY blk00000090 ( - .CI(sig00000029), - .LI(sig00000042), - .O(sig00000167) - ); - MUXCY blk00000091 ( - .CI(sig00000029), - .DI(sig00000109), - .S(sig00000042), - .O(sig0000002a) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000092 ( - .I0(sig00000109), - .I1(sig00000129), - .O(sig00000042) - ); - XORCY blk00000093 ( - .CI(sig00000028), - .LI(sig00000041), - .O(sig00000166) - ); - MUXCY blk00000094 ( - .CI(sig00000028), - .DI(sig00000108), - .S(sig00000041), - .O(sig00000029) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000095 ( - .I0(sig00000108), - .I1(sig00000128), - .O(sig00000041) - ); - XORCY blk00000096 ( - .CI(sig00000027), - .LI(sig00000040), - .O(sig00000165) - ); - MUXCY blk00000097 ( - .CI(sig00000027), - .DI(sig00000107), - .S(sig00000040), - .O(sig00000028) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000098 ( - .I0(sig00000107), - .I1(sig00000127), - .O(sig00000040) - ); - XORCY blk00000099 ( - .CI(sig00000026), - .LI(sig0000003f), - .O(sig00000164) - ); - MUXCY blk0000009a ( - .CI(sig00000026), - .DI(sig00000106), - .S(sig0000003f), - .O(sig00000027) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000009b ( - .I0(sig00000106), - .I1(sig00000126), - .O(sig0000003f) - ); - XORCY blk0000009c ( - .CI(sig00000025), - .LI(sig0000003e), - .O(sig00000163) - ); - MUXCY blk0000009d ( - .CI(sig00000025), - .DI(sig00000105), - .S(sig0000003e), - .O(sig00000026) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000009e ( - .I0(sig00000105), - .I1(sig00000125), - .O(sig0000003e) - ); - XORCY blk0000009f ( - .CI(sig00000024), - .LI(sig0000003d), - .O(sig00000162) - ); - MUXCY blk000000a0 ( - .CI(sig00000024), - .DI(sig00000104), - .S(sig0000003d), - .O(sig00000025) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk000000a1 ( - .I0(sig00000104), - .I1(sig00000124), - .O(sig0000003d) - ); - XORCY blk000000a2 ( - .CI(sig00000023), - .LI(sig0000003c), - .O(sig00000161) - ); - MUXCY blk000000a3 ( - .CI(sig00000023), - .DI(sig00000103), - .S(sig0000003c), - .O(sig00000024) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk000000a4 ( - .I0(sig00000103), - .I1(sig00000123), - .O(sig0000003c) - ); - XORCY blk000000a5 ( - .CI(sig0000001f), - .LI(sig0000003b), - .O(sig00000160) - ); - MUXCY blk000000a6 ( - .CI(sig0000001f), - .DI(sig00000102), - .S(sig0000003b), - .O(sig00000023) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk000000a7 ( - .I0(sig00000102), - .I1(sig0000011e), - .O(sig0000003b) - ); - XORCY blk000000a8 ( - .CI(sig00000014), - .LI(sig00000036), - .O(sig0000015b) - ); - MUXCY blk000000a9 ( - .CI(sig00000014), - .DI(sig00000101), - .S(sig00000036), - .O(sig0000001f) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk000000aa ( - .I0(sig00000101), - .I1(sig00000113), - .O(sig00000036) - ); - XORCY blk000000ab ( - .CI(sig00000012), - .LI(sig0000002b), - .O(sig00000150) - ); - MUXCY blk000000ac ( - .CI(sig00000012), - .DI(sig00000100), - .S(sig0000002b), - .O(sig00000014) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk000000ad ( - .I0(sig00000100), - .I1(sig00000112), - .O(sig0000002b) - ); - XORCY blk000000ae ( - .CI(sig00000046), - .LI(sig00000054), - .O(sig0000016c) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk000000af ( - .I0(sig0000013a), - .I1(sig00000147), + MUXCY blk00000035 ( + .CI(sig00000053), + .DI(sig00000146), + .S(sig00000074), .O(sig00000054) ); - XORCY blk000000b0 ( - .CI(sig00000045), - .LI(sig00000053), - .O(sig0000016b) - ); - MUXCY blk000000b1 ( - .CI(sig00000045), - .DI(sig0000013a), - .S(sig00000053), - .O(sig00000046) - ); LUT2 #( .INIT ( 4'h6 )) - blk000000b2 ( + blk00000036 ( .I0(sig00000146), - .I1(sig0000013a), + .I1(sig00000121), + .O(sig00000074) + ); + XORCY blk00000037 ( + .CI(sig00000052), + .LI(sig00000073), + .O(p[32]) + ); + MUXCY blk00000038 ( + .CI(sig00000052), + .DI(sig00000145), + .S(sig00000073), .O(sig00000053) ); - XORCY blk000000b3 ( - .CI(sig00000044), - .LI(sig00000052), - .O(sig0000016a) - ); - MUXCY blk000000b4 ( - .CI(sig00000044), - .DI(sig0000013a), - .S(sig00000052), - .O(sig00000045) - ); LUT2 #( .INIT ( 4'h6 )) - blk000000b5 ( + blk00000039 ( .I0(sig00000145), - .I1(sig0000013a), + .I1(sig00000120), + .O(sig00000073) + ); + XORCY blk0000003a ( + .CI(sig00000051), + .LI(sig00000072), + .O(p[31]) + ); + MUXCY blk0000003b ( + .CI(sig00000051), + .DI(sig00000144), + .S(sig00000072), .O(sig00000052) ); - XORCY blk000000b6 ( - .CI(sig0000004f), - .LI(sig00000051), - .O(sig00000169) + LUT2 #( + .INIT ( 4'h6 )) + blk0000003c ( + .I0(sig00000144), + .I1(sig0000011f), + .O(sig00000072) ); - MUXCY blk000000b7 ( - .CI(sig0000004f), - .DI(sig0000013a), - .S(sig00000051), - .O(sig00000044) + XORCY blk0000003d ( + .CI(sig00000050), + .LI(sig00000071), + .O(p[30]) + ); + MUXCY blk0000003e ( + .CI(sig00000050), + .DI(sig00000143), + .S(sig00000071), + .O(sig00000051) ); LUT2 #( .INIT ( 4'h6 )) - blk000000b8 ( - .I0(sig00000144), - .I1(sig0000013a), - .O(sig00000051) + blk0000003f ( + .I0(sig00000143), + .I1(sig0000011e), + .O(sig00000071) ); - XORCY blk000000b9 ( - .CI(sig0000004e), - .LI(sig0000005d), - .O(sig00000175) + XORCY blk00000040 ( + .CI(sig0000004f), + .LI(sig00000070), + .O(p[29]) ); - MUXCY blk000000ba ( + MUXCY blk00000041 ( + .CI(sig0000004f), + .DI(sig00000142), + .S(sig00000070), + .O(sig00000050) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000042 ( + .I0(sig00000142), + .I1(sig0000011d), + .O(sig00000070) + ); + XORCY blk00000043 ( .CI(sig0000004e), - .DI(sig0000013a), - .S(sig0000005d), + .LI(sig0000006f), + .O(p[28]) + ); + MUXCY blk00000044 ( + .CI(sig0000004e), + .DI(sig00000141), + .S(sig0000006f), .O(sig0000004f) ); LUT2 #( .INIT ( 4'h6 )) - blk000000bb ( - .I0(sig0000014f), - .I1(sig0000013a), - .O(sig0000005d) + blk00000045 ( + .I0(sig00000141), + .I1(sig0000011c), + .O(sig0000006f) ); - XORCY blk000000bc ( - .CI(sig0000004d), - .LI(sig0000005c), - .O(sig00000174) + XORCY blk00000046 ( + .CI(sig0000006c), + .LI(sig0000006e), + .O(p[27]) ); - MUXCY blk000000bd ( - .CI(sig0000004d), - .DI(sig0000013a), - .S(sig0000005c), + MUXCY blk00000047 ( + .CI(sig0000006c), + .DI(sig00000140), + .S(sig0000006e), .O(sig0000004e) ); LUT2 #( .INIT ( 4'h6 )) - blk000000be ( - .I0(sig0000014e), - .I1(sig0000013a), - .O(sig0000005c) + blk00000048 ( + .I0(sig00000140), + .I1(sig0000011b), + .O(sig0000006e) ); - XORCY blk000000bf ( - .CI(sig0000004c), - .LI(sig0000005b), - .O(sig00000173) + XORCY blk00000049 ( + .CI(sig0000006b), + .LI(sig0000008d), + .O(p[26]) ); - MUXCY blk000000c0 ( - .CI(sig0000004c), - .DI(sig0000013a), - .S(sig0000005b), + MUXCY blk0000004a ( + .CI(sig0000006b), + .DI(sig00000156), + .S(sig0000008d), + .O(sig0000006c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000004b ( + .I0(sig00000156), + .I1(sig00000130), + .O(sig0000008d) + ); + XORCY blk0000004c ( + .CI(sig0000006a), + .LI(sig0000008c), + .O(p[25]) + ); + MUXCY blk0000004d ( + .CI(sig0000006a), + .DI(sig00000155), + .S(sig0000008c), + .O(sig0000006b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000004e ( + .I0(sig00000155), + .I1(sig0000012f), + .O(sig0000008c) + ); + XORCY blk0000004f ( + .CI(sig00000069), + .LI(sig0000008b), + .O(p[24]) + ); + MUXCY blk00000050 ( + .CI(sig00000069), + .DI(sig00000154), + .S(sig0000008b), + .O(sig0000006a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000051 ( + .I0(sig00000154), + .I1(sig0000012e), + .O(sig0000008b) + ); + XORCY blk00000052 ( + .CI(sig00000068), + .LI(sig0000008a), + .O(p[23]) + ); + MUXCY blk00000053 ( + .CI(sig00000068), + .DI(sig00000153), + .S(sig0000008a), + .O(sig00000069) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000054 ( + .I0(sig00000153), + .I1(sig0000012d), + .O(sig0000008a) + ); + XORCY blk00000055 ( + .CI(sig00000067), + .LI(sig00000089), + .O(p[22]) + ); + MUXCY blk00000056 ( + .CI(sig00000067), + .DI(sig00000152), + .S(sig00000089), + .O(sig00000068) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000057 ( + .I0(sig00000152), + .I1(sig0000012c), + .O(sig00000089) + ); + XORCY blk00000058 ( + .CI(sig00000066), + .LI(sig00000088), + .O(p[21]) + ); + MUXCY blk00000059 ( + .CI(sig00000066), + .DI(sig00000151), + .S(sig00000088), + .O(sig00000067) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005a ( + .I0(sig00000151), + .I1(sig0000012b), + .O(sig00000088) + ); + XORCY blk0000005b ( + .CI(sig00000063), + .LI(sig00000087), + .O(p[20]) + ); + MUXCY blk0000005c ( + .CI(sig00000063), + .DI(sig00000150), + .S(sig00000087), + .O(sig00000066) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005d ( + .I0(sig00000150), + .I1(sig0000012a), + .O(sig00000087) + ); + XORCY blk0000005e ( + .CI(sig00000058), + .LI(sig00000083), + .O(p[19]) + ); + MUXCY blk0000005f ( + .CI(sig00000058), + .DI(sig0000014f), + .S(sig00000083), + .O(sig00000063) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000060 ( + .I0(sig0000014f), + .I1(sig00000125), + .O(sig00000083) + ); + XORCY blk00000061 ( + .CI(sig0000004d), + .LI(sig00000078), + .O(p[18]) + ); + MUXCY blk00000062 ( + .CI(sig0000004d), + .DI(sig0000014a), + .S(sig00000078), + .O(sig00000058) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000063 ( + .I0(sig0000014a), + .I1(sig0000011a), + .O(sig00000078) + ); + XORCY blk00000064 ( + .CI(sig00000001), + .LI(sig0000006d), + .O(p[17]) + ); + MUXCY blk00000065 ( + .CI(sig00000001), + .DI(sig0000013f), + .S(sig0000006d), .O(sig0000004d) ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000066 ( + .I0(sig0000013f), + .I1(sig00000119), + .O(sig0000006d) + ); + XORCY blk00000067 ( + .CI(sig00000011), + .LI(sig00000029), + .O(sig0000014e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000068 ( + .I0(sig00000100), + .I1(sig00000111), + .O(sig00000029) + ); + XORCY blk00000069 ( + .CI(sig00000010), + .LI(sig00000028), + .O(sig0000014d) + ); + MUXCY blk0000006a ( + .CI(sig00000010), + .DI(sig00000100), + .S(sig00000028), + .O(sig00000011) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000006b ( + .I0(sig00000100), + .I1(sig00000110), + .O(sig00000028) + ); + XORCY blk0000006c ( + .CI(sig0000000f), + .LI(sig00000027), + .O(sig0000014c) + ); + MUXCY blk0000006d ( + .CI(sig0000000f), + .DI(sig00000100), + .S(sig00000027), + .O(sig00000010) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000006e ( + .I0(sig00000100), + .I1(sig0000010f), + .O(sig00000027) + ); + XORCY blk0000006f ( + .CI(sig0000000d), + .LI(sig00000026), + .O(sig0000014b) + ); + MUXCY blk00000070 ( + .CI(sig0000000d), + .DI(sig00000100), + .S(sig00000026), + .O(sig0000000f) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000071 ( + .I0(sig00000100), + .I1(sig0000010e), + .O(sig00000026) + ); + XORCY blk00000072 ( + .CI(sig0000000c), + .LI(sig00000024), + .O(sig00000149) + ); + MUXCY blk00000073 ( + .CI(sig0000000c), + .DI(sig00000100), + .S(sig00000024), + .O(sig0000000d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000074 ( + .I0(sig00000100), + .I1(sig0000010c), + .O(sig00000024) + ); + XORCY blk00000075 ( + .CI(sig0000000b), + .LI(sig00000023), + .O(sig00000148) + ); + MUXCY blk00000076 ( + .CI(sig0000000b), + .DI(sig00000100), + .S(sig00000023), + .O(sig0000000c) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000077 ( + .I0(sig00000100), + .I1(sig0000010b), + .O(sig00000023) + ); + XORCY blk00000078 ( + .CI(sig0000000a), + .LI(sig00000022), + .O(sig00000147) + ); + MUXCY blk00000079 ( + .CI(sig0000000a), + .DI(sig00000100), + .S(sig00000022), + .O(sig0000000b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000007a ( + .I0(sig00000100), + .I1(sig0000010a), + .O(sig00000022) + ); + XORCY blk0000007b ( + .CI(sig00000009), + .LI(sig00000021), + .O(sig00000146) + ); + MUXCY blk0000007c ( + .CI(sig00000009), + .DI(sig000000ff), + .S(sig00000021), + .O(sig0000000a) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000007d ( + .I0(sig000000ff), + .I1(sig00000109), + .O(sig00000021) + ); + XORCY blk0000007e ( + .CI(sig00000008), + .LI(sig00000020), + .O(sig00000145) + ); + MUXCY blk0000007f ( + .CI(sig00000008), + .DI(sig000000fe), + .S(sig00000020), + .O(sig00000009) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000080 ( + .I0(sig000000fe), + .I1(sig00000108), + .O(sig00000020) + ); + XORCY blk00000081 ( + .CI(sig00000007), + .LI(sig0000001f), + .O(sig00000144) + ); + MUXCY blk00000082 ( + .CI(sig00000007), + .DI(sig000000fd), + .S(sig0000001f), + .O(sig00000008) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000083 ( + .I0(sig000000fd), + .I1(sig00000107), + .O(sig0000001f) + ); + XORCY blk00000084 ( + .CI(sig00000006), + .LI(sig0000001e), + .O(sig00000143) + ); + MUXCY blk00000085 ( + .CI(sig00000006), + .DI(sig000000fc), + .S(sig0000001e), + .O(sig00000007) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000086 ( + .I0(sig000000fc), + .I1(sig00000106), + .O(sig0000001e) + ); + XORCY blk00000087 ( + .CI(sig00000005), + .LI(sig0000001d), + .O(sig00000142) + ); + MUXCY blk00000088 ( + .CI(sig00000005), + .DI(sig000000fb), + .S(sig0000001d), + .O(sig00000006) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000089 ( + .I0(sig000000fb), + .I1(sig00000105), + .O(sig0000001d) + ); + XORCY blk0000008a ( + .CI(sig00000004), + .LI(sig0000001c), + .O(sig00000141) + ); + MUXCY blk0000008b ( + .CI(sig00000004), + .DI(sig000000fa), + .S(sig0000001c), + .O(sig00000005) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000008c ( + .I0(sig000000fa), + .I1(sig00000104), + .O(sig0000001c) + ); + XORCY blk0000008d ( + .CI(sig00000019), + .LI(sig0000001b), + .O(sig00000140) + ); + MUXCY blk0000008e ( + .CI(sig00000019), + .DI(sig000000f9), + .S(sig0000001b), + .O(sig00000004) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000008f ( + .I0(sig000000f9), + .I1(sig00000103), + .O(sig0000001b) + ); + XORCY blk00000090 ( + .CI(sig00000018), + .LI(sig00000031), + .O(sig00000156) + ); + MUXCY blk00000091 ( + .CI(sig00000018), + .DI(sig000000f8), + .S(sig00000031), + .O(sig00000019) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000092 ( + .I0(sig000000f8), + .I1(sig00000118), + .O(sig00000031) + ); + XORCY blk00000093 ( + .CI(sig00000017), + .LI(sig00000030), + .O(sig00000155) + ); + MUXCY blk00000094 ( + .CI(sig00000017), + .DI(sig000000f7), + .S(sig00000030), + .O(sig00000018) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000095 ( + .I0(sig000000f7), + .I1(sig00000117), + .O(sig00000030) + ); + XORCY blk00000096 ( + .CI(sig00000016), + .LI(sig0000002f), + .O(sig00000154) + ); + MUXCY blk00000097 ( + .CI(sig00000016), + .DI(sig000000f6), + .S(sig0000002f), + .O(sig00000017) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk00000098 ( + .I0(sig000000f6), + .I1(sig00000116), + .O(sig0000002f) + ); + XORCY blk00000099 ( + .CI(sig00000015), + .LI(sig0000002e), + .O(sig00000153) + ); + MUXCY blk0000009a ( + .CI(sig00000015), + .DI(sig000000f5), + .S(sig0000002e), + .O(sig00000016) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000009b ( + .I0(sig000000f5), + .I1(sig00000115), + .O(sig0000002e) + ); + XORCY blk0000009c ( + .CI(sig00000014), + .LI(sig0000002d), + .O(sig00000152) + ); + MUXCY blk0000009d ( + .CI(sig00000014), + .DI(sig000000f4), + .S(sig0000002d), + .O(sig00000015) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000009e ( + .I0(sig000000f4), + .I1(sig00000114), + .O(sig0000002d) + ); + XORCY blk0000009f ( + .CI(sig00000013), + .LI(sig0000002c), + .O(sig00000151) + ); + MUXCY blk000000a0 ( + .CI(sig00000013), + .DI(sig000000f3), + .S(sig0000002c), + .O(sig00000014) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000a1 ( + .I0(sig000000f3), + .I1(sig00000113), + .O(sig0000002c) + ); + XORCY blk000000a2 ( + .CI(sig00000012), + .LI(sig0000002b), + .O(sig00000150) + ); + MUXCY blk000000a3 ( + .CI(sig00000012), + .DI(sig000000f2), + .S(sig0000002b), + .O(sig00000013) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000a4 ( + .I0(sig000000f2), + .I1(sig00000112), + .O(sig0000002b) + ); + XORCY blk000000a5 ( + .CI(sig0000000e), + .LI(sig0000002a), + .O(sig0000014f) + ); + MUXCY blk000000a6 ( + .CI(sig0000000e), + .DI(sig000000f1), + .S(sig0000002a), + .O(sig00000012) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000a7 ( + .I0(sig000000f1), + .I1(sig0000010d), + .O(sig0000002a) + ); + XORCY blk000000a8 ( + .CI(sig00000003), + .LI(sig00000025), + .O(sig0000014a) + ); + MUXCY blk000000a9 ( + .CI(sig00000003), + .DI(sig000000f0), + .S(sig00000025), + .O(sig0000000e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000aa ( + .I0(sig000000f0), + .I1(sig00000102), + .O(sig00000025) + ); + XORCY blk000000ab ( + .CI(sig00000001), + .LI(sig0000001a), + .O(sig0000013f) + ); + MUXCY blk000000ac ( + .CI(sig00000001), + .DI(sig000000ef), + .S(sig0000001a), + .O(sig00000003) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000ad ( + .I0(sig000000ef), + .I1(sig00000101), + .O(sig0000001a) + ); + XORCY blk000000ae ( + .CI(sig00000035), + .LI(sig00000043), + .O(sig0000015b) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000af ( + .I0(sig00000129), + .I1(sig00000136), + .O(sig00000043) + ); + XORCY blk000000b0 ( + .CI(sig00000034), + .LI(sig00000042), + .O(sig0000015a) + ); + MUXCY blk000000b1 ( + .CI(sig00000034), + .DI(sig00000129), + .S(sig00000042), + .O(sig00000035) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000b2 ( + .I0(sig00000129), + .I1(sig00000135), + .O(sig00000042) + ); + XORCY blk000000b3 ( + .CI(sig00000033), + .LI(sig00000041), + .O(sig00000159) + ); + MUXCY blk000000b4 ( + .CI(sig00000033), + .DI(sig00000129), + .S(sig00000041), + .O(sig00000034) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000b5 ( + .I0(sig00000129), + .I1(sig00000134), + .O(sig00000041) + ); + XORCY blk000000b6 ( + .CI(sig0000003e), + .LI(sig00000040), + .O(sig00000158) + ); + MUXCY blk000000b7 ( + .CI(sig0000003e), + .DI(sig00000129), + .S(sig00000040), + .O(sig00000033) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000b8 ( + .I0(sig00000129), + .I1(sig00000133), + .O(sig00000040) + ); + XORCY blk000000b9 ( + .CI(sig0000003d), + .LI(sig0000004c), + .O(sig00000164) + ); + MUXCY blk000000ba ( + .CI(sig0000003d), + .DI(sig00000129), + .S(sig0000004c), + .O(sig0000003e) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000bb ( + .I0(sig00000129), + .I1(sig0000013e), + .O(sig0000004c) + ); + XORCY blk000000bc ( + .CI(sig0000003c), + .LI(sig0000004b), + .O(sig00000163) + ); + MUXCY blk000000bd ( + .CI(sig0000003c), + .DI(sig00000129), + .S(sig0000004b), + .O(sig0000003d) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000be ( + .I0(sig00000129), + .I1(sig0000013d), + .O(sig0000004b) + ); + XORCY blk000000bf ( + .CI(sig0000003b), + .LI(sig0000004a), + .O(sig00000162) + ); + MUXCY blk000000c0 ( + .CI(sig0000003b), + .DI(sig00000129), + .S(sig0000004a), + .O(sig0000003c) + ); LUT2 #( .INIT ( 4'h6 )) blk000000c1 ( - .I0(sig0000014d), - .I1(sig0000013a), - .O(sig0000005b) + .I0(sig00000129), + .I1(sig0000013c), + .O(sig0000004a) ); XORCY blk000000c2 ( - .CI(sig0000004b), - .LI(sig0000005a), - .O(sig00000172) + .CI(sig0000003a), + .LI(sig00000049), + .O(sig00000161) ); MUXCY blk000000c3 ( - .CI(sig0000004b), - .DI(sig0000013a), - .S(sig0000005a), - .O(sig0000004c) + .CI(sig0000003a), + .DI(sig00000129), + .S(sig00000049), + .O(sig0000003b) ); LUT2 #( .INIT ( 4'h6 )) blk000000c4 ( - .I0(sig0000014c), - .I1(sig0000013a), - .O(sig0000005a) + .I0(sig00000129), + .I1(sig0000013b), + .O(sig00000049) ); XORCY blk000000c5 ( - .CI(sig0000004a), - .LI(sig00000059), - .O(sig00000171) + .CI(sig00000039), + .LI(sig00000048), + .O(sig00000160) ); MUXCY blk000000c6 ( - .CI(sig0000004a), - .DI(sig00000139), - .S(sig00000059), - .O(sig0000004b) + .CI(sig00000039), + .DI(sig00000128), + .S(sig00000048), + .O(sig0000003a) ); LUT2 #( .INIT ( 4'h6 )) blk000000c7 ( - .I0(sig00000139), - .I1(sig0000014b), - .O(sig00000059) + .I0(sig00000128), + .I1(sig0000013a), + .O(sig00000048) ); XORCY blk000000c8 ( - .CI(sig00000049), - .LI(sig00000058), - .O(sig00000170) + .CI(sig00000038), + .LI(sig00000047), + .O(sig0000015f) ); MUXCY blk000000c9 ( - .CI(sig00000049), - .DI(sig00000138), - .S(sig00000058), - .O(sig0000004a) + .CI(sig00000038), + .DI(sig00000127), + .S(sig00000047), + .O(sig00000039) ); LUT2 #( .INIT ( 4'h6 )) blk000000ca ( - .I0(sig00000138), - .I1(sig0000014a), - .O(sig00000058) + .I0(sig00000127), + .I1(sig00000139), + .O(sig00000047) ); XORCY blk000000cb ( - .CI(sig00000048), - .LI(sig00000057), - .O(sig0000016f) + .CI(sig00000037), + .LI(sig00000046), + .O(sig0000015e) ); MUXCY blk000000cc ( - .CI(sig00000048), - .DI(sig00000137), - .S(sig00000057), - .O(sig00000049) + .CI(sig00000037), + .DI(sig00000126), + .S(sig00000046), + .O(sig00000038) ); LUT2 #( .INIT ( 4'h6 )) blk000000cd ( - .I0(sig00000137), - .I1(sig00000149), - .O(sig00000057) + .I0(sig00000126), + .I1(sig00000138), + .O(sig00000046) ); XORCY blk000000ce ( - .CI(sig00000047), - .LI(sig00000056), - .O(sig0000016e) + .CI(sig00000036), + .LI(sig00000045), + .O(sig0000015d) ); MUXCY blk000000cf ( - .CI(sig00000047), - .DI(sig00000135), - .S(sig00000056), - .O(sig00000048) + .CI(sig00000036), + .DI(sig00000124), + .S(sig00000045), + .O(sig00000037) ); LUT2 #( .INIT ( 4'h6 )) blk000000d0 ( - .I0(sig00000135), - .I1(sig00000148), - .O(sig00000056) + .I0(sig00000124), + .I1(sig00000137), + .O(sig00000045) ); XORCY blk000000d1 ( - .CI(sig00000043), - .LI(sig00000055), - .O(sig0000016d) + .CI(sig00000032), + .LI(sig00000044), + .O(sig0000015c) ); MUXCY blk000000d2 ( - .CI(sig00000043), - .DI(sig00000134), - .S(sig00000055), - .O(sig00000047) + .CI(sig00000032), + .DI(sig00000123), + .S(sig00000044), + .O(sig00000036) ); LUT2 #( .INIT ( 4'h6 )) blk000000d3 ( - .I0(sig00000134), - .I1(sig00000143), - .O(sig00000055) + .I0(sig00000123), + .I1(sig00000132), + .O(sig00000044) ); XORCY blk000000d4 ( - .CI(sig00000012), - .LI(sig00000050), - .O(sig00000168) + .CI(sig00000001), + .LI(sig0000003f), + .O(sig00000157) ); MUXCY blk000000d5 ( - .CI(sig00000012), - .DI(sig00000133), - .S(sig00000050), - .O(sig00000043) + .CI(sig00000001), + .DI(sig00000122), + .S(sig0000003f), + .O(sig00000032) ); LUT2 #( .INIT ( 4'h6 )) blk000000d6 ( - .I0(sig00000133), - .I1(sig00000142), - .O(sig00000050) + .I0(sig00000122), + .I1(sig00000131), + .O(sig0000003f) ); FD #( .INIT ( 1'b0 )) blk000000d7 ( .C(clk), - .D(sig0000018f), - .Q(p[47]) + .D(sig000000d8), + .Q(sig00000129) ); FD #( .INIT ( 1'b0 )) blk000000d8 ( .C(clk), - .D(sig0000018b), - .Q(p[46]) + .D(sig000000d7), + .Q(sig00000128) ); FD #( .INIT ( 1'b0 )) blk000000d9 ( .C(clk), - .D(sig0000018a), - .Q(p[45]) + .D(sig000000d6), + .Q(sig00000127) ); FD #( .INIT ( 1'b0 )) blk000000da ( .C(clk), - .D(sig00000189), - .Q(p[44]) + .D(sig000000d5), + .Q(sig00000126) ); FD #( .INIT ( 1'b0 )) blk000000db ( .C(clk), - .D(sig00000188), - .Q(p[43]) + .D(sig000000d3), + .Q(sig00000124) ); FD #( .INIT ( 1'b0 )) blk000000dc ( .C(clk), - .D(sig00000187), - .Q(p[42]) + .D(sig000000d2), + .Q(sig00000123) ); FD #( .INIT ( 1'b0 )) blk000000dd ( .C(clk), - .D(sig00000186), - .Q(p[41]) + .D(sig000000d1), + .Q(sig00000122) ); FD #( .INIT ( 1'b0 )) blk000000de ( .C(clk), - .D(sig00000185), - .Q(p[40]) + .D(sig000000d0), + .Q(sig00000121) ); FD #( .INIT ( 1'b0 )) blk000000df ( .C(clk), - .D(sig00000184), - .Q(p[39]) + .D(sig000000cf), + .Q(sig00000120) ); FD #( .INIT ( 1'b0 )) blk000000e0 ( .C(clk), - .D(sig00000183), - .Q(p[38]) + .D(sig000000ce), + .Q(sig0000011f) ); FD #( .INIT ( 1'b0 )) blk000000e1 ( .C(clk), - .D(sig00000182), - .Q(p[37]) + .D(sig000000cd), + .Q(sig0000011e) ); FD #( .INIT ( 1'b0 )) blk000000e2 ( .C(clk), - .D(sig00000180), - .Q(p[36]) + .D(sig000000cc), + .Q(sig0000011d) ); FD #( .INIT ( 1'b0 )) blk000000e3 ( .C(clk), - .D(sig0000017f), - .Q(p[35]) + .D(sig000000cb), + .Q(sig0000011c) ); FD #( .INIT ( 1'b0 )) blk000000e4 ( .C(clk), - .D(sig0000017e), - .Q(p[34]) + .D(sig000000ca), + .Q(sig0000011b) ); FD #( .INIT ( 1'b0 )) blk000000e5 ( .C(clk), - .D(sig0000017d), - .Q(p[33]) + .D(sig000000e0), + .Q(sig00000130) ); FD #( .INIT ( 1'b0 )) blk000000e6 ( .C(clk), - .D(sig0000017c), - .Q(p[32]) + .D(sig000000df), + .Q(sig0000012f) ); FD #( .INIT ( 1'b0 )) blk000000e7 ( .C(clk), - .D(sig0000017b), - .Q(p[31]) + .D(sig000000de), + .Q(sig0000012e) ); FD #( .INIT ( 1'b0 )) blk000000e8 ( .C(clk), - .D(sig0000017a), - .Q(p[30]) + .D(sig000000dd), + .Q(sig0000012d) ); FD #( .INIT ( 1'b0 )) blk000000e9 ( .C(clk), - .D(sig00000179), - .Q(p[29]) + .D(sig000000dc), + .Q(sig0000012c) ); FD #( .INIT ( 1'b0 )) blk000000ea ( .C(clk), - .D(sig00000178), - .Q(p[28]) + .D(sig000000db), + .Q(sig0000012b) ); FD #( .INIT ( 1'b0 )) blk000000eb ( .C(clk), - .D(sig00000177), - .Q(p[27]) + .D(sig000000da), + .Q(sig0000012a) ); FD #( .INIT ( 1'b0 )) blk000000ec ( .C(clk), - .D(sig00000194), - .Q(p[26]) + .D(sig000000d9), + .Q(sig00000125) ); FD #( .INIT ( 1'b0 )) blk000000ed ( .C(clk), - .D(sig00000193), - .Q(p[25]) + .D(sig000000d4), + .Q(sig0000011a) ); FD #( .INIT ( 1'b0 )) blk000000ee ( .C(clk), - .D(sig00000192), - .Q(p[24]) + .D(sig000000c9), + .Q(sig00000119) ); FD #( .INIT ( 1'b0 )) blk000000ef ( .C(clk), - .D(sig00000191), - .Q(p[23]) + .D(sig000000c0), + .Q(sig00000111) ); FD #( .INIT ( 1'b0 )) blk000000f0 ( .C(clk), - .D(sig00000190), - .Q(p[22]) + .D(sig000000bf), + .Q(sig00000110) ); FD #( .INIT ( 1'b0 )) blk000000f1 ( .C(clk), - .D(sig0000018e), - .Q(p[21]) + .D(sig000000be), + .Q(sig0000010f) ); FD #( .INIT ( 1'b0 )) blk000000f2 ( .C(clk), - .D(sig0000018d), - .Q(p[20]) + .D(sig000000bd), + .Q(sig0000010e) ); FD #( .INIT ( 1'b0 )) blk000000f3 ( .C(clk), - .D(sig0000018c), - .Q(p[19]) + .D(sig000000bb), + .Q(sig0000010c) ); FD #( .INIT ( 1'b0 )) blk000000f4 ( .C(clk), - .D(sig00000181), - .Q(p[18]) + .D(sig000000ba), + .Q(sig0000010b) ); FD #( .INIT ( 1'b0 )) blk000000f5 ( .C(clk), - .D(sig00000176), - .Q(p[17]) + .D(sig000000b9), + .Q(sig0000010a) ); FD #( .INIT ( 1'b0 )) blk000000f6 ( .C(clk), - .D(sig000000f6), - .Q(sig00000147) + .D(sig000000b8), + .Q(sig00000109) ); FD #( .INIT ( 1'b0 )) blk000000f7 ( .C(clk), - .D(sig000000f5), - .Q(sig00000146) + .D(sig000000b7), + .Q(sig00000108) ); FD #( .INIT ( 1'b0 )) blk000000f8 ( .C(clk), - .D(sig000000f4), - .Q(sig00000145) + .D(sig000000b6), + .Q(sig00000107) ); FD #( .INIT ( 1'b0 )) blk000000f9 ( .C(clk), - .D(sig000000f3), - .Q(sig00000144) + .D(sig000000b5), + .Q(sig00000106) ); FD #( .INIT ( 1'b0 )) blk000000fa ( .C(clk), - .D(sig000000ff), - .Q(sig0000014f) + .D(sig000000b4), + .Q(sig00000105) ); FD #( .INIT ( 1'b0 )) blk000000fb ( .C(clk), - .D(sig000000fe), - .Q(sig0000014e) + .D(sig000000b3), + .Q(sig00000104) ); FD #( .INIT ( 1'b0 )) blk000000fc ( .C(clk), - .D(sig000000fd), - .Q(sig0000014d) + .D(sig000000b2), + .Q(sig00000103) ); FD #( .INIT ( 1'b0 )) blk000000fd ( .C(clk), - .D(sig000000fc), - .Q(sig0000014c) + .D(sig000000c8), + .Q(sig00000118) ); FD #( .INIT ( 1'b0 )) blk000000fe ( .C(clk), - .D(sig000000fb), - .Q(sig0000014b) + .D(sig000000c7), + .Q(sig00000117) ); FD #( .INIT ( 1'b0 )) blk000000ff ( .C(clk), - .D(sig000000fa), - .Q(sig0000014a) + .D(sig000000c6), + .Q(sig00000116) ); FD #( .INIT ( 1'b0 )) blk00000100 ( .C(clk), - .D(sig000000f9), - .Q(sig00000149) + .D(sig000000c5), + .Q(sig00000115) ); FD #( .INIT ( 1'b0 )) blk00000101 ( .C(clk), - .D(sig000000f8), - .Q(sig00000148) + .D(sig000000c4), + .Q(sig00000114) ); FD #( .INIT ( 1'b0 )) blk00000102 ( .C(clk), - .D(sig000000f7), - .Q(sig00000143) + .D(sig000000c3), + .Q(sig00000113) ); FD #( .INIT ( 1'b0 )) blk00000103 ( .C(clk), - .D(sig000000f2), - .Q(sig00000142) + .D(sig000000c2), + .Q(sig00000112) ); FD #( .INIT ( 1'b0 )) blk00000104 ( .C(clk), - .D(sig000000e9), - .Q(sig0000013a) + .D(sig000000c1), + .Q(sig0000010d) ); FD #( .INIT ( 1'b0 )) blk00000105 ( .C(clk), - .D(sig000000e8), - .Q(sig00000139) + .D(sig000000bc), + .Q(sig00000102) ); FD #( .INIT ( 1'b0 )) blk00000106 ( .C(clk), - .D(sig000000e7), - .Q(sig00000138) + .D(sig000000b1), + .Q(sig00000101) ); FD #( .INIT ( 1'b0 )) blk00000107 ( .C(clk), - .D(sig000000e6), - .Q(sig00000137) + .D(sig000000e5), + .Q(sig00000136) ); FD #( .INIT ( 1'b0 )) @@ -2168,720 +2120,316 @@ sig000000bc, sig000000bb, sig000000b5, sig000000aa, sig0000009f}) FD #( .INIT ( 1'b0 )) blk0000010b ( - .C(clk), - .D(sig000000e1), - .Q(sig00000132) - ); - FD #( - .INIT ( 1'b0 )) - blk0000010c ( - .C(clk), - .D(sig000000e0), - .Q(sig00000131) - ); - FD #( - .INIT ( 1'b0 )) - blk0000010d ( - .C(clk), - .D(sig000000df), - .Q(sig00000130) - ); - FD #( - .INIT ( 1'b0 )) - blk0000010e ( - .C(clk), - .D(sig000000de), - .Q(sig0000012f) - ); - FD #( - .INIT ( 1'b0 )) - blk0000010f ( - .C(clk), - .D(sig000000dd), - .Q(sig0000012e) - ); - FD #( - .INIT ( 1'b0 )) - blk00000110 ( - .C(clk), - .D(sig000000dc), - .Q(sig0000012d) - ); - FD #( - .INIT ( 1'b0 )) - blk00000111 ( - .C(clk), - .D(sig000000db), - .Q(sig0000012c) - ); - FD #( - .INIT ( 1'b0 )) - blk00000112 ( - .C(clk), - .D(sig000000f1), - .Q(sig00000141) - ); - FD #( - .INIT ( 1'b0 )) - blk00000113 ( - .C(clk), - .D(sig000000f0), - .Q(sig00000140) - ); - FD #( - .INIT ( 1'b0 )) - blk00000114 ( - .C(clk), - .D(sig000000ef), - .Q(sig0000013f) - ); - FD #( - .INIT ( 1'b0 )) - blk00000115 ( .C(clk), .D(sig000000ee), .Q(sig0000013e) ); FD #( .INIT ( 1'b0 )) - blk00000116 ( + blk0000010c ( .C(clk), .D(sig000000ed), .Q(sig0000013d) ); FD #( .INIT ( 1'b0 )) - blk00000117 ( + blk0000010d ( .C(clk), .D(sig000000ec), .Q(sig0000013c) ); FD #( .INIT ( 1'b0 )) - blk00000118 ( + blk0000010e ( .C(clk), .D(sig000000eb), .Q(sig0000013b) ); FD #( .INIT ( 1'b0 )) - blk00000119 ( + blk0000010f ( .C(clk), .D(sig000000ea), - .Q(sig00000136) + .Q(sig0000013a) + ); + FD #( + .INIT ( 1'b0 )) + blk00000110 ( + .C(clk), + .D(sig000000e9), + .Q(sig00000139) + ); + FD #( + .INIT ( 1'b0 )) + blk00000111 ( + .C(clk), + .D(sig000000e8), + .Q(sig00000138) + ); + FD #( + .INIT ( 1'b0 )) + blk00000112 ( + .C(clk), + .D(sig000000e7), + .Q(sig00000137) + ); + FD #( + .INIT ( 1'b0 )) + blk00000113 ( + .C(clk), + .D(sig000000e6), + .Q(sig00000132) + ); + FD #( + .INIT ( 1'b0 )) + blk00000114 ( + .C(clk), + .D(sig000000e1), + .Q(sig00000131) + ); + FD #( + .INIT ( 1'b0 )) + blk00000115 ( + .C(clk), + .D(sig000000a9), + .Q(sig00000100) + ); + FD #( + .INIT ( 1'b0 )) + blk00000116 ( + .C(clk), + .D(sig000000a8), + .Q(sig000000ff) + ); + FD #( + .INIT ( 1'b0 )) + blk00000117 ( + .C(clk), + .D(sig000000a7), + .Q(sig000000fe) + ); + FD #( + .INIT ( 1'b0 )) + blk00000118 ( + .C(clk), + .D(sig000000a6), + .Q(sig000000fd) + ); + FD #( + .INIT ( 1'b0 )) + blk00000119 ( + .C(clk), + .D(sig000000a5), + .Q(sig000000fc) ); FD #( .INIT ( 1'b0 )) blk0000011a ( .C(clk), - .D(sig000000e5), - .Q(sig0000012b) + .D(sig000000a3), + .Q(sig000000fb) ); FD #( .INIT ( 1'b0 )) blk0000011b ( .C(clk), - .D(sig000000da), - .Q(sig0000012a) + .D(sig000000a2), + .Q(sig000000fa) ); FD #( .INIT ( 1'b0 )) blk0000011c ( .C(clk), - .D(sig000000d1), - .Q(sig00000122) + .D(sig000000a1), + .Q(sig000000f9) ); FD #( .INIT ( 1'b0 )) blk0000011d ( .C(clk), - .D(sig000000d0), - .Q(sig00000121) + .D(sig000000a0), + .Q(sig000000f8) ); FD #( .INIT ( 1'b0 )) blk0000011e ( .C(clk), - .D(sig000000cf), - .Q(sig00000120) + .D(sig0000009f), + .Q(sig000000f7) ); FD #( .INIT ( 1'b0 )) blk0000011f ( .C(clk), - .D(sig000000ce), - .Q(sig0000011f) + .D(sig0000009e), + .Q(sig000000f6) ); FD #( .INIT ( 1'b0 )) blk00000120 ( .C(clk), - .D(sig000000cc), - .Q(sig0000011d) + .D(sig0000009d), + .Q(sig000000f5) ); FD #( .INIT ( 1'b0 )) blk00000121 ( .C(clk), - .D(sig000000cb), - .Q(sig0000011c) + .D(sig0000009c), + .Q(sig000000f4) ); FD #( .INIT ( 1'b0 )) blk00000122 ( .C(clk), - .D(sig000000ca), - .Q(sig0000011b) + .D(sig0000009b), + .Q(sig000000f3) ); FD #( .INIT ( 1'b0 )) blk00000123 ( .C(clk), - .D(sig000000c9), - .Q(sig0000011a) + .D(sig0000009a), + .Q(sig000000f2) ); FD #( .INIT ( 1'b0 )) blk00000124 ( .C(clk), - .D(sig000000c8), - .Q(sig00000119) + .D(sig00000098), + .Q(sig000000f1) ); FD #( .INIT ( 1'b0 )) blk00000125 ( .C(clk), - .D(sig000000c7), - .Q(sig00000118) + .D(sig00000097), + .Q(sig000000f0) ); FD #( .INIT ( 1'b0 )) blk00000126 ( .C(clk), - .D(sig000000c6), - .Q(sig00000117) + .D(sig00000096), + .Q(sig000000ef) ); FD #( .INIT ( 1'b0 )) blk00000127 ( .C(clk), - .D(sig000000c5), - .Q(sig00000116) + .D(sig00000095), + .Q(p[16]) ); FD #( .INIT ( 1'b0 )) blk00000128 ( .C(clk), - .D(sig000000c4), - .Q(sig00000115) + .D(sig00000094), + .Q(p[15]) ); FD #( .INIT ( 1'b0 )) blk00000129 ( .C(clk), - .D(sig000000c3), - .Q(sig00000114) + .D(sig00000093), + .Q(p[14]) ); FD #( .INIT ( 1'b0 )) blk0000012a ( .C(clk), - .D(sig000000d9), - .Q(sig00000129) + .D(sig00000092), + .Q(p[13]) ); FD #( .INIT ( 1'b0 )) blk0000012b ( .C(clk), - .D(sig000000d8), - .Q(sig00000128) + .D(sig00000091), + .Q(p[12]) ); FD #( .INIT ( 1'b0 )) blk0000012c ( .C(clk), - .D(sig000000d7), - .Q(sig00000127) + .D(sig00000090), + .Q(p[11]) ); FD #( .INIT ( 1'b0 )) blk0000012d ( .C(clk), - .D(sig000000d6), - .Q(sig00000126) + .D(sig0000008f), + .Q(p[10]) ); FD #( .INIT ( 1'b0 )) blk0000012e ( .C(clk), - .D(sig000000d5), - .Q(sig00000125) + .D(sig000000b0), + .Q(p[9]) ); FD #( .INIT ( 1'b0 )) blk0000012f ( .C(clk), - .D(sig000000d4), - .Q(sig00000124) + .D(sig000000af), + .Q(p[8]) ); FD #( .INIT ( 1'b0 )) blk00000130 ( .C(clk), - .D(sig000000d3), - .Q(sig00000123) + .D(sig000000ae), + .Q(p[7]) ); FD #( .INIT ( 1'b0 )) blk00000131 ( .C(clk), - .D(sig000000d2), - .Q(sig0000011e) + .D(sig000000ad), + .Q(p[6]) ); FD #( .INIT ( 1'b0 )) blk00000132 ( .C(clk), - .D(sig000000cd), - .Q(sig00000113) + .D(sig000000ac), + .Q(p[5]) ); FD #( .INIT ( 1'b0 )) blk00000133 ( .C(clk), - .D(sig000000c2), - .Q(sig00000112) + .D(sig000000ab), + .Q(p[4]) ); FD #( .INIT ( 1'b0 )) blk00000134 ( .C(clk), - .D(sig000000ba), - .Q(sig00000111) + .D(sig000000aa), + .Q(p[3]) ); FD #( .INIT ( 1'b0 )) blk00000135 ( .C(clk), - .D(sig000000b9), - .Q(sig00000110) + .D(sig000000a4), + .Q(p[2]) ); FD #( .INIT ( 1'b0 )) blk00000136 ( .C(clk), - .D(sig000000b8), - .Q(sig0000010f) + .D(sig00000099), + .Q(p[1]) ); FD #( .INIT ( 1'b0 )) blk00000137 ( .C(clk), - .D(sig000000b7), - .Q(sig0000010e) - ); - FD #( - .INIT ( 1'b0 )) - blk00000138 ( - .C(clk), - .D(sig000000b6), - .Q(sig0000010d) - ); - FD #( - .INIT ( 1'b0 )) - blk00000139 ( - .C(clk), - .D(sig000000b4), - .Q(sig0000010c) - ); - FD #( - .INIT ( 1'b0 )) - blk0000013a ( - .C(clk), - .D(sig000000b3), - .Q(sig0000010b) - ); - FD #( - .INIT ( 1'b0 )) - blk0000013b ( - .C(clk), - .D(sig000000b2), - .Q(sig0000010a) - ); - FD #( - .INIT ( 1'b0 )) - blk0000013c ( - .C(clk), - .D(sig000000b1), - .Q(sig00000109) - ); - FD #( - .INIT ( 1'b0 )) - blk0000013d ( - .C(clk), - .D(sig000000b0), - .Q(sig00000108) - ); - FD #( - .INIT ( 1'b0 )) - blk0000013e ( - .C(clk), - .D(sig000000af), - .Q(sig00000107) - ); - FD #( - .INIT ( 1'b0 )) - blk0000013f ( - .C(clk), - .D(sig000000ae), - .Q(sig00000106) - ); - FD #( - .INIT ( 1'b0 )) - blk00000140 ( - .C(clk), - .D(sig000000ad), - .Q(sig00000105) - ); - FD #( - .INIT ( 1'b0 )) - blk00000141 ( - .C(clk), - .D(sig000000ac), - .Q(sig00000104) - ); - FD #( - .INIT ( 1'b0 )) - blk00000142 ( - .C(clk), - .D(sig000000ab), - .Q(sig00000103) - ); - FD #( - .INIT ( 1'b0 )) - blk00000143 ( - .C(clk), - .D(sig000000a9), - .Q(sig00000102) - ); - FD #( - .INIT ( 1'b0 )) - blk00000144 ( - .C(clk), - .D(sig000000a8), - .Q(sig00000101) - ); - FD #( - .INIT ( 1'b0 )) - blk00000145 ( - .C(clk), - .D(sig000000a7), - .Q(sig00000100) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000146 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a4), - .Q(sig00000007) - ); - FD #( - .INIT ( 1'b0 )) - blk00000147 ( - .C(clk), - .D(sig00000007), - .Q(p[14]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000148 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a6), - .Q(sig00000009) - ); - FD #( - .INIT ( 1'b0 )) - blk00000149 ( - .C(clk), - .D(sig00000009), - .Q(p[16]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk0000014a ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a5), - .Q(sig00000008) - ); - FD #( - .INIT ( 1'b0 )) - blk0000014b ( - .C(clk), - .D(sig00000008), - .Q(p[15]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk0000014c ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a3), - .Q(sig00000006) - ); - FD #( - .INIT ( 1'b0 )) - blk0000014d ( - .C(clk), - .D(sig00000006), - .Q(p[13]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk0000014e ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a2), - .Q(sig00000005) - ); - FD #( - .INIT ( 1'b0 )) - blk0000014f ( - .C(clk), - .D(sig00000005), - .Q(p[12]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000150 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a1), - .Q(sig00000004) - ); - FD #( - .INIT ( 1'b0 )) - blk00000151 ( - .C(clk), - .D(sig00000004), - .Q(p[11]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000152 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000a0), - .Q(sig00000003) - ); - FD #( - .INIT ( 1'b0 )) - blk00000153 ( - .C(clk), - .D(sig00000003), - .Q(p[10]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000154 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000c1), - .Q(sig00000011) - ); - FD #( - .INIT ( 1'b0 )) - blk00000155 ( - .C(clk), - .D(sig00000011), - .Q(p[9]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000156 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000c0), - .Q(sig00000010) - ); - FD #( - .INIT ( 1'b0 )) - blk00000157 ( - .C(clk), - .D(sig00000010), - .Q(p[8]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000158 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000bf), - .Q(sig0000000f) - ); - FD #( - .INIT ( 1'b0 )) - blk00000159 ( - .C(clk), - .D(sig0000000f), - .Q(p[7]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk0000015a ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000be), - .Q(sig0000000e) - ); - FD #( - .INIT ( 1'b0 )) - blk0000015b ( - .C(clk), - .D(sig0000000e), - .Q(p[6]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk0000015c ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000bd), - .Q(sig0000000d) - ); - FD #( - .INIT ( 1'b0 )) - blk0000015d ( - .C(clk), - .D(sig0000000d), - .Q(p[5]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk0000015e ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000bc), - .Q(sig0000000c) - ); - FD #( - .INIT ( 1'b0 )) - blk0000015f ( - .C(clk), - .D(sig0000000c), - .Q(p[4]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000160 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000bb), - .Q(sig0000000b) - ); - FD #( - .INIT ( 1'b0 )) - blk00000161 ( - .C(clk), - .D(sig0000000b), - .Q(p[3]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000162 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000b5), - .Q(sig0000000a) - ); - FD #( - .INIT ( 1'b0 )) - blk00000163 ( - .C(clk), - .D(sig0000000a), - .Q(p[2]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000164 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig000000aa), - .Q(sig00000002) - ); - FD #( - .INIT ( 1'b0 )) - blk00000165 ( - .C(clk), - .D(sig00000002), - .Q(p[1]) - ); - SRL16 #( - .INIT ( 16'h0000 )) - blk00000166 ( - .A0(sig00000012), - .A1(sig00000012), - .A2(sig00000012), - .A3(sig00000012), - .CLK(clk), - .D(sig0000009f), - .Q(sig00000001) - ); - FD #( - .INIT ( 1'b0 )) - blk00000167 ( - .C(clk), - .D(sig00000001), + .D(sig0000008e), .Q(p[0]) ); diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco index 2273be6..13cf374 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version 13.2 -# Date: Mon Oct 24 22:04:01 2011 +# Date: Fri Oct 28 08:30:26 2011 # ############################################################## # @@ -49,7 +49,7 @@ CSET multtype=Parallel_Multiplier CSET optgoal=Speed CSET outputwidthhigh=47 CSET outputwidthlow=0 -CSET pipestages=3 +CSET pipestages=2 CSET portatype=Signed CSET portawidth=24 CSET portbtype=Signed @@ -65,4 +65,4 @@ CSET zerodetect=false MISC pkg_timestamp=2011-06-21T06:26:54.000Z # END Extra information GENERATE -# CRC: fd22ef14 +# CRC: efe4d30e diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise index 1efcbc5..60829e7 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise @@ -50,8 +50,8 @@ - - + + diff --git a/verilog/sd2snes_cx4/main.v b/verilog/sd2snes_cx4/main.v index 93c69dd..182b861 100644 --- a/verilog/sd2snes_cx4/main.v +++ b/verilog/sd2snes_cx4/main.v @@ -299,7 +299,8 @@ cx4 snes_cx4 ( .BUS_DI(CX4_DINr), .BUS_ADDR(CX4_ADDR), .BUS_RRQ(CX4_RRQ), - .BUS_RDY(CX4_RDY) + .BUS_RDY(CX4_RDY), + .cx4_active(cx4_active) ); parameter MODE_SNES = 1'b0; @@ -359,7 +360,7 @@ always @(posedge CLK2) begin end wire IS_CART = IS_ROM | IS_SAVERAM | IS_WRITABLE; -wire ASSERT_SNES_ADDR = SNES_CPU_CLK & NEED_SNES_ADDRr & IS_CART; +wire ASSERT_SNES_ADDR = SNES_CPU_CLK & NEED_SNES_ADDRr & IS_CART & ~cx4_active; assign ROM_ADDR = (SD_DMA_TO_ROM) ? MCU_ADDR[23:1] : (ASSERT_SNES_ADDR) ? MAPPED_SNES_ADDR[23:1] : ROM_ADDRr[23:1]; assign ROM_ADDR0 = (SD_DMA_TO_ROM) ? MCU_ADDR[0] : (ASSERT_SNES_ADDR) ? MAPPED_SNES_ADDR[0] : ROM_ADDRr[0]; @@ -374,14 +375,14 @@ assign MCU_RDY = RQ_MCU_RDYr; always @(posedge CLK2) begin if(MCU_RRQ) begin MCU_RD_PENDr <= 1'b1; - RQ_MCU_RDYr <= 1'b0; + RQ_MCU_RDYr <= 1'b0; end else if(MCU_WRQ) begin MCU_WR_PENDr <= 1'b1; - RQ_MCU_RDYr <= 1'b0; + RQ_MCU_RDYr <= 1'b0; end else if(STATE & (ST_MCU_RD_END | ST_MCU_WR_END)) begin MCU_RD_PENDr <= 1'b0; - MCU_WR_PENDr <= 1'b0; - RQ_MCU_RDYr <= 1'b1; + MCU_WR_PENDr <= 1'b0; + RQ_MCU_RDYr <= 1'b1; end end @@ -392,143 +393,144 @@ assign CX4_RDY = RQ_CX4_RDYr; always @(posedge CLK2) begin if(CX4_RRQ) begin CX4_RD_PENDr <= 1'b1; - RQ_CX4_RDYr <= 1'b0; - end else if(STATE == ST_CX4_RD_WAIT && ST_MEM_DELAYr == 4'h0) begin + RQ_CX4_RDYr <= 1'b0; + end else if(STATE == ST_CX4_RD_END) begin CX4_RD_PENDr <= 1'b0; - RQ_CX4_RDYr <= 1'b1; + RQ_CX4_RDYr <= 1'b1; end end reg snes_wr_cycle; always @(posedge CLK2) begin - if(SNES_cycle_start & IS_CART) begin + if(SNES_cycle_start & IS_CART & ~cx4_active) begin STATE <= ST_SNES_RD_ADDR; - end else if(SNES_WR_start & IS_CART) begin + end else if(SNES_WR_start & IS_CART & ~cx4_active) begin STATE <= ST_SNES_WR_ADDR; end else begin case(STATE) - ST_IDLE: begin - ROM_ADDRr <= MAPPED_SNES_ADDR; - if(CX4_RRQ | CX4_RD_PENDr) begin - ROM_ADDRr <= CX4_ADDR; - STATE <= ST_CX4_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; + ST_IDLE: begin + ROM_ADDRr <= MAPPED_SNES_ADDR; + if(CX4_RD_PENDr) begin + STATE <= ST_CX4_RD_WAIT; + ROM_ADDRr <= CX4_ADDR; + ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; + end + else if(~cx4_active) begin + if(MCU_RD_PENDr) STATE <= ST_MCU_RD_ADDR; + else if(MCU_WR_PENDr) STATE <= ST_MCU_WR_ADDR; + else STATE <= ST_IDLE; end - else if(MCU_RD_PENDr) STATE <= ST_MCU_RD_ADDR; - else if(MCU_WR_PENDr) STATE <= ST_MCU_WR_ADDR; else STATE <= ST_IDLE; - end - ST_SNES_RD_ADDR: begin - STATE <= ST_SNES_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT; - end - ST_SNES_RD_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_RD_END; - else STATE <= ST_SNES_RD_WAIT; - if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; - else SNES_DINr <= ROM_DATA[15:8]; - end - ST_SNES_RD_END: begin - STATE <= ST_IDLE; - if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; - else SNES_DINr <= ROM_DATA[15:8]; - end + end + ST_SNES_RD_ADDR: begin + STATE <= ST_SNES_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT; + end + ST_SNES_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_RD_END; + else STATE <= ST_SNES_RD_WAIT; + if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; + else SNES_DINr <= ROM_DATA[15:8]; + end + ST_SNES_RD_END: begin + STATE <= ST_IDLE; + if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; + else SNES_DINr <= ROM_DATA[15:8]; + end ST_SNES_WR_ADDR: begin ROM_WEr <= (!IS_WRITABLE); snes_wr_cycle <= 1'b1; - STATE <= ST_SNES_WR_WAIT1; - ST_MEM_DELAYr <= ROM_WR_WAIT1; - end - ST_SNES_WR_WAIT1: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_DATA; - else STATE <= ST_SNES_WR_WAIT1; - end - ST_SNES_WR_DATA: begin + STATE <= ST_SNES_WR_WAIT1; + ST_MEM_DELAYr <= ROM_WR_WAIT1; + end + ST_SNES_WR_WAIT1: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_DATA; + else STATE <= ST_SNES_WR_WAIT1; + end + ST_SNES_WR_DATA: begin ROM_DOUTr <= SNES_DATA; - ST_MEM_DELAYr <= ROM_WR_WAIT2; - STATE <= ST_SNES_WR_WAIT2; - end + ST_MEM_DELAYr <= ROM_WR_WAIT2; + STATE <= ST_SNES_WR_WAIT2; + end ST_SNES_WR_WAIT2: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_END; - else STATE <= ST_SNES_WR_WAIT2; - end - ST_SNES_WR_END: begin - STATE <= ST_IDLE; - ROM_WEr <= 1'b1; - snes_wr_cycle <= 1'b0; - end - ST_MCU_RD_ADDR: begin - ROM_ADDRr <= MCU_ADDR; - STATE <= ST_MCU_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT_MCU; - end - ST_MCU_RD_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin - STATE <= ST_MCU_RD_WAIT2; - ST_MEM_DELAYr <= 4'h2; + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_END; + else STATE <= ST_SNES_WR_WAIT2; end - else STATE <= ST_MCU_RD_WAIT; - if(ROM_ADDR0) MCU_DINr <= ROM_DATA[7:0]; - else MCU_DINr <= ROM_DATA[15:8]; - end - ST_MCU_RD_WAIT2: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin - STATE <= ST_MCU_RD_END; - end else STATE <= ST_MCU_RD_WAIT2; - end - ST_MCU_RD_END: begin - STATE <= ST_IDLE; - end - ST_MCU_WR_ADDR: begin - ROM_ADDRr <= MCU_ADDR; - STATE <= ST_MCU_WR_WAIT; - ST_MEM_DELAYr <= ROM_WR_WAIT_MCU; - ROM_DOUTr <= MCU_DOUT; - ROM_WEr <= 1'b0; - end - ST_MCU_WR_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin - ROM_WEr <= 1'b1; - STATE <= ST_MCU_WR_WAIT2; - ST_MEM_DELAYr <= 4'h2; + ST_SNES_WR_END: begin + STATE <= ST_IDLE; + ROM_WEr <= 1'b1; + snes_wr_cycle <= 1'b0; end - else STATE <= ST_MCU_WR_WAIT; + ST_MCU_RD_ADDR: begin + ROM_ADDRr <= MCU_ADDR; + STATE <= ST_MCU_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_MCU; + end + ST_MCU_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_RD_WAIT2; + ST_MEM_DELAYr <= 4'h2; + end + else STATE <= ST_MCU_RD_WAIT; + if(ROM_ADDR0) MCU_DINr <= ROM_DATA[7:0]; + else MCU_DINr <= ROM_DATA[15:8]; end - ST_MCU_WR_WAIT2: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin - STATE <= ST_MCU_WR_END; - end else STATE <= ST_MCU_WR_WAIT2; - end - ST_MCU_WR_END: begin - STATE <= ST_IDLE; - end - - ST_CX4_RD_ADDR: begin - ROM_ADDRr <= CX4_ADDR; - STATE <= ST_CX4_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; - end - ST_CX4_RD_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin + ST_MCU_RD_WAIT2: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_RD_END; + end else STATE <= ST_MCU_RD_WAIT2; + end + ST_MCU_RD_END: begin STATE <= ST_IDLE; end - else STATE <= ST_CX4_RD_WAIT; - if(ROM_ADDR0) CX4_DINr <= ROM_DATA[7:0]; - else CX4_DINr <= ROM_DATA[15:8]; + ST_MCU_WR_ADDR: begin + ROM_ADDRr <= MCU_ADDR; + STATE <= ST_MCU_WR_WAIT; + ST_MEM_DELAYr <= ROM_WR_WAIT_MCU; + ROM_DOUTr <= MCU_DOUT; + ROM_WEr <= 1'b0; + end + ST_MCU_WR_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + ROM_WEr <= 1'b1; + STATE <= ST_MCU_WR_WAIT2; + ST_MEM_DELAYr <= 4'h2; + end + else STATE <= ST_MCU_WR_WAIT; end - ST_CX4_RD_END: begin - STATE <= ST_IDLE; - end - endcase + ST_MCU_WR_WAIT2: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_WR_END; + end else STATE <= ST_MCU_WR_WAIT2; + end + ST_MCU_WR_END: begin + STATE <= ST_IDLE; + end + + ST_CX4_RD_ADDR: begin + ROM_ADDRr <= CX4_ADDR; + STATE <= ST_CX4_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; + end + ST_CX4_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_CX4_RD_END; + else STATE <= ST_CX4_RD_WAIT; + if(ROM_ADDR0) CX4_DINr <= ROM_DATA[7:0]; + else CX4_DINr <= ROM_DATA[15:8]; + end + ST_CX4_RD_END: begin + STATE <= ST_IDLE; + end + endcase end end diff --git a/verilog/sd2snes_cx4/sd2snes_cx4.xise b/verilog/sd2snes_cx4/sd2snes_cx4.xise index 82ca3c5..a182ee5 100644 --- a/verilog/sd2snes_cx4/sd2snes_cx4.xise +++ b/verilog/sd2snes_cx4/sd2snes_cx4.xise @@ -238,7 +238,7 @@ - + @@ -320,7 +320,7 @@ - + @@ -366,8 +366,8 @@ - - + + From 314da586a40a3454a81e8331c24d37c7e34acd85 Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 1 Nov 2011 20:54:07 +0100 Subject: [PATCH 07/11] FPGA/cx4: implement reset vector access --- verilog/sd2snes_cx4/address.v | 7 +++++-- verilog/sd2snes_cx4/cx4.v | 3 ++- verilog/sd2snes_cx4/main.v | 16 +++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/verilog/sd2snes_cx4/address.v b/verilog/sd2snes_cx4/address.v index e62071d..c2502d3 100644 --- a/verilog/sd2snes_cx4/address.v +++ b/verilog/sd2snes_cx4/address.v @@ -21,6 +21,7 @@ module address( input CLK, input [2:0] MAPPER, // MCU detected mapper input [23:0] SNES_ADDR, // requested address from SNES + input SNES_CS, // SNES ROMSEL signal output [23:0] ROM_ADDR, // Address to request from SRAM0 output ROM_SEL, // enable SRAM0 (active low) output IS_SAVERAM, // address/CS mapped as SRAM? @@ -30,7 +31,8 @@ module address( input [23:0] ROM_MASK, input use_msu1, output msu_enable, - output cx4_enable + output cx4_enable, + output cx4_vect_enable ); wire [23:0] SRAM_SNES_ADDR; @@ -40,7 +42,7 @@ wire [23:0] SRAM_SNES_ADDR; - MMIO @ 6000-7fff */ -assign IS_ROM = (SNES_ADDR[15]); +assign IS_ROM = SNES_ADDR[15] & ~SNES_CS; assign SRAM_SNES_ADDR = ({2'b00, SNES_ADDR[22:16], SNES_ADDR[14:0]} & ROM_MASK); @@ -61,4 +63,5 @@ initial cx4_enable_r = 6'b000000; always @(posedge CLK) cx4_enable_r <= {cx4_enable_r[4:0], cx4_enable_w}; assign cx4_enable = &cx4_enable_r[5:2]; +assign cx4_vect_enable = &SNES_ADDR[15:5]; endmodule diff --git a/verilog/sd2snes_cx4/cx4.v b/verilog/sd2snes_cx4/cx4.v index 06d943d..6afdbea 100644 --- a/verilog/sd2snes_cx4/cx4.v +++ b/verilog/sd2snes_cx4/cx4.v @@ -23,6 +23,7 @@ module cx4( output [7:0] DO, input [12:0] ADDR, input CS, + input SNES_VECT_EN, input nRD, input nWR, input CLK, @@ -44,7 +45,7 @@ parameter BUSY_CPU = 2'b10; wire datram_enable = CS & (ADDR[11:0] < 12'hc00); wire mmio_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] < 5'b10011); wire status_enable = CS & (ADDR[12:5] == 8'b11111010) & (ADDR[4:0] >= 5'b10011); -wire vector_enable = CS & (ADDR[12:5] == 8'b11111011); +wire vector_enable = (CS & (ADDR[12:5] == 8'b11111011)) | (cx4_active & SNES_VECT_EN); wire gpr_enable = CS & (&(ADDR[12:7]) && ADDR[5:4] != 2'b11); wire pgmrom_enable = CS & (ADDR[12:5] == 8'b11110000); diff --git a/verilog/sd2snes_cx4/main.v b/verilog/sd2snes_cx4/main.v index 182b861..ff82ab7 100644 --- a/verilog/sd2snes_cx4/main.v +++ b/verilog/sd2snes_cx4/main.v @@ -268,6 +268,7 @@ address snes_addr( .CLK(CLK2), .MAPPER(MAPPER), .SNES_ADDR(SNES_ADDR), // requested address from SNES + .SNES_CS(SNES_CS), .ROM_ADDR(MAPPED_SNES_ADDR), // Address to request from SRAM (active low) .ROM_SEL(ROM_SEL), // which SRAM unit to access .IS_SAVERAM(IS_SAVERAM), @@ -279,7 +280,8 @@ address snes_addr( //MSU-1 .msu_enable(msu_enable), //CX4 - .cx4_enable(cx4_enable) + .cx4_enable(cx4_enable), + .cx4_vect_enable(cx4_vect_enable) ); reg [7:0] CX4_DINr; @@ -290,6 +292,7 @@ cx4 snes_cx4 ( .DO(CX4_SNES_DATA_OUT), .ADDR(SNES_ADDR[12:0]), .CS(cx4_enable), + .SNES_VECT_EN(cx4_vect_enable), .nRD(SNES_READ), .nWR(SNES_WRITE), .CLK(CLK2), @@ -344,9 +347,12 @@ assign CX4_SNES_DATA_IN = SNES_DATA; reg [7:0] SNES_DINr; reg [7:0] ROM_DOUTr; -assign SNES_DATA = (!SNES_READ) ? (msu_enable ? MSU_SNES_DATA_OUT +assign SNES_DATA = (!SNES_READ) + ? (msu_enable ? MSU_SNES_DATA_OUT :cx4_enable ? CX4_SNES_DATA_OUT - :SNES_DINr /*(ROM_ADDR0 ? ROM_DATA[7:0] : ROM_DATA[15:8])*/) : 8'bZ; + :(cx4_active & cx4_vect_enable) ? CX4_SNES_DATA_OUT + : SNES_DINr) + : 8'bZ; reg [3:0] ST_MEM_DELAYr; reg MCU_RD_PENDr; @@ -559,8 +565,8 @@ assign ROM_BLE = !ROM_WE ? !ROM_ADDR0 : 1'b0; assign SNES_DATABUS_OE = msu_enable ? 1'b0 : cx4_enable ? 1'b0 : - ((IS_ROM & SNES_CS) - |(!IS_ROM & !IS_SAVERAM & !IS_WRITABLE) + (cx4_active & cx4_vect_enable) ? 1'b0 : + ((!IS_ROM & !IS_SAVERAM & !IS_WRITABLE) |(SNES_READ & SNES_WRITE) ); From ecd75210a903526250097712da5b43bc559c5dfb Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 1 Nov 2011 20:55:59 +0100 Subject: [PATCH 08/11] FPGA/cx4: fix memory sharing --- verilog/sd2snes_cx4/main.v | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/verilog/sd2snes_cx4/main.v b/verilog/sd2snes_cx4/main.v index ff82ab7..de849b4 100644 --- a/verilog/sd2snes_cx4/main.v +++ b/verilog/sd2snes_cx4/main.v @@ -400,7 +400,7 @@ always @(posedge CLK2) begin if(CX4_RRQ) begin CX4_RD_PENDr <= 1'b1; RQ_CX4_RDYr <= 1'b0; - end else if(STATE == ST_CX4_RD_END) begin + end else if(STATE == ST_CX4_RD_WAIT && ST_MEM_DELAYr == 4'h0) begin CX4_RD_PENDr <= 1'b0; RQ_CX4_RDYr <= 1'b1; end @@ -421,8 +421,7 @@ always @(posedge CLK2) begin STATE <= ST_CX4_RD_WAIT; ROM_ADDRr <= CX4_ADDR; ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; - end - else if(~cx4_active) begin + end else if(~cx4_active && ~ASSERT_SNES_ADDR) begin if(MCU_RD_PENDr) STATE <= ST_MCU_RD_ADDR; else if(MCU_WR_PENDr) STATE <= ST_MCU_WR_ADDR; else STATE <= ST_IDLE; @@ -481,10 +480,10 @@ always @(posedge CLK2) begin if(ST_MEM_DELAYr == 4'h0) begin STATE <= ST_MCU_RD_WAIT2; ST_MEM_DELAYr <= 4'h2; + if(ROM_ADDR0) MCU_DINr <= ROM_DATA[7:0]; + else MCU_DINr <= ROM_DATA[15:8]; end else STATE <= ST_MCU_RD_WAIT; - if(ROM_ADDR0) MCU_DINr <= ROM_DATA[7:0]; - else MCU_DINr <= ROM_DATA[15:8]; end ST_MCU_RD_WAIT2: begin ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; @@ -528,7 +527,7 @@ always @(posedge CLK2) begin end ST_CX4_RD_WAIT: begin ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_CX4_RD_END; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_IDLE; else STATE <= ST_CX4_RD_WAIT; if(ROM_ADDR0) CX4_DINr <= ROM_DATA[7:0]; else CX4_DINr <= ROM_DATA[15:8]; From 3dd64cb98fedf3a46c6a7123c978b8e42d2d8733 Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 1 Nov 2011 20:56:30 +0100 Subject: [PATCH 09/11] FPGA/cx4: timing closure --- verilog/sd2snes_cx4/cx4.v | 2 +- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v | 1716 ++++++++++--------- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco | 6 +- verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise | 314 +++- verilog/sd2snes_cx4/sd2snes_cx4.xise | 14 +- 5 files changed, 1226 insertions(+), 826 deletions(-) diff --git a/verilog/sd2snes_cx4/cx4.v b/verilog/sd2snes_cx4/cx4.v index 6afdbea..54173f8 100644 --- a/verilog/sd2snes_cx4/cx4.v +++ b/verilog/sd2snes_cx4/cx4.v @@ -89,7 +89,7 @@ reg [14:0] cx4_mmio_pagemem[1:0]; reg [23:0] const [15:0]; -reg [14:0] cachetag [1:0]; // 14-0: bank number +reg [14:0] cachetag [1:0]; reg [1:0] cachevalid; reg [14:0] cache_pgmpage; diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v index da8b924..a2c52a6 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.v @@ -7,7 +7,7 @@ // \ \ \/ Version: O.61xd // \ \ Application: netgen // / / Filename: cx4_mul.v -// /___/ /\ Timestamp: Fri Oct 28 10:30:51 2011 +// /___/ /\ Timestamp: Sun Oct 30 21:22:41 2011 // \ \ / \ // \___\/\___\ // @@ -34,9 +34,10 @@ `timescale 1 ns/1 ps module cx4_mul ( - clk, p, a, b + clk, ce, p, a, b )/* synthesis syn_black_box syn_noprune=1 */; input clk; + input ce; output [47 : 0] p; input [23 : 0] a; input [23 : 0] b; @@ -398,7 +399,28 @@ module cx4_mul ( wire sig00000161; wire sig00000162; wire sig00000163; - wire sig00000164; + wire \NLW_blk00000002_P<35>_UNCONNECTED ; + wire \NLW_blk00000002_P<34>_UNCONNECTED ; + wire \NLW_blk00000002_P<33>_UNCONNECTED ; + wire \NLW_blk00000002_P<32>_UNCONNECTED ; + wire \NLW_blk00000002_P<31>_UNCONNECTED ; + wire \NLW_blk00000002_P<30>_UNCONNECTED ; + wire \NLW_blk00000002_P<29>_UNCONNECTED ; + wire \NLW_blk00000002_P<28>_UNCONNECTED ; + wire \NLW_blk00000002_P<27>_UNCONNECTED ; + wire \NLW_blk00000002_P<26>_UNCONNECTED ; + wire \NLW_blk00000002_P<25>_UNCONNECTED ; + wire \NLW_blk00000002_P<24>_UNCONNECTED ; + wire \NLW_blk00000002_P<23>_UNCONNECTED ; + wire \NLW_blk00000002_P<22>_UNCONNECTED ; + wire \NLW_blk00000002_P<21>_UNCONNECTED ; + wire \NLW_blk00000002_P<20>_UNCONNECTED ; + wire \NLW_blk00000002_P<19>_UNCONNECTED ; + wire \NLW_blk00000002_P<18>_UNCONNECTED ; + wire \NLW_blk00000002_P<17>_UNCONNECTED ; + wire \NLW_blk00000002_P<16>_UNCONNECTED ; + wire \NLW_blk00000002_P<15>_UNCONNECTED ; + wire \NLW_blk00000002_P<14>_UNCONNECTED ; wire \NLW_blk00000003_P<35>_UNCONNECTED ; wire \NLW_blk00000003_P<34>_UNCONNECTED ; wire \NLW_blk00000003_P<33>_UNCONNECTED ; @@ -411,16 +433,6 @@ module cx4_mul ( wire \NLW_blk00000003_P<26>_UNCONNECTED ; wire \NLW_blk00000003_P<25>_UNCONNECTED ; wire \NLW_blk00000003_P<24>_UNCONNECTED ; - wire \NLW_blk00000003_P<23>_UNCONNECTED ; - wire \NLW_blk00000003_P<22>_UNCONNECTED ; - wire \NLW_blk00000003_P<21>_UNCONNECTED ; - wire \NLW_blk00000003_P<20>_UNCONNECTED ; - wire \NLW_blk00000003_P<19>_UNCONNECTED ; - wire \NLW_blk00000003_P<18>_UNCONNECTED ; - wire \NLW_blk00000003_P<17>_UNCONNECTED ; - wire \NLW_blk00000003_P<16>_UNCONNECTED ; - wire \NLW_blk00000003_P<15>_UNCONNECTED ; - wire \NLW_blk00000003_P<14>_UNCONNECTED ; wire \NLW_blk00000004_P<35>_UNCONNECTED ; wire \NLW_blk00000004_P<34>_UNCONNECTED ; wire \NLW_blk00000004_P<33>_UNCONNECTED ; @@ -434,245 +446,212 @@ module cx4_mul ( wire \NLW_blk00000004_P<25>_UNCONNECTED ; wire \NLW_blk00000004_P<24>_UNCONNECTED ; wire \NLW_blk00000005_P<35>_UNCONNECTED ; - wire \NLW_blk00000005_P<34>_UNCONNECTED ; - wire \NLW_blk00000005_P<33>_UNCONNECTED ; - wire \NLW_blk00000005_P<32>_UNCONNECTED ; - wire \NLW_blk00000005_P<31>_UNCONNECTED ; - wire \NLW_blk00000005_P<30>_UNCONNECTED ; - wire \NLW_blk00000005_P<29>_UNCONNECTED ; - wire \NLW_blk00000005_P<28>_UNCONNECTED ; - wire \NLW_blk00000005_P<27>_UNCONNECTED ; - wire \NLW_blk00000005_P<26>_UNCONNECTED ; - wire \NLW_blk00000005_P<25>_UNCONNECTED ; - wire \NLW_blk00000005_P<24>_UNCONNECTED ; - wire \NLW_blk00000006_P<35>_UNCONNECTED ; GND blk00000001 ( .G(sig00000001) ); - VCC blk00000002 ( - .P(sig00000002) + MULT18X18S blk00000002 ( + .C(clk), + .CE(ce), + .R(sig00000001), + .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), + .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), + .P({\NLW_blk00000002_P<35>_UNCONNECTED , \NLW_blk00000002_P<34>_UNCONNECTED , \NLW_blk00000002_P<33>_UNCONNECTED , +\NLW_blk00000002_P<32>_UNCONNECTED , \NLW_blk00000002_P<31>_UNCONNECTED , \NLW_blk00000002_P<30>_UNCONNECTED , \NLW_blk00000002_P<29>_UNCONNECTED , +\NLW_blk00000002_P<28>_UNCONNECTED , \NLW_blk00000002_P<27>_UNCONNECTED , \NLW_blk00000002_P<26>_UNCONNECTED , \NLW_blk00000002_P<25>_UNCONNECTED , +\NLW_blk00000002_P<24>_UNCONNECTED , \NLW_blk00000002_P<23>_UNCONNECTED , \NLW_blk00000002_P<22>_UNCONNECTED , \NLW_blk00000002_P<21>_UNCONNECTED , +\NLW_blk00000002_P<20>_UNCONNECTED , \NLW_blk00000002_P<19>_UNCONNECTED , \NLW_blk00000002_P<18>_UNCONNECTED , \NLW_blk00000002_P<17>_UNCONNECTED , +\NLW_blk00000002_P<16>_UNCONNECTED , \NLW_blk00000002_P<15>_UNCONNECTED , \NLW_blk00000002_P<14>_UNCONNECTED , sig000000e4, sig000000e3, sig000000e2, +sig000000e1, sig000000ed, sig000000ec, sig000000eb, sig000000ea, sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e5, sig000000e0}) ); MULT18X18S blk00000003 ( .C(clk), - .CE(sig00000002), + .CE(ce), .R(sig00000001), .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), - .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), + .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), .P({\NLW_blk00000003_P<35>_UNCONNECTED , \NLW_blk00000003_P<34>_UNCONNECTED , \NLW_blk00000003_P<33>_UNCONNECTED , \NLW_blk00000003_P<32>_UNCONNECTED , \NLW_blk00000003_P<31>_UNCONNECTED , \NLW_blk00000003_P<30>_UNCONNECTED , \NLW_blk00000003_P<29>_UNCONNECTED , \NLW_blk00000003_P<28>_UNCONNECTED , \NLW_blk00000003_P<27>_UNCONNECTED , \NLW_blk00000003_P<26>_UNCONNECTED , \NLW_blk00000003_P<25>_UNCONNECTED , -\NLW_blk00000003_P<24>_UNCONNECTED , \NLW_blk00000003_P<23>_UNCONNECTED , \NLW_blk00000003_P<22>_UNCONNECTED , \NLW_blk00000003_P<21>_UNCONNECTED , -\NLW_blk00000003_P<20>_UNCONNECTED , \NLW_blk00000003_P<19>_UNCONNECTED , \NLW_blk00000003_P<18>_UNCONNECTED , \NLW_blk00000003_P<17>_UNCONNECTED , -\NLW_blk00000003_P<16>_UNCONNECTED , \NLW_blk00000003_P<15>_UNCONNECTED , \NLW_blk00000003_P<14>_UNCONNECTED , sig000000e5, sig000000e4, sig000000e3, -sig000000e2, sig000000ee, sig000000ed, sig000000ec, sig000000eb, sig000000ea, sig000000e9, sig000000e8, sig000000e7, sig000000e6, sig000000e1}) +\NLW_blk00000003_P<24>_UNCONNECTED , sig000000d7, sig000000d6, sig000000d5, sig000000d4, sig000000d2, sig000000d1, sig000000d0, sig000000cf, +sig000000ce, sig000000cd, sig000000cc, sig000000cb, sig000000ca, sig000000c9, sig000000df, sig000000de, sig000000dd, sig000000dc, sig000000db, +sig000000da, sig000000d9, sig000000d8, sig000000d3, sig000000c8}) ); MULT18X18S blk00000004 ( .C(clk), - .CE(sig00000002), - .R(sig00000001), - .A({a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[23], a[22], a[21], a[20], a[19], a[18], a[17]}), - .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), - .P({\NLW_blk00000004_P<35>_UNCONNECTED , \NLW_blk00000004_P<34>_UNCONNECTED , \NLW_blk00000004_P<33>_UNCONNECTED , -\NLW_blk00000004_P<32>_UNCONNECTED , \NLW_blk00000004_P<31>_UNCONNECTED , \NLW_blk00000004_P<30>_UNCONNECTED , \NLW_blk00000004_P<29>_UNCONNECTED , -\NLW_blk00000004_P<28>_UNCONNECTED , \NLW_blk00000004_P<27>_UNCONNECTED , \NLW_blk00000004_P<26>_UNCONNECTED , \NLW_blk00000004_P<25>_UNCONNECTED , -\NLW_blk00000004_P<24>_UNCONNECTED , sig000000d8, sig000000d7, sig000000d6, sig000000d5, sig000000d3, sig000000d2, sig000000d1, sig000000d0, -sig000000cf, sig000000ce, sig000000cd, sig000000cc, sig000000cb, sig000000ca, sig000000e0, sig000000df, sig000000de, sig000000dd, sig000000dc, -sig000000db, sig000000da, sig000000d9, sig000000d4, sig000000c9}) - ); - MULT18X18S blk00000005 ( - .C(clk), - .CE(sig00000002), + .CE(ce), .R(sig00000001), .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), .B({b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[23], b[22], b[21], b[20], b[19], b[18], b[17]}), - .P({\NLW_blk00000005_P<35>_UNCONNECTED , \NLW_blk00000005_P<34>_UNCONNECTED , \NLW_blk00000005_P<33>_UNCONNECTED , -\NLW_blk00000005_P<32>_UNCONNECTED , \NLW_blk00000005_P<31>_UNCONNECTED , \NLW_blk00000005_P<30>_UNCONNECTED , \NLW_blk00000005_P<29>_UNCONNECTED , -\NLW_blk00000005_P<28>_UNCONNECTED , \NLW_blk00000005_P<27>_UNCONNECTED , \NLW_blk00000005_P<26>_UNCONNECTED , \NLW_blk00000005_P<25>_UNCONNECTED , -\NLW_blk00000005_P<24>_UNCONNECTED , sig000000c0, sig000000bf, sig000000be, sig000000bd, sig000000bb, sig000000ba, sig000000b9, sig000000b8, -sig000000b7, sig000000b6, sig000000b5, sig000000b4, sig000000b3, sig000000b2, sig000000c8, sig000000c7, sig000000c6, sig000000c5, sig000000c4, -sig000000c3, sig000000c2, sig000000c1, sig000000bc, sig000000b1}) + .P({\NLW_blk00000004_P<35>_UNCONNECTED , \NLW_blk00000004_P<34>_UNCONNECTED , \NLW_blk00000004_P<33>_UNCONNECTED , +\NLW_blk00000004_P<32>_UNCONNECTED , \NLW_blk00000004_P<31>_UNCONNECTED , \NLW_blk00000004_P<30>_UNCONNECTED , \NLW_blk00000004_P<29>_UNCONNECTED , +\NLW_blk00000004_P<28>_UNCONNECTED , \NLW_blk00000004_P<27>_UNCONNECTED , \NLW_blk00000004_P<26>_UNCONNECTED , \NLW_blk00000004_P<25>_UNCONNECTED , +\NLW_blk00000004_P<24>_UNCONNECTED , sig000000bf, sig000000be, sig000000bd, sig000000bc, sig000000ba, sig000000b9, sig000000b8, sig000000b7, +sig000000b6, sig000000b5, sig000000b4, sig000000b3, sig000000b2, sig000000b1, sig000000c7, sig000000c6, sig000000c5, sig000000c4, sig000000c3, +sig000000c2, sig000000c1, sig000000c0, sig000000bb, sig000000b0}) ); - MULT18X18S blk00000006 ( + MULT18X18S blk00000005 ( .C(clk), - .CE(sig00000002), + .CE(ce), .R(sig00000001), .A({sig00000001, a[16], a[15], a[14], a[13], a[12], a[11], a[10], a[9], a[8], a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]}), .B({sig00000001, b[16], b[15], b[14], b[13], b[12], b[11], b[10], b[9], b[8], b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]}), - .P({\NLW_blk00000006_P<35>_UNCONNECTED , sig000000a9, sig000000a8, sig000000a7, sig000000a6, sig000000a5, sig000000a3, sig000000a2, sig000000a1, -sig000000a0, sig0000009f, sig0000009e, sig0000009d, sig0000009c, sig0000009b, sig0000009a, sig00000098, sig00000097, sig00000096, sig00000095, -sig00000094, sig00000093, sig00000092, sig00000091, sig00000090, sig0000008f, sig000000b0, sig000000af, sig000000ae, sig000000ad, sig000000ac, -sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) + .P({\NLW_blk00000005_P<35>_UNCONNECTED , sig000000a8, sig000000a7, sig000000a6, sig000000a5, sig000000a4, sig000000a2, sig000000a1, sig000000a0, +sig0000009f, sig0000009e, sig0000009d, sig0000009c, sig0000009b, sig0000009a, sig00000099, sig00000097, sig00000096, sig00000095, sig00000094, +sig00000093, sig00000092, sig00000091, sig00000090, sig0000008f, sig0000008e, sig000000af, sig000000ae, sig000000ad, sig000000ac, sig000000ab, +sig000000aa, sig000000a9, sig000000a3, sig00000098, sig0000008d}) ); - XORCY blk00000007 ( - .CI(sig00000065), - .LI(sig00000086), + XORCY blk00000006 ( + .CI(sig00000064), + .LI(sig00000085), .O(p[47]) ); LUT2 #( .INIT ( 4'h6 )) - blk00000008 ( - .I0(sig0000014e), - .I1(sig0000015b), - .O(sig00000086) - ); - MUXCY blk00000009 ( - .CI(sig00000064), - .DI(sig0000014e), - .S(sig00000085), - .O(sig00000065) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk0000000a ( - .I0(sig0000014e), - .I1(sig0000015b), + blk00000007 ( + .I0(sig0000014d), + .I1(sig0000015a), .O(sig00000085) ); - MUXCY blk0000000b ( - .CI(sig00000062), - .DI(sig0000014e), + MUXCY blk00000008 ( + .CI(sig00000063), + .DI(sig0000014d), .S(sig00000084), .O(sig00000064) ); LUT2 #( .INIT ( 4'h6 )) - blk0000000c ( - .I0(sig0000014e), - .I1(sig0000015b), + blk00000009 ( + .I0(sig0000014d), + .I1(sig0000015a), .O(sig00000084) ); - XORCY blk0000000d ( + MUXCY blk0000000a ( .CI(sig00000061), - .LI(sig00000082), - .O(p[46]) - ); - MUXCY blk0000000e ( - .CI(sig00000061), - .DI(sig0000014e), - .S(sig00000082), - .O(sig00000062) + .DI(sig0000014d), + .S(sig00000083), + .O(sig00000063) ); LUT2 #( .INIT ( 4'h6 )) - blk0000000f ( - .I0(sig0000014e), + blk0000000b ( + .I0(sig0000014d), .I1(sig0000015a), - .O(sig00000082) + .O(sig00000083) ); - XORCY blk00000010 ( + XORCY blk0000000c ( .CI(sig00000060), .LI(sig00000081), - .O(p[45]) + .O(p[46]) ); - MUXCY blk00000011 ( + MUXCY blk0000000d ( .CI(sig00000060), - .DI(sig0000014e), + .DI(sig0000014d), .S(sig00000081), .O(sig00000061) ); LUT2 #( .INIT ( 4'h6 )) - blk00000012 ( - .I0(sig0000014e), + blk0000000e ( + .I0(sig0000014d), .I1(sig00000159), .O(sig00000081) ); - XORCY blk00000013 ( + XORCY blk0000000f ( .CI(sig0000005f), .LI(sig00000080), - .O(p[44]) + .O(p[45]) ); - MUXCY blk00000014 ( + MUXCY blk00000010 ( .CI(sig0000005f), - .DI(sig0000014e), + .DI(sig0000014d), .S(sig00000080), .O(sig00000060) ); LUT2 #( .INIT ( 4'h6 )) - blk00000015 ( - .I0(sig0000014e), + blk00000011 ( + .I0(sig0000014d), .I1(sig00000158), .O(sig00000080) ); - XORCY blk00000016 ( + XORCY blk00000012 ( .CI(sig0000005e), .LI(sig0000007f), - .O(p[43]) + .O(p[44]) ); - MUXCY blk00000017 ( + MUXCY blk00000013 ( .CI(sig0000005e), - .DI(sig0000014e), + .DI(sig0000014d), .S(sig0000007f), .O(sig0000005f) ); LUT2 #( .INIT ( 4'h6 )) - blk00000018 ( - .I0(sig0000014e), - .I1(sig00000164), + blk00000014 ( + .I0(sig0000014d), + .I1(sig00000157), .O(sig0000007f) ); - XORCY blk00000019 ( + XORCY blk00000015 ( .CI(sig0000005d), .LI(sig0000007e), - .O(p[42]) + .O(p[43]) ); - MUXCY blk0000001a ( + MUXCY blk00000016 ( .CI(sig0000005d), - .DI(sig0000014e), + .DI(sig0000014d), .S(sig0000007e), .O(sig0000005e) ); LUT2 #( .INIT ( 4'h6 )) - blk0000001b ( - .I0(sig0000014e), + blk00000017 ( + .I0(sig0000014d), .I1(sig00000163), .O(sig0000007e) ); - XORCY blk0000001c ( + XORCY blk00000018 ( .CI(sig0000005c), .LI(sig0000007d), - .O(p[41]) + .O(p[42]) ); - MUXCY blk0000001d ( + MUXCY blk00000019 ( .CI(sig0000005c), - .DI(sig0000014e), + .DI(sig0000014d), .S(sig0000007d), .O(sig0000005d) ); LUT2 #( .INIT ( 4'h6 )) - blk0000001e ( - .I0(sig0000014e), + blk0000001a ( + .I0(sig0000014d), .I1(sig00000162), .O(sig0000007d) ); - XORCY blk0000001f ( + XORCY blk0000001b ( .CI(sig0000005b), .LI(sig0000007c), - .O(p[40]) + .O(p[41]) ); - MUXCY blk00000020 ( + MUXCY blk0000001c ( .CI(sig0000005b), - .DI(sig0000014e), + .DI(sig0000014d), .S(sig0000007c), .O(sig0000005c) ); LUT2 #( .INIT ( 4'h6 )) - blk00000021 ( - .I0(sig0000014e), + blk0000001d ( + .I0(sig0000014d), .I1(sig00000161), .O(sig0000007c) ); - XORCY blk00000022 ( + XORCY blk0000001e ( .CI(sig0000005a), .LI(sig0000007b), - .O(p[39]) + .O(p[40]) ); - MUXCY blk00000023 ( + MUXCY blk0000001f ( .CI(sig0000005a), .DI(sig0000014d), .S(sig0000007b), @@ -680,17 +659,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000024 ( + blk00000020 ( .I0(sig0000014d), .I1(sig00000160), .O(sig0000007b) ); - XORCY blk00000025 ( + XORCY blk00000021 ( .CI(sig00000059), .LI(sig0000007a), - .O(p[38]) + .O(p[39]) ); - MUXCY blk00000026 ( + MUXCY blk00000022 ( .CI(sig00000059), .DI(sig0000014c), .S(sig0000007a), @@ -698,53 +677,53 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000027 ( + blk00000023 ( .I0(sig0000014c), .I1(sig0000015f), .O(sig0000007a) ); - XORCY blk00000028 ( - .CI(sig00000057), + XORCY blk00000024 ( + .CI(sig00000058), .LI(sig00000079), - .O(p[37]) + .O(p[38]) ); - MUXCY blk00000029 ( - .CI(sig00000057), + MUXCY blk00000025 ( + .CI(sig00000058), .DI(sig0000014b), .S(sig00000079), .O(sig00000059) ); LUT2 #( .INIT ( 4'h6 )) - blk0000002a ( + blk00000026 ( .I0(sig0000014b), .I1(sig0000015e), .O(sig00000079) ); - XORCY blk0000002b ( + XORCY blk00000027 ( .CI(sig00000056), - .LI(sig00000077), - .O(p[36]) + .LI(sig00000078), + .O(p[37]) ); - MUXCY blk0000002c ( + MUXCY blk00000028 ( .CI(sig00000056), - .DI(sig00000149), - .S(sig00000077), - .O(sig00000057) + .DI(sig0000014a), + .S(sig00000078), + .O(sig00000058) ); LUT2 #( .INIT ( 4'h6 )) - blk0000002d ( - .I0(sig00000149), + blk00000029 ( + .I0(sig0000014a), .I1(sig0000015d), - .O(sig00000077) + .O(sig00000078) ); - XORCY blk0000002e ( + XORCY blk0000002a ( .CI(sig00000055), .LI(sig00000076), - .O(p[35]) + .O(p[36]) ); - MUXCY blk0000002f ( + MUXCY blk0000002b ( .CI(sig00000055), .DI(sig00000148), .S(sig00000076), @@ -752,17 +731,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000030 ( + blk0000002c ( .I0(sig00000148), .I1(sig0000015c), .O(sig00000076) ); - XORCY blk00000031 ( + XORCY blk0000002d ( .CI(sig00000054), .LI(sig00000075), - .O(p[34]) + .O(p[35]) ); - MUXCY blk00000032 ( + MUXCY blk0000002e ( .CI(sig00000054), .DI(sig00000147), .S(sig00000075), @@ -770,17 +749,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000033 ( + blk0000002f ( .I0(sig00000147), - .I1(sig00000157), + .I1(sig0000015b), .O(sig00000075) ); - XORCY blk00000034 ( + XORCY blk00000030 ( .CI(sig00000053), .LI(sig00000074), - .O(p[33]) + .O(p[34]) ); - MUXCY blk00000035 ( + MUXCY blk00000031 ( .CI(sig00000053), .DI(sig00000146), .S(sig00000074), @@ -788,17 +767,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000036 ( + blk00000032 ( .I0(sig00000146), - .I1(sig00000121), + .I1(sig00000156), .O(sig00000074) ); - XORCY blk00000037 ( + XORCY blk00000033 ( .CI(sig00000052), .LI(sig00000073), - .O(p[32]) + .O(p[33]) ); - MUXCY blk00000038 ( + MUXCY blk00000034 ( .CI(sig00000052), .DI(sig00000145), .S(sig00000073), @@ -806,17 +785,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000039 ( + blk00000035 ( .I0(sig00000145), .I1(sig00000120), .O(sig00000073) ); - XORCY blk0000003a ( + XORCY blk00000036 ( .CI(sig00000051), .LI(sig00000072), - .O(p[31]) + .O(p[32]) ); - MUXCY blk0000003b ( + MUXCY blk00000037 ( .CI(sig00000051), .DI(sig00000144), .S(sig00000072), @@ -824,17 +803,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000003c ( + blk00000038 ( .I0(sig00000144), .I1(sig0000011f), .O(sig00000072) ); - XORCY blk0000003d ( + XORCY blk00000039 ( .CI(sig00000050), .LI(sig00000071), - .O(p[30]) + .O(p[31]) ); - MUXCY blk0000003e ( + MUXCY blk0000003a ( .CI(sig00000050), .DI(sig00000143), .S(sig00000071), @@ -842,17 +821,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000003f ( + blk0000003b ( .I0(sig00000143), .I1(sig0000011e), .O(sig00000071) ); - XORCY blk00000040 ( + XORCY blk0000003c ( .CI(sig0000004f), .LI(sig00000070), - .O(p[29]) + .O(p[30]) ); - MUXCY blk00000041 ( + MUXCY blk0000003d ( .CI(sig0000004f), .DI(sig00000142), .S(sig00000070), @@ -860,17 +839,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000042 ( + blk0000003e ( .I0(sig00000142), .I1(sig0000011d), .O(sig00000070) ); - XORCY blk00000043 ( + XORCY blk0000003f ( .CI(sig0000004e), .LI(sig0000006f), - .O(p[28]) + .O(p[29]) ); - MUXCY blk00000044 ( + MUXCY blk00000040 ( .CI(sig0000004e), .DI(sig00000141), .S(sig0000006f), @@ -878,53 +857,53 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000045 ( + blk00000041 ( .I0(sig00000141), .I1(sig0000011c), .O(sig0000006f) ); - XORCY blk00000046 ( - .CI(sig0000006c), + XORCY blk00000042 ( + .CI(sig0000004d), .LI(sig0000006e), - .O(p[27]) + .O(p[28]) ); - MUXCY blk00000047 ( - .CI(sig0000006c), + MUXCY blk00000043 ( + .CI(sig0000004d), .DI(sig00000140), .S(sig0000006e), .O(sig0000004e) ); LUT2 #( .INIT ( 4'h6 )) - blk00000048 ( + blk00000044 ( .I0(sig00000140), .I1(sig0000011b), .O(sig0000006e) ); - XORCY blk00000049 ( + XORCY blk00000045 ( .CI(sig0000006b), - .LI(sig0000008d), - .O(p[26]) + .LI(sig0000006d), + .O(p[27]) ); - MUXCY blk0000004a ( + MUXCY blk00000046 ( .CI(sig0000006b), - .DI(sig00000156), - .S(sig0000008d), - .O(sig0000006c) + .DI(sig0000013f), + .S(sig0000006d), + .O(sig0000004d) ); LUT2 #( .INIT ( 4'h6 )) - blk0000004b ( - .I0(sig00000156), - .I1(sig00000130), - .O(sig0000008d) + blk00000047 ( + .I0(sig0000013f), + .I1(sig0000011a), + .O(sig0000006d) ); - XORCY blk0000004c ( + XORCY blk00000048 ( .CI(sig0000006a), .LI(sig0000008c), - .O(p[25]) + .O(p[26]) ); - MUXCY blk0000004d ( + MUXCY blk00000049 ( .CI(sig0000006a), .DI(sig00000155), .S(sig0000008c), @@ -932,17 +911,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000004e ( + blk0000004a ( .I0(sig00000155), .I1(sig0000012f), .O(sig0000008c) ); - XORCY blk0000004f ( + XORCY blk0000004b ( .CI(sig00000069), .LI(sig0000008b), - .O(p[24]) + .O(p[25]) ); - MUXCY blk00000050 ( + MUXCY blk0000004c ( .CI(sig00000069), .DI(sig00000154), .S(sig0000008b), @@ -950,17 +929,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000051 ( + blk0000004d ( .I0(sig00000154), .I1(sig0000012e), .O(sig0000008b) ); - XORCY blk00000052 ( + XORCY blk0000004e ( .CI(sig00000068), .LI(sig0000008a), - .O(p[23]) + .O(p[24]) ); - MUXCY blk00000053 ( + MUXCY blk0000004f ( .CI(sig00000068), .DI(sig00000153), .S(sig0000008a), @@ -968,17 +947,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000054 ( + blk00000050 ( .I0(sig00000153), .I1(sig0000012d), .O(sig0000008a) ); - XORCY blk00000055 ( + XORCY blk00000051 ( .CI(sig00000067), .LI(sig00000089), - .O(p[22]) + .O(p[23]) ); - MUXCY blk00000056 ( + MUXCY blk00000052 ( .CI(sig00000067), .DI(sig00000152), .S(sig00000089), @@ -986,17 +965,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000057 ( + blk00000053 ( .I0(sig00000152), .I1(sig0000012c), .O(sig00000089) ); - XORCY blk00000058 ( + XORCY blk00000054 ( .CI(sig00000066), .LI(sig00000088), - .O(p[21]) + .O(p[22]) ); - MUXCY blk00000059 ( + MUXCY blk00000055 ( .CI(sig00000066), .DI(sig00000151), .S(sig00000088), @@ -1004,209 +983,209 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000005a ( + blk00000056 ( .I0(sig00000151), .I1(sig0000012b), .O(sig00000088) ); - XORCY blk0000005b ( - .CI(sig00000063), + XORCY blk00000057 ( + .CI(sig00000065), .LI(sig00000087), - .O(p[20]) + .O(p[21]) ); - MUXCY blk0000005c ( - .CI(sig00000063), + MUXCY blk00000058 ( + .CI(sig00000065), .DI(sig00000150), .S(sig00000087), .O(sig00000066) ); LUT2 #( .INIT ( 4'h6 )) - blk0000005d ( + blk00000059 ( .I0(sig00000150), .I1(sig0000012a), .O(sig00000087) ); - XORCY blk0000005e ( - .CI(sig00000058), - .LI(sig00000083), + XORCY blk0000005a ( + .CI(sig00000062), + .LI(sig00000086), + .O(p[20]) + ); + MUXCY blk0000005b ( + .CI(sig00000062), + .DI(sig0000014f), + .S(sig00000086), + .O(sig00000065) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk0000005c ( + .I0(sig0000014f), + .I1(sig00000129), + .O(sig00000086) + ); + XORCY blk0000005d ( + .CI(sig00000057), + .LI(sig00000082), .O(p[19]) ); - MUXCY blk0000005f ( - .CI(sig00000058), - .DI(sig0000014f), - .S(sig00000083), - .O(sig00000063) + MUXCY blk0000005e ( + .CI(sig00000057), + .DI(sig0000014e), + .S(sig00000082), + .O(sig00000062) ); LUT2 #( .INIT ( 4'h6 )) - blk00000060 ( - .I0(sig0000014f), - .I1(sig00000125), - .O(sig00000083) + blk0000005f ( + .I0(sig0000014e), + .I1(sig00000124), + .O(sig00000082) ); - XORCY blk00000061 ( - .CI(sig0000004d), - .LI(sig00000078), + XORCY blk00000060 ( + .CI(sig0000004c), + .LI(sig00000077), .O(p[18]) ); - MUXCY blk00000062 ( - .CI(sig0000004d), - .DI(sig0000014a), - .S(sig00000078), - .O(sig00000058) + MUXCY blk00000061 ( + .CI(sig0000004c), + .DI(sig00000149), + .S(sig00000077), + .O(sig00000057) ); LUT2 #( .INIT ( 4'h6 )) - blk00000063 ( - .I0(sig0000014a), - .I1(sig0000011a), - .O(sig00000078) + blk00000062 ( + .I0(sig00000149), + .I1(sig00000119), + .O(sig00000077) ); - XORCY blk00000064 ( + XORCY blk00000063 ( .CI(sig00000001), - .LI(sig0000006d), + .LI(sig0000006c), .O(p[17]) ); - MUXCY blk00000065 ( + MUXCY blk00000064 ( .CI(sig00000001), - .DI(sig0000013f), - .S(sig0000006d), - .O(sig0000004d) + .DI(sig0000013e), + .S(sig0000006c), + .O(sig0000004c) ); LUT2 #( .INIT ( 4'h6 )) - blk00000066 ( - .I0(sig0000013f), - .I1(sig00000119), - .O(sig0000006d) + blk00000065 ( + .I0(sig0000013e), + .I1(sig00000118), + .O(sig0000006c) ); - XORCY blk00000067 ( - .CI(sig00000011), - .LI(sig00000029), - .O(sig0000014e) - ); - LUT2 #( - .INIT ( 4'h6 )) - blk00000068 ( - .I0(sig00000100), - .I1(sig00000111), - .O(sig00000029) - ); - XORCY blk00000069 ( + XORCY blk00000066 ( .CI(sig00000010), .LI(sig00000028), .O(sig0000014d) ); - MUXCY blk0000006a ( - .CI(sig00000010), - .DI(sig00000100), - .S(sig00000028), - .O(sig00000011) - ); LUT2 #( .INIT ( 4'h6 )) - blk0000006b ( - .I0(sig00000100), + blk00000067 ( + .I0(sig000000ff), .I1(sig00000110), .O(sig00000028) ); - XORCY blk0000006c ( + XORCY blk00000068 ( .CI(sig0000000f), .LI(sig00000027), .O(sig0000014c) ); - MUXCY blk0000006d ( + MUXCY blk00000069 ( .CI(sig0000000f), - .DI(sig00000100), + .DI(sig000000ff), .S(sig00000027), .O(sig00000010) ); LUT2 #( .INIT ( 4'h6 )) - blk0000006e ( - .I0(sig00000100), + blk0000006a ( + .I0(sig000000ff), .I1(sig0000010f), .O(sig00000027) ); - XORCY blk0000006f ( - .CI(sig0000000d), + XORCY blk0000006b ( + .CI(sig0000000e), .LI(sig00000026), .O(sig0000014b) ); - MUXCY blk00000070 ( - .CI(sig0000000d), - .DI(sig00000100), + MUXCY blk0000006c ( + .CI(sig0000000e), + .DI(sig000000ff), .S(sig00000026), .O(sig0000000f) ); LUT2 #( .INIT ( 4'h6 )) - blk00000071 ( - .I0(sig00000100), + blk0000006d ( + .I0(sig000000ff), .I1(sig0000010e), .O(sig00000026) ); - XORCY blk00000072 ( + XORCY blk0000006e ( .CI(sig0000000c), - .LI(sig00000024), - .O(sig00000149) + .LI(sig00000025), + .O(sig0000014a) ); - MUXCY blk00000073 ( + MUXCY blk0000006f ( .CI(sig0000000c), - .DI(sig00000100), - .S(sig00000024), - .O(sig0000000d) + .DI(sig000000ff), + .S(sig00000025), + .O(sig0000000e) ); LUT2 #( .INIT ( 4'h6 )) - blk00000074 ( - .I0(sig00000100), - .I1(sig0000010c), - .O(sig00000024) + blk00000070 ( + .I0(sig000000ff), + .I1(sig0000010d), + .O(sig00000025) ); - XORCY blk00000075 ( + XORCY blk00000071 ( .CI(sig0000000b), .LI(sig00000023), .O(sig00000148) ); - MUXCY blk00000076 ( + MUXCY blk00000072 ( .CI(sig0000000b), - .DI(sig00000100), + .DI(sig000000ff), .S(sig00000023), .O(sig0000000c) ); LUT2 #( .INIT ( 4'h6 )) - blk00000077 ( - .I0(sig00000100), + blk00000073 ( + .I0(sig000000ff), .I1(sig0000010b), .O(sig00000023) ); - XORCY blk00000078 ( + XORCY blk00000074 ( .CI(sig0000000a), .LI(sig00000022), .O(sig00000147) ); - MUXCY blk00000079 ( + MUXCY blk00000075 ( .CI(sig0000000a), - .DI(sig00000100), + .DI(sig000000ff), .S(sig00000022), .O(sig0000000b) ); LUT2 #( .INIT ( 4'h6 )) - blk0000007a ( - .I0(sig00000100), + blk00000076 ( + .I0(sig000000ff), .I1(sig0000010a), .O(sig00000022) ); - XORCY blk0000007b ( + XORCY blk00000077 ( .CI(sig00000009), .LI(sig00000021), .O(sig00000146) ); - MUXCY blk0000007c ( + MUXCY blk00000078 ( .CI(sig00000009), .DI(sig000000ff), .S(sig00000021), @@ -1214,17 +1193,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000007d ( + blk00000079 ( .I0(sig000000ff), .I1(sig00000109), .O(sig00000021) ); - XORCY blk0000007e ( + XORCY blk0000007a ( .CI(sig00000008), .LI(sig00000020), .O(sig00000145) ); - MUXCY blk0000007f ( + MUXCY blk0000007b ( .CI(sig00000008), .DI(sig000000fe), .S(sig00000020), @@ -1232,17 +1211,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000080 ( + blk0000007c ( .I0(sig000000fe), .I1(sig00000108), .O(sig00000020) ); - XORCY blk00000081 ( + XORCY blk0000007d ( .CI(sig00000007), .LI(sig0000001f), .O(sig00000144) ); - MUXCY blk00000082 ( + MUXCY blk0000007e ( .CI(sig00000007), .DI(sig000000fd), .S(sig0000001f), @@ -1250,17 +1229,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000083 ( + blk0000007f ( .I0(sig000000fd), .I1(sig00000107), .O(sig0000001f) ); - XORCY blk00000084 ( + XORCY blk00000080 ( .CI(sig00000006), .LI(sig0000001e), .O(sig00000143) ); - MUXCY blk00000085 ( + MUXCY blk00000081 ( .CI(sig00000006), .DI(sig000000fc), .S(sig0000001e), @@ -1268,17 +1247,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000086 ( + blk00000082 ( .I0(sig000000fc), .I1(sig00000106), .O(sig0000001e) ); - XORCY blk00000087 ( + XORCY blk00000083 ( .CI(sig00000005), .LI(sig0000001d), .O(sig00000142) ); - MUXCY blk00000088 ( + MUXCY blk00000084 ( .CI(sig00000005), .DI(sig000000fb), .S(sig0000001d), @@ -1286,17 +1265,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000089 ( + blk00000085 ( .I0(sig000000fb), .I1(sig00000105), .O(sig0000001d) ); - XORCY blk0000008a ( + XORCY blk00000086 ( .CI(sig00000004), .LI(sig0000001c), .O(sig00000141) ); - MUXCY blk0000008b ( + MUXCY blk00000087 ( .CI(sig00000004), .DI(sig000000fa), .S(sig0000001c), @@ -1304,53 +1283,53 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000008c ( + blk00000088 ( .I0(sig000000fa), .I1(sig00000104), .O(sig0000001c) ); - XORCY blk0000008d ( - .CI(sig00000019), + XORCY blk00000089 ( + .CI(sig00000003), .LI(sig0000001b), .O(sig00000140) ); - MUXCY blk0000008e ( - .CI(sig00000019), + MUXCY blk0000008a ( + .CI(sig00000003), .DI(sig000000f9), .S(sig0000001b), .O(sig00000004) ); LUT2 #( .INIT ( 4'h6 )) - blk0000008f ( + blk0000008b ( .I0(sig000000f9), .I1(sig00000103), .O(sig0000001b) ); - XORCY blk00000090 ( + XORCY blk0000008c ( .CI(sig00000018), - .LI(sig00000031), - .O(sig00000156) + .LI(sig0000001a), + .O(sig0000013f) ); - MUXCY blk00000091 ( + MUXCY blk0000008d ( .CI(sig00000018), .DI(sig000000f8), - .S(sig00000031), - .O(sig00000019) + .S(sig0000001a), + .O(sig00000003) ); LUT2 #( .INIT ( 4'h6 )) - blk00000092 ( + blk0000008e ( .I0(sig000000f8), - .I1(sig00000118), - .O(sig00000031) + .I1(sig00000102), + .O(sig0000001a) ); - XORCY blk00000093 ( + XORCY blk0000008f ( .CI(sig00000017), .LI(sig00000030), .O(sig00000155) ); - MUXCY blk00000094 ( + MUXCY blk00000090 ( .CI(sig00000017), .DI(sig000000f7), .S(sig00000030), @@ -1358,17 +1337,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000095 ( + blk00000091 ( .I0(sig000000f7), .I1(sig00000117), .O(sig00000030) ); - XORCY blk00000096 ( + XORCY blk00000092 ( .CI(sig00000016), .LI(sig0000002f), .O(sig00000154) ); - MUXCY blk00000097 ( + MUXCY blk00000093 ( .CI(sig00000016), .DI(sig000000f6), .S(sig0000002f), @@ -1376,17 +1355,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk00000098 ( + blk00000094 ( .I0(sig000000f6), .I1(sig00000116), .O(sig0000002f) ); - XORCY blk00000099 ( + XORCY blk00000095 ( .CI(sig00000015), .LI(sig0000002e), .O(sig00000153) ); - MUXCY blk0000009a ( + MUXCY blk00000096 ( .CI(sig00000015), .DI(sig000000f5), .S(sig0000002e), @@ -1394,17 +1373,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000009b ( + blk00000097 ( .I0(sig000000f5), .I1(sig00000115), .O(sig0000002e) ); - XORCY blk0000009c ( + XORCY blk00000098 ( .CI(sig00000014), .LI(sig0000002d), .O(sig00000152) ); - MUXCY blk0000009d ( + MUXCY blk00000099 ( .CI(sig00000014), .DI(sig000000f4), .S(sig0000002d), @@ -1412,17 +1391,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk0000009e ( + blk0000009a ( .I0(sig000000f4), .I1(sig00000114), .O(sig0000002d) ); - XORCY blk0000009f ( + XORCY blk0000009b ( .CI(sig00000013), .LI(sig0000002c), .O(sig00000151) ); - MUXCY blk000000a0 ( + MUXCY blk0000009c ( .CI(sig00000013), .DI(sig000000f3), .S(sig0000002c), @@ -1430,17 +1409,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk000000a1 ( + blk0000009d ( .I0(sig000000f3), .I1(sig00000113), .O(sig0000002c) ); - XORCY blk000000a2 ( + XORCY blk0000009e ( .CI(sig00000012), .LI(sig0000002b), .O(sig00000150) ); - MUXCY blk000000a3 ( + MUXCY blk0000009f ( .CI(sig00000012), .DI(sig000000f2), .S(sig0000002b), @@ -1448,209 +1427,209 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk000000a4 ( + blk000000a0 ( .I0(sig000000f2), .I1(sig00000112), .O(sig0000002b) ); - XORCY blk000000a5 ( - .CI(sig0000000e), + XORCY blk000000a1 ( + .CI(sig00000011), .LI(sig0000002a), .O(sig0000014f) ); - MUXCY blk000000a6 ( - .CI(sig0000000e), + MUXCY blk000000a2 ( + .CI(sig00000011), .DI(sig000000f1), .S(sig0000002a), .O(sig00000012) ); LUT2 #( .INIT ( 4'h6 )) - blk000000a7 ( + blk000000a3 ( .I0(sig000000f1), - .I1(sig0000010d), + .I1(sig00000111), .O(sig0000002a) ); - XORCY blk000000a8 ( - .CI(sig00000003), - .LI(sig00000025), - .O(sig0000014a) + XORCY blk000000a4 ( + .CI(sig0000000d), + .LI(sig00000029), + .O(sig0000014e) ); - MUXCY blk000000a9 ( - .CI(sig00000003), + MUXCY blk000000a5 ( + .CI(sig0000000d), .DI(sig000000f0), - .S(sig00000025), - .O(sig0000000e) + .S(sig00000029), + .O(sig00000011) ); LUT2 #( .INIT ( 4'h6 )) - blk000000aa ( + blk000000a6 ( .I0(sig000000f0), - .I1(sig00000102), - .O(sig00000025) + .I1(sig0000010c), + .O(sig00000029) ); - XORCY blk000000ab ( - .CI(sig00000001), - .LI(sig0000001a), - .O(sig0000013f) + XORCY blk000000a7 ( + .CI(sig00000002), + .LI(sig00000024), + .O(sig00000149) ); - MUXCY blk000000ac ( - .CI(sig00000001), + MUXCY blk000000a8 ( + .CI(sig00000002), .DI(sig000000ef), - .S(sig0000001a), - .O(sig00000003) + .S(sig00000024), + .O(sig0000000d) ); LUT2 #( .INIT ( 4'h6 )) - blk000000ad ( + blk000000a9 ( .I0(sig000000ef), .I1(sig00000101), - .O(sig0000001a) + .O(sig00000024) ); - XORCY blk000000ae ( - .CI(sig00000035), - .LI(sig00000043), - .O(sig0000015b) + XORCY blk000000aa ( + .CI(sig00000001), + .LI(sig00000019), + .O(sig0000013e) + ); + MUXCY blk000000ab ( + .CI(sig00000001), + .DI(sig000000ee), + .S(sig00000019), + .O(sig00000002) ); LUT2 #( .INIT ( 4'h6 )) - blk000000af ( - .I0(sig00000129), - .I1(sig00000136), - .O(sig00000043) + blk000000ac ( + .I0(sig000000ee), + .I1(sig00000100), + .O(sig00000019) ); - XORCY blk000000b0 ( + XORCY blk000000ad ( .CI(sig00000034), .LI(sig00000042), .O(sig0000015a) ); - MUXCY blk000000b1 ( - .CI(sig00000034), - .DI(sig00000129), - .S(sig00000042), - .O(sig00000035) - ); LUT2 #( .INIT ( 4'h6 )) - blk000000b2 ( - .I0(sig00000129), + blk000000ae ( + .I0(sig00000128), .I1(sig00000135), .O(sig00000042) ); - XORCY blk000000b3 ( + XORCY blk000000af ( .CI(sig00000033), .LI(sig00000041), .O(sig00000159) ); - MUXCY blk000000b4 ( + MUXCY blk000000b0 ( .CI(sig00000033), - .DI(sig00000129), + .DI(sig00000128), .S(sig00000041), .O(sig00000034) ); LUT2 #( .INIT ( 4'h6 )) - blk000000b5 ( - .I0(sig00000129), + blk000000b1 ( + .I0(sig00000128), .I1(sig00000134), .O(sig00000041) ); - XORCY blk000000b6 ( - .CI(sig0000003e), + XORCY blk000000b2 ( + .CI(sig00000032), .LI(sig00000040), .O(sig00000158) ); - MUXCY blk000000b7 ( - .CI(sig0000003e), - .DI(sig00000129), + MUXCY blk000000b3 ( + .CI(sig00000032), + .DI(sig00000128), .S(sig00000040), .O(sig00000033) ); LUT2 #( .INIT ( 4'h6 )) - blk000000b8 ( - .I0(sig00000129), + blk000000b4 ( + .I0(sig00000128), .I1(sig00000133), .O(sig00000040) ); - XORCY blk000000b9 ( + XORCY blk000000b5 ( .CI(sig0000003d), - .LI(sig0000004c), - .O(sig00000164) + .LI(sig0000003f), + .O(sig00000157) ); - MUXCY blk000000ba ( + MUXCY blk000000b6 ( .CI(sig0000003d), - .DI(sig00000129), - .S(sig0000004c), - .O(sig0000003e) + .DI(sig00000128), + .S(sig0000003f), + .O(sig00000032) ); LUT2 #( .INIT ( 4'h6 )) - blk000000bb ( - .I0(sig00000129), - .I1(sig0000013e), - .O(sig0000004c) + blk000000b7 ( + .I0(sig00000128), + .I1(sig00000132), + .O(sig0000003f) ); - XORCY blk000000bc ( + XORCY blk000000b8 ( .CI(sig0000003c), .LI(sig0000004b), .O(sig00000163) ); - MUXCY blk000000bd ( + MUXCY blk000000b9 ( .CI(sig0000003c), - .DI(sig00000129), + .DI(sig00000128), .S(sig0000004b), .O(sig0000003d) ); LUT2 #( .INIT ( 4'h6 )) - blk000000be ( - .I0(sig00000129), + blk000000ba ( + .I0(sig00000128), .I1(sig0000013d), .O(sig0000004b) ); - XORCY blk000000bf ( + XORCY blk000000bb ( .CI(sig0000003b), .LI(sig0000004a), .O(sig00000162) ); - MUXCY blk000000c0 ( + MUXCY blk000000bc ( .CI(sig0000003b), - .DI(sig00000129), + .DI(sig00000128), .S(sig0000004a), .O(sig0000003c) ); LUT2 #( .INIT ( 4'h6 )) - blk000000c1 ( - .I0(sig00000129), + blk000000bd ( + .I0(sig00000128), .I1(sig0000013c), .O(sig0000004a) ); - XORCY blk000000c2 ( + XORCY blk000000be ( .CI(sig0000003a), .LI(sig00000049), .O(sig00000161) ); - MUXCY blk000000c3 ( + MUXCY blk000000bf ( .CI(sig0000003a), - .DI(sig00000129), + .DI(sig00000128), .S(sig00000049), .O(sig0000003b) ); LUT2 #( .INIT ( 4'h6 )) - blk000000c4 ( - .I0(sig00000129), + blk000000c0 ( + .I0(sig00000128), .I1(sig0000013b), .O(sig00000049) ); - XORCY blk000000c5 ( + XORCY blk000000c1 ( .CI(sig00000039), .LI(sig00000048), .O(sig00000160) ); - MUXCY blk000000c6 ( + MUXCY blk000000c2 ( .CI(sig00000039), .DI(sig00000128), .S(sig00000048), @@ -1658,17 +1637,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk000000c7 ( + blk000000c3 ( .I0(sig00000128), .I1(sig0000013a), .O(sig00000048) ); - XORCY blk000000c8 ( + XORCY blk000000c4 ( .CI(sig00000038), .LI(sig00000047), .O(sig0000015f) ); - MUXCY blk000000c9 ( + MUXCY blk000000c5 ( .CI(sig00000038), .DI(sig00000127), .S(sig00000047), @@ -1676,17 +1655,17 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk000000ca ( + blk000000c6 ( .I0(sig00000127), .I1(sig00000139), .O(sig00000047) ); - XORCY blk000000cb ( + XORCY blk000000c7 ( .CI(sig00000037), .LI(sig00000046), .O(sig0000015e) ); - MUXCY blk000000cc ( + MUXCY blk000000c8 ( .CI(sig00000037), .DI(sig00000126), .S(sig00000046), @@ -1694,742 +1673,857 @@ sig000000ab, sig000000aa, sig000000a4, sig00000099, sig0000008e}) ); LUT2 #( .INIT ( 4'h6 )) - blk000000cd ( + blk000000c9 ( .I0(sig00000126), .I1(sig00000138), .O(sig00000046) ); - XORCY blk000000ce ( + XORCY blk000000ca ( .CI(sig00000036), .LI(sig00000045), .O(sig0000015d) ); - MUXCY blk000000cf ( + MUXCY blk000000cb ( .CI(sig00000036), - .DI(sig00000124), + .DI(sig00000125), .S(sig00000045), .O(sig00000037) ); LUT2 #( .INIT ( 4'h6 )) - blk000000d0 ( - .I0(sig00000124), + blk000000cc ( + .I0(sig00000125), .I1(sig00000137), .O(sig00000045) ); - XORCY blk000000d1 ( - .CI(sig00000032), + XORCY blk000000cd ( + .CI(sig00000035), .LI(sig00000044), .O(sig0000015c) ); - MUXCY blk000000d2 ( - .CI(sig00000032), + MUXCY blk000000ce ( + .CI(sig00000035), .DI(sig00000123), .S(sig00000044), .O(sig00000036) ); LUT2 #( .INIT ( 4'h6 )) - blk000000d3 ( + blk000000cf ( .I0(sig00000123), - .I1(sig00000132), + .I1(sig00000136), .O(sig00000044) ); - XORCY blk000000d4 ( - .CI(sig00000001), - .LI(sig0000003f), - .O(sig00000157) + XORCY blk000000d0 ( + .CI(sig00000031), + .LI(sig00000043), + .O(sig0000015b) ); - MUXCY blk000000d5 ( - .CI(sig00000001), + MUXCY blk000000d1 ( + .CI(sig00000031), .DI(sig00000122), - .S(sig0000003f), - .O(sig00000032) + .S(sig00000043), + .O(sig00000035) ); LUT2 #( .INIT ( 4'h6 )) - blk000000d6 ( + blk000000d2 ( .I0(sig00000122), .I1(sig00000131), - .O(sig0000003f) + .O(sig00000043) ); - FD #( - .INIT ( 1'b0 )) - blk000000d7 ( - .C(clk), - .D(sig000000d8), - .Q(sig00000129) + XORCY blk000000d3 ( + .CI(sig00000001), + .LI(sig0000003e), + .O(sig00000156) ); - FD #( + MUXCY blk000000d4 ( + .CI(sig00000001), + .DI(sig00000121), + .S(sig0000003e), + .O(sig00000031) + ); + LUT2 #( + .INIT ( 4'h6 )) + blk000000d5 ( + .I0(sig00000121), + .I1(sig00000130), + .O(sig0000003e) + ); + FDE #( .INIT ( 1'b0 )) - blk000000d8 ( + blk000000d6 ( .C(clk), + .CE(ce), .D(sig000000d7), .Q(sig00000128) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000d9 ( + blk000000d7 ( .C(clk), + .CE(ce), .D(sig000000d6), .Q(sig00000127) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000da ( + blk000000d8 ( .C(clk), + .CE(ce), .D(sig000000d5), .Q(sig00000126) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000db ( + blk000000d9 ( .C(clk), - .D(sig000000d3), - .Q(sig00000124) + .CE(ce), + .D(sig000000d4), + .Q(sig00000125) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000dc ( + blk000000da ( .C(clk), + .CE(ce), .D(sig000000d2), .Q(sig00000123) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000dd ( + blk000000db ( .C(clk), + .CE(ce), .D(sig000000d1), .Q(sig00000122) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000de ( + blk000000dc ( .C(clk), + .CE(ce), .D(sig000000d0), .Q(sig00000121) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000df ( + blk000000dd ( .C(clk), + .CE(ce), .D(sig000000cf), .Q(sig00000120) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e0 ( + blk000000de ( .C(clk), + .CE(ce), .D(sig000000ce), .Q(sig0000011f) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e1 ( + blk000000df ( .C(clk), + .CE(ce), .D(sig000000cd), .Q(sig0000011e) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e2 ( + blk000000e0 ( .C(clk), + .CE(ce), .D(sig000000cc), .Q(sig0000011d) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e3 ( + blk000000e1 ( .C(clk), + .CE(ce), .D(sig000000cb), .Q(sig0000011c) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e4 ( + blk000000e2 ( .C(clk), + .CE(ce), .D(sig000000ca), .Q(sig0000011b) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e5 ( + blk000000e3 ( .C(clk), - .D(sig000000e0), - .Q(sig00000130) + .CE(ce), + .D(sig000000c9), + .Q(sig0000011a) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e6 ( + blk000000e4 ( .C(clk), + .CE(ce), .D(sig000000df), .Q(sig0000012f) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e7 ( + blk000000e5 ( .C(clk), + .CE(ce), .D(sig000000de), .Q(sig0000012e) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e8 ( + blk000000e6 ( .C(clk), + .CE(ce), .D(sig000000dd), .Q(sig0000012d) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000e9 ( + blk000000e7 ( .C(clk), + .CE(ce), .D(sig000000dc), .Q(sig0000012c) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000ea ( + blk000000e8 ( .C(clk), + .CE(ce), .D(sig000000db), .Q(sig0000012b) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000eb ( + blk000000e9 ( .C(clk), + .CE(ce), .D(sig000000da), .Q(sig0000012a) ); - FD #( + FDE #( + .INIT ( 1'b0 )) + blk000000ea ( + .C(clk), + .CE(ce), + .D(sig000000d9), + .Q(sig00000129) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000eb ( + .C(clk), + .CE(ce), + .D(sig000000d8), + .Q(sig00000124) + ); + FDE #( .INIT ( 1'b0 )) blk000000ec ( .C(clk), - .D(sig000000d9), - .Q(sig00000125) + .CE(ce), + .D(sig000000d3), + .Q(sig00000119) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk000000ed ( .C(clk), - .D(sig000000d4), - .Q(sig0000011a) - ); - FD #( - .INIT ( 1'b0 )) - blk000000ee ( - .C(clk), - .D(sig000000c9), - .Q(sig00000119) - ); - FD #( - .INIT ( 1'b0 )) - blk000000ef ( - .C(clk), - .D(sig000000c0), - .Q(sig00000111) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f0 ( - .C(clk), - .D(sig000000bf), - .Q(sig00000110) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f1 ( - .C(clk), - .D(sig000000be), - .Q(sig0000010f) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f2 ( - .C(clk), - .D(sig000000bd), - .Q(sig0000010e) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f3 ( - .C(clk), - .D(sig000000bb), - .Q(sig0000010c) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f4 ( - .C(clk), - .D(sig000000ba), - .Q(sig0000010b) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f5 ( - .C(clk), - .D(sig000000b9), - .Q(sig0000010a) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f6 ( - .C(clk), - .D(sig000000b8), - .Q(sig00000109) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f7 ( - .C(clk), - .D(sig000000b7), - .Q(sig00000108) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f8 ( - .C(clk), - .D(sig000000b6), - .Q(sig00000107) - ); - FD #( - .INIT ( 1'b0 )) - blk000000f9 ( - .C(clk), - .D(sig000000b5), - .Q(sig00000106) - ); - FD #( - .INIT ( 1'b0 )) - blk000000fa ( - .C(clk), - .D(sig000000b4), - .Q(sig00000105) - ); - FD #( - .INIT ( 1'b0 )) - blk000000fb ( - .C(clk), - .D(sig000000b3), - .Q(sig00000104) - ); - FD #( - .INIT ( 1'b0 )) - blk000000fc ( - .C(clk), - .D(sig000000b2), - .Q(sig00000103) - ); - FD #( - .INIT ( 1'b0 )) - blk000000fd ( - .C(clk), + .CE(ce), .D(sig000000c8), .Q(sig00000118) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000fe ( + blk000000ee ( .C(clk), + .CE(ce), + .D(sig000000bf), + .Q(sig00000110) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000ef ( + .C(clk), + .CE(ce), + .D(sig000000be), + .Q(sig0000010f) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f0 ( + .C(clk), + .CE(ce), + .D(sig000000bd), + .Q(sig0000010e) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f1 ( + .C(clk), + .CE(ce), + .D(sig000000bc), + .Q(sig0000010d) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f2 ( + .C(clk), + .CE(ce), + .D(sig000000ba), + .Q(sig0000010b) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f3 ( + .C(clk), + .CE(ce), + .D(sig000000b9), + .Q(sig0000010a) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f4 ( + .C(clk), + .CE(ce), + .D(sig000000b8), + .Q(sig00000109) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f5 ( + .C(clk), + .CE(ce), + .D(sig000000b7), + .Q(sig00000108) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f6 ( + .C(clk), + .CE(ce), + .D(sig000000b6), + .Q(sig00000107) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f7 ( + .C(clk), + .CE(ce), + .D(sig000000b5), + .Q(sig00000106) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f8 ( + .C(clk), + .CE(ce), + .D(sig000000b4), + .Q(sig00000105) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000f9 ( + .C(clk), + .CE(ce), + .D(sig000000b3), + .Q(sig00000104) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000fa ( + .C(clk), + .CE(ce), + .D(sig000000b2), + .Q(sig00000103) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000fb ( + .C(clk), + .CE(ce), + .D(sig000000b1), + .Q(sig00000102) + ); + FDE #( + .INIT ( 1'b0 )) + blk000000fc ( + .C(clk), + .CE(ce), .D(sig000000c7), .Q(sig00000117) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk000000ff ( + blk000000fd ( .C(clk), + .CE(ce), .D(sig000000c6), .Q(sig00000116) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000100 ( + blk000000fe ( .C(clk), + .CE(ce), .D(sig000000c5), .Q(sig00000115) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000101 ( + blk000000ff ( .C(clk), + .CE(ce), .D(sig000000c4), .Q(sig00000114) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000102 ( + blk00000100 ( .C(clk), + .CE(ce), .D(sig000000c3), .Q(sig00000113) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000103 ( + blk00000101 ( .C(clk), + .CE(ce), .D(sig000000c2), .Q(sig00000112) ); - FD #( + FDE #( + .INIT ( 1'b0 )) + blk00000102 ( + .C(clk), + .CE(ce), + .D(sig000000c1), + .Q(sig00000111) + ); + FDE #( + .INIT ( 1'b0 )) + blk00000103 ( + .C(clk), + .CE(ce), + .D(sig000000c0), + .Q(sig0000010c) + ); + FDE #( .INIT ( 1'b0 )) blk00000104 ( .C(clk), - .D(sig000000c1), - .Q(sig0000010d) + .CE(ce), + .D(sig000000bb), + .Q(sig00000101) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000105 ( .C(clk), - .D(sig000000bc), - .Q(sig00000102) + .CE(ce), + .D(sig000000b0), + .Q(sig00000100) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000106 ( .C(clk), - .D(sig000000b1), - .Q(sig00000101) - ); - FD #( - .INIT ( 1'b0 )) - blk00000107 ( - .C(clk), - .D(sig000000e5), - .Q(sig00000136) - ); - FD #( - .INIT ( 1'b0 )) - blk00000108 ( - .C(clk), + .CE(ce), .D(sig000000e4), .Q(sig00000135) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000109 ( + blk00000107 ( .C(clk), + .CE(ce), .D(sig000000e3), .Q(sig00000134) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000010a ( + blk00000108 ( .C(clk), + .CE(ce), .D(sig000000e2), .Q(sig00000133) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000010b ( + blk00000109 ( .C(clk), - .D(sig000000ee), - .Q(sig0000013e) + .CE(ce), + .D(sig000000e1), + .Q(sig00000132) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000010c ( + blk0000010a ( .C(clk), + .CE(ce), .D(sig000000ed), .Q(sig0000013d) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000010d ( + blk0000010b ( .C(clk), + .CE(ce), .D(sig000000ec), .Q(sig0000013c) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000010e ( + blk0000010c ( .C(clk), + .CE(ce), .D(sig000000eb), .Q(sig0000013b) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000010f ( + blk0000010d ( .C(clk), + .CE(ce), .D(sig000000ea), .Q(sig0000013a) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000110 ( + blk0000010e ( .C(clk), + .CE(ce), .D(sig000000e9), .Q(sig00000139) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000111 ( + blk0000010f ( .C(clk), + .CE(ce), .D(sig000000e8), .Q(sig00000138) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000112 ( + blk00000110 ( .C(clk), + .CE(ce), .D(sig000000e7), .Q(sig00000137) ); - FD #( + FDE #( + .INIT ( 1'b0 )) + blk00000111 ( + .C(clk), + .CE(ce), + .D(sig000000e6), + .Q(sig00000136) + ); + FDE #( + .INIT ( 1'b0 )) + blk00000112 ( + .C(clk), + .CE(ce), + .D(sig000000e5), + .Q(sig00000131) + ); + FDE #( .INIT ( 1'b0 )) blk00000113 ( .C(clk), - .D(sig000000e6), - .Q(sig00000132) + .CE(ce), + .D(sig000000e0), + .Q(sig00000130) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000114 ( .C(clk), - .D(sig000000e1), - .Q(sig00000131) - ); - FD #( - .INIT ( 1'b0 )) - blk00000115 ( - .C(clk), - .D(sig000000a9), - .Q(sig00000100) - ); - FD #( - .INIT ( 1'b0 )) - blk00000116 ( - .C(clk), + .CE(ce), .D(sig000000a8), .Q(sig000000ff) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000117 ( + blk00000115 ( .C(clk), + .CE(ce), .D(sig000000a7), .Q(sig000000fe) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000118 ( + blk00000116 ( .C(clk), + .CE(ce), .D(sig000000a6), .Q(sig000000fd) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000119 ( + blk00000117 ( .C(clk), + .CE(ce), .D(sig000000a5), .Q(sig000000fc) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000011a ( + blk00000118 ( .C(clk), - .D(sig000000a3), + .CE(ce), + .D(sig000000a4), .Q(sig000000fb) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000011b ( + blk00000119 ( .C(clk), + .CE(ce), .D(sig000000a2), .Q(sig000000fa) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000011c ( + blk0000011a ( .C(clk), + .CE(ce), .D(sig000000a1), .Q(sig000000f9) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000011d ( + blk0000011b ( .C(clk), + .CE(ce), .D(sig000000a0), .Q(sig000000f8) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000011e ( + blk0000011c ( .C(clk), + .CE(ce), .D(sig0000009f), .Q(sig000000f7) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk0000011f ( + blk0000011d ( .C(clk), + .CE(ce), .D(sig0000009e), .Q(sig000000f6) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000120 ( + blk0000011e ( .C(clk), + .CE(ce), .D(sig0000009d), .Q(sig000000f5) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000121 ( + blk0000011f ( .C(clk), + .CE(ce), .D(sig0000009c), .Q(sig000000f4) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000122 ( + blk00000120 ( .C(clk), + .CE(ce), .D(sig0000009b), .Q(sig000000f3) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000123 ( + blk00000121 ( .C(clk), + .CE(ce), .D(sig0000009a), .Q(sig000000f2) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000124 ( + blk00000122 ( .C(clk), - .D(sig00000098), + .CE(ce), + .D(sig00000099), .Q(sig000000f1) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000125 ( + blk00000123 ( .C(clk), + .CE(ce), .D(sig00000097), .Q(sig000000f0) ); - FD #( + FDE #( .INIT ( 1'b0 )) - blk00000126 ( + blk00000124 ( .C(clk), + .CE(ce), .D(sig00000096), .Q(sig000000ef) ); - FD #( + FDE #( + .INIT ( 1'b0 )) + blk00000125 ( + .C(clk), + .CE(ce), + .D(sig00000095), + .Q(sig000000ee) + ); + FDE #( + .INIT ( 1'b0 )) + blk00000126 ( + .C(clk), + .CE(ce), + .D(sig00000094), + .Q(p[16]) + ); + FDE #( .INIT ( 1'b0 )) blk00000127 ( .C(clk), - .D(sig00000095), - .Q(p[16]) + .CE(ce), + .D(sig00000093), + .Q(p[15]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000128 ( .C(clk), - .D(sig00000094), - .Q(p[15]) + .CE(ce), + .D(sig00000092), + .Q(p[14]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000129 ( .C(clk), - .D(sig00000093), - .Q(p[14]) + .CE(ce), + .D(sig00000091), + .Q(p[13]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk0000012a ( .C(clk), - .D(sig00000092), - .Q(p[13]) + .CE(ce), + .D(sig00000090), + .Q(p[12]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk0000012b ( .C(clk), - .D(sig00000091), - .Q(p[12]) + .CE(ce), + .D(sig0000008f), + .Q(p[11]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk0000012c ( .C(clk), - .D(sig00000090), - .Q(p[11]) + .CE(ce), + .D(sig0000008e), + .Q(p[10]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk0000012d ( .C(clk), - .D(sig0000008f), - .Q(p[10]) + .CE(ce), + .D(sig000000af), + .Q(p[9]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk0000012e ( .C(clk), - .D(sig000000b0), - .Q(p[9]) + .CE(ce), + .D(sig000000ae), + .Q(p[8]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk0000012f ( .C(clk), - .D(sig000000af), - .Q(p[8]) + .CE(ce), + .D(sig000000ad), + .Q(p[7]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000130 ( .C(clk), - .D(sig000000ae), - .Q(p[7]) + .CE(ce), + .D(sig000000ac), + .Q(p[6]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000131 ( .C(clk), - .D(sig000000ad), - .Q(p[6]) + .CE(ce), + .D(sig000000ab), + .Q(p[5]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000132 ( .C(clk), - .D(sig000000ac), - .Q(p[5]) + .CE(ce), + .D(sig000000aa), + .Q(p[4]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000133 ( .C(clk), - .D(sig000000ab), - .Q(p[4]) + .CE(ce), + .D(sig000000a9), + .Q(p[3]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000134 ( .C(clk), - .D(sig000000aa), - .Q(p[3]) + .CE(ce), + .D(sig000000a3), + .Q(p[2]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000135 ( .C(clk), - .D(sig000000a4), - .Q(p[2]) + .CE(ce), + .D(sig00000098), + .Q(p[1]) ); - FD #( + FDE #( .INIT ( 1'b0 )) blk00000136 ( .C(clk), - .D(sig00000099), - .Q(p[1]) - ); - FD #( - .INIT ( 1'b0 )) - blk00000137 ( - .C(clk), - .D(sig0000008e), + .CE(ce), + .D(sig0000008d), .Q(p[0]) ); diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco index 13cf374..0935e67 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version 13.2 -# Date: Fri Oct 28 08:30:26 2011 +# Date: Sun Oct 30 20:22:20 2011 # ############################################################## # @@ -40,7 +40,7 @@ SELECT Multiplier xilinx.com:ip:mult_gen:11.2 # END Select # BEGIN Parameters CSET ccmimp=Distributed_Memory -CSET clockenable=false +CSET clockenable=true CSET component_name=cx4_mul CSET constvalue=129 CSET internaluser=0 @@ -65,4 +65,4 @@ CSET zerodetect=false MISC pkg_timestamp=2011-06-21T06:26:54.000Z # END Extra information GENERATE -# CRC: efe4d30e +# CRC: 4f144c3 diff --git a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise index 60829e7..ed5595c 100644 --- a/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise +++ b/verilog/sd2snes_cx4/ipcore_dir/cx4_mul.xise @@ -29,29 +29,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + diff --git a/verilog/sd2snes_cx4/sd2snes_cx4.xise b/verilog/sd2snes_cx4/sd2snes_cx4.xise index a182ee5..ca19fae 100644 --- a/verilog/sd2snes_cx4/sd2snes_cx4.xise +++ b/verilog/sd2snes_cx4/sd2snes_cx4.xise @@ -238,7 +238,7 @@ - + @@ -253,7 +253,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -321,7 +321,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -366,8 +366,8 @@ - - + + From 1987968db27c53eeb2b273a5556abcb24eb8fe5d Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 1 Nov 2011 21:09:31 +0100 Subject: [PATCH 10/11] FPGA/cx4: clean up tab/whitespace mix --- verilog/sd2snes_cx4/address.v | 4 +- verilog/sd2snes_cx4/main.v | 208 +++++++++++++++++----------------- verilog/sd2snes_cx4/spi.v | 2 +- 3 files changed, 107 insertions(+), 107 deletions(-) diff --git a/verilog/sd2snes_cx4/address.v b/verilog/sd2snes_cx4/address.v index c2502d3..1ec0902 100644 --- a/verilog/sd2snes_cx4/address.v +++ b/verilog/sd2snes_cx4/address.v @@ -38,8 +38,8 @@ module address( wire [23:0] SRAM_SNES_ADDR; /* Cx4 mapper: - - LoROM (extended to 00-7d, 80-ff) - - MMIO @ 6000-7fff + - LoROM (extended to 00-7d, 80-ff) + - MMIO @ 6000-7fff */ assign IS_ROM = SNES_ADDR[15] & ~SNES_CS; diff --git a/verilog/sd2snes_cx4/main.v b/verilog/sd2snes_cx4/main.v index de849b4..9e564dc 100644 --- a/verilog/sd2snes_cx4/main.v +++ b/verilog/sd2snes_cx4/main.v @@ -305,7 +305,7 @@ cx4 snes_cx4 ( .BUS_RDY(CX4_RDY), .cx4_active(cx4_active) ); - + parameter MODE_SNES = 1'b0; parameter MODE_MCU = 1'b1; @@ -349,7 +349,7 @@ reg [7:0] ROM_DOUTr; assign SNES_DATA = (!SNES_READ) ? (msu_enable ? MSU_SNES_DATA_OUT - :cx4_enable ? CX4_SNES_DATA_OUT + :cx4_enable ? CX4_SNES_DATA_OUT :(cx4_active & cx4_vect_enable) ? CX4_SNES_DATA_OUT : SNES_DINr) : 8'bZ; @@ -381,14 +381,14 @@ assign MCU_RDY = RQ_MCU_RDYr; always @(posedge CLK2) begin if(MCU_RRQ) begin MCU_RD_PENDr <= 1'b1; - RQ_MCU_RDYr <= 1'b0; + RQ_MCU_RDYr <= 1'b0; end else if(MCU_WRQ) begin MCU_WR_PENDr <= 1'b1; - RQ_MCU_RDYr <= 1'b0; + RQ_MCU_RDYr <= 1'b0; end else if(STATE & (ST_MCU_RD_END | ST_MCU_WR_END)) begin MCU_RD_PENDr <= 1'b0; - MCU_WR_PENDr <= 1'b0; - RQ_MCU_RDYr <= 1'b1; + MCU_WR_PENDr <= 1'b0; + RQ_MCU_RDYr <= 1'b1; end end @@ -399,10 +399,10 @@ assign CX4_RDY = RQ_CX4_RDYr; always @(posedge CLK2) begin if(CX4_RRQ) begin CX4_RD_PENDr <= 1'b1; - RQ_CX4_RDYr <= 1'b0; + RQ_CX4_RDYr <= 1'b0; end else if(STATE == ST_CX4_RD_WAIT && ST_MEM_DELAYr == 4'h0) begin CX4_RD_PENDr <= 1'b0; - RQ_CX4_RDYr <= 1'b1; + RQ_CX4_RDYr <= 1'b1; end end @@ -416,126 +416,126 @@ always @(posedge CLK2) begin end else begin case(STATE) ST_IDLE: begin - ROM_ADDRr <= MAPPED_SNES_ADDR; + ROM_ADDRr <= MAPPED_SNES_ADDR; if(CX4_RD_PENDr) begin STATE <= ST_CX4_RD_WAIT; ROM_ADDRr <= CX4_ADDR; ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; end else if(~cx4_active && ~ASSERT_SNES_ADDR) begin - if(MCU_RD_PENDr) STATE <= ST_MCU_RD_ADDR; - else if(MCU_WR_PENDr) STATE <= ST_MCU_WR_ADDR; + if(MCU_RD_PENDr) STATE <= ST_MCU_RD_ADDR; + else if(MCU_WR_PENDr) STATE <= ST_MCU_WR_ADDR; else STATE <= ST_IDLE; end else STATE <= ST_IDLE; - end - ST_SNES_RD_ADDR: begin - STATE <= ST_SNES_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT; - end - ST_SNES_RD_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_RD_END; - else STATE <= ST_SNES_RD_WAIT; - if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; - else SNES_DINr <= ROM_DATA[15:8]; - end - ST_SNES_RD_END: begin - STATE <= ST_IDLE; - if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; - else SNES_DINr <= ROM_DATA[15:8]; - end + end + ST_SNES_RD_ADDR: begin + STATE <= ST_SNES_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT; + end + ST_SNES_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_RD_END; + else STATE <= ST_SNES_RD_WAIT; + if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; + else SNES_DINr <= ROM_DATA[15:8]; + end + ST_SNES_RD_END: begin + STATE <= ST_IDLE; + if(ROM_ADDR0) SNES_DINr <= ROM_DATA[7:0]; + else SNES_DINr <= ROM_DATA[15:8]; + end ST_SNES_WR_ADDR: begin ROM_WEr <= (!IS_WRITABLE); snes_wr_cycle <= 1'b1; - STATE <= ST_SNES_WR_WAIT1; - ST_MEM_DELAYr <= ROM_WR_WAIT1; - end - ST_SNES_WR_WAIT1: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_DATA; - else STATE <= ST_SNES_WR_WAIT1; - end - ST_SNES_WR_DATA: begin + STATE <= ST_SNES_WR_WAIT1; + ST_MEM_DELAYr <= ROM_WR_WAIT1; + end + ST_SNES_WR_WAIT1: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_DATA; + else STATE <= ST_SNES_WR_WAIT1; + end + ST_SNES_WR_DATA: begin ROM_DOUTr <= SNES_DATA; - ST_MEM_DELAYr <= ROM_WR_WAIT2; - STATE <= ST_SNES_WR_WAIT2; - end + ST_MEM_DELAYr <= ROM_WR_WAIT2; + STATE <= ST_SNES_WR_WAIT2; + end ST_SNES_WR_WAIT2: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_END; - else STATE <= ST_SNES_WR_WAIT2; - end - ST_SNES_WR_END: begin - STATE <= ST_IDLE; - ROM_WEr <= 1'b1; - snes_wr_cycle <= 1'b0; - end - ST_MCU_RD_ADDR: begin - ROM_ADDRr <= MCU_ADDR; - STATE <= ST_MCU_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT_MCU; - end - ST_MCU_RD_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin - STATE <= ST_MCU_RD_WAIT2; + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_SNES_WR_END; + else STATE <= ST_SNES_WR_WAIT2; + end + ST_SNES_WR_END: begin + STATE <= ST_IDLE; + ROM_WEr <= 1'b1; + snes_wr_cycle <= 1'b0; + end + ST_MCU_RD_ADDR: begin + ROM_ADDRr <= MCU_ADDR; + STATE <= ST_MCU_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_MCU; + end + ST_MCU_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_RD_WAIT2; ST_MEM_DELAYr <= 4'h2; if(ROM_ADDR0) MCU_DINr <= ROM_DATA[7:0]; else MCU_DINr <= ROM_DATA[15:8]; - end - else STATE <= ST_MCU_RD_WAIT; + end + else STATE <= ST_MCU_RD_WAIT; end - ST_MCU_RD_WAIT2: begin + ST_MCU_RD_WAIT2: begin ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin - STATE <= ST_MCU_RD_END; - end else STATE <= ST_MCU_RD_WAIT2; - end - ST_MCU_RD_END: begin - STATE <= ST_IDLE; - end - ST_MCU_WR_ADDR: begin - ROM_ADDRr <= MCU_ADDR; - STATE <= ST_MCU_WR_WAIT; - ST_MEM_DELAYr <= ROM_WR_WAIT_MCU; - ROM_DOUTr <= MCU_DOUT; - ROM_WEr <= 1'b0; - end - ST_MCU_WR_WAIT: begin + if(ST_MEM_DELAYr == 4'h0) begin + STATE <= ST_MCU_RD_END; + end else STATE <= ST_MCU_RD_WAIT2; + end + ST_MCU_RD_END: begin + STATE <= ST_IDLE; + end + ST_MCU_WR_ADDR: begin + ROM_ADDRr <= MCU_ADDR; + STATE <= ST_MCU_WR_WAIT; + ST_MEM_DELAYr <= ROM_WR_WAIT_MCU; + ROM_DOUTr <= MCU_DOUT; + ROM_WEr <= 1'b0; + end + ST_MCU_WR_WAIT: begin ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin + if(ST_MEM_DELAYr == 4'h0) begin ROM_WEr <= 1'b1; - STATE <= ST_MCU_WR_WAIT2; - ST_MEM_DELAYr <= 4'h2; - end - else STATE <= ST_MCU_WR_WAIT; + STATE <= ST_MCU_WR_WAIT2; + ST_MEM_DELAYr <= 4'h2; + end + else STATE <= ST_MCU_WR_WAIT; end - ST_MCU_WR_WAIT2: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) begin + ST_MCU_WR_WAIT2: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) begin STATE <= ST_MCU_WR_END; end else STATE <= ST_MCU_WR_WAIT2; - end - ST_MCU_WR_END: begin - STATE <= ST_IDLE; - end - - ST_CX4_RD_ADDR: begin - ROM_ADDRr <= CX4_ADDR; - STATE <= ST_CX4_RD_WAIT; - ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; - end - ST_CX4_RD_WAIT: begin - ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; - if(ST_MEM_DELAYr == 4'h0) STATE <= ST_IDLE; - else STATE <= ST_CX4_RD_WAIT; - if(ROM_ADDR0) CX4_DINr <= ROM_DATA[7:0]; - else CX4_DINr <= ROM_DATA[15:8]; end - ST_CX4_RD_END: begin - STATE <= ST_IDLE; - end - endcase + ST_MCU_WR_END: begin + STATE <= ST_IDLE; + end + + ST_CX4_RD_ADDR: begin + ROM_ADDRr <= CX4_ADDR; + STATE <= ST_CX4_RD_WAIT; + ST_MEM_DELAYr <= ROM_RD_WAIT_CX4; + end + ST_CX4_RD_WAIT: begin + ST_MEM_DELAYr <= ST_MEM_DELAYr - 4'h1; + if(ST_MEM_DELAYr == 4'h0) STATE <= ST_IDLE; + else STATE <= ST_CX4_RD_WAIT; + if(ROM_ADDR0) CX4_DINr <= ROM_DATA[7:0]; + else CX4_DINr <= ROM_DATA[15:8]; + end + ST_CX4_RD_END: begin + STATE <= ST_IDLE; + end + endcase end end diff --git a/verilog/sd2snes_cx4/spi.v b/verilog/sd2snes_cx4/spi.v index cb6bf79..8b9b0fd 100644 --- a/verilog/sd2snes_cx4/spi.v +++ b/verilog/sd2snes_cx4/spi.v @@ -59,7 +59,7 @@ always @(posedge SCK) begin if(SSEL) bitcnt <= 3'b000; else begin bitcnt <= bitcnt + 3'b001; - byte_data_received <= {byte_data_received[6:0], MOSI}; + byte_data_received <= {byte_data_received[6:0], MOSI}; end if(~SSEL && bitcnt==3'b111) byte_received <= 1'b1; else byte_received <= 1'b0; From 6a17ffe1521dfe7f1609608a33a928be6b135e56 Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 1 Nov 2011 22:01:14 +0100 Subject: [PATCH 11/11] Firmware: cx4 support --- src/memory.c | 8 +++++++- src/smc.c | 2 ++ src/smc.h | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/memory.c b/src/memory.c index 3797114..d276178 100644 --- a/src/memory.c +++ b/src/memory.c @@ -191,7 +191,14 @@ uint32_t load_rom(uint8_t* filename, uint32_t base_addr, uint8_t flags) { } filesize = file_handle.fsize; smc_id(&romprops); + file_close(); + /* reconfigure FPGA if necessary */ + if(romprops.fpga_conf) { + printf("reconfigure FPGA with %s...\n", romprops.fpga_conf); + fpga_pgm((uint8_t*)romprops.fpga_conf); + } set_mcu_addr(base_addr); + file_open(filename, FA_READ); f_lseek(&file_handle, romprops.offset); for(;;) { ff_sd_offload=1; @@ -226,7 +233,6 @@ uint32_t load_rom(uint8_t* filename, uint32_t base_addr, uint8_t flags) { sram_writebyte(0xfc, rombase+0xd5); set_fpga_time(0x0220110301180530LL); } -fpga_pgm((uint8_t*)"/sd2snes/cx4.bit"); if(romprops.has_dspx || romprops.has_cx4) { printf("DSPx game. Loading firmware image %s...\n", romprops.dsp_fw); load_dspx(romprops.dsp_fw, romprops.fpga_features); diff --git a/src/smc.c b/src/smc.c index 202c2ff..3a07223 100644 --- a/src/smc.c +++ b/src/smc.c @@ -85,6 +85,7 @@ void smc_id(snes_romprops_t* props) { props->has_st0010 = 0; props->has_cx4 = 0; props->fpga_features = 0; + props->fpga_conf = NULL; for(uint8_t num = 0; num < 6; num++) { if(!file_readblock(header, hdr_addr[num], sizeof(snes_header_t)) || file_res) { @@ -155,6 +156,7 @@ void smc_id(snes_romprops_t* props) { if (header->map == 0x20 && header->carttype == 0xf3) { props->has_cx4 = 1; props->dsp_fw = CX4FW; + props->fpga_conf = FPGA_CX4; props->fpga_features |= FEAT_CX4; } else if ((header->map == 0x20 && header->carttype == 0x03) || diff --git a/src/smc.h b/src/smc.h index 561078f..8e77b7c 100644 --- a/src/smc.h +++ b/src/smc.h @@ -35,6 +35,8 @@ #define DSPFW_ST0010 ((const uint8_t*)"/sd2snes/st0010.bin") #define CX4FW ((const uint8_t*)"/sd2snes/cx4.bin") +#define FPGA_CX4 ((const uint8_t*)"/sd2snes/fpga_cx4.bit") + typedef struct _snes_header { uint8_t maker[2]; /* 0xB0 */ uint8_t gamecode[4]; /* 0xB2 */ @@ -62,6 +64,7 @@ typedef struct _snes_romprops { uint32_t ramsize_bytes; /* CartRAM size in bytes */ uint32_t romsize_bytes; /* ROM size in bytes (rounded up) */ const uint8_t* dsp_fw; /* DSP (NEC / Hitachi) ROM filename */ + const uint8_t* fpga_conf; /* FPGA config file to load (default: base) */ uint8_t has_dspx; /* DSP[1-4] presence flag */ uint8_t has_st0010; /* st0010 presence flag (additional to dspx)*/ uint8_t has_msu1; /* MSU1 presence flag */