Loading .project +16 −16 Original line number Original line Diff line number Diff line Loading @@ -52,7 +52,7 @@ <link> <link> <name>ise_logs/ISExst.log</name> <name>ise_logs/ISExst.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/ise_logs/ISExst-20150228145735970.log</location> <location>/home/andrey/git/x393/ise_logs/ISExst-20150505133407662.log</location> </link> </link> <link> <link> <name>ise_state/x393-synth.tgz</name> <name>ise_state/x393-synth.tgz</name> Loading @@ -62,77 +62,77 @@ <link> <link> <name>vivado_logs/VivadoBitstream.log</name> <name>vivado_logs/VivadoBitstream.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOpt.log</name> <name>vivado_logs/VivadoOpt.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPhys.log</name> <name>vivado_logs/VivadoOptPhys.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPower.log</name> <name>vivado_logs/VivadoOptPower.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoPlace.log</name> <name>vivado_logs/VivadoPlace.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoRoute.log</name> <name>vivado_logs/VivadoRoute.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoSynthesis.log</name> <name>vivado_logs/VivadoSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20150505101739146.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20150506104713443.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-20150505101739146.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-20150506104713443.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-20150505101739146.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-20150506104713443.log</location> </link> </link> <link> <link> <name>vivado_state/x393-opt-phys.dcp</name> <name>vivado_state/x393-opt-phys.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-opt-phys-20150505101930202.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-opt-phys-20150506105443622.dcp</location> </link> </link> <link> <link> <name>vivado_state/x393-place.dcp</name> <name>vivado_state/x393-place.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-place-20150505101930202.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-place-20150506105443622.dcp</location> </link> </link> <link> <link> <name>vivado_state/x393-route.dcp</name> <name>vivado_state/x393-route.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-route-20150505101930202.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-route-20150506105443622.dcp</location> </link> </link> <link> <link> <name>vivado_state/x393-synth.dcp</name> <name>vivado_state/x393-synth.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-synth-20150505101739146.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-synth-20150506104713443.dcp</location> </link> </link> </linkedResources> </linkedResources> </projectDescription> </projectDescription> axi/membridge.v +27 −10 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ module membridge#( parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_MODE= 'h7, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter FRAME_HEIGHT_BITS= 16, // Maximal frame height bits parameter FRAME_HEIGHT_BITS= 16, // Maximal frame height bits parameter FRAME_WIDTH_BITS= 13 parameter FRAME_WIDTH_BITS= 13 Loading Loading @@ -118,10 +119,12 @@ module membridge#( output afi_rdissuecap1en output afi_rdissuecap1en ); ); localparam BUFWR_WE_WIDTH = 4; //2; // 4; localparam SAFE_RD_BITS = 3; //2; // 3; // Some constant signals: // Some constant signals: assign afi_awlock = 2'h0; assign afi_awlock = 2'h0; assign afi_awcache = 4'h3; // assign afi_awcache = 4'h3; assign afi_awprot = 3'h0; assign afi_awprot = 3'h0; assign afi_awsize = 3'h3; assign afi_awsize = 3'h3; assign afi_awburst = 2'h1; assign afi_awburst = 2'h1; Loading @@ -130,7 +133,7 @@ module membridge#( assign afi_wrissuecap1en = 1'b0; assign afi_wrissuecap1en = 1'b0; assign afi_arlock = 2'h0; assign afi_arlock = 2'h0; assign afi_arcache = 4'h3; // assign afi_arcache = 4'h3; assign afi_arprot = 3'h0; assign afi_arprot = 3'h0; assign afi_arsize = 3'h3; assign afi_arsize = 3'h3; assign afi_arburst = 2'h1; assign afi_arburst = 2'h1; Loading @@ -150,9 +153,14 @@ module membridge#( wire set_size64_w; wire set_size64_w; wire set_start64_w; wire set_start64_w; wire set_len64_w; wire set_len64_w; wire set_mode_w; wire set_width64_w; wire set_width64_w; reg [4:0] mode_reg_mclk; reg [4:0] mode_reg; wire cache_debug; assign cache_debug=mode_reg[4]; assign afi_awcache = mode_reg[3:0]; // 4'h3; assign afi_arcache = mode_reg[3:0]; // 4'h3; assign set_ctrl_w = cmd_we && (cmd_a== MEMBRIDGE_CTRL); assign set_ctrl_w = cmd_we && (cmd_a== MEMBRIDGE_CTRL); assign set_lo_addr64_w = cmd_we && (cmd_a== MEMBRIDGE_LO_ADDR64); assign set_lo_addr64_w = cmd_we && (cmd_a== MEMBRIDGE_LO_ADDR64); assign set_size64_w = cmd_we && (cmd_a== MEMBRIDGE_SIZE64); assign set_size64_w = cmd_we && (cmd_a== MEMBRIDGE_SIZE64); Loading @@ -160,6 +168,7 @@ module membridge#( assign set_len64_w = cmd_we && (cmd_a== MEMBRIDGE_LEN64); assign set_len64_w = cmd_we && (cmd_a== MEMBRIDGE_LEN64); assign set_width64_w = cmd_we && (cmd_a== MEMBRIDGE_WIDTH64); assign set_width64_w = cmd_we && (cmd_a== MEMBRIDGE_WIDTH64); assign set_status_w = cmd_we && (cmd_a== MEMBRIDGE_STATUS_CNTRL); assign set_status_w = cmd_we && (cmd_a== MEMBRIDGE_STATUS_CNTRL); assign set_mode_w = cmd_we && (cmd_a== MEMBRIDGE_MODE); reg [28:0] lo_addr64_mclk; reg [28:0] lo_addr64_mclk; reg [28:0] size64_mclk; reg [28:0] size64_mclk; reg [28:0] start64_mclk; reg [28:0] start64_mclk; Loading Loading @@ -205,6 +214,10 @@ module membridge#( if (rst) start_mclk <= 0; if (rst) start_mclk <= 0; else start_mclk <= set_ctrl_w & cmd_data[1]; else start_mclk <= set_ctrl_w & cmd_data[1]; if (rst) mode_reg_mclk <= 5'h03; else if (set_mode_w) mode_reg_mclk <= cmd_data[4:0]; `ifdef MEMBRIDGE_DEBUG_READ `ifdef MEMBRIDGE_DEBUG_READ if (rst) debug_aw_mclk <= 0; if (rst) debug_aw_mclk <= 0; else debug_aw_mclk <= set_ctrl_w & cmd_data[2]; else debug_aw_mclk <= set_ctrl_w & cmd_data[2]; Loading @@ -214,6 +227,8 @@ module membridge#( if (rst) debug_disable_set_mclk <= 0; if (rst) debug_disable_set_mclk <= 0; else debug_disable_set_mclk <= set_ctrl_w & cmd_data[4]; else debug_disable_set_mclk <= set_ctrl_w & cmd_data[4]; `endif `endif end end Loading Loading @@ -264,9 +279,8 @@ module membridge#( size64 <= size64_mclk; size64 <= size64_mclk; start64 <= start64_mclk; start64 <= start64_mclk; len64 <= len64_mclk; len64 <= len64_mclk; // width64 <= width64_mclk; mode_reg <= mode_reg_mclk; last_in_line64 <= width64_minus1_mclk; last_in_line64 <= width64_minus1_mclk; // last_in_line64 <= width64_mclk[FRAME_WIDTH_BITS:0]-1; wr_mode <= cmd_wrmem; wr_mode <= cmd_wrmem; rdwr_reset_addr <= rdwr_reset_addr_mclk; rdwr_reset_addr <= rdwr_reset_addr_mclk; last_addr1k <= size64[28:4] - 1; last_addr1k <= size64[28:4] - 1; Loading Loading @@ -294,6 +308,8 @@ module membridge#( if (rst) wr_id <= 0; if (rst) wr_id <= 0; else if (wr_start) wr_id <= wr_id +1; else if (wr_start) wr_id <= wr_id +1; end end // mclk -> hclk // mclk -> hclk pulse_cross_clock start_i (.rst(rst), .src_clk(mclk), .dst_clk(hclk), .in_pulse(start_mclk), .out_pulse(start_hclk),.busy()); pulse_cross_clock start_i (.rst(rst), .src_clk(mclk), .dst_clk(hclk), .in_pulse(start_mclk), .out_pulse(start_hclk),.busy()); Loading Loading @@ -498,7 +514,7 @@ module membridge#( wire bufwr_we_w; // TODO: assign wire bufwr_we_w; // TODO: assign reg [2:0] bufrd_rd; reg [2:0] bufrd_rd; reg [1:0] bufwr_we; reg [BUFWR_WE_WIDTH-1:0] bufwr_we; reg buf_rdwr; // equiv to bufrd_rd[0] || bufwr_we) reg buf_rdwr; // equiv to bufrd_rd[0] || bufwr_we) wire is_last_in_line; wire is_last_in_line; wire is_last_in_page; wire is_last_in_page; Loading Loading @@ -545,7 +561,7 @@ module membridge#( debug_bufrd_rd<= {debug_bufrd_rd[3:0], bufrd_rd_w }; debug_bufrd_rd<= {debug_bufrd_rd[3:0], bufrd_rd_w }; `endif `endif buf_rdwr <= bufrd_rd_w || bufwr_we_w; buf_rdwr <= bufrd_rd_w || bufwr_we_w; bufwr_we <= {bufwr_we[0],bufwr_we_w}; bufwr_we <= {bufwr_we[BUFWR_WE_WIDTH-2:0],bufwr_we_w}; end end assign afi_wvalid=bufrd_rd[2]; assign afi_wvalid=bufrd_rd[2]; Loading Loading @@ -592,7 +608,7 @@ module membridge#( if (rst) afi_rd_safe_not_empty <= 0; if (rst) afi_rd_safe_not_empty <= 0; // allow 1 cycle latency, no continuous reads when FIFO is low (like in the very end of the transfer) // allow 1 cycle latency, no continuous reads when FIFO is low (like in the very end of the transfer) // Adjust '2' in afi_rcount[6:2] ? // Adjust '2' in afi_rcount[6:2] ? else afi_rd_safe_not_empty <= rdwr_en && ( afi_rcount[7] || (|afi_rcount[6:2]) || (!(|bufwr_we) && afi_rvalid)); else afi_rd_safe_not_empty <= rdwr_en && ( afi_rcount[7] || (|afi_rcount[6:SAFE_RD_BITS]) || (!(|bufwr_we) && !bufwr_we_w && afi_rvalid)); if (rst) afi_ra_safe_not_full <= 0; if (rst) afi_ra_safe_not_full <= 0; else afi_ra_safe_not_full <= rdwr_en && ( !afi_racount[2] && !(&afi_racount[1:0])); else afi_ra_safe_not_full <= rdwr_en && ( !afi_racount[2] && !(&afi_racount[1:0])); Loading @@ -616,7 +632,8 @@ module membridge#( always @ (posedge hclk) begin always @ (posedge hclk) begin write_page_r <= write_page; write_page_r <= write_page; buf_in_line64_r <= buf_in_line64[6:0]; buf_in_line64_r <= buf_in_line64[6:0]; rdata_r <= afi_rdata; // rdata_r <= afi_rdata; rdata_r <= cache_debug?{wr_id[3:0],2'b0,write_page_r[1:0],afi_rcount[7:0],afi_rdata[47:0]}:afi_rdata[63:0]; // debugging end end cmd_deser #( cmd_deser #( Loading includes/x393_parameters.vh +22 −18 Original line number Original line Diff line number Diff line Loading @@ -32,7 +32,10 @@ parameter MCONTR_BUF4_RD_ADDR = 'h1400, // AXI read address from buffer 4 (PL sequence, tiles, memory read) 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 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 = 'h2000, // AXI write address of control write registers parameter CONTROL_ADDR_MASK = 'h3c00, // AXI write address of control registers parameter CONTROL_ADDR_MASK = 'h3c00, // AXI write mask of control registers parameter CONTROL_RBACK_ADDR = 'h2000, // AXI read address of control registers readback parameter CONTROL_RBACK_ADDR_MASK = 'h3c00, // AXI mask of control registers readback addresses parameter CONTROL_RBACK_DEPTH= 10, // parameter STATUS_ADDR = 'h2400, // AXI write address of status read registers parameter STATUS_ADDR = 'h2400, // AXI write address of status read registers parameter STATUS_ADDR_MASK = 'h3c00, // AXI write address of status registers parameter STATUS_ADDR_MASK = 'h3c00, // AXI write address of status registers parameter AXI_WR_ADDR_BITS = 14, parameter AXI_WR_ADDR_BITS = 14, Loading Loading @@ -260,6 +263,7 @@ parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_MODE= 'h7, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter RSEL= 1'b1, // late/early READ commands (to adjust timing by 1 SDCLK period) parameter RSEL= 1'b1, // late/early READ commands (to adjust timing by 1 SDCLK period) Loading includes/x393_tasks01.vh +7 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,13 @@ end end endtask endtask task read_contol_register; input [29:0] reg_addr; begin read_and_wait_w(CONTROL_RBACK_ADDR+reg_addr); end endtask task wait_read_queue_empty; task wait_read_queue_empty; begin begin wait (~rvalid && rready && (rid==LAST_ARID)); // nothing left in read queue? wait (~rvalid && rready && (rid==LAST_ARID)); // nothing left in read queue? Loading includes/x393_tasks_mcntrl_timing.vh +24 −0 Original line number Original line Diff line number Diff line Loading @@ -94,6 +94,30 @@ end end endtask endtask task axi_get_delays; // set all individual delays integer i; begin $display("axi_get_delays @ %t",$time); for (i=0;i<10;i=i+1) begin read_contol_register(LD_DLY_LANE0_ODELAY + i); end for (i=0;i<9;i=i+1) begin read_contol_register(LD_DLY_LANE0_IDELAY + i); end for (i=0;i<10;i=i+1) begin read_contol_register(LD_DLY_LANE1_ODELAY + i); end for (i=0;i<9;i=i+1) begin read_contol_register(LD_DLY_LANE1_IDELAY + i); end for (i=0;i<32;i=i+1) begin read_contol_register(LD_DLY_CMDA + i); end read_contol_register(LD_DLY_PHASE); end endtask task axi_set_dq_idelay; // sets same delay to all dq idelay task axi_set_dq_idelay; // sets same delay to all dq idelay input [7:0] delay; input [7:0] delay; Loading Loading
.project +16 −16 Original line number Original line Diff line number Diff line Loading @@ -52,7 +52,7 @@ <link> <link> <name>ise_logs/ISExst.log</name> <name>ise_logs/ISExst.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/ise_logs/ISExst-20150228145735970.log</location> <location>/home/andrey/git/x393/ise_logs/ISExst-20150505133407662.log</location> </link> </link> <link> <link> <name>ise_state/x393-synth.tgz</name> <name>ise_state/x393-synth.tgz</name> Loading @@ -62,77 +62,77 @@ <link> <link> <name>vivado_logs/VivadoBitstream.log</name> <name>vivado_logs/VivadoBitstream.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOpt.log</name> <name>vivado_logs/VivadoOpt.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPhys.log</name> <name>vivado_logs/VivadoOptPhys.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPower.log</name> <name>vivado_logs/VivadoOptPower.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoPlace.log</name> <name>vivado_logs/VivadoPlace.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoRoute.log</name> <name>vivado_logs/VivadoRoute.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoSynthesis.log</name> <name>vivado_logs/VivadoSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20150505101739146.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20150506104713443.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-20150505101739146.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-20150506104713443.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20150505101930202.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20150506105443622.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-20150505101739146.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-20150506104713443.log</location> </link> </link> <link> <link> <name>vivado_state/x393-opt-phys.dcp</name> <name>vivado_state/x393-opt-phys.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-opt-phys-20150505101930202.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-opt-phys-20150506105443622.dcp</location> </link> </link> <link> <link> <name>vivado_state/x393-place.dcp</name> <name>vivado_state/x393-place.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-place-20150505101930202.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-place-20150506105443622.dcp</location> </link> </link> <link> <link> <name>vivado_state/x393-route.dcp</name> <name>vivado_state/x393-route.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-route-20150505101930202.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-route-20150506105443622.dcp</location> </link> </link> <link> <link> <name>vivado_state/x393-synth.dcp</name> <name>vivado_state/x393-synth.dcp</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_state/x393-synth-20150505101739146.dcp</location> <location>/home/andrey/git/x393/vivado_state/x393-synth-20150506104713443.dcp</location> </link> </link> </linkedResources> </linkedResources> </projectDescription> </projectDescription>
axi/membridge.v +27 −10 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ module membridge#( parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_MODE= 'h7, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter FRAME_HEIGHT_BITS= 16, // Maximal frame height bits parameter FRAME_HEIGHT_BITS= 16, // Maximal frame height bits parameter FRAME_WIDTH_BITS= 13 parameter FRAME_WIDTH_BITS= 13 Loading Loading @@ -118,10 +119,12 @@ module membridge#( output afi_rdissuecap1en output afi_rdissuecap1en ); ); localparam BUFWR_WE_WIDTH = 4; //2; // 4; localparam SAFE_RD_BITS = 3; //2; // 3; // Some constant signals: // Some constant signals: assign afi_awlock = 2'h0; assign afi_awlock = 2'h0; assign afi_awcache = 4'h3; // assign afi_awcache = 4'h3; assign afi_awprot = 3'h0; assign afi_awprot = 3'h0; assign afi_awsize = 3'h3; assign afi_awsize = 3'h3; assign afi_awburst = 2'h1; assign afi_awburst = 2'h1; Loading @@ -130,7 +133,7 @@ module membridge#( assign afi_wrissuecap1en = 1'b0; assign afi_wrissuecap1en = 1'b0; assign afi_arlock = 2'h0; assign afi_arlock = 2'h0; assign afi_arcache = 4'h3; // assign afi_arcache = 4'h3; assign afi_arprot = 3'h0; assign afi_arprot = 3'h0; assign afi_arsize = 3'h3; assign afi_arsize = 3'h3; assign afi_arburst = 2'h1; assign afi_arburst = 2'h1; Loading @@ -150,9 +153,14 @@ module membridge#( wire set_size64_w; wire set_size64_w; wire set_start64_w; wire set_start64_w; wire set_len64_w; wire set_len64_w; wire set_mode_w; wire set_width64_w; wire set_width64_w; reg [4:0] mode_reg_mclk; reg [4:0] mode_reg; wire cache_debug; assign cache_debug=mode_reg[4]; assign afi_awcache = mode_reg[3:0]; // 4'h3; assign afi_arcache = mode_reg[3:0]; // 4'h3; assign set_ctrl_w = cmd_we && (cmd_a== MEMBRIDGE_CTRL); assign set_ctrl_w = cmd_we && (cmd_a== MEMBRIDGE_CTRL); assign set_lo_addr64_w = cmd_we && (cmd_a== MEMBRIDGE_LO_ADDR64); assign set_lo_addr64_w = cmd_we && (cmd_a== MEMBRIDGE_LO_ADDR64); assign set_size64_w = cmd_we && (cmd_a== MEMBRIDGE_SIZE64); assign set_size64_w = cmd_we && (cmd_a== MEMBRIDGE_SIZE64); Loading @@ -160,6 +168,7 @@ module membridge#( assign set_len64_w = cmd_we && (cmd_a== MEMBRIDGE_LEN64); assign set_len64_w = cmd_we && (cmd_a== MEMBRIDGE_LEN64); assign set_width64_w = cmd_we && (cmd_a== MEMBRIDGE_WIDTH64); assign set_width64_w = cmd_we && (cmd_a== MEMBRIDGE_WIDTH64); assign set_status_w = cmd_we && (cmd_a== MEMBRIDGE_STATUS_CNTRL); assign set_status_w = cmd_we && (cmd_a== MEMBRIDGE_STATUS_CNTRL); assign set_mode_w = cmd_we && (cmd_a== MEMBRIDGE_MODE); reg [28:0] lo_addr64_mclk; reg [28:0] lo_addr64_mclk; reg [28:0] size64_mclk; reg [28:0] size64_mclk; reg [28:0] start64_mclk; reg [28:0] start64_mclk; Loading Loading @@ -205,6 +214,10 @@ module membridge#( if (rst) start_mclk <= 0; if (rst) start_mclk <= 0; else start_mclk <= set_ctrl_w & cmd_data[1]; else start_mclk <= set_ctrl_w & cmd_data[1]; if (rst) mode_reg_mclk <= 5'h03; else if (set_mode_w) mode_reg_mclk <= cmd_data[4:0]; `ifdef MEMBRIDGE_DEBUG_READ `ifdef MEMBRIDGE_DEBUG_READ if (rst) debug_aw_mclk <= 0; if (rst) debug_aw_mclk <= 0; else debug_aw_mclk <= set_ctrl_w & cmd_data[2]; else debug_aw_mclk <= set_ctrl_w & cmd_data[2]; Loading @@ -214,6 +227,8 @@ module membridge#( if (rst) debug_disable_set_mclk <= 0; if (rst) debug_disable_set_mclk <= 0; else debug_disable_set_mclk <= set_ctrl_w & cmd_data[4]; else debug_disable_set_mclk <= set_ctrl_w & cmd_data[4]; `endif `endif end end Loading Loading @@ -264,9 +279,8 @@ module membridge#( size64 <= size64_mclk; size64 <= size64_mclk; start64 <= start64_mclk; start64 <= start64_mclk; len64 <= len64_mclk; len64 <= len64_mclk; // width64 <= width64_mclk; mode_reg <= mode_reg_mclk; last_in_line64 <= width64_minus1_mclk; last_in_line64 <= width64_minus1_mclk; // last_in_line64 <= width64_mclk[FRAME_WIDTH_BITS:0]-1; wr_mode <= cmd_wrmem; wr_mode <= cmd_wrmem; rdwr_reset_addr <= rdwr_reset_addr_mclk; rdwr_reset_addr <= rdwr_reset_addr_mclk; last_addr1k <= size64[28:4] - 1; last_addr1k <= size64[28:4] - 1; Loading Loading @@ -294,6 +308,8 @@ module membridge#( if (rst) wr_id <= 0; if (rst) wr_id <= 0; else if (wr_start) wr_id <= wr_id +1; else if (wr_start) wr_id <= wr_id +1; end end // mclk -> hclk // mclk -> hclk pulse_cross_clock start_i (.rst(rst), .src_clk(mclk), .dst_clk(hclk), .in_pulse(start_mclk), .out_pulse(start_hclk),.busy()); pulse_cross_clock start_i (.rst(rst), .src_clk(mclk), .dst_clk(hclk), .in_pulse(start_mclk), .out_pulse(start_hclk),.busy()); Loading Loading @@ -498,7 +514,7 @@ module membridge#( wire bufwr_we_w; // TODO: assign wire bufwr_we_w; // TODO: assign reg [2:0] bufrd_rd; reg [2:0] bufrd_rd; reg [1:0] bufwr_we; reg [BUFWR_WE_WIDTH-1:0] bufwr_we; reg buf_rdwr; // equiv to bufrd_rd[0] || bufwr_we) reg buf_rdwr; // equiv to bufrd_rd[0] || bufwr_we) wire is_last_in_line; wire is_last_in_line; wire is_last_in_page; wire is_last_in_page; Loading Loading @@ -545,7 +561,7 @@ module membridge#( debug_bufrd_rd<= {debug_bufrd_rd[3:0], bufrd_rd_w }; debug_bufrd_rd<= {debug_bufrd_rd[3:0], bufrd_rd_w }; `endif `endif buf_rdwr <= bufrd_rd_w || bufwr_we_w; buf_rdwr <= bufrd_rd_w || bufwr_we_w; bufwr_we <= {bufwr_we[0],bufwr_we_w}; bufwr_we <= {bufwr_we[BUFWR_WE_WIDTH-2:0],bufwr_we_w}; end end assign afi_wvalid=bufrd_rd[2]; assign afi_wvalid=bufrd_rd[2]; Loading Loading @@ -592,7 +608,7 @@ module membridge#( if (rst) afi_rd_safe_not_empty <= 0; if (rst) afi_rd_safe_not_empty <= 0; // allow 1 cycle latency, no continuous reads when FIFO is low (like in the very end of the transfer) // allow 1 cycle latency, no continuous reads when FIFO is low (like in the very end of the transfer) // Adjust '2' in afi_rcount[6:2] ? // Adjust '2' in afi_rcount[6:2] ? else afi_rd_safe_not_empty <= rdwr_en && ( afi_rcount[7] || (|afi_rcount[6:2]) || (!(|bufwr_we) && afi_rvalid)); else afi_rd_safe_not_empty <= rdwr_en && ( afi_rcount[7] || (|afi_rcount[6:SAFE_RD_BITS]) || (!(|bufwr_we) && !bufwr_we_w && afi_rvalid)); if (rst) afi_ra_safe_not_full <= 0; if (rst) afi_ra_safe_not_full <= 0; else afi_ra_safe_not_full <= rdwr_en && ( !afi_racount[2] && !(&afi_racount[1:0])); else afi_ra_safe_not_full <= rdwr_en && ( !afi_racount[2] && !(&afi_racount[1:0])); Loading @@ -616,7 +632,8 @@ module membridge#( always @ (posedge hclk) begin always @ (posedge hclk) begin write_page_r <= write_page; write_page_r <= write_page; buf_in_line64_r <= buf_in_line64[6:0]; buf_in_line64_r <= buf_in_line64[6:0]; rdata_r <= afi_rdata; // rdata_r <= afi_rdata; rdata_r <= cache_debug?{wr_id[3:0],2'b0,write_page_r[1:0],afi_rcount[7:0],afi_rdata[47:0]}:afi_rdata[63:0]; // debugging end end cmd_deser #( cmd_deser #( Loading
includes/x393_parameters.vh +22 −18 Original line number Original line Diff line number Diff line Loading @@ -32,7 +32,10 @@ parameter MCONTR_BUF4_RD_ADDR = 'h1400, // AXI read address from buffer 4 (PL sequence, tiles, memory read) 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 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 = 'h2000, // AXI write address of control write registers parameter CONTROL_ADDR_MASK = 'h3c00, // AXI write address of control registers parameter CONTROL_ADDR_MASK = 'h3c00, // AXI write mask of control registers parameter CONTROL_RBACK_ADDR = 'h2000, // AXI read address of control registers readback parameter CONTROL_RBACK_ADDR_MASK = 'h3c00, // AXI mask of control registers readback addresses parameter CONTROL_RBACK_DEPTH= 10, // parameter STATUS_ADDR = 'h2400, // AXI write address of status read registers parameter STATUS_ADDR = 'h2400, // AXI write address of status read registers parameter STATUS_ADDR_MASK = 'h3c00, // AXI write address of status registers parameter STATUS_ADDR_MASK = 'h3c00, // AXI write address of status registers parameter AXI_WR_ADDR_BITS = 14, parameter AXI_WR_ADDR_BITS = 14, Loading Loading @@ -260,6 +263,7 @@ parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_START64= 'h4, // start address relative to lo_addr parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_LEN64= 'h5, // full length of transfer in 64-bit words parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_WIDTH64= 'h6, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_MODE= 'h7, // frame width in 64-bit words (partial last page in each line) parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter MEMBRIDGE_STATUS_REG= 'h3b, parameter RSEL= 1'b1, // late/early READ commands (to adjust timing by 1 SDCLK period) parameter RSEL= 1'b1, // late/early READ commands (to adjust timing by 1 SDCLK period) Loading
includes/x393_tasks01.vh +7 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,13 @@ end end endtask endtask task read_contol_register; input [29:0] reg_addr; begin read_and_wait_w(CONTROL_RBACK_ADDR+reg_addr); end endtask task wait_read_queue_empty; task wait_read_queue_empty; begin begin wait (~rvalid && rready && (rid==LAST_ARID)); // nothing left in read queue? wait (~rvalid && rready && (rid==LAST_ARID)); // nothing left in read queue? Loading
includes/x393_tasks_mcntrl_timing.vh +24 −0 Original line number Original line Diff line number Diff line Loading @@ -94,6 +94,30 @@ end end endtask endtask task axi_get_delays; // set all individual delays integer i; begin $display("axi_get_delays @ %t",$time); for (i=0;i<10;i=i+1) begin read_contol_register(LD_DLY_LANE0_ODELAY + i); end for (i=0;i<9;i=i+1) begin read_contol_register(LD_DLY_LANE0_IDELAY + i); end for (i=0;i<10;i=i+1) begin read_contol_register(LD_DLY_LANE1_ODELAY + i); end for (i=0;i<9;i=i+1) begin read_contol_register(LD_DLY_LANE1_IDELAY + i); end for (i=0;i<32;i=i+1) begin read_contol_register(LD_DLY_CMDA + i); end read_contol_register(LD_DLY_PHASE); end endtask task axi_set_dq_idelay; // sets same delay to all dq idelay task axi_set_dq_idelay; // sets same delay to all dq idelay input [7:0] delay; input [7:0] delay; Loading