parameter MCONTR_WR_MASK = 'h3c00, // AXI write address mask for the 1Kx32 buffers command sequence memory parameter MCONTR_RD_MASK = 'h3c00, // AXI read address mask to generate busy parameter MCONTR_CMD_WR_ADDR = 'h0000, // AXI write to command sequence memory parameter MCONTR_BUF0_RD_ADDR = 'h0400, // AXI read address from buffer 0 (PS sequence, memory read) parameter MCONTR_BUF0_WR_ADDR = 'h0400, // AXI write address to buffer 0 (PS sequence, memory write) parameter MCONTR_BUF1_RD_ADDR = 'h0800, // AXI read address from buffer 1 (PL sequence, scanline, memory read) parameter MCONTR_BUF1_WR_ADDR = 'h0800, // AXI write address to buffer 1 (PL sequence, scanline, memory write) parameter MCONTR_BUF2_RD_ADDR = 'h0c00, // AXI read address from buffer 2 (PL sequence, tiles, memory read) parameter MCONTR_BUF2_WR_ADDR = 'h0c00, // AXI write address to buffer 2 (PL sequence, tiles, memory write) parameter MCONTR_BUF3_RD_ADDR = 'h1000, // AXI read address from buffer 3 (PL sequence, scanline, memory read) parameter MCONTR_BUF3_WR_ADDR = 'h1000, // AXI write address to buffer 3 (PL sequence, scanline, memory write) parameter MCONTR_BUF4_RD_ADDR = 'h1400, // AXI read address from buffer 4 (PL sequence, tiles, memory read) parameter MCONTR_BUF4_WR_ADDR = 'h1400, // AXI write address to buffer 4 (PL sequence, tiles, memory write) parameter CONTROL_ADDR = 'h2000, // AXI write address of control write registers parameter CONTROL_ADDR_MASK = 'h3800, // AXI write address of control registers // so 'h2000..'h23ff (CONTROL_ADDR) - no busy when writing, 'h2400..'h27ff (CONTROL_ADDR | BUSY_WR_ADDR) generates busy if fifo half full parameter BUSY_WR_ADDR = 'h1400, // AXI write address to generate busy parameter BUSY_WR_ADDR_MASK = 'h3c00, // AXI write address mask to generate busy during memory controller register write parameter STATUS_ADDR = 'h2800, // AXI write address of status read registers parameter STATUS_ADDR_MASK = 'h3c00, // AXI write address of status registers parameter AXI_WR_ADDR_BITS = 14, parameter AXI_RD_ADDR_BITS = 14, parameter STATUS_DEPTH= 8, // 256 cells, maybe just 16..64 are enough? -------------- .MCONTR_WR_MASK (MCONTR_WR_MASK), .MCONTR_RD_MASK (MCONTR_RD_MASK), .MCONTR_CMD_WR_ADDR (MCONTR_CMD_WR_ADDR), .MCONTR_BUF0_RD_ADDR (MCONTR_BUF0_RD_ADDR), .MCONTR_BUF0_WR_ADDR (MCONTR_BUF0_WR_ADDR), .MCONTR_BUF1_RD_ADDR (MCONTR_BUF1_RD_ADDR), .MCONTR_BUF1_WR_ADDR (MCONTR_BUF1_WR_ADDR), .MCONTR_BUF2_RD_ADDR (MCONTR_BUF2_RD_ADDR), .MCONTR_BUF2_WR_ADDR (MCONTR_BUF2_WR_ADDR), .MCONTR_BUF3_RD_ADDR (MCONTR_BUF3_RD_ADDR), .MCONTR_BUF3_WR_ADDR (MCONTR_BUF3_WR_ADDR), .MCONTR_BUF4_RD_ADDR (MCONTR_BUF4_RD_ADDR), .MCONTR_BUF4_WR_ADDR (MCONTR_BUF4_WR_ADDR), .CONTROL_ADDR (CONTROL_ADDR), .CONTROL_ADDR_MASK (CONTROL_ADDR_MASK), .BUSY_WR_ADDR (BUSY_WR_ADDR), .BUSY_WR_ADDR_MASK (BUSY_WR_ADDR_MASK), .STATUS_ADDR (STATUS_ADDR), .STATUS_ADDR_MASK (STATUS_ADDR_MASK), .AXI_WR_ADDR_BITS (AXI_WR_ADDR_BITS), .AXI_RD_ADDR_BITS (AXI_RD_ADDR_BITS), .STATUS_DEPTH (STATUS_DEPTH), ddrc_control parameter BUSY_WR_ADDR = 'h1800, // AXI write address to generate busy parameter BUSY_WR_ADDR_MASK = 'h1c00, // AXI write address mask to generate busy //0x1080..10ff - 8- bit data - to set various delay values parameter DLY_LD = 'h080, // address to generate delay load parameter DLY_LD_MASK = 'h380, // address mask to generate delay load 0x1000..103f - 0- bit data (set/reset) parameter MCONTR_PHY_0BIT_ADDR = 'h020, // address to set sequnecer channel and run (4 LSB-s - channel) parameter MCONTR_PHY_0BIT_ADDR_MASK = 'h3f0, // address mask to generate sequencer channel/run 0x1020 - DLY_SET // 0 bits -set pre-programmed delays 0x1024..1025 - CMDA_EN // 0 bits - disable/enable command/address outputs 0x1026..1027 - SDRST_ACT // 0 bits - disable/enable active-low reset signal to DDR3 memory 0x1028..1029 - CKE_EN // 0 bits - disable/enable CKE signal to memory 0x102a..102b - DCI_RST // 0 bits - disable/enable CKE signal to memory 0x102c..102d - DLY_RST // 0 bits - disable/enable CKE signal to memory parameter MCONTR_PHY_0BIT_DLY_SET = 'h0, // set pre-programmed delays parameter MCONTR_PHY_0BIT_CMDA_EN = 'h4, // disable/enable command/address outputs parameter MCONTR_PHY_0BIT_SDRST_ACT = 'h6, // disable/enable active-low reset signal to DDR3 memory parameter MCONTR_PHY_0BIT_CKE_EN = 'h8, // disable/enable CKE signal to memory parameter MCONTR_PHY_0BIT_DCI_RST = 'ha, // disable/enable CKE signal to memory parameter MCONTR_PHY_0BIT_DLY_RST = 'hc, // disable/enable CKE signal to memory 0x1030..1037 - 0-bit memory cotroller (set/reset) parameter MCONTR_TOP_0BIT_ADDR = 'h030, // address to turn on/off memory controller features parameter MCONTR_TOP_0BIT_ADDR_MASK = 'h3f8, // address mask to generate sequencer channel/run 0x1030..1031 - MCONTR_EN // 0 bits, disable/enable memory controller 0x1032..1033 - REFRESH_EN // 0 bits, disable/enable memory refresh 0x1034..1037 - reserved parameter MCONTR_TOP_0BIT_MCONTR_EN = 'h0, // set pre-programmed delays parameter MCONTR_TOP_0BIT_REFRESH_EN = 'h2, // disable/enable command/address outputs 0x1040..107f - 16-bit data 0x1050..1057: MCONTR_PHY16 parameter MCONTR_PHY_16BIT_ADDR = 'h050, // address to set sequnecer channel and run (4 LSB-s - channel) parameter MCONTR_PHY_16BIT_ADDR_MASK = 'h3f8, // address mask to generate sequencer channel/run 0x1050 - PATTERNS // 16 bits 0x1051 - PATTERNS_TRI // 16-bit address to set DQM and DQS tristate on/off patterns {dqs_off,dqs_on, dq_off,dq_on} - 4 bits each 0x1052 - WBUF_DELAY // 4 bits - extra delay (in mclk cycles) to add to write buffer enable (DDR3 read data) 0x1053 - EXTRA_REL // 1 bit - set extra parameters (currently just inv_clk_div) 0x1054 - STATUS_CNTRL // 8 bits - write to status control parameter MCONTR_PHY_16BIT_PATTERNS = 'h0, // set DQM and DQS patterns (16'h0055) parameter MCONTR_PHY_16BIT_PATTERNS_TRI = 'h1, // 16-bit address to set DQM and DQS tristate on/off patterns {dqs_off,dqs_on, dq_off,dq_on} - 4 bits each parameter MCONTR_PHY_16BIT_WBUF_DELAY = 'h2, // 4 bits - extra delay (in mclk cycles) to add to write buffer enable (DDR3 read data) parameter MCONTR_PHY_16BIT_EXTRA_REL = 'h3, // 1 bit - set extra parameters (currently just inv_clk_div) parameter MCONTR_PHY_STATUS_CNTRL = 'h4, // 8 bits - write to status control 0x1060..106f: arbiter priority data parameter MCONTR_ARBIT_ADDR = 'h060, // Address to set channel priorities parameter MCONTR_ARBIT_ADDR_MASK = 'h3f0, // Address mask to set channel priorities 0x1070..1077 - 16-bit top memory controller: parameter MCONTR_TOP_16BIT_ADDR = 'h070, // address to set mcontr top control registers parameter MCONTR_TOP_16BIT_ADDR_MASK = 'h3f8, // address mask to set mcontr top control registers 0x1070 - MCONTR_CHN_EN // 16 bits per-channel enable (want/need requests) 0x1071 - REFRESH_PERIOD // 8-bit refresh period 0x1072 - REFRESH_ADDRESS // 10 bits 0x1073 - STATUS_CNTRL // 8 bits - write to status control (and debug?) parameter MCONTR_TOP_16BIT_CHN_EN = 'h0, // 16 bits per-channel enable (want/need requests) parameter MCONTR_TOP_16BIT_REFRESH_PERIOD = 'h1, // 8-bit refresh period parameter MCONTR_TOP_16BIT_REFRESH_ADDRESS= 'h2, // 10 bits refresh address in the sequencer (PL) memory parameter MCONTR_TOP_16BIT_STATUS_CNTRL= 'h3, // 8 bits - write to status control (and debug?) 0x1080..10ff 0x1080..10ff - DLY_LD // 8 bits : 0x1080..109f - set delay for SDD0-SDD7 0x10a0..10bf - set delay for SDD8-SDD15 0x10c0..10df - set delay for SD_CMDA 0x10e0 - set delay for MMCM localparam LD_DLY_LANE0_ODELAY = DLY_LD+'h00; // 0x1080 localparam LD_DLY_LANE0_IDELAY = DLY_LD+'h10; // 0x1090 localparam LD_DLY_LANE1_ODELAY = DLY_LD+'h20; // 0x10a0 localparam LD_DLY_LANE1_IDELAY = DLY_LD+'h30; // 0x10b0 localparam LD_DLY_CMDA = DLY_LD+'h40; // 0x10c0 localparam LD_DLY_PHASE = DLY_LD+'h60; // 0x10e0 localparam DLY_SET = MCONTR_PHY_0BIT_ADDR + MCONTR_PHY_0BIT_DLY_SET; //0x1020 ---- parameter MCNTRL_TEST01_ADDR= 'h0f0, parameter MCNTRL_TEST01_MASK= 'h3f0 0x1100..11ff - 32-bit per-channel memory control 0x1100..110f - control of memory channels 0,1 - PS-controlled sequences parameter MCNTRL_PS_ADDR= 'h100, parameter MCNTRL_PS_MASK= 'h3e0, // both channels 0 and 1 0x1100 - MCNTRL_PS_EN_RST 0x1101 - MCNTRL_PS_CMD 0x1102 - MCNTRL_PS_STATUS_CNTRL parameter MCNTRL_PS_EN_RST= 'h0, parameter MCNTRL_PS_CMD= 'h1, parameter MCNTRL_PS_STATUS_CNTRL= 'h2, ============= Add the following (addresses will vary for individual channels) parameter MCNTRL_SCANLINE_CHN2_ADDR= 'h120, parameter MCNTRL_SCANLINE_CHN3_ADDR= 'h130, parameter MCNTRL_SCANLINE_MASK= 'h3f0, // both channels 0 and 1 parameter MCNTRL_SCANLINE_MODE= 'h0, // set mode register: {extra_pages[1:0],write_mode,enable,!reset} parameter MCNTRL_SCANLINE_STATUS_CNTRL= 'h1, // control status reporting parameter MCNTRL_SCANLINE_STARTADDR= 'h2, // 22-bit frame start address (3 CA LSBs==0. BA==0) parameter MCNTRL_SCANLINE_FRAME_FULL_WIDTH='h3, // Padded line length (8-row increment), in 8-bursts (16 bytes) parameter MCNTRL_SCANLINE_WINDOW_WH= 'h4, // low word - 13-bit window width (0->'n4000), high word - 16-bit frame height (0->'h10000) parameter MCNTRL_SCANLINE_WINDOW_X0Y0= 'h5, // low word - 13-bit window left, high word - 16-bit window top parameter MCNTRL_SCANLINE_WINDOW_STARTXY= 'h6, // low word - 13-bit start X (relative to window), high word - 16-bit start y // Start XY can be used when read command to start from the middle // TODO: Add number of blocks to R/W? (blocks can be different) - total length? // Read back current address (fro debugging)? ============= Tiled read access (CHN4) parameter MCNTRL_TILED_CHN4_ADDR= 'h140, parameter MCNTRL_TILED_MASK= 'h3f0, // both channels 0 and 1 parameter MCNTRL_TILED_MODE= 'h0, // set mode register: {extra_pages[1:0],write_mode,enable,!reset} parameter MCNTRL_TILED_STATUS_CNTRL= 'h1, // control status reporting parameter MCNTRL_TILED_STARTADDR= 'h2, // 22-bit frame start address (3 CA LSBs==0. BA==0) parameter MCNTRL_TILED_FRAME_FULL_WIDTH='h3, // Padded line length (8-row increment), in 8-bursts (16 bytes) parameter MCNTRL_TILED_WINDOW_WH= 'h4, // low word - 13-bit window width (0->'n4000), high word - 16-bit frame height (0->'h10000) parameter MCNTRL_TILED_WINDOW_X0Y0= 'h5, // low word - 13-bit window left, high word - 16-bit window top parameter MCNTRL_TILED_WINDOW_STARTXY= 'h6, // low word - 13-bit start X (relative to window), high word - 16-bit start y // Start XY can be used when read command to start from the middle // TODO: Add number of blocks to R/W? (blocks can be different) - total length? // Read back current address (fro debugging)? parameter MCNTRL_TILED_TILE_WH= 'h7, // low word - 6-bit tile width in 8-bursts, high - tile height (0 - > 64) == test module (8-bit): parameter MCNTRL_TEST01_ADDR= 'h0f0, parameter MCNTRL_TEST01_MASK= 'h3f0, parameter FRAME_HEIGHT_BITS= 16, // Maximal frame height parameter MCNTRL_TEST01_CHN2_MODE= 'h4, // set mode register for channel 2 parameter MCNTRL_TEST01_CHN2_STATUS_CNTRL= 'h5, // control status reporting for channel 2 parameter MCNTRL_TEST01_CHN3_MODE= 'h6, // set mode register for channel 3 parameter MCNTRL_TEST01_CHN3_STATUS_CNTRL= 'h7, // control status reporting for channel 3 parameter MCNTRL_TEST01_CHN4_MODE= 'h8, // set mode register for channel 4 parameter MCNTRL_TEST01_CHN4_STATUS_CNTRL= 'h9, // control status reporting for channel 4 parameter MCNTRL_TEST01_STATUS_REG_CHN2_ADDR= 'h3c, // status/readback register for channel 2 parameter MCNTRL_TEST01_STATUS_REG_CHN3_ADDR= 'h3d, // status/readback register for channel 3 parameter MCNTRL_TEST01_STATUS_REG_CHN4_ADDR= 'h3e // status/readback register for channel 4 // Status read address parameter STATUS_ADDR = 'h1400, // AXI write address of status read registers parameter STATUS_ADDR_MASK = 'h1400, // AXI write address of status registers parameter STATUS_DEPTH= 8, // 256 cells, maybe just 16..64 are enough? parameter MCONTR_PHY_STATUS_REG_ADDR= 'h0,//8 or less bits: status register address to use for memory controller phy parameter MCONTR_TOP_STATUS_REG_ADDR= 'h1,//8 or less bits: status register address to use for memory controller parameter MCNTRL_PS_STATUS_REG_ADDR= 'h2 parameter MCNTRL_SCANLINE_STATUS_REG_CHN1_ADDR='h4, parameter MCNTRL_TILED_STATUS_REG_CHN2_ADDR= 'h5, parameter MCNTRL_SCANLINE_STATUS_REG_CHN3_ADDR='h6, parameter MCNTRL_TILED_STATUS_REG_CHN4_ADDR= 'h7, parameter MCNTRL_TEST01_STATUS_REG_CHN2_ADDR= 'h3c, // status/readback register for channel 2 parameter MCNTRL_TEST01_STATUS_REG_CHN3_ADDR= 'h3d, // status/readback register for channel 3 parameter MCNTRL_TEST01_STATUS_REG_CHN4_ADDR= 'h3e // status/readback register for channel 4 ================================ OLD ======================================================= Control addresses (in original ddrc_test01) 0x1000..100f - RUN_CHN // address to set sequnecer channel and run (4 LSB-s - channel) - bits? 0x1020 - PATTERNS // 16 bits 0x1021 - PATTERNS_TRI // 16-bit address to set DQM and DQS tristate on/off patterns {dqs_off,dqs_on, dq_off,dq_on} - 4 bits each 0x1022 - WBUF_DELAY // 4? bits - extra delay (in mclk cycles) to add to write buffer enable (DDR3 read data) 0x1023 - PAGES // will be removed! 8 bits - address to set buffer pages {port1_page[1:0], port1_int_page[1:0], port0_page[1:0], port0_int_page[1:0]} 0x1024..1025 - CMDA_EN // 0 bits - enable/disable command/address outputs 0x1026..1027 - SDRST_ACT // 0 bits - enable/disable active-low reset signal to DDR3 memory 0x1028..1029 - CKE_EN // 0 bits - enable/disable CKE signal to memory 0x102a..102b - DCI_RST // 0 bits - enable/disable CKE signal to memory 0x102c..102d - DLY_RST // 0 bits - enable/disable CKE signal to memory 0x102e - EXTRA_REL // ? bits - set extra parameters (currently just inv_clk_div) 0x102f - X 0x1030..1031 - REFRESH_EN // 0 bits - enable/disable DDR refresh 0x1032 - REFRESH_PER // 16? bits - refresh period in 32 x tCK 0x1033 - REFRESH_ADDR // 16? bits - sequencer start address for DDR refresh 0x1070 - DLY_SET // 0 bits (set bit delays) 0x1080..10ff - DLY_LD // 8 bits : 0x1080..109f - set delay for SDD0-SDD7 0x10a0..10bf - set delay for SDD8-SDD15 0x10c0..10df - set delay for SD_CMDA 0x10e0 - set delay for MMCM parameter WBUF_DELAY_REL_MASK = 'h3ff, // address mask to set extra delay parameter PAGES_REL = 'h023, // address to set buffer pages {port1_page[1:0],port1_int_page[1:0],port0_page[1:0],port0_int_page[1:0]} parameter PAGES_REL_MASK = 'h3ff, // address mask to set DQM and DQS patterns parameter CMDA_EN_REL = 'h024, // address to enable('h825)/disable('h824) command/address outputs parameter CMDA_EN_REL_MASK = 'h3fe, // address mask for command/address outputs parameter SDRST_ACT_REL = 'h026, // address to activate('h827)/deactivate('h826) active-low reset signal to DDR3 memory parameter SDRST_ACT_REL_MASK = 'h3fe, // address mask for reset DDR3 parameter CKE_EN_REL = 'h028, // address to enable('h829)/disable('h828) CKE signal to memory parameter CKE_EN_REL_MASK = 'h3fe, // address mask for command/address outputs parameter DCI_RST_REL = 'h02a, // address to activate('h82b)/deactivate('h82a) Zynq DCI calibrate circuitry parameter DCI_RST_REL_MASK = 'h3fe, // address mask for DCI calibrate circuitry parameter DLY_RST_REL = 'h02c, // address to activate('h82d)/deactivate('h82c) delay calibration circuitry parameter DLY_RST_REL_MASK = 'h3fe, // address mask for delay calibration circuitry parameter EXTRA_REL = 'h02e, // address to set extra parameters (currently just inv_clk_div) parameter EXTRA_REL_MASK = 'h3ff, // address mask for extra parameters parameter REFRESH_EN_REL = 'h030, // address to enable('h31) and disable ('h30) DDR refresh parameter REFRESH_EN_REL_MASK = 'h3fe, // address mask to enable/disable DDR refresh parameter REFRESH_PER_REL = 'h032, // address to set refresh period in 32 x tCK parameter REFRESH_PER_REL_MASK = 'h3ff, // address mask set refresh period parameter REFRESH_ADDR_REL = 'h033, // address to set sequencer start address for DDR refresh parameter REFRESH_ADDR_REL_MASK = 'h3ff // address mask set refresh sequencer address