| @@ -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 |
| @@ -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 |
| @@ -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 |
| @@ -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 |
| @@ -0,0 +1,72 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no" ?> | ||
| <project xmlns="http://www.xilinx.com/XMLSchema" xmlns:xil_pn="http://www.xilinx.com/XMLSchema"> | ||
|
|
||
| <header> | ||
| <!-- ISE source project file created by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- This file contains project source information including a list of --> | ||
| <!-- project source files, project and process properties. This file, --> | ||
| <!-- along with the project source files, is sufficient to open and --> | ||
| <!-- implement in ISE Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. --> | ||
| </header> | ||
|
|
||
| <version xil_pn:ise_version="13.2" xil_pn:schema_version="2"/> | ||
|
|
||
| <files> | ||
| <file xil_pn:name="cx4_datram.ngc" xil_pn:type="FILE_NGC"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="3"/> | ||
| </file> | ||
| <file xil_pn:name="cx4_datram.v" xil_pn:type="FILE_VERILOG"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="5"/> | ||
| </file> | ||
| </files> | ||
|
|
||
| <properties> | ||
| <property xil_pn:name="Auto Implementation Top" xil_pn:value="false" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device" xil_pn:value="xc3s400" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device Family" xil_pn:value="Spartan3" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Stop View" xil_pn:value="PreSynthesis" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top" xil_pn:value="Module|cx4_datram" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top File" xil_pn:value="cx4_datram.ngc" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top Instance Path" xil_pn:value="/cx4_datram" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Preferred Language" xil_pn:value="Verilog" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Project Generator" xil_pn:value="CoreGen" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Property Specification in Project File" xil_pn:value="Store all values" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Working Directory" xil_pn:value="." xil_pn:valueState="non-default"/> | ||
| <!-- --> | ||
| <!-- The following properties are for internal use only. These should not be modified.--> | ||
| <!-- --> | ||
| <property xil_pn:name="PROP_DesignName" xil_pn:value="cx4_datram" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan3" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="PROP_intProjectCreationTimestamp" xil_pn:value="2011-10-16T20:54:53" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWbtProjectID" xil_pn:value="1A4EA94132742A5DE9F22CC590B9E9A7" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirLocWRTProjDir" xil_pn:value="Same" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirUsed" xil_pn:value="No" xil_pn:valueState="non-default"/> | ||
| </properties> | ||
|
|
||
| <bindings/> | ||
|
|
||
| <libraries/> | ||
|
|
||
| <autoManagedFiles> | ||
| <!-- The following files are identified by `include statements in verilog --> | ||
| <!-- source files and are automatically managed by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Do not hand-edit this section, as it will be overwritten when the --> | ||
| <!-- project is analyzed based on files automatically identified as --> | ||
| <!-- include files. --> | ||
| </autoManagedFiles> | ||
|
|
||
| </project> |
| @@ -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 |
| @@ -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 |
| @@ -0,0 +1,72 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no" ?> | ||
| <project xmlns="http://www.xilinx.com/XMLSchema" xmlns:xil_pn="http://www.xilinx.com/XMLSchema"> | ||
|
|
||
| <header> | ||
| <!-- ISE source project file created by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- This file contains project source information including a list of --> | ||
| <!-- project source files, project and process properties. This file, --> | ||
| <!-- along with the project source files, is sufficient to open and --> | ||
| <!-- implement in ISE Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. --> | ||
| </header> | ||
|
|
||
| <version xil_pn:ise_version="13.2" xil_pn:schema_version="2"/> | ||
|
|
||
| <files> | ||
| <file xil_pn:name="cx4_datrom.ngc" xil_pn:type="FILE_NGC"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="3"/> | ||
| </file> | ||
| <file xil_pn:name="cx4_datrom.v" xil_pn:type="FILE_VERILOG"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="5"/> | ||
| </file> | ||
| </files> | ||
|
|
||
| <properties> | ||
| <property xil_pn:name="Auto Implementation Top" xil_pn:value="false" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device" xil_pn:value="xc3s400" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device Family" xil_pn:value="Spartan3" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Stop View" xil_pn:value="PreSynthesis" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top" xil_pn:value="Module|cx4_datrom" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top File" xil_pn:value="cx4_datrom.ngc" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top Instance Path" xil_pn:value="/cx4_datrom" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Preferred Language" xil_pn:value="Verilog" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Project Generator" xil_pn:value="CoreGen" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Property Specification in Project File" xil_pn:value="Store all values" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Working Directory" xil_pn:value="." xil_pn:valueState="non-default"/> | ||
| <!-- --> | ||
| <!-- The following properties are for internal use only. These should not be modified.--> | ||
| <!-- --> | ||
| <property xil_pn:name="PROP_DesignName" xil_pn:value="cx4_datrom" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan3" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="PROP_intProjectCreationTimestamp" xil_pn:value="2011-10-16T14:58:14" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWbtProjectID" xil_pn:value="3B4E0775D81ACD3D9CCAB1608687B690" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirLocWRTProjDir" xil_pn:value="Same" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirUsed" xil_pn:value="No" xil_pn:valueState="non-default"/> | ||
| </properties> | ||
|
|
||
| <bindings/> | ||
|
|
||
| <libraries/> | ||
|
|
||
| <autoManagedFiles> | ||
| <!-- The following files are identified by `include statements in verilog --> | ||
| <!-- source files and are automatically managed by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Do not hand-edit this section, as it will be overwritten when the --> | ||
| <!-- project is analyzed based on files automatically identified as --> | ||
| <!-- include files. --> | ||
| </autoManagedFiles> | ||
|
|
||
| </project> |
| @@ -0,0 +1,68 @@ | ||
| ############################################################## | ||
| # | ||
| # Xilinx Core Generator version 13.2 | ||
| # Date: Sun Oct 30 20:22:20 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=true | ||
| 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: 4f144c3 |
| @@ -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("cx4_pgmrom.mif"), | ||
| .C_INITA_VAL("0"), | ||
| .C_INITB_VAL("0"), | ||
| .C_INTERFACE_TYPE(0), | ||
| .C_LOAD_INIT_FILE(1), | ||
| .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 |
| @@ -0,0 +1,105 @@ | ||
| ############################################################## | ||
| # | ||
| # Xilinx Core Generator version 13.2 | ||
| # Date: Sun Oct 23 22:07:47 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=/home/ikari/prj/sd2snes/verilog/sd2snes_cx4/cx4_e.coe | ||
| 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=true | ||
| 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: a9280b11 |
| @@ -0,0 +1,72 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no" ?> | ||
| <project xmlns="http://www.xilinx.com/XMLSchema" xmlns:xil_pn="http://www.xilinx.com/XMLSchema"> | ||
|
|
||
| <header> | ||
| <!-- ISE source project file created by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- This file contains project source information including a list of --> | ||
| <!-- project source files, project and process properties. This file, --> | ||
| <!-- along with the project source files, is sufficient to open and --> | ||
| <!-- implement in ISE Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. --> | ||
| </header> | ||
|
|
||
| <version xil_pn:ise_version="13.2" xil_pn:schema_version="2"/> | ||
|
|
||
| <files> | ||
| <file xil_pn:name="cx4_pgmrom.ngc" xil_pn:type="FILE_NGC"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="3"/> | ||
| </file> | ||
| <file xil_pn:name="cx4_pgmrom.v" xil_pn:type="FILE_VERILOG"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="5"/> | ||
| </file> | ||
| </files> | ||
|
|
||
| <properties> | ||
| <property xil_pn:name="Auto Implementation Top" xil_pn:value="false" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device" xil_pn:value="xc3s400" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device Family" xil_pn:value="Spartan3" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Stop View" xil_pn:value="PreSynthesis" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top" xil_pn:value="Module|cx4_pgmrom" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top File" xil_pn:value="cx4_pgmrom.ngc" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top Instance Path" xil_pn:value="/cx4_pgmrom" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Preferred Language" xil_pn:value="Verilog" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Project Generator" xil_pn:value="CoreGen" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Property Specification in Project File" xil_pn:value="Store all values" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Working Directory" xil_pn:value="." xil_pn:valueState="non-default"/> | ||
| <!-- --> | ||
| <!-- The following properties are for internal use only. These should not be modified.--> | ||
| <!-- --> | ||
| <property xil_pn:name="PROP_DesignName" xil_pn:value="cx4_pgmrom" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan3" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="PROP_intProjectCreationTimestamp" xil_pn:value="2011-10-24T00:08:31" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWbtProjectID" xil_pn:value="C14775871011A35EE55463DDAA37D8AF" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirLocWRTProjDir" xil_pn:value="Same" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirUsed" xil_pn:value="No" xil_pn:valueState="non-default"/> | ||
| </properties> | ||
|
|
||
| <bindings/> | ||
|
|
||
| <libraries/> | ||
|
|
||
| <autoManagedFiles> | ||
| <!-- The following files are identified by `include statements in verilog --> | ||
| <!-- source files and are automatically managed by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Do not hand-edit this section, as it will be overwritten when the --> | ||
| <!-- project is analyzed based on files automatically identified as --> | ||
| <!-- include files. --> | ||
| </autoManagedFiles> | ||
|
|
||
| </project> |
| @@ -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 |
| @@ -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 |
| @@ -0,0 +1,79 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no" ?> | ||
| <project xmlns="http://www.xilinx.com/XMLSchema" xmlns:xil_pn="http://www.xilinx.com/XMLSchema"> | ||
|
|
||
| <header> | ||
| <!-- ISE source project file created by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- This file contains project source information including a list of --> | ||
| <!-- project source files, project and process properties. This file, --> | ||
| <!-- along with the project source files, is sufficient to open and --> | ||
| <!-- implement in ISE Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. --> | ||
| </header> | ||
|
|
||
| <version xil_pn:ise_version="13.2" xil_pn:schema_version="2"/> | ||
|
|
||
| <files> | ||
| <file xil_pn:name="dac_buf.ngc" xil_pn:type="FILE_NGC"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="2"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="0"/> | ||
| </file> | ||
| <file xil_pn:name="dac_buf.v" xil_pn:type="FILE_VERILOG"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="0"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="5"/> | ||
| </file> | ||
| <file xil_pn:name="dac_buf.vhd" xil_pn:type="FILE_VHDL"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="1"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="1"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="7"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="7"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="7"/> | ||
| </file> | ||
| </files> | ||
|
|
||
| <properties> | ||
| <property xil_pn:name="Auto Implementation Top" xil_pn:value="false" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device" xil_pn:value="xc3s400" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device Family" xil_pn:value="Spartan3" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Stop View" xil_pn:value="PreSynthesis" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top" xil_pn:value="Architecture|dac_buf|dac_buf_a" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top File" xil_pn:value="dac_buf.vhd" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top Instance Path" xil_pn:value="/dac_buf" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Preferred Language" xil_pn:value="Verilog" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Project Generator" xil_pn:value="CoreGen" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Property Specification in Project File" xil_pn:value="Store all values" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Working Directory" xil_pn:value="." xil_pn:valueState="non-default"/> | ||
| <!-- --> | ||
| <!-- The following properties are for internal use only. These should not be modified.--> | ||
| <!-- --> | ||
| <property xil_pn:name="PROP_DesignName" xil_pn:value="dac_buf" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan3" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="PROP_intProjectCreationTimestamp" xil_pn:value="2011-06-14T00:12:56" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWbtProjectID" xil_pn:value="014920D0A865D4E8840F795EDFB8F8B9" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirLocWRTProjDir" xil_pn:value="Same" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirUsed" xil_pn:value="No" xil_pn:valueState="non-default"/> | ||
| </properties> | ||
|
|
||
| <bindings/> | ||
|
|
||
| <libraries/> | ||
|
|
||
| <autoManagedFiles> | ||
| <!-- The following files are identified by `include statements in verilog --> | ||
| <!-- source files and are automatically managed by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Do not hand-edit this section, as it will be overwritten when the --> | ||
| <!-- project is analyzed based on files automatically identified as --> | ||
| <!-- include files. --> | ||
| </autoManagedFiles> | ||
|
|
||
| </project> |
| @@ -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 |
| @@ -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 |
| @@ -0,0 +1,79 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no" ?> | ||
| <project xmlns="http://www.xilinx.com/XMLSchema" xmlns:xil_pn="http://www.xilinx.com/XMLSchema"> | ||
|
|
||
| <header> | ||
| <!-- ISE source project file created by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- This file contains project source information including a list of --> | ||
| <!-- project source files, project and process properties. This file, --> | ||
| <!-- along with the project source files, is sufficient to open and --> | ||
| <!-- implement in ISE Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. --> | ||
| </header> | ||
|
|
||
| <version xil_pn:ise_version="13.2" xil_pn:schema_version="2"/> | ||
|
|
||
| <files> | ||
| <file xil_pn:name="msu_databuf.ngc" xil_pn:type="FILE_NGC"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="3"/> | ||
| </file> | ||
| <file xil_pn:name="msu_databuf.v" xil_pn:type="FILE_VERILOG"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="5"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="5"/> | ||
| </file> | ||
| <file xil_pn:name="msu_databuf.vhd" xil_pn:type="FILE_VHDL"> | ||
| <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="7"/> | ||
| <association xil_pn:name="Implementation" xil_pn:seqID="7"/> | ||
| <association xil_pn:name="PostMapSimulation" xil_pn:seqID="7"/> | ||
| <association xil_pn:name="PostRouteSimulation" xil_pn:seqID="7"/> | ||
| <association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="7"/> | ||
| </file> | ||
| </files> | ||
|
|
||
| <properties> | ||
| <property xil_pn:name="Auto Implementation Top" xil_pn:value="false" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device" xil_pn:value="xc3s400" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Device Family" xil_pn:value="Spartan3" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Stop View" xil_pn:value="PreSynthesis" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top" xil_pn:value="Architecture|msu_databuf|msu_databuf_a" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top File" xil_pn:value="msu_databuf.vhd" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Implementation Top Instance Path" xil_pn:value="/msu_databuf" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Package" xil_pn:value="pq208" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Preferred Language" xil_pn:value="Verilog" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Project Generator" xil_pn:value="CoreGen" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Property Specification in Project File" xil_pn:value="Store all values" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Speed Grade" xil_pn:value="-4" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="Synthesis Tool" xil_pn:value="XST (VHDL/Verilog)" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="Working Directory" xil_pn:value="." xil_pn:valueState="non-default"/> | ||
| <!-- --> | ||
| <!-- The following properties are for internal use only. These should not be modified.--> | ||
| <!-- --> | ||
| <property xil_pn:name="PROP_DesignName" xil_pn:value="msu_databuf" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan3" xil_pn:valueState="default"/> | ||
| <property xil_pn:name="PROP_intProjectCreationTimestamp" xil_pn:value="2011-06-14T00:14:59" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWbtProjectID" xil_pn:value="7648B026E1C3D2C8277D0047EFC3229D" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirLocWRTProjDir" xil_pn:value="Same" xil_pn:valueState="non-default"/> | ||
| <property xil_pn:name="PROP_intWorkingDirUsed" xil_pn:value="No" xil_pn:valueState="non-default"/> | ||
| </properties> | ||
|
|
||
| <bindings/> | ||
|
|
||
| <libraries/> | ||
|
|
||
| <autoManagedFiles> | ||
| <!-- The following files are identified by `include statements in verilog --> | ||
| <!-- source files and are automatically managed by Project Navigator. --> | ||
| <!-- --> | ||
| <!-- Do not hand-edit this section, as it will be overwritten when the --> | ||
| <!-- project is analyzed based on files automatically identified as --> | ||
| <!-- include files. --> | ||
| </autoManagedFiles> | ||
|
|
||
| </project> |
| @@ -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 |
| @@ -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 | ||
|
|
| @@ -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 |