| // Generator : SpinalHDL v1.4.3 git head : 4dd3b62906925bc269aee976e75f8918d4132efb |
| // Component : DmaMem |
| // Git hash : f48be781e668caa4d53186beb7dec459d98a9f2d |
| |
| |
| `define fsmR_enumDefinition_binary_sequential_type [2:0] |
| `define fsmR_enumDefinition_binary_sequential_fsmR_BOOT 3'b000 |
| `define fsmR_enumDefinition_binary_sequential_fsmR_IDLE 3'b001 |
| `define fsmR_enumDefinition_binary_sequential_fsmR_AR 3'b010 |
| `define fsmR_enumDefinition_binary_sequential_fsmR_FR 3'b011 |
| `define fsmR_enumDefinition_binary_sequential_fsmR_BR 3'b100 |
| `define fsmR_enumDefinition_binary_sequential_fsmR_LAST 3'b101 |
| |
| `define fsmW_enumDefinition_binary_sequential_type [2:0] |
| `define fsmW_enumDefinition_binary_sequential_fsmW_BOOT 3'b000 |
| `define fsmW_enumDefinition_binary_sequential_fsmW_IDLE 3'b001 |
| `define fsmW_enumDefinition_binary_sequential_fsmW_W 3'b010 |
| `define fsmW_enumDefinition_binary_sequential_fsmW_LAST 3'b011 |
| `define fsmW_enumDefinition_binary_sequential_fsmW_B 3'b100 |
| |
| `define readFsm_enumDefinition_binary_sequential_type [1:0] |
| `define readFsm_enumDefinition_binary_sequential_readFsm_BOOT 2'b00 |
| `define readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE 2'b01 |
| `define readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD 2'b10 |
| `define readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ 2'b11 |
| |
| `define initFsm_enumDefinition_binary_sequential_type [2:0] |
| `define initFsm_enumDefinition_binary_sequential_initFsm_BOOT 3'b000 |
| `define initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT 3'b001 |
| `define initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE 3'b010 |
| `define initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1 3'b011 |
| `define initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2 3'b100 |
| `define initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG 3'b101 |
| |
| `define writeFsm_enumDefinition_binary_sequential_type [1:0] |
| `define writeFsm_enumDefinition_binary_sequential_writeFsm_BOOT 2'b00 |
| `define writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE 2'b01 |
| `define writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE 2'b10 |
| `define writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE 2'b11 |
| |
| `define refreshFsm_enumDefinition_binary_sequential_type [1:0] |
| `define refreshFsm_enumDefinition_binary_sequential_refreshFsm_BOOT 2'b00 |
| `define refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE 2'b01 |
| `define refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH 2'b10 |
| |
| `define fsm_enumDefinition_binary_sequential_type [2:0] |
| `define fsm_enumDefinition_binary_sequential_fsm_BOOT 3'b000 |
| `define fsm_enumDefinition_binary_sequential_fsm_INIT 3'b001 |
| `define fsm_enumDefinition_binary_sequential_fsm_IDLE 3'b010 |
| `define fsm_enumDefinition_binary_sequential_fsm_REFRESH 3'b011 |
| `define fsm_enumDefinition_binary_sequential_fsm_WRITE 3'b100 |
| `define fsm_enumDefinition_binary_sequential_fsm_READ 3'b101 |
| `define fsm_enumDefinition_binary_sequential_fsm_PRECHARGE 3'b110 |
| |
| |
| module DmaMem ( |
| input io_ctrl_start, |
| output io_ctrl_busy, |
| output io_ctrl_done, |
| input io_ctrl_halt, |
| output [12:0] io_sdram_ADDR, |
| output [1:0] io_sdram_BA, |
| input [15:0] io_sdram_DQ_read, |
| output [15:0] io_sdram_DQ_write, |
| output [15:0] io_sdram_DQ_writeEnable, |
| output [1:0] io_sdram_DQM, |
| output io_sdram_CASn, |
| output io_sdram_CKE, |
| output io_sdram_CSn, |
| output io_sdram_RASn, |
| output io_sdram_WEn, |
| input io_wb_CYC, |
| input io_wb_STB, |
| output io_wb_ACK, |
| input io_wb_WE, |
| input [31:0] io_wb_ADR, |
| output [31:0] io_wb_DAT_MISO, |
| input [31:0] io_wb_DAT_MOSI, |
| input [3:0] io_wb_SEL, |
| input clk, |
| input reset |
| ); |
| wire [31:0] _zz_1; |
| wire [31:0] _zz_2; |
| wire [7:0] _zz_3; |
| wire [7:0] _zz_4; |
| wire [7:0] _zz_5; |
| wire [7:0] _zz_6; |
| wire [31:0] _zz_7; |
| wire _zz_8; |
| wire _zz_9; |
| wire dmaArea_dma_io_axi_ar_valid; |
| wire [31:0] dmaArea_dma_io_axi_ar_payload_addr; |
| wire [3:0] dmaArea_dma_io_axi_ar_payload_id; |
| wire [7:0] dmaArea_dma_io_axi_ar_payload_len; |
| wire [2:0] dmaArea_dma_io_axi_ar_payload_size; |
| wire [1:0] dmaArea_dma_io_axi_ar_payload_burst; |
| wire dmaArea_dma_io_axi_aw_valid; |
| wire [31:0] dmaArea_dma_io_axi_aw_payload_addr; |
| wire [3:0] dmaArea_dma_io_axi_aw_payload_id; |
| wire [7:0] dmaArea_dma_io_axi_aw_payload_len; |
| wire [2:0] dmaArea_dma_io_axi_aw_payload_size; |
| wire [1:0] dmaArea_dma_io_axi_aw_payload_burst; |
| wire dmaArea_dma_io_axi_w_valid; |
| wire [31:0] dmaArea_dma_io_axi_w_payload_data; |
| wire [3:0] dmaArea_dma_io_axi_w_payload_strb; |
| wire dmaArea_dma_io_axi_w_payload_last; |
| wire dmaArea_dma_io_axi_r_ready; |
| wire dmaArea_dma_io_axi_b_ready; |
| wire dmaArea_dma_io_ctrl_busy; |
| wire dmaArea_dma_io_ctrl_done; |
| wire sdramArea_sdramController_io_axi_ar_ready; |
| wire sdramArea_sdramController_io_axi_aw_ready; |
| wire sdramArea_sdramController_io_axi_w_ready; |
| wire sdramArea_sdramController_io_axi_r_valid; |
| wire [31:0] sdramArea_sdramController_io_axi_r_payload_data; |
| wire [3:0] sdramArea_sdramController_io_axi_r_payload_id; |
| wire [1:0] sdramArea_sdramController_io_axi_r_payload_resp; |
| wire sdramArea_sdramController_io_axi_r_payload_last; |
| wire sdramArea_sdramController_io_axi_b_valid; |
| wire [3:0] sdramArea_sdramController_io_axi_b_payload_id; |
| wire [1:0] sdramArea_sdramController_io_axi_b_payload_resp; |
| wire [12:0] sdramArea_sdramController_io_sdram_ADDR; |
| wire [1:0] sdramArea_sdramController_io_sdram_BA; |
| wire sdramArea_sdramController_io_sdram_CASn; |
| wire sdramArea_sdramController_io_sdram_CKE; |
| wire sdramArea_sdramController_io_sdram_CSn; |
| wire [1:0] sdramArea_sdramController_io_sdram_DQM; |
| wire sdramArea_sdramController_io_sdram_RASn; |
| wire sdramArea_sdramController_io_sdram_WEn; |
| wire [15:0] sdramArea_sdramController_io_sdram_DQ_write; |
| wire [15:0] sdramArea_sdramController_io_sdram_DQ_writeEnable; |
| wire sdramArea_sdramController_io_initDone; |
| reg busif_readError; |
| reg [31:0] busif_readData; |
| wire busif_selMatch; |
| wire busif_askWrite; |
| wire busif_askRead; |
| wire busif_doWrite; |
| wire busif_doRead; |
| reg [31:0] srcAddr; |
| reg [31:0] dstAddr; |
| |
| Dma dmaArea_dma ( |
| .io_param_sar (_zz_1[31:0] ), //i |
| .io_param_dar (_zz_2[31:0] ), //i |
| .io_param_xsize (_zz_3[7:0] ), //i |
| .io_param_ysize (_zz_4[7:0] ), //i |
| .io_param_srcystep (_zz_5[7:0] ), //i |
| .io_param_dstystep (_zz_6[7:0] ), //i |
| .io_param_llr (_zz_7[31:0] ), //i |
| .io_param_bf (_zz_8 ), //i |
| .io_param_cf (_zz_9 ), //i |
| .io_axi_aw_valid (dmaArea_dma_io_axi_aw_valid ), //o |
| .io_axi_aw_ready (sdramArea_sdramController_io_axi_aw_ready ), //i |
| .io_axi_aw_payload_addr (dmaArea_dma_io_axi_aw_payload_addr[31:0] ), //o |
| .io_axi_aw_payload_id (dmaArea_dma_io_axi_aw_payload_id[3:0] ), //o |
| .io_axi_aw_payload_len (dmaArea_dma_io_axi_aw_payload_len[7:0] ), //o |
| .io_axi_aw_payload_size (dmaArea_dma_io_axi_aw_payload_size[2:0] ), //o |
| .io_axi_aw_payload_burst (dmaArea_dma_io_axi_aw_payload_burst[1:0] ), //o |
| .io_axi_w_valid (dmaArea_dma_io_axi_w_valid ), //o |
| .io_axi_w_ready (sdramArea_sdramController_io_axi_w_ready ), //i |
| .io_axi_w_payload_data (dmaArea_dma_io_axi_w_payload_data[31:0] ), //o |
| .io_axi_w_payload_strb (dmaArea_dma_io_axi_w_payload_strb[3:0] ), //o |
| .io_axi_w_payload_last (dmaArea_dma_io_axi_w_payload_last ), //o |
| .io_axi_b_valid (sdramArea_sdramController_io_axi_b_valid ), //i |
| .io_axi_b_ready (dmaArea_dma_io_axi_b_ready ), //o |
| .io_axi_b_payload_id (sdramArea_sdramController_io_axi_b_payload_id[3:0] ), //i |
| .io_axi_b_payload_resp (sdramArea_sdramController_io_axi_b_payload_resp[1:0] ), //i |
| .io_axi_ar_valid (dmaArea_dma_io_axi_ar_valid ), //o |
| .io_axi_ar_ready (sdramArea_sdramController_io_axi_ar_ready ), //i |
| .io_axi_ar_payload_addr (dmaArea_dma_io_axi_ar_payload_addr[31:0] ), //o |
| .io_axi_ar_payload_id (dmaArea_dma_io_axi_ar_payload_id[3:0] ), //o |
| .io_axi_ar_payload_len (dmaArea_dma_io_axi_ar_payload_len[7:0] ), //o |
| .io_axi_ar_payload_size (dmaArea_dma_io_axi_ar_payload_size[2:0] ), //o |
| .io_axi_ar_payload_burst (dmaArea_dma_io_axi_ar_payload_burst[1:0] ), //o |
| .io_axi_r_valid (sdramArea_sdramController_io_axi_r_valid ), //i |
| .io_axi_r_ready (dmaArea_dma_io_axi_r_ready ), //o |
| .io_axi_r_payload_data (sdramArea_sdramController_io_axi_r_payload_data[31:0] ), //i |
| .io_axi_r_payload_id (sdramArea_sdramController_io_axi_r_payload_id[3:0] ), //i |
| .io_axi_r_payload_resp (sdramArea_sdramController_io_axi_r_payload_resp[1:0] ), //i |
| .io_axi_r_payload_last (sdramArea_sdramController_io_axi_r_payload_last ), //i |
| .io_ctrl_start (io_ctrl_start ), //i |
| .io_ctrl_busy (dmaArea_dma_io_ctrl_busy ), //o |
| .io_ctrl_done (dmaArea_dma_io_ctrl_done ), //o |
| .io_ctrl_halt (io_ctrl_halt ), //i |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| SdramController sdramArea_sdramController ( |
| .io_axi_aw_valid (dmaArea_dma_io_axi_aw_valid ), //i |
| .io_axi_aw_ready (sdramArea_sdramController_io_axi_aw_ready ), //o |
| .io_axi_aw_payload_addr (dmaArea_dma_io_axi_aw_payload_addr[31:0] ), //i |
| .io_axi_aw_payload_id (dmaArea_dma_io_axi_aw_payload_id[3:0] ), //i |
| .io_axi_aw_payload_len (dmaArea_dma_io_axi_aw_payload_len[7:0] ), //i |
| .io_axi_aw_payload_size (dmaArea_dma_io_axi_aw_payload_size[2:0] ), //i |
| .io_axi_aw_payload_burst (dmaArea_dma_io_axi_aw_payload_burst[1:0] ), //i |
| .io_axi_w_valid (dmaArea_dma_io_axi_w_valid ), //i |
| .io_axi_w_ready (sdramArea_sdramController_io_axi_w_ready ), //o |
| .io_axi_w_payload_data (dmaArea_dma_io_axi_w_payload_data[31:0] ), //i |
| .io_axi_w_payload_strb (dmaArea_dma_io_axi_w_payload_strb[3:0] ), //i |
| .io_axi_w_payload_last (dmaArea_dma_io_axi_w_payload_last ), //i |
| .io_axi_b_valid (sdramArea_sdramController_io_axi_b_valid ), //o |
| .io_axi_b_ready (dmaArea_dma_io_axi_b_ready ), //i |
| .io_axi_b_payload_id (sdramArea_sdramController_io_axi_b_payload_id[3:0] ), //o |
| .io_axi_b_payload_resp (sdramArea_sdramController_io_axi_b_payload_resp[1:0] ), //o |
| .io_axi_ar_valid (dmaArea_dma_io_axi_ar_valid ), //i |
| .io_axi_ar_ready (sdramArea_sdramController_io_axi_ar_ready ), //o |
| .io_axi_ar_payload_addr (dmaArea_dma_io_axi_ar_payload_addr[31:0] ), //i |
| .io_axi_ar_payload_id (dmaArea_dma_io_axi_ar_payload_id[3:0] ), //i |
| .io_axi_ar_payload_len (dmaArea_dma_io_axi_ar_payload_len[7:0] ), //i |
| .io_axi_ar_payload_size (dmaArea_dma_io_axi_ar_payload_size[2:0] ), //i |
| .io_axi_ar_payload_burst (dmaArea_dma_io_axi_ar_payload_burst[1:0] ), //i |
| .io_axi_r_valid (sdramArea_sdramController_io_axi_r_valid ), //o |
| .io_axi_r_ready (dmaArea_dma_io_axi_r_ready ), //i |
| .io_axi_r_payload_data (sdramArea_sdramController_io_axi_r_payload_data[31:0] ), //o |
| .io_axi_r_payload_id (sdramArea_sdramController_io_axi_r_payload_id[3:0] ), //o |
| .io_axi_r_payload_resp (sdramArea_sdramController_io_axi_r_payload_resp[1:0] ), //o |
| .io_axi_r_payload_last (sdramArea_sdramController_io_axi_r_payload_last ), //o |
| .io_sdram_ADDR (sdramArea_sdramController_io_sdram_ADDR[12:0] ), //o |
| .io_sdram_BA (sdramArea_sdramController_io_sdram_BA[1:0] ), //o |
| .io_sdram_DQ_read (io_sdram_DQ_read[15:0] ), //i |
| .io_sdram_DQ_write (sdramArea_sdramController_io_sdram_DQ_write[15:0] ), //o |
| .io_sdram_DQ_writeEnable (sdramArea_sdramController_io_sdram_DQ_writeEnable[15:0] ), //o |
| .io_sdram_DQM (sdramArea_sdramController_io_sdram_DQM[1:0] ), //o |
| .io_sdram_CASn (sdramArea_sdramController_io_sdram_CASn ), //o |
| .io_sdram_CKE (sdramArea_sdramController_io_sdram_CKE ), //o |
| .io_sdram_CSn (sdramArea_sdramController_io_sdram_CSn ), //o |
| .io_sdram_RASn (sdramArea_sdramController_io_sdram_RASn ), //o |
| .io_sdram_WEn (sdramArea_sdramController_io_sdram_WEn ), //o |
| .io_initDone (sdramArea_sdramController_io_initDone ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| assign io_wb_ACK = 1'b1; |
| assign io_wb_DAT_MISO = busif_readData; |
| assign busif_selMatch = io_wb_SEL[0]; |
| assign busif_askWrite = (((busif_selMatch && io_wb_CYC) && io_wb_STB) && io_wb_WE); |
| assign busif_askRead = (((busif_selMatch && io_wb_CYC) && io_wb_STB) && (! io_wb_WE)); |
| assign busif_doWrite = ((((busif_selMatch && io_wb_CYC) && io_wb_STB) && io_wb_ACK) && io_wb_WE); |
| assign busif_doRead = ((((busif_selMatch && io_wb_CYC) && io_wb_STB) && io_wb_ACK) && (! io_wb_WE)); |
| assign io_ctrl_busy = dmaArea_dma_io_ctrl_busy; |
| assign io_ctrl_done = dmaArea_dma_io_ctrl_done; |
| assign _zz_1 = srcAddr; |
| assign _zz_2 = dstAddr; |
| assign _zz_3 = 8'h08; |
| assign _zz_4 = 8'h01; |
| assign _zz_5 = 8'h0; |
| assign _zz_6 = 8'h0; |
| assign _zz_7 = 32'h0; |
| assign _zz_8 = 1'b1; |
| assign _zz_9 = 1'b1; |
| assign io_sdram_ADDR = sdramArea_sdramController_io_sdram_ADDR; |
| assign io_sdram_BA = sdramArea_sdramController_io_sdram_BA; |
| assign io_sdram_DQ_write = sdramArea_sdramController_io_sdram_DQ_write; |
| assign io_sdram_DQ_writeEnable = sdramArea_sdramController_io_sdram_DQ_writeEnable; |
| assign io_sdram_DQM = sdramArea_sdramController_io_sdram_DQM; |
| assign io_sdram_CASn = sdramArea_sdramController_io_sdram_CASn; |
| assign io_sdram_CKE = sdramArea_sdramController_io_sdram_CKE; |
| assign io_sdram_CSn = sdramArea_sdramController_io_sdram_CSn; |
| assign io_sdram_RASn = sdramArea_sdramController_io_sdram_RASn; |
| assign io_sdram_WEn = sdramArea_sdramController_io_sdram_WEn; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| busif_readError <= 1'b0; |
| busif_readData <= 32'h0; |
| srcAddr <= 32'h0; |
| dstAddr <= 32'h0; |
| end else begin |
| if(((io_wb_ADR == 32'h0) && busif_doWrite))begin |
| srcAddr <= io_wb_DAT_MISO[31 : 0]; |
| end |
| if(((io_wb_ADR == 32'h00000004) && busif_doWrite))begin |
| dstAddr <= io_wb_DAT_MISO[31 : 0]; |
| end |
| if(busif_doRead)begin |
| case(io_wb_ADR) |
| 32'h0 : begin |
| busif_readData <= srcAddr; |
| busif_readError <= 1'b0; |
| end |
| 32'h00000004 : begin |
| busif_readData <= dstAddr; |
| busif_readError <= 1'b0; |
| end |
| default : begin |
| busif_readData <= 32'h0; |
| busif_readError <= 1'b1; |
| end |
| endcase |
| end |
| end |
| end |
| |
| |
| endmodule |
| |
| module SdramController ( |
| (* IOB = "TRUE" *) input io_axi_aw_valid, |
| (* IOB = "TRUE" *) output io_axi_aw_ready, |
| (* IOB = "TRUE" *) input [31:0] io_axi_aw_payload_addr, |
| (* IOB = "TRUE" *) input [3:0] io_axi_aw_payload_id, |
| (* IOB = "TRUE" *) input [7:0] io_axi_aw_payload_len, |
| (* IOB = "TRUE" *) input [2:0] io_axi_aw_payload_size, |
| (* IOB = "TRUE" *) input [1:0] io_axi_aw_payload_burst, |
| (* IOB = "TRUE" *) input io_axi_w_valid, |
| (* IOB = "TRUE" *) output io_axi_w_ready, |
| (* IOB = "TRUE" *) input [31:0] io_axi_w_payload_data, |
| (* IOB = "TRUE" *) input [3:0] io_axi_w_payload_strb, |
| (* IOB = "TRUE" *) input io_axi_w_payload_last, |
| (* IOB = "TRUE" *) output io_axi_b_valid, |
| (* IOB = "TRUE" *) input io_axi_b_ready, |
| (* IOB = "TRUE" *) output [3:0] io_axi_b_payload_id, |
| (* IOB = "TRUE" *) output [1:0] io_axi_b_payload_resp, |
| (* IOB = "TRUE" *) input io_axi_ar_valid, |
| (* IOB = "TRUE" *) output io_axi_ar_ready, |
| (* IOB = "TRUE" *) input [31:0] io_axi_ar_payload_addr, |
| (* IOB = "TRUE" *) input [3:0] io_axi_ar_payload_id, |
| (* IOB = "TRUE" *) input [7:0] io_axi_ar_payload_len, |
| (* IOB = "TRUE" *) input [2:0] io_axi_ar_payload_size, |
| (* IOB = "TRUE" *) input [1:0] io_axi_ar_payload_burst, |
| (* IOB = "TRUE" *) output io_axi_r_valid, |
| (* IOB = "TRUE" *) input io_axi_r_ready, |
| (* IOB = "TRUE" *) output [31:0] io_axi_r_payload_data, |
| (* IOB = "TRUE" *) output [3:0] io_axi_r_payload_id, |
| (* IOB = "TRUE" *) output [1:0] io_axi_r_payload_resp, |
| (* IOB = "TRUE" *) output io_axi_r_payload_last, |
| (* IOB = "TRUE" *) output [12:0] io_sdram_ADDR, |
| (* IOB = "TRUE" *) output [1:0] io_sdram_BA, |
| (* IOB = "TRUE" *) input [15:0] io_sdram_DQ_read, |
| (* IOB = "TRUE" *) output [15:0] io_sdram_DQ_write, |
| (* IOB = "TRUE" *) output reg [15:0] io_sdram_DQ_writeEnable, |
| (* IOB = "TRUE" *) output [1:0] io_sdram_DQM, |
| (* IOB = "TRUE" *) output io_sdram_CASn, |
| (* IOB = "TRUE" *) output io_sdram_CKE, |
| (* IOB = "TRUE" *) output io_sdram_CSn, |
| (* IOB = "TRUE" *) output io_sdram_RASn, |
| (* IOB = "TRUE" *) output io_sdram_WEn, |
| (* IOB = "TRUE" *) output reg io_initDone, |
| input clk, |
| input reset |
| ); |
| reg _zz_9; |
| wire _zz_10; |
| reg _zz_11; |
| wire _zz_12; |
| reg _zz_13; |
| wire [1:0] _zz_14; |
| wire _zz_15; |
| reg _zz_16; |
| wire _zz_17; |
| wire [1:0] _zz_18; |
| wire _zz_19; |
| wire awFifo_io_push_ready; |
| wire awFifo_io_pop_valid; |
| wire [31:0] awFifo_io_pop_payload_addr; |
| wire [3:0] awFifo_io_pop_payload_id; |
| wire [7:0] awFifo_io_pop_payload_len; |
| wire [2:0] awFifo_io_pop_payload_size; |
| wire [1:0] awFifo_io_pop_payload_burst; |
| wire [6:0] awFifo_io_occupancy; |
| wire [6:0] awFifo_io_availability; |
| wire wFifo_io_push_ready; |
| wire wFifo_io_pop_valid; |
| wire [31:0] wFifo_io_pop_payload_data; |
| wire [3:0] wFifo_io_pop_payload_strb; |
| wire wFifo_io_pop_payload_last; |
| wire [6:0] wFifo_io_occupancy; |
| wire [6:0] wFifo_io_availability; |
| wire bFifo_io_push_ready; |
| wire bFifo_io_pop_valid; |
| wire [3:0] bFifo_io_pop_payload_id; |
| wire [1:0] bFifo_io_pop_payload_resp; |
| wire [6:0] bFifo_io_occupancy; |
| wire [6:0] bFifo_io_availability; |
| wire arFifo_io_push_ready; |
| wire arFifo_io_pop_valid; |
| wire [31:0] arFifo_io_pop_payload_addr; |
| wire [3:0] arFifo_io_pop_payload_id; |
| wire [7:0] arFifo_io_pop_payload_len; |
| wire [2:0] arFifo_io_pop_payload_size; |
| wire [1:0] arFifo_io_pop_payload_burst; |
| wire [6:0] arFifo_io_occupancy; |
| wire [6:0] arFifo_io_availability; |
| wire rFifo_io_push_ready; |
| wire rFifo_io_pop_valid; |
| wire [31:0] rFifo_io_pop_payload_data; |
| wire [3:0] rFifo_io_pop_payload_id; |
| wire [1:0] rFifo_io_pop_payload_resp; |
| wire rFifo_io_pop_payload_last; |
| wire [6:0] rFifo_io_occupancy; |
| wire [6:0] rFifo_io_availability; |
| wire _zz_20; |
| wire _zz_21; |
| wire _zz_22; |
| wire _zz_23; |
| wire _zz_24; |
| wire _zz_25; |
| wire _zz_26; |
| wire _zz_27; |
| wire _zz_28; |
| wire [0:0] _zz_29; |
| wire [9:0] _zz_30; |
| wire [7:0] _zz_31; |
| wire [7:0] _zz_32; |
| wire [8:0] _zz_33; |
| wire [7:0] _zz_34; |
| wire [1:0] _zz_35; |
| wire [15:0] _zz_36; |
| wire [8:0] _zz_37; |
| wire [7:0] _zz_38; |
| wire [3:0] CMD_UNSELECTED; |
| wire [3:0] CMD_NOP; |
| wire [3:0] CMD_ACTIVE; |
| wire [3:0] CMD_READ; |
| wire [3:0] CMD_WRITE; |
| wire [3:0] CMD_BURST_TERMINATE; |
| wire [3:0] CMD_PRECHARGE; |
| wire [3:0] CMD_REFRESH; |
| wire [3:0] CMD_LOAD_MODE_REG; |
| wire [1:0] DQM_ALL_VALID; |
| wire [1:0] DQM_ALL_INVALID; |
| wire [12:0] MODE_VALUE; |
| reg [3:0] commandReg; |
| reg [12:0] addressReg; |
| reg [1:0] bankAddrReg; |
| reg [7:0] burstLenReg; |
| reg [8:0] columnAddrReg; |
| reg [31:0] busReadDataReg; |
| reg busReadDataVldReg; |
| reg busReadDataLastReg; |
| reg [3:0] opIdReg; |
| reg [3:0] strobeReg; |
| reg [31:0] busWriteDataReg; |
| reg [1:0] busDataShiftCnt; |
| wire [1:0] writeMask; |
| wire [15:0] busWrite; |
| reg [1:0] mask; |
| reg [13:0] initCounter_counter; |
| wire initCounter_busy; |
| reg [2:0] stateCounter_counter; |
| wire stateCounter_busy; |
| wire refreshCounter_willIncrement; |
| wire refreshCounter_willClear; |
| reg [9:0] refreshCounter_valueNext; |
| reg [9:0] refreshCounter_value; |
| wire refreshCounter_willOverflowIfInc; |
| wire refreshCounter_willOverflow; |
| wire initPeriod; |
| reg refreshReqReg; |
| reg preReqIsWriteReg; |
| wire readReq; |
| wire writeReq; |
| reg initFsm_wantExit; |
| reg initFsm_wantStart; |
| reg refreshFsm_wantExit; |
| reg refreshFsm_wantStart; |
| reg writeFsm_wantExit; |
| reg writeFsm_wantStart; |
| reg readFsm_wantExit; |
| reg readFsm_wantStart; |
| wire fsm_wantExit; |
| reg fsm_wantStart; |
| reg [15:0] readArea_readReg; |
| reg startBurstReadReg; |
| reg `readFsm_enumDefinition_binary_sequential_type readFsm_stateReg; |
| reg `readFsm_enumDefinition_binary_sequential_type readFsm_stateNext; |
| wire _zz_1; |
| wire _zz_2; |
| reg `initFsm_enumDefinition_binary_sequential_type initFsm_stateReg; |
| reg `initFsm_enumDefinition_binary_sequential_type initFsm_stateNext; |
| reg `writeFsm_enumDefinition_binary_sequential_type writeFsm_stateReg; |
| reg `writeFsm_enumDefinition_binary_sequential_type writeFsm_stateNext; |
| wire _zz_3; |
| wire _zz_4; |
| reg `refreshFsm_enumDefinition_binary_sequential_type refreshFsm_stateReg; |
| reg `refreshFsm_enumDefinition_binary_sequential_type refreshFsm_stateNext; |
| wire _zz_5; |
| wire _zz_6; |
| reg `fsm_enumDefinition_binary_sequential_type fsm_stateReg; |
| reg `fsm_enumDefinition_binary_sequential_type fsm_stateNext; |
| wire _zz_7; |
| wire _zz_8; |
| `ifndef SYNTHESIS |
| reg [167:0] readFsm_stateReg_string; |
| reg [167:0] readFsm_stateNext_string; |
| reg [207:0] initFsm_stateReg_string; |
| reg [207:0] initFsm_stateNext_string; |
| reg [167:0] writeFsm_stateReg_string; |
| reg [167:0] writeFsm_stateNext_string; |
| reg [223:0] refreshFsm_stateReg_string; |
| reg [223:0] refreshFsm_stateNext_string; |
| reg [103:0] fsm_stateReg_string; |
| reg [103:0] fsm_stateNext_string; |
| `endif |
| |
| |
| assign _zz_20 = ((! (writeFsm_stateReg == `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE)) && (writeFsm_stateNext == `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE)); |
| assign _zz_21 = (2'b00 < busDataShiftCnt); |
| assign _zz_22 = ((! (writeFsm_stateReg == `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE)) && (writeFsm_stateNext == `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE)); |
| assign _zz_23 = (_zz_3 && (! _zz_4)); |
| assign _zz_24 = ((! (readFsm_stateReg == `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE)) && (readFsm_stateNext == `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE)); |
| assign _zz_25 = (! stateCounter_busy); |
| assign _zz_26 = (! stateCounter_busy); |
| assign _zz_27 = (stateCounter_counter == 3'b011); |
| assign _zz_28 = (! stateCounter_busy); |
| assign _zz_29 = refreshCounter_willIncrement; |
| assign _zz_30 = {9'd0, _zz_29}; |
| assign _zz_31 = {1'd0, rFifo_io_availability}; |
| assign _zz_32 = {1'd0, wFifo_io_occupancy}; |
| assign _zz_33 = ({1'd0,arFifo_io_pop_payload_len} <<< 1); |
| assign _zz_34 = (burstLenReg - 8'h01); |
| assign _zz_35 = (strobeReg >>> 2); |
| assign _zz_36 = (busWriteDataReg >>> 16); |
| assign _zz_37 = ({1'd0,awFifo_io_pop_payload_len} <<< 1); |
| assign _zz_38 = (burstLenReg - 8'h01); |
| StreamFifo_1 awFifo ( |
| .io_push_valid (io_axi_aw_valid ), //i |
| .io_push_ready (awFifo_io_push_ready ), //o |
| .io_push_payload_addr (io_axi_aw_payload_addr[31:0] ), //i |
| .io_push_payload_id (io_axi_aw_payload_id[3:0] ), //i |
| .io_push_payload_len (io_axi_aw_payload_len[7:0] ), //i |
| .io_push_payload_size (io_axi_aw_payload_size[2:0] ), //i |
| .io_push_payload_burst (io_axi_aw_payload_burst[1:0] ), //i |
| .io_pop_valid (awFifo_io_pop_valid ), //o |
| .io_pop_ready (_zz_9 ), //i |
| .io_pop_payload_addr (awFifo_io_pop_payload_addr[31:0] ), //o |
| .io_pop_payload_id (awFifo_io_pop_payload_id[3:0] ), //o |
| .io_pop_payload_len (awFifo_io_pop_payload_len[7:0] ), //o |
| .io_pop_payload_size (awFifo_io_pop_payload_size[2:0] ), //o |
| .io_pop_payload_burst (awFifo_io_pop_payload_burst[1:0] ), //o |
| .io_flush (_zz_10 ), //i |
| .io_occupancy (awFifo_io_occupancy[6:0] ), //o |
| .io_availability (awFifo_io_availability[6:0] ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| StreamFifo_2 wFifo ( |
| .io_push_valid (io_axi_w_valid ), //i |
| .io_push_ready (wFifo_io_push_ready ), //o |
| .io_push_payload_data (io_axi_w_payload_data[31:0] ), //i |
| .io_push_payload_strb (io_axi_w_payload_strb[3:0] ), //i |
| .io_push_payload_last (io_axi_w_payload_last ), //i |
| .io_pop_valid (wFifo_io_pop_valid ), //o |
| .io_pop_ready (_zz_11 ), //i |
| .io_pop_payload_data (wFifo_io_pop_payload_data[31:0] ), //o |
| .io_pop_payload_strb (wFifo_io_pop_payload_strb[3:0] ), //o |
| .io_pop_payload_last (wFifo_io_pop_payload_last ), //o |
| .io_flush (_zz_12 ), //i |
| .io_occupancy (wFifo_io_occupancy[6:0] ), //o |
| .io_availability (wFifo_io_availability[6:0] ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| StreamFifo_3 bFifo ( |
| .io_push_valid (_zz_13 ), //i |
| .io_push_ready (bFifo_io_push_ready ), //o |
| .io_push_payload_id (opIdReg[3:0] ), //i |
| .io_push_payload_resp (_zz_14[1:0] ), //i |
| .io_pop_valid (bFifo_io_pop_valid ), //o |
| .io_pop_ready (io_axi_b_ready ), //i |
| .io_pop_payload_id (bFifo_io_pop_payload_id[3:0] ), //o |
| .io_pop_payload_resp (bFifo_io_pop_payload_resp[1:0] ), //o |
| .io_flush (_zz_15 ), //i |
| .io_occupancy (bFifo_io_occupancy[6:0] ), //o |
| .io_availability (bFifo_io_availability[6:0] ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| StreamFifo_1 arFifo ( |
| .io_push_valid (io_axi_ar_valid ), //i |
| .io_push_ready (arFifo_io_push_ready ), //o |
| .io_push_payload_addr (io_axi_ar_payload_addr[31:0] ), //i |
| .io_push_payload_id (io_axi_ar_payload_id[3:0] ), //i |
| .io_push_payload_len (io_axi_ar_payload_len[7:0] ), //i |
| .io_push_payload_size (io_axi_ar_payload_size[2:0] ), //i |
| .io_push_payload_burst (io_axi_ar_payload_burst[1:0] ), //i |
| .io_pop_valid (arFifo_io_pop_valid ), //o |
| .io_pop_ready (_zz_16 ), //i |
| .io_pop_payload_addr (arFifo_io_pop_payload_addr[31:0] ), //o |
| .io_pop_payload_id (arFifo_io_pop_payload_id[3:0] ), //o |
| .io_pop_payload_len (arFifo_io_pop_payload_len[7:0] ), //o |
| .io_pop_payload_size (arFifo_io_pop_payload_size[2:0] ), //o |
| .io_pop_payload_burst (arFifo_io_pop_payload_burst[1:0] ), //o |
| .io_flush (_zz_17 ), //i |
| .io_occupancy (arFifo_io_occupancy[6:0] ), //o |
| .io_availability (arFifo_io_availability[6:0] ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| StreamFifo_5 rFifo ( |
| .io_push_valid (busReadDataVldReg ), //i |
| .io_push_ready (rFifo_io_push_ready ), //o |
| .io_push_payload_data (busReadDataReg[31:0] ), //i |
| .io_push_payload_id (opIdReg[3:0] ), //i |
| .io_push_payload_resp (_zz_18[1:0] ), //i |
| .io_push_payload_last (busReadDataLastReg ), //i |
| .io_pop_valid (rFifo_io_pop_valid ), //o |
| .io_pop_ready (io_axi_r_ready ), //i |
| .io_pop_payload_data (rFifo_io_pop_payload_data[31:0] ), //o |
| .io_pop_payload_id (rFifo_io_pop_payload_id[3:0] ), //o |
| .io_pop_payload_resp (rFifo_io_pop_payload_resp[1:0] ), //o |
| .io_pop_payload_last (rFifo_io_pop_payload_last ), //o |
| .io_flush (_zz_19 ), //i |
| .io_occupancy (rFifo_io_occupancy[6:0] ), //o |
| .io_availability (rFifo_io_availability[6:0] ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| `ifndef SYNTHESIS |
| always @(*) begin |
| case(readFsm_stateReg) |
| `readFsm_enumDefinition_binary_sequential_readFsm_BOOT : readFsm_stateReg_string = "readFsm_BOOT "; |
| `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE : readFsm_stateReg_string = "readFsm_ACTIVE "; |
| `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD : readFsm_stateReg_string = "readFsm_SEND_READ_CMD"; |
| `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ : readFsm_stateReg_string = "readFsm_BURST_READ "; |
| default : readFsm_stateReg_string = "?????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(readFsm_stateNext) |
| `readFsm_enumDefinition_binary_sequential_readFsm_BOOT : readFsm_stateNext_string = "readFsm_BOOT "; |
| `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE : readFsm_stateNext_string = "readFsm_ACTIVE "; |
| `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD : readFsm_stateNext_string = "readFsm_SEND_READ_CMD"; |
| `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ : readFsm_stateNext_string = "readFsm_BURST_READ "; |
| default : readFsm_stateNext_string = "?????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(initFsm_stateReg) |
| `initFsm_enumDefinition_binary_sequential_initFsm_BOOT : initFsm_stateReg_string = "initFsm_BOOT "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT : initFsm_stateReg_string = "initFsm_INIT_WAIT "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE : initFsm_stateReg_string = "initFsm_INIT_PRECHARGE "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1 : initFsm_stateReg_string = "initFsm_INIT_REFRESH_1 "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2 : initFsm_stateReg_string = "initFsm_INIT_REFRESH_2 "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG : initFsm_stateReg_string = "initFsm_INIT_LOAD_MODE_REG"; |
| default : initFsm_stateReg_string = "??????????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(initFsm_stateNext) |
| `initFsm_enumDefinition_binary_sequential_initFsm_BOOT : initFsm_stateNext_string = "initFsm_BOOT "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT : initFsm_stateNext_string = "initFsm_INIT_WAIT "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE : initFsm_stateNext_string = "initFsm_INIT_PRECHARGE "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1 : initFsm_stateNext_string = "initFsm_INIT_REFRESH_1 "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2 : initFsm_stateNext_string = "initFsm_INIT_REFRESH_2 "; |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG : initFsm_stateNext_string = "initFsm_INIT_LOAD_MODE_REG"; |
| default : initFsm_stateNext_string = "??????????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(writeFsm_stateReg) |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BOOT : writeFsm_stateReg_string = "writeFsm_BOOT "; |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE : writeFsm_stateReg_string = "writeFsm_ACTIVE_WRITE"; |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE : writeFsm_stateReg_string = "writeFsm_BURST_WRITE "; |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE : writeFsm_stateReg_string = "writeFsm_TERM_WRITE "; |
| default : writeFsm_stateReg_string = "?????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(writeFsm_stateNext) |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BOOT : writeFsm_stateNext_string = "writeFsm_BOOT "; |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE : writeFsm_stateNext_string = "writeFsm_ACTIVE_WRITE"; |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE : writeFsm_stateNext_string = "writeFsm_BURST_WRITE "; |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE : writeFsm_stateNext_string = "writeFsm_TERM_WRITE "; |
| default : writeFsm_stateNext_string = "?????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(refreshFsm_stateReg) |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_BOOT : refreshFsm_stateReg_string = "refreshFsm_BOOT "; |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE : refreshFsm_stateReg_string = "refreshFsm_REFRESH_PRECHARGE"; |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH : refreshFsm_stateReg_string = "refreshFsm_REFRESH "; |
| default : refreshFsm_stateReg_string = "????????????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(refreshFsm_stateNext) |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_BOOT : refreshFsm_stateNext_string = "refreshFsm_BOOT "; |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE : refreshFsm_stateNext_string = "refreshFsm_REFRESH_PRECHARGE"; |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH : refreshFsm_stateNext_string = "refreshFsm_REFRESH "; |
| default : refreshFsm_stateNext_string = "????????????????????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(fsm_stateReg) |
| `fsm_enumDefinition_binary_sequential_fsm_BOOT : fsm_stateReg_string = "fsm_BOOT "; |
| `fsm_enumDefinition_binary_sequential_fsm_INIT : fsm_stateReg_string = "fsm_INIT "; |
| `fsm_enumDefinition_binary_sequential_fsm_IDLE : fsm_stateReg_string = "fsm_IDLE "; |
| `fsm_enumDefinition_binary_sequential_fsm_REFRESH : fsm_stateReg_string = "fsm_REFRESH "; |
| `fsm_enumDefinition_binary_sequential_fsm_WRITE : fsm_stateReg_string = "fsm_WRITE "; |
| `fsm_enumDefinition_binary_sequential_fsm_READ : fsm_stateReg_string = "fsm_READ "; |
| `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE : fsm_stateReg_string = "fsm_PRECHARGE"; |
| default : fsm_stateReg_string = "?????????????"; |
| endcase |
| end |
| always @(*) begin |
| case(fsm_stateNext) |
| `fsm_enumDefinition_binary_sequential_fsm_BOOT : fsm_stateNext_string = "fsm_BOOT "; |
| `fsm_enumDefinition_binary_sequential_fsm_INIT : fsm_stateNext_string = "fsm_INIT "; |
| `fsm_enumDefinition_binary_sequential_fsm_IDLE : fsm_stateNext_string = "fsm_IDLE "; |
| `fsm_enumDefinition_binary_sequential_fsm_REFRESH : fsm_stateNext_string = "fsm_REFRESH "; |
| `fsm_enumDefinition_binary_sequential_fsm_WRITE : fsm_stateNext_string = "fsm_WRITE "; |
| `fsm_enumDefinition_binary_sequential_fsm_READ : fsm_stateNext_string = "fsm_READ "; |
| `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE : fsm_stateNext_string = "fsm_PRECHARGE"; |
| default : fsm_stateNext_string = "?????????????"; |
| endcase |
| end |
| `endif |
| |
| assign CMD_UNSELECTED = 4'b1000; |
| assign CMD_NOP = 4'b0111; |
| assign CMD_ACTIVE = 4'b0011; |
| assign CMD_READ = 4'b0101; |
| assign CMD_WRITE = 4'b0100; |
| assign CMD_BURST_TERMINATE = 4'b0110; |
| assign CMD_PRECHARGE = 4'b0010; |
| assign CMD_REFRESH = 4'b0001; |
| assign CMD_LOAD_MODE_REG = 4'b0000; |
| assign DQM_ALL_VALID = 2'b00; |
| assign DQM_ALL_INVALID = (~ DQM_ALL_VALID); |
| assign MODE_VALUE = {{6'h0,3'b011},4'b0111}; |
| assign io_axi_aw_ready = awFifo_io_push_ready; |
| assign io_axi_w_ready = wFifo_io_push_ready; |
| assign io_axi_b_valid = bFifo_io_pop_valid; |
| assign io_axi_b_payload_id = bFifo_io_pop_payload_id; |
| assign io_axi_b_payload_resp = bFifo_io_pop_payload_resp; |
| assign io_axi_ar_ready = arFifo_io_push_ready; |
| assign io_axi_r_valid = rFifo_io_pop_valid; |
| assign io_axi_r_payload_data = rFifo_io_pop_payload_data; |
| assign io_axi_r_payload_id = rFifo_io_pop_payload_id; |
| assign io_axi_r_payload_resp = rFifo_io_pop_payload_resp; |
| assign io_axi_r_payload_last = rFifo_io_pop_payload_last; |
| assign writeMask = strobeReg[1 : 0]; |
| assign busWrite = busWriteDataReg[15 : 0]; |
| always @ (*) begin |
| _zz_9 = 1'b0; |
| if(_zz_20)begin |
| _zz_9 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_11 = 1'b0; |
| case(writeFsm_stateReg) |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE : begin |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE : begin |
| if(! _zz_21) begin |
| _zz_11 = 1'b1; |
| end |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE : begin |
| end |
| default : begin |
| end |
| endcase |
| if(_zz_22)begin |
| _zz_11 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_13 = 1'b0; |
| if(_zz_23)begin |
| _zz_13 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_16 = 1'b0; |
| if(_zz_24)begin |
| _zz_16 = 1'b1; |
| end |
| end |
| |
| assign _zz_14 = 2'b00; |
| assign _zz_18 = 2'b00; |
| assign io_sdram_BA = bankAddrReg; |
| assign io_sdram_ADDR = addressReg; |
| assign io_sdram_DQM = mask; |
| assign io_sdram_CKE = 1'b1; |
| assign io_sdram_CSn = commandReg[3]; |
| assign io_sdram_RASn = commandReg[2]; |
| assign io_sdram_CASn = commandReg[1]; |
| assign io_sdram_WEn = commandReg[0]; |
| assign io_sdram_DQ_write = busWrite; |
| always @ (*) begin |
| io_initDone = 1'b0; |
| if((_zz_7 && (! _zz_8)))begin |
| io_initDone = 1'b1; |
| end |
| end |
| |
| assign initCounter_busy = (initCounter_counter != 14'h0); |
| assign stateCounter_busy = (stateCounter_counter != 3'b000); |
| assign refreshCounter_willClear = 1'b0; |
| assign refreshCounter_willOverflowIfInc = (refreshCounter_value == 10'h30d); |
| assign refreshCounter_willOverflow = (refreshCounter_willOverflowIfInc && refreshCounter_willIncrement); |
| always @ (*) begin |
| if(refreshCounter_willOverflow)begin |
| refreshCounter_valueNext = 10'h0; |
| end else begin |
| refreshCounter_valueNext = (refreshCounter_value + _zz_30); |
| end |
| if(refreshCounter_willClear)begin |
| refreshCounter_valueNext = 10'h0; |
| end |
| end |
| |
| assign refreshCounter_willIncrement = 1'b1; |
| assign readReq = (arFifo_io_pop_valid && (arFifo_io_pop_payload_len <= _zz_31)); |
| assign writeReq = ((awFifo_io_pop_valid && (awFifo_io_pop_payload_len <= _zz_32)) && (7'h0 < bFifo_io_availability)); |
| always @ (*) begin |
| initFsm_wantExit = 1'b0; |
| case(initFsm_stateReg) |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT : begin |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE : begin |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1 : begin |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2 : begin |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG : begin |
| if(_zz_25)begin |
| initFsm_wantExit = 1'b1; |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| initFsm_wantStart = 1'b0; |
| if(((! _zz_7) && _zz_8))begin |
| initFsm_wantStart = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| refreshFsm_wantExit = 1'b0; |
| case(refreshFsm_stateReg) |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE : begin |
| end |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH : begin |
| if(_zz_26)begin |
| refreshFsm_wantExit = 1'b1; |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| refreshFsm_wantStart = 1'b0; |
| if(((! (fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_REFRESH)) && (fsm_stateNext == `fsm_enumDefinition_binary_sequential_fsm_REFRESH)))begin |
| refreshFsm_wantStart = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| writeFsm_wantExit = 1'b0; |
| case(writeFsm_stateReg) |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE : begin |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE : begin |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE : begin |
| writeFsm_wantExit = 1'b1; |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| writeFsm_wantStart = 1'b0; |
| if(((! (fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_WRITE)) && (fsm_stateNext == `fsm_enumDefinition_binary_sequential_fsm_WRITE)))begin |
| writeFsm_wantStart = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| readFsm_wantExit = 1'b0; |
| case(readFsm_stateReg) |
| `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE : begin |
| end |
| `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD : begin |
| end |
| `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ : begin |
| if(! _zz_27) begin |
| if(_zz_28)begin |
| readFsm_wantExit = 1'b1; |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| readFsm_wantStart = 1'b0; |
| if(((! (fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_READ)) && (fsm_stateNext == `fsm_enumDefinition_binary_sequential_fsm_READ)))begin |
| readFsm_wantStart = 1'b1; |
| end |
| end |
| |
| assign fsm_wantExit = 1'b0; |
| always @ (*) begin |
| fsm_wantStart = 1'b0; |
| case(fsm_stateReg) |
| `fsm_enumDefinition_binary_sequential_fsm_INIT : begin |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_IDLE : begin |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_REFRESH : begin |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_WRITE : begin |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_READ : begin |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE : begin |
| end |
| default : begin |
| fsm_wantStart = 1'b1; |
| end |
| endcase |
| end |
| |
| assign initPeriod = (fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_INIT); |
| always @ (*) begin |
| if((writeFsm_stateReg == `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE))begin |
| mask = (DQM_ALL_VALID | (~ writeMask)); |
| end else begin |
| if((fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_READ))begin |
| mask = DQM_ALL_VALID; |
| end else begin |
| mask = DQM_ALL_INVALID; |
| end |
| end |
| end |
| |
| always @ (*) begin |
| if((writeFsm_stateReg == `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE))begin |
| io_sdram_DQ_writeEnable = 16'hffff; |
| end else begin |
| io_sdram_DQ_writeEnable = 16'h0; |
| end |
| end |
| |
| assign _zz_1 = (readFsm_stateReg == `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ); |
| assign _zz_2 = (readFsm_stateNext == `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ); |
| always @ (*) begin |
| readFsm_stateNext = readFsm_stateReg; |
| case(readFsm_stateReg) |
| `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE : begin |
| if((! stateCounter_busy))begin |
| readFsm_stateNext = `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD; |
| end |
| end |
| `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD : begin |
| if((! stateCounter_busy))begin |
| readFsm_stateNext = `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ; |
| end |
| end |
| `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ : begin |
| if(! _zz_27) begin |
| if(_zz_28)begin |
| readFsm_stateNext = `readFsm_enumDefinition_binary_sequential_readFsm_BOOT; |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| if(readFsm_wantStart)begin |
| readFsm_stateNext = `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE; |
| end |
| end |
| |
| always @ (*) begin |
| initFsm_stateNext = initFsm_stateReg; |
| case(initFsm_stateReg) |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT : begin |
| if((! initCounter_busy))begin |
| initFsm_stateNext = `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE; |
| end |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE : begin |
| if((! stateCounter_busy))begin |
| initFsm_stateNext = `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1; |
| end |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1 : begin |
| if((! stateCounter_busy))begin |
| initFsm_stateNext = `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2; |
| end |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2 : begin |
| if((! stateCounter_busy))begin |
| initFsm_stateNext = `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG; |
| end |
| end |
| `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG : begin |
| if(_zz_25)begin |
| initFsm_stateNext = `initFsm_enumDefinition_binary_sequential_initFsm_BOOT; |
| end |
| end |
| default : begin |
| end |
| endcase |
| if(initFsm_wantStart)begin |
| initFsm_stateNext = `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT; |
| end |
| end |
| |
| assign _zz_3 = (writeFsm_stateReg == `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE); |
| assign _zz_4 = (writeFsm_stateNext == `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE); |
| always @ (*) begin |
| writeFsm_stateNext = writeFsm_stateReg; |
| case(writeFsm_stateReg) |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE : begin |
| if((! stateCounter_busy))begin |
| writeFsm_stateNext = `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE; |
| end |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE : begin |
| if((! stateCounter_busy))begin |
| writeFsm_stateNext = `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE; |
| end |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE : begin |
| writeFsm_stateNext = `writeFsm_enumDefinition_binary_sequential_writeFsm_BOOT; |
| end |
| default : begin |
| end |
| endcase |
| if(writeFsm_wantStart)begin |
| writeFsm_stateNext = `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE; |
| end |
| end |
| |
| assign _zz_5 = (refreshFsm_stateReg == `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH); |
| assign _zz_6 = (refreshFsm_stateNext == `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH); |
| always @ (*) begin |
| refreshFsm_stateNext = refreshFsm_stateReg; |
| case(refreshFsm_stateReg) |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE : begin |
| if((! stateCounter_busy))begin |
| refreshFsm_stateNext = `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH; |
| end |
| end |
| `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH : begin |
| if(_zz_26)begin |
| refreshFsm_stateNext = `refreshFsm_enumDefinition_binary_sequential_refreshFsm_BOOT; |
| end |
| end |
| default : begin |
| end |
| endcase |
| if(refreshFsm_wantStart)begin |
| refreshFsm_stateNext = `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE; |
| end |
| end |
| |
| assign _zz_7 = (fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_INIT); |
| assign _zz_8 = (fsm_stateNext == `fsm_enumDefinition_binary_sequential_fsm_INIT); |
| always @ (*) begin |
| fsm_stateNext = fsm_stateReg; |
| case(fsm_stateReg) |
| `fsm_enumDefinition_binary_sequential_fsm_INIT : begin |
| if(initFsm_wantExit)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_IDLE; |
| end |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_IDLE : begin |
| if(refreshReqReg)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_REFRESH; |
| end else begin |
| if((readReq && writeReq))begin |
| if(preReqIsWriteReg)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_READ; |
| end else begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_WRITE; |
| end |
| end else begin |
| if((writeReq && (! readReq)))begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_WRITE; |
| end else begin |
| if((readReq && (! writeReq)))begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_READ; |
| end |
| end |
| end |
| end |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_REFRESH : begin |
| if(refreshFsm_wantExit)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_IDLE; |
| end |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_WRITE : begin |
| if(writeFsm_wantExit)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE; |
| end |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_READ : begin |
| if(readFsm_wantExit)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE; |
| end |
| end |
| `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE : begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_IDLE; |
| end |
| default : begin |
| end |
| endcase |
| if(fsm_wantStart)begin |
| fsm_stateNext = `fsm_enumDefinition_binary_sequential_fsm_INIT; |
| end |
| end |
| |
| assign _zz_10 = 1'b0; |
| assign _zz_12 = 1'b0; |
| assign _zz_15 = 1'b0; |
| assign _zz_17 = 1'b0; |
| assign _zz_19 = 1'b0; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| commandReg <= 4'b0000; |
| addressReg <= 13'h0; |
| bankAddrReg <= 2'b00; |
| burstLenReg <= 8'h0; |
| columnAddrReg <= 9'h0; |
| busReadDataReg <= 32'h0; |
| busReadDataVldReg <= 1'b0; |
| busReadDataLastReg <= 1'b0; |
| opIdReg <= 4'b0000; |
| strobeReg <= 4'b0000; |
| busWriteDataReg <= 32'h0; |
| busDataShiftCnt <= 2'b00; |
| initCounter_counter <= 14'h0; |
| stateCounter_counter <= 3'b000; |
| refreshCounter_value <= 10'h0; |
| refreshReqReg <= 1'b0; |
| preReqIsWriteReg <= 1'b0; |
| readFsm_stateReg <= `readFsm_enumDefinition_binary_sequential_readFsm_BOOT; |
| initFsm_stateReg <= `initFsm_enumDefinition_binary_sequential_initFsm_BOOT; |
| writeFsm_stateReg <= `writeFsm_enumDefinition_binary_sequential_writeFsm_BOOT; |
| refreshFsm_stateReg <= `refreshFsm_enumDefinition_binary_sequential_refreshFsm_BOOT; |
| fsm_stateReg <= `fsm_enumDefinition_binary_sequential_fsm_BOOT; |
| end else begin |
| commandReg <= CMD_NOP; |
| busReadDataLastReg <= 1'b0; |
| `ifndef SYNTHESIS |
| `ifdef FORMAL |
| assert((columnAddrReg < 9'h1f0)); |
| `else |
| if(!(columnAddrReg < 9'h1f0)) begin |
| $display("ERROR invalid column address and burst length"); |
| end |
| `endif |
| `endif |
| `ifndef SYNTHESIS |
| `ifdef FORMAL |
| assert(((awFifo_io_pop_payload_burst == 2'b01) && (arFifo_io_pop_payload_burst == 2'b01))); |
| `else |
| if(!((awFifo_io_pop_payload_burst == 2'b01) && (arFifo_io_pop_payload_burst == 2'b01))) begin |
| $display("ERROR only burst type INCR allowed"); |
| end |
| `endif |
| `endif |
| `ifndef SYNTHESIS |
| `ifdef FORMAL |
| assert((awFifo_io_pop_payload_len < 8'h40)); |
| `else |
| if(!(awFifo_io_pop_payload_len < 8'h40)) begin |
| $display("ERROR burst length should be less than 256/2"); |
| end |
| `endif |
| `endif |
| if(initCounter_busy)begin |
| initCounter_counter <= (initCounter_counter - 14'h0001); |
| end |
| if(stateCounter_busy)begin |
| stateCounter_counter <= (stateCounter_counter - 3'b001); |
| end |
| refreshCounter_value <= refreshCounter_valueNext; |
| if(startBurstReadReg)begin |
| busDataShiftCnt <= 2'b01; |
| end |
| busReadDataVldReg <= 1'b0; |
| if((readFsm_stateReg == `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ))begin |
| busReadDataReg <= {readArea_readReg,busReadDataReg[31 : 16]}; |
| if((2'b00 < busDataShiftCnt))begin |
| busDataShiftCnt <= (busDataShiftCnt - 2'b01); |
| end else begin |
| busReadDataVldReg <= 1'b1; |
| busDataShiftCnt <= 2'b01; |
| end |
| end |
| if(((! initPeriod) && refreshCounter_willOverflow))begin |
| refreshReqReg <= 1'b1; |
| end |
| readFsm_stateReg <= readFsm_stateNext; |
| case(readFsm_stateReg) |
| `readFsm_enumDefinition_binary_sequential_readFsm_ACTIVE : begin |
| end |
| `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD : begin |
| end |
| `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ : begin |
| if(_zz_27)begin |
| commandReg <= CMD_BURST_TERMINATE; |
| end |
| end |
| default : begin |
| end |
| endcase |
| if((_zz_1 && (! _zz_2)))begin |
| preReqIsWriteReg <= 1'b0; |
| busReadDataLastReg <= 1'b1; |
| end |
| if(_zz_24)begin |
| commandReg <= CMD_ACTIVE; |
| bankAddrReg <= arFifo_io_pop_payload_addr[22 : 21]; |
| addressReg <= arFifo_io_pop_payload_addr[21 : 9]; |
| columnAddrReg <= arFifo_io_pop_payload_addr[8 : 0]; |
| opIdReg <= arFifo_io_pop_payload_id; |
| burstLenReg <= _zz_33[7:0]; |
| stateCounter_counter <= 3'b001; |
| end |
| if(((! (readFsm_stateReg == `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD)) && (readFsm_stateNext == `readFsm_enumDefinition_binary_sequential_readFsm_SEND_READ_CMD)))begin |
| addressReg <= {4'd0, columnAddrReg}; |
| commandReg <= CMD_READ; |
| stateCounter_counter <= 3'b010; |
| end |
| if(((! _zz_1) && _zz_2))begin |
| `ifndef SYNTHESIS |
| `ifdef FORMAL |
| assert(((burstLenReg <= 8'h07) && (8'h0 < burstLenReg))); |
| `else |
| if(!((burstLenReg <= 8'h07) && (8'h0 < burstLenReg))) begin |
| $display("FAILURE invalid counter cycle=(toplevel/[SdramController]/burstLenReg : UInt[8 bits]), cycleMax=7"); |
| $finish; |
| end |
| `endif |
| `endif |
| stateCounter_counter <= _zz_34[2:0]; |
| end |
| initFsm_stateReg <= initFsm_stateNext; |
| if(((! (initFsm_stateReg == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT)) && (initFsm_stateNext == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_WAIT)))begin |
| initCounter_counter <= 14'h270f; |
| end |
| if(((! (initFsm_stateReg == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE)) && (initFsm_stateNext == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_PRECHARGE)))begin |
| addressReg <= 13'h0400; |
| commandReg <= CMD_PRECHARGE; |
| stateCounter_counter <= 3'b001; |
| end |
| if(((! (initFsm_stateReg == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1)) && (initFsm_stateNext == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_1)))begin |
| commandReg <= CMD_REFRESH; |
| stateCounter_counter <= 3'b110; |
| end |
| if(((! (initFsm_stateReg == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2)) && (initFsm_stateNext == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_REFRESH_2)))begin |
| commandReg <= CMD_REFRESH; |
| stateCounter_counter <= 3'b110; |
| end |
| if(((! (initFsm_stateReg == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG)) && (initFsm_stateNext == `initFsm_enumDefinition_binary_sequential_initFsm_INIT_LOAD_MODE_REG)))begin |
| addressReg <= MODE_VALUE; |
| commandReg <= CMD_LOAD_MODE_REG; |
| stateCounter_counter <= 3'b001; |
| end |
| writeFsm_stateReg <= writeFsm_stateNext; |
| case(writeFsm_stateReg) |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_ACTIVE_WRITE : begin |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_BURST_WRITE : begin |
| strobeReg <= {2'd0, _zz_35}; |
| busWriteDataReg <= {16'd0, _zz_36}; |
| if(_zz_21)begin |
| busDataShiftCnt <= (busDataShiftCnt - 2'b01); |
| end else begin |
| strobeReg <= wFifo_io_pop_payload_strb; |
| busWriteDataReg <= wFifo_io_pop_payload_data; |
| busDataShiftCnt <= 2'b01; |
| end |
| end |
| `writeFsm_enumDefinition_binary_sequential_writeFsm_TERM_WRITE : begin |
| end |
| default : begin |
| end |
| endcase |
| if(_zz_23)begin |
| preReqIsWriteReg <= 1'b1; |
| end |
| if(_zz_20)begin |
| commandReg <= CMD_ACTIVE; |
| bankAddrReg <= awFifo_io_pop_payload_addr[22 : 21]; |
| addressReg <= awFifo_io_pop_payload_addr[21 : 9]; |
| columnAddrReg <= awFifo_io_pop_payload_addr[8 : 0]; |
| opIdReg <= awFifo_io_pop_payload_id; |
| burstLenReg <= _zz_37[7:0]; |
| stateCounter_counter <= 3'b001; |
| end |
| if(_zz_22)begin |
| addressReg <= {4'd0, columnAddrReg}; |
| commandReg <= CMD_WRITE; |
| `ifndef SYNTHESIS |
| `ifdef FORMAL |
| assert(((burstLenReg <= 8'h07) && (8'h0 < burstLenReg))); |
| `else |
| if(!((burstLenReg <= 8'h07) && (8'h0 < burstLenReg))) begin |
| $display("FAILURE invalid counter cycle=(toplevel/[SdramController]/burstLenReg : UInt[8 bits]), cycleMax=7"); |
| $finish; |
| end |
| `endif |
| `endif |
| stateCounter_counter <= _zz_38[2:0]; |
| strobeReg <= wFifo_io_pop_payload_strb; |
| busWriteDataReg <= wFifo_io_pop_payload_data; |
| busDataShiftCnt <= 2'b01; |
| end |
| if(((! _zz_3) && _zz_4))begin |
| commandReg <= CMD_BURST_TERMINATE; |
| end |
| refreshFsm_stateReg <= refreshFsm_stateNext; |
| if((_zz_5 && (! _zz_6)))begin |
| refreshReqReg <= 1'b0; |
| end |
| if(((! (refreshFsm_stateReg == `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE)) && (refreshFsm_stateNext == `refreshFsm_enumDefinition_binary_sequential_refreshFsm_REFRESH_PRECHARGE)))begin |
| addressReg <= 13'h0400; |
| commandReg <= CMD_REFRESH; |
| stateCounter_counter <= 3'b001; |
| end |
| if(((! _zz_5) && _zz_6))begin |
| commandReg <= CMD_PRECHARGE; |
| stateCounter_counter <= 3'b110; |
| end |
| fsm_stateReg <= fsm_stateNext; |
| if(((! (fsm_stateReg == `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE)) && (fsm_stateNext == `fsm_enumDefinition_binary_sequential_fsm_PRECHARGE)))begin |
| commandReg <= CMD_PRECHARGE; |
| end |
| end |
| end |
| |
| always @ (negedge clk) begin |
| if((io_sdram_DQ_writeEnable == 16'h0))begin |
| readArea_readReg <= io_sdram_DQ_read; |
| end |
| end |
| |
| always @ (posedge clk) begin |
| startBurstReadReg <= ((readFsm_stateNext == `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ) && (readFsm_stateReg != `readFsm_enumDefinition_binary_sequential_readFsm_BURST_READ)); |
| end |
| |
| |
| endmodule |
| |
| module Dma ( |
| input [31:0] io_param_sar, |
| input [31:0] io_param_dar, |
| input [7:0] io_param_xsize, |
| input [7:0] io_param_ysize, |
| input [7:0] io_param_srcystep, |
| input [7:0] io_param_dstystep, |
| input [31:0] io_param_llr, |
| input io_param_bf, |
| input io_param_cf, |
| output io_axi_aw_valid, |
| input io_axi_aw_ready, |
| output [31:0] io_axi_aw_payload_addr, |
| output [3:0] io_axi_aw_payload_id, |
| output [7:0] io_axi_aw_payload_len, |
| output [2:0] io_axi_aw_payload_size, |
| output [1:0] io_axi_aw_payload_burst, |
| output io_axi_w_valid, |
| input io_axi_w_ready, |
| output [31:0] io_axi_w_payload_data, |
| output [3:0] io_axi_w_payload_strb, |
| output io_axi_w_payload_last, |
| input io_axi_b_valid, |
| output io_axi_b_ready, |
| input [3:0] io_axi_b_payload_id, |
| input [1:0] io_axi_b_payload_resp, |
| output io_axi_ar_valid, |
| input io_axi_ar_ready, |
| output [31:0] io_axi_ar_payload_addr, |
| output [3:0] io_axi_ar_payload_id, |
| output [7:0] io_axi_ar_payload_len, |
| output [2:0] io_axi_ar_payload_size, |
| output [1:0] io_axi_ar_payload_burst, |
| input io_axi_r_valid, |
| output io_axi_r_ready, |
| input [31:0] io_axi_r_payload_data, |
| input [3:0] io_axi_r_payload_id, |
| input [1:0] io_axi_r_payload_resp, |
| input io_axi_r_payload_last, |
| input io_ctrl_start, |
| output io_ctrl_busy, |
| output io_ctrl_done, |
| input io_ctrl_halt, |
| input clk, |
| input reset |
| ); |
| wire _zz_1; |
| wire read_io_dout_valid; |
| wire [31:0] read_io_dout_payload; |
| wire read_io_axiR_ar_valid; |
| wire [31:0] read_io_axiR_ar_payload_addr; |
| wire [3:0] read_io_axiR_ar_payload_id; |
| wire [7:0] read_io_axiR_ar_payload_len; |
| wire [2:0] read_io_axiR_ar_payload_size; |
| wire [1:0] read_io_axiR_ar_payload_burst; |
| wire read_io_axiR_r_ready; |
| wire read_io_ctrl_busy; |
| wire read_io_ctrl_done; |
| wire write_io_din_ready; |
| wire write_io_axiW_aw_valid; |
| wire [31:0] write_io_axiW_aw_payload_addr; |
| wire [3:0] write_io_axiW_aw_payload_id; |
| wire [7:0] write_io_axiW_aw_payload_len; |
| wire [2:0] write_io_axiW_aw_payload_size; |
| wire [1:0] write_io_axiW_aw_payload_burst; |
| wire write_io_axiW_w_valid; |
| wire [31:0] write_io_axiW_w_payload_data; |
| wire [3:0] write_io_axiW_w_payload_strb; |
| wire write_io_axiW_w_payload_last; |
| wire write_io_axiW_b_ready; |
| wire write_io_ctrl_busy; |
| wire write_io_ctrl_done; |
| wire io_dout_fifo_io_push_ready; |
| wire io_dout_fifo_io_pop_valid; |
| wire [31:0] io_dout_fifo_io_pop_payload; |
| wire [4:0] io_dout_fifo_io_occupancy; |
| wire [4:0] io_dout_fifo_io_availability; |
| |
| DmaRead read ( |
| .io_dout_valid (read_io_dout_valid ), //o |
| .io_dout_ready (io_dout_fifo_io_push_ready ), //i |
| .io_dout_payload (read_io_dout_payload[31:0] ), //o |
| .io_param_sar (io_param_sar[31:0] ), //i |
| .io_param_dar (io_param_dar[31:0] ), //i |
| .io_param_xsize (io_param_xsize[7:0] ), //i |
| .io_param_ysize (io_param_ysize[7:0] ), //i |
| .io_param_srcystep (io_param_srcystep[7:0] ), //i |
| .io_param_dstystep (io_param_dstystep[7:0] ), //i |
| .io_param_llr (io_param_llr[31:0] ), //i |
| .io_param_bf (io_param_bf ), //i |
| .io_param_cf (io_param_cf ), //i |
| .io_axiR_ar_valid (read_io_axiR_ar_valid ), //o |
| .io_axiR_ar_ready (io_axi_ar_ready ), //i |
| .io_axiR_ar_payload_addr (read_io_axiR_ar_payload_addr[31:0] ), //o |
| .io_axiR_ar_payload_id (read_io_axiR_ar_payload_id[3:0] ), //o |
| .io_axiR_ar_payload_len (read_io_axiR_ar_payload_len[7:0] ), //o |
| .io_axiR_ar_payload_size (read_io_axiR_ar_payload_size[2:0] ), //o |
| .io_axiR_ar_payload_burst (read_io_axiR_ar_payload_burst[1:0] ), //o |
| .io_axiR_r_valid (io_axi_r_valid ), //i |
| .io_axiR_r_ready (read_io_axiR_r_ready ), //o |
| .io_axiR_r_payload_data (io_axi_r_payload_data[31:0] ), //i |
| .io_axiR_r_payload_id (io_axi_r_payload_id[3:0] ), //i |
| .io_axiR_r_payload_resp (io_axi_r_payload_resp[1:0] ), //i |
| .io_axiR_r_payload_last (io_axi_r_payload_last ), //i |
| .io_ctrl_start (io_ctrl_start ), //i |
| .io_ctrl_busy (read_io_ctrl_busy ), //o |
| .io_ctrl_done (read_io_ctrl_done ), //o |
| .io_ctrl_halt (io_ctrl_halt ), //i |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| DmaWrite write ( |
| .io_din_valid (io_dout_fifo_io_pop_valid ), //i |
| .io_din_ready (write_io_din_ready ), //o |
| .io_din_payload (io_dout_fifo_io_pop_payload[31:0] ), //i |
| .io_param_sar (io_param_sar[31:0] ), //i |
| .io_param_dar (io_param_dar[31:0] ), //i |
| .io_param_xsize (io_param_xsize[7:0] ), //i |
| .io_param_ysize (io_param_ysize[7:0] ), //i |
| .io_param_srcystep (io_param_srcystep[7:0] ), //i |
| .io_param_dstystep (io_param_dstystep[7:0] ), //i |
| .io_param_llr (io_param_llr[31:0] ), //i |
| .io_param_bf (io_param_bf ), //i |
| .io_param_cf (io_param_cf ), //i |
| .io_axiW_aw_valid (write_io_axiW_aw_valid ), //o |
| .io_axiW_aw_ready (io_axi_aw_ready ), //i |
| .io_axiW_aw_payload_addr (write_io_axiW_aw_payload_addr[31:0] ), //o |
| .io_axiW_aw_payload_id (write_io_axiW_aw_payload_id[3:0] ), //o |
| .io_axiW_aw_payload_len (write_io_axiW_aw_payload_len[7:0] ), //o |
| .io_axiW_aw_payload_size (write_io_axiW_aw_payload_size[2:0] ), //o |
| .io_axiW_aw_payload_burst (write_io_axiW_aw_payload_burst[1:0] ), //o |
| .io_axiW_w_valid (write_io_axiW_w_valid ), //o |
| .io_axiW_w_ready (io_axi_w_ready ), //i |
| .io_axiW_w_payload_data (write_io_axiW_w_payload_data[31:0] ), //o |
| .io_axiW_w_payload_strb (write_io_axiW_w_payload_strb[3:0] ), //o |
| .io_axiW_w_payload_last (write_io_axiW_w_payload_last ), //o |
| .io_axiW_b_valid (io_axi_b_valid ), //i |
| .io_axiW_b_ready (write_io_axiW_b_ready ), //o |
| .io_axiW_b_payload_id (io_axi_b_payload_id[3:0] ), //i |
| .io_axiW_b_payload_resp (io_axi_b_payload_resp[1:0] ), //i |
| .io_ctrl_start (io_ctrl_start ), //i |
| .io_ctrl_busy (write_io_ctrl_busy ), //o |
| .io_ctrl_done (write_io_ctrl_done ), //o |
| .io_ctrl_halt (io_ctrl_halt ), //i |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| StreamFifo io_dout_fifo ( |
| .io_push_valid (read_io_dout_valid ), //i |
| .io_push_ready (io_dout_fifo_io_push_ready ), //o |
| .io_push_payload (read_io_dout_payload[31:0] ), //i |
| .io_pop_valid (io_dout_fifo_io_pop_valid ), //o |
| .io_pop_ready (write_io_din_ready ), //i |
| .io_pop_payload (io_dout_fifo_io_pop_payload[31:0] ), //o |
| .io_flush (_zz_1 ), //i |
| .io_occupancy (io_dout_fifo_io_occupancy[4:0] ), //o |
| .io_availability (io_dout_fifo_io_availability[4:0] ), //o |
| .clk (clk ), //i |
| .reset (reset ) //i |
| ); |
| assign io_ctrl_busy = (read_io_ctrl_busy || write_io_ctrl_busy); |
| assign io_ctrl_done = write_io_ctrl_done; |
| assign io_axi_ar_valid = read_io_axiR_ar_valid; |
| assign io_axi_ar_payload_addr = read_io_axiR_ar_payload_addr; |
| assign io_axi_ar_payload_id = read_io_axiR_ar_payload_id; |
| assign io_axi_ar_payload_len = read_io_axiR_ar_payload_len; |
| assign io_axi_ar_payload_size = read_io_axiR_ar_payload_size; |
| assign io_axi_ar_payload_burst = read_io_axiR_ar_payload_burst; |
| assign io_axi_r_ready = read_io_axiR_r_ready; |
| assign io_axi_aw_valid = write_io_axiW_aw_valid; |
| assign io_axi_aw_payload_addr = write_io_axiW_aw_payload_addr; |
| assign io_axi_aw_payload_id = write_io_axiW_aw_payload_id; |
| assign io_axi_aw_payload_len = write_io_axiW_aw_payload_len; |
| assign io_axi_aw_payload_size = write_io_axiW_aw_payload_size; |
| assign io_axi_aw_payload_burst = write_io_axiW_aw_payload_burst; |
| assign io_axi_w_valid = write_io_axiW_w_valid; |
| assign io_axi_w_payload_data = write_io_axiW_w_payload_data; |
| assign io_axi_w_payload_strb = write_io_axiW_w_payload_strb; |
| assign io_axi_w_payload_last = write_io_axiW_w_payload_last; |
| assign io_axi_b_ready = write_io_axiW_b_ready; |
| assign _zz_1 = 1'b0; |
| |
| endmodule |
| |
| module StreamFifo_5 ( |
| input io_push_valid, |
| output io_push_ready, |
| input [31:0] io_push_payload_data, |
| input [3:0] io_push_payload_id, |
| input [1:0] io_push_payload_resp, |
| input io_push_payload_last, |
| output io_pop_valid, |
| input io_pop_ready, |
| output [31:0] io_pop_payload_data, |
| output [3:0] io_pop_payload_id, |
| output [1:0] io_pop_payload_resp, |
| output io_pop_payload_last, |
| input io_flush, |
| output [6:0] io_occupancy, |
| output [6:0] io_availability, |
| input clk, |
| input reset |
| ); |
| reg [38:0] _zz_4; |
| wire [0:0] _zz_5; |
| wire [5:0] _zz_6; |
| wire [0:0] _zz_7; |
| wire [5:0] _zz_8; |
| wire [0:0] _zz_9; |
| wire [5:0] _zz_10; |
| wire _zz_11; |
| wire [38:0] _zz_12; |
| reg _zz_1; |
| reg logic_pushPtr_willIncrement; |
| reg logic_pushPtr_willClear; |
| reg [5:0] logic_pushPtr_valueNext; |
| reg [5:0] logic_pushPtr_value; |
| wire logic_pushPtr_willOverflowIfInc; |
| wire logic_pushPtr_willOverflow; |
| reg logic_popPtr_willIncrement; |
| reg logic_popPtr_willClear; |
| reg [5:0] logic_popPtr_valueNext; |
| reg [5:0] logic_popPtr_value; |
| wire logic_popPtr_willOverflowIfInc; |
| wire logic_popPtr_willOverflow; |
| wire logic_ptrMatch; |
| reg logic_risingOccupancy; |
| wire logic_pushing; |
| wire logic_popping; |
| wire logic_empty; |
| wire logic_full; |
| reg _zz_2; |
| wire [38:0] _zz_3; |
| wire [5:0] logic_ptrDif; |
| reg [38:0] logic_ram [0:63]; |
| |
| assign _zz_5 = logic_pushPtr_willIncrement; |
| assign _zz_6 = {5'd0, _zz_5}; |
| assign _zz_7 = logic_popPtr_willIncrement; |
| assign _zz_8 = {5'd0, _zz_7}; |
| assign _zz_9 = _zz_3[38 : 38]; |
| assign _zz_10 = (logic_popPtr_value - logic_pushPtr_value); |
| assign _zz_11 = 1'b1; |
| assign _zz_12 = {io_push_payload_last,{io_push_payload_resp,{io_push_payload_id,io_push_payload_data}}}; |
| always @ (posedge clk) begin |
| if(_zz_11) begin |
| _zz_4 <= logic_ram[logic_popPtr_valueNext]; |
| end |
| end |
| |
| always @ (posedge clk) begin |
| if(_zz_1) begin |
| logic_ram[logic_pushPtr_value] <= _zz_12; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_1 = 1'b0; |
| if(logic_pushing)begin |
| _zz_1 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willIncrement = 1'b0; |
| if(logic_pushing)begin |
| logic_pushPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_pushPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_pushPtr_willOverflowIfInc = (logic_pushPtr_value == 6'h3f); |
| assign logic_pushPtr_willOverflow = (logic_pushPtr_willOverflowIfInc && logic_pushPtr_willIncrement); |
| always @ (*) begin |
| logic_pushPtr_valueNext = (logic_pushPtr_value + _zz_6); |
| if(logic_pushPtr_willClear)begin |
| logic_pushPtr_valueNext = 6'h0; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willIncrement = 1'b0; |
| if(logic_popping)begin |
| logic_popPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_popPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_popPtr_willOverflowIfInc = (logic_popPtr_value == 6'h3f); |
| assign logic_popPtr_willOverflow = (logic_popPtr_willOverflowIfInc && logic_popPtr_willIncrement); |
| always @ (*) begin |
| logic_popPtr_valueNext = (logic_popPtr_value + _zz_8); |
| if(logic_popPtr_willClear)begin |
| logic_popPtr_valueNext = 6'h0; |
| end |
| end |
| |
| assign logic_ptrMatch = (logic_pushPtr_value == logic_popPtr_value); |
| assign logic_pushing = (io_push_valid && io_push_ready); |
| assign logic_popping = (io_pop_valid && io_pop_ready); |
| assign logic_empty = (logic_ptrMatch && (! logic_risingOccupancy)); |
| assign logic_full = (logic_ptrMatch && logic_risingOccupancy); |
| assign io_push_ready = (! logic_full); |
| assign io_pop_valid = ((! logic_empty) && (! (_zz_2 && (! logic_full)))); |
| assign _zz_3 = _zz_4; |
| assign io_pop_payload_data = _zz_3[31 : 0]; |
| assign io_pop_payload_id = _zz_3[35 : 32]; |
| assign io_pop_payload_resp = _zz_3[37 : 36]; |
| assign io_pop_payload_last = _zz_9[0]; |
| assign logic_ptrDif = (logic_pushPtr_value - logic_popPtr_value); |
| assign io_occupancy = {(logic_risingOccupancy && logic_ptrMatch),logic_ptrDif}; |
| assign io_availability = {((! logic_risingOccupancy) && logic_ptrMatch),_zz_10}; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| logic_pushPtr_value <= 6'h0; |
| logic_popPtr_value <= 6'h0; |
| logic_risingOccupancy <= 1'b0; |
| _zz_2 <= 1'b0; |
| end else begin |
| logic_pushPtr_value <= logic_pushPtr_valueNext; |
| logic_popPtr_value <= logic_popPtr_valueNext; |
| _zz_2 <= (logic_popPtr_valueNext == logic_pushPtr_value); |
| if((logic_pushing != logic_popping))begin |
| logic_risingOccupancy <= logic_pushing; |
| end |
| if(io_flush)begin |
| logic_risingOccupancy <= 1'b0; |
| end |
| end |
| end |
| |
| |
| endmodule |
| |
| //StreamFifo_1 replaced by StreamFifo_1 |
| |
| module StreamFifo_3 ( |
| input io_push_valid, |
| output io_push_ready, |
| input [3:0] io_push_payload_id, |
| input [1:0] io_push_payload_resp, |
| output io_pop_valid, |
| input io_pop_ready, |
| output [3:0] io_pop_payload_id, |
| output [1:0] io_pop_payload_resp, |
| input io_flush, |
| output [6:0] io_occupancy, |
| output [6:0] io_availability, |
| input clk, |
| input reset |
| ); |
| reg [5:0] _zz_4; |
| wire [0:0] _zz_5; |
| wire [5:0] _zz_6; |
| wire [0:0] _zz_7; |
| wire [5:0] _zz_8; |
| wire [5:0] _zz_9; |
| wire _zz_10; |
| wire [5:0] _zz_11; |
| reg _zz_1; |
| reg logic_pushPtr_willIncrement; |
| reg logic_pushPtr_willClear; |
| reg [5:0] logic_pushPtr_valueNext; |
| reg [5:0] logic_pushPtr_value; |
| wire logic_pushPtr_willOverflowIfInc; |
| wire logic_pushPtr_willOverflow; |
| reg logic_popPtr_willIncrement; |
| reg logic_popPtr_willClear; |
| reg [5:0] logic_popPtr_valueNext; |
| reg [5:0] logic_popPtr_value; |
| wire logic_popPtr_willOverflowIfInc; |
| wire logic_popPtr_willOverflow; |
| wire logic_ptrMatch; |
| reg logic_risingOccupancy; |
| wire logic_pushing; |
| wire logic_popping; |
| wire logic_empty; |
| wire logic_full; |
| reg _zz_2; |
| wire [5:0] _zz_3; |
| wire [5:0] logic_ptrDif; |
| reg [5:0] logic_ram [0:63]; |
| |
| assign _zz_5 = logic_pushPtr_willIncrement; |
| assign _zz_6 = {5'd0, _zz_5}; |
| assign _zz_7 = logic_popPtr_willIncrement; |
| assign _zz_8 = {5'd0, _zz_7}; |
| assign _zz_9 = (logic_popPtr_value - logic_pushPtr_value); |
| assign _zz_10 = 1'b1; |
| assign _zz_11 = {io_push_payload_resp,io_push_payload_id}; |
| always @ (posedge clk) begin |
| if(_zz_10) begin |
| _zz_4 <= logic_ram[logic_popPtr_valueNext]; |
| end |
| end |
| |
| always @ (posedge clk) begin |
| if(_zz_1) begin |
| logic_ram[logic_pushPtr_value] <= _zz_11; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_1 = 1'b0; |
| if(logic_pushing)begin |
| _zz_1 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willIncrement = 1'b0; |
| if(logic_pushing)begin |
| logic_pushPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_pushPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_pushPtr_willOverflowIfInc = (logic_pushPtr_value == 6'h3f); |
| assign logic_pushPtr_willOverflow = (logic_pushPtr_willOverflowIfInc && logic_pushPtr_willIncrement); |
| always @ (*) begin |
| logic_pushPtr_valueNext = (logic_pushPtr_value + _zz_6); |
| if(logic_pushPtr_willClear)begin |
| logic_pushPtr_valueNext = 6'h0; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willIncrement = 1'b0; |
| if(logic_popping)begin |
| logic_popPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_popPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_popPtr_willOverflowIfInc = (logic_popPtr_value == 6'h3f); |
| assign logic_popPtr_willOverflow = (logic_popPtr_willOverflowIfInc && logic_popPtr_willIncrement); |
| always @ (*) begin |
| logic_popPtr_valueNext = (logic_popPtr_value + _zz_8); |
| if(logic_popPtr_willClear)begin |
| logic_popPtr_valueNext = 6'h0; |
| end |
| end |
| |
| assign logic_ptrMatch = (logic_pushPtr_value == logic_popPtr_value); |
| assign logic_pushing = (io_push_valid && io_push_ready); |
| assign logic_popping = (io_pop_valid && io_pop_ready); |
| assign logic_empty = (logic_ptrMatch && (! logic_risingOccupancy)); |
| assign logic_full = (logic_ptrMatch && logic_risingOccupancy); |
| assign io_push_ready = (! logic_full); |
| assign io_pop_valid = ((! logic_empty) && (! (_zz_2 && (! logic_full)))); |
| assign _zz_3 = _zz_4; |
| assign io_pop_payload_id = _zz_3[3 : 0]; |
| assign io_pop_payload_resp = _zz_3[5 : 4]; |
| assign logic_ptrDif = (logic_pushPtr_value - logic_popPtr_value); |
| assign io_occupancy = {(logic_risingOccupancy && logic_ptrMatch),logic_ptrDif}; |
| assign io_availability = {((! logic_risingOccupancy) && logic_ptrMatch),_zz_9}; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| logic_pushPtr_value <= 6'h0; |
| logic_popPtr_value <= 6'h0; |
| logic_risingOccupancy <= 1'b0; |
| _zz_2 <= 1'b0; |
| end else begin |
| logic_pushPtr_value <= logic_pushPtr_valueNext; |
| logic_popPtr_value <= logic_popPtr_valueNext; |
| _zz_2 <= (logic_popPtr_valueNext == logic_pushPtr_value); |
| if((logic_pushing != logic_popping))begin |
| logic_risingOccupancy <= logic_pushing; |
| end |
| if(io_flush)begin |
| logic_risingOccupancy <= 1'b0; |
| end |
| end |
| end |
| |
| |
| endmodule |
| |
| module StreamFifo_2 ( |
| input io_push_valid, |
| output io_push_ready, |
| input [31:0] io_push_payload_data, |
| input [3:0] io_push_payload_strb, |
| input io_push_payload_last, |
| output io_pop_valid, |
| input io_pop_ready, |
| output [31:0] io_pop_payload_data, |
| output [3:0] io_pop_payload_strb, |
| output io_pop_payload_last, |
| input io_flush, |
| output [6:0] io_occupancy, |
| output [6:0] io_availability, |
| input clk, |
| input reset |
| ); |
| reg [36:0] _zz_4; |
| wire [0:0] _zz_5; |
| wire [5:0] _zz_6; |
| wire [0:0] _zz_7; |
| wire [5:0] _zz_8; |
| wire [0:0] _zz_9; |
| wire [5:0] _zz_10; |
| wire _zz_11; |
| wire [36:0] _zz_12; |
| reg _zz_1; |
| reg logic_pushPtr_willIncrement; |
| reg logic_pushPtr_willClear; |
| reg [5:0] logic_pushPtr_valueNext; |
| reg [5:0] logic_pushPtr_value; |
| wire logic_pushPtr_willOverflowIfInc; |
| wire logic_pushPtr_willOverflow; |
| reg logic_popPtr_willIncrement; |
| reg logic_popPtr_willClear; |
| reg [5:0] logic_popPtr_valueNext; |
| reg [5:0] logic_popPtr_value; |
| wire logic_popPtr_willOverflowIfInc; |
| wire logic_popPtr_willOverflow; |
| wire logic_ptrMatch; |
| reg logic_risingOccupancy; |
| wire logic_pushing; |
| wire logic_popping; |
| wire logic_empty; |
| wire logic_full; |
| reg _zz_2; |
| wire [36:0] _zz_3; |
| wire [5:0] logic_ptrDif; |
| reg [36:0] logic_ram [0:63]; |
| |
| assign _zz_5 = logic_pushPtr_willIncrement; |
| assign _zz_6 = {5'd0, _zz_5}; |
| assign _zz_7 = logic_popPtr_willIncrement; |
| assign _zz_8 = {5'd0, _zz_7}; |
| assign _zz_9 = _zz_3[36 : 36]; |
| assign _zz_10 = (logic_popPtr_value - logic_pushPtr_value); |
| assign _zz_11 = 1'b1; |
| assign _zz_12 = {io_push_payload_last,{io_push_payload_strb,io_push_payload_data}}; |
| always @ (posedge clk) begin |
| if(_zz_11) begin |
| _zz_4 <= logic_ram[logic_popPtr_valueNext]; |
| end |
| end |
| |
| always @ (posedge clk) begin |
| if(_zz_1) begin |
| logic_ram[logic_pushPtr_value] <= _zz_12; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_1 = 1'b0; |
| if(logic_pushing)begin |
| _zz_1 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willIncrement = 1'b0; |
| if(logic_pushing)begin |
| logic_pushPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_pushPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_pushPtr_willOverflowIfInc = (logic_pushPtr_value == 6'h3f); |
| assign logic_pushPtr_willOverflow = (logic_pushPtr_willOverflowIfInc && logic_pushPtr_willIncrement); |
| always @ (*) begin |
| logic_pushPtr_valueNext = (logic_pushPtr_value + _zz_6); |
| if(logic_pushPtr_willClear)begin |
| logic_pushPtr_valueNext = 6'h0; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willIncrement = 1'b0; |
| if(logic_popping)begin |
| logic_popPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_popPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_popPtr_willOverflowIfInc = (logic_popPtr_value == 6'h3f); |
| assign logic_popPtr_willOverflow = (logic_popPtr_willOverflowIfInc && logic_popPtr_willIncrement); |
| always @ (*) begin |
| logic_popPtr_valueNext = (logic_popPtr_value + _zz_8); |
| if(logic_popPtr_willClear)begin |
| logic_popPtr_valueNext = 6'h0; |
| end |
| end |
| |
| assign logic_ptrMatch = (logic_pushPtr_value == logic_popPtr_value); |
| assign logic_pushing = (io_push_valid && io_push_ready); |
| assign logic_popping = (io_pop_valid && io_pop_ready); |
| assign logic_empty = (logic_ptrMatch && (! logic_risingOccupancy)); |
| assign logic_full = (logic_ptrMatch && logic_risingOccupancy); |
| assign io_push_ready = (! logic_full); |
| assign io_pop_valid = ((! logic_empty) && (! (_zz_2 && (! logic_full)))); |
| assign _zz_3 = _zz_4; |
| assign io_pop_payload_data = _zz_3[31 : 0]; |
| assign io_pop_payload_strb = _zz_3[35 : 32]; |
| assign io_pop_payload_last = _zz_9[0]; |
| assign logic_ptrDif = (logic_pushPtr_value - logic_popPtr_value); |
| assign io_occupancy = {(logic_risingOccupancy && logic_ptrMatch),logic_ptrDif}; |
| assign io_availability = {((! logic_risingOccupancy) && logic_ptrMatch),_zz_10}; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| logic_pushPtr_value <= 6'h0; |
| logic_popPtr_value <= 6'h0; |
| logic_risingOccupancy <= 1'b0; |
| _zz_2 <= 1'b0; |
| end else begin |
| logic_pushPtr_value <= logic_pushPtr_valueNext; |
| logic_popPtr_value <= logic_popPtr_valueNext; |
| _zz_2 <= (logic_popPtr_valueNext == logic_pushPtr_value); |
| if((logic_pushing != logic_popping))begin |
| logic_risingOccupancy <= logic_pushing; |
| end |
| if(io_flush)begin |
| logic_risingOccupancy <= 1'b0; |
| end |
| end |
| end |
| |
| |
| endmodule |
| |
| module StreamFifo_1 ( |
| input io_push_valid, |
| output io_push_ready, |
| input [31:0] io_push_payload_addr, |
| input [3:0] io_push_payload_id, |
| input [7:0] io_push_payload_len, |
| input [2:0] io_push_payload_size, |
| input [1:0] io_push_payload_burst, |
| output io_pop_valid, |
| input io_pop_ready, |
| output [31:0] io_pop_payload_addr, |
| output [3:0] io_pop_payload_id, |
| output [7:0] io_pop_payload_len, |
| output [2:0] io_pop_payload_size, |
| output [1:0] io_pop_payload_burst, |
| input io_flush, |
| output [6:0] io_occupancy, |
| output [6:0] io_availability, |
| input clk, |
| input reset |
| ); |
| reg [48:0] _zz_4; |
| wire [0:0] _zz_5; |
| wire [5:0] _zz_6; |
| wire [0:0] _zz_7; |
| wire [5:0] _zz_8; |
| wire [5:0] _zz_9; |
| wire _zz_10; |
| wire [48:0] _zz_11; |
| reg _zz_1; |
| reg logic_pushPtr_willIncrement; |
| reg logic_pushPtr_willClear; |
| reg [5:0] logic_pushPtr_valueNext; |
| reg [5:0] logic_pushPtr_value; |
| wire logic_pushPtr_willOverflowIfInc; |
| wire logic_pushPtr_willOverflow; |
| reg logic_popPtr_willIncrement; |
| reg logic_popPtr_willClear; |
| reg [5:0] logic_popPtr_valueNext; |
| reg [5:0] logic_popPtr_value; |
| wire logic_popPtr_willOverflowIfInc; |
| wire logic_popPtr_willOverflow; |
| wire logic_ptrMatch; |
| reg logic_risingOccupancy; |
| wire logic_pushing; |
| wire logic_popping; |
| wire logic_empty; |
| wire logic_full; |
| reg _zz_2; |
| wire [48:0] _zz_3; |
| wire [5:0] logic_ptrDif; |
| reg [48:0] logic_ram [0:63]; |
| |
| assign _zz_5 = logic_pushPtr_willIncrement; |
| assign _zz_6 = {5'd0, _zz_5}; |
| assign _zz_7 = logic_popPtr_willIncrement; |
| assign _zz_8 = {5'd0, _zz_7}; |
| assign _zz_9 = (logic_popPtr_value - logic_pushPtr_value); |
| assign _zz_10 = 1'b1; |
| assign _zz_11 = {io_push_payload_burst,{io_push_payload_size,{io_push_payload_len,{io_push_payload_id,io_push_payload_addr}}}}; |
| always @ (posedge clk) begin |
| if(_zz_10) begin |
| _zz_4 <= logic_ram[logic_popPtr_valueNext]; |
| end |
| end |
| |
| always @ (posedge clk) begin |
| if(_zz_1) begin |
| logic_ram[logic_pushPtr_value] <= _zz_11; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_1 = 1'b0; |
| if(logic_pushing)begin |
| _zz_1 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willIncrement = 1'b0; |
| if(logic_pushing)begin |
| logic_pushPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_pushPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_pushPtr_willOverflowIfInc = (logic_pushPtr_value == 6'h3f); |
| assign logic_pushPtr_willOverflow = (logic_pushPtr_willOverflowIfInc && logic_pushPtr_willIncrement); |
| always @ (*) begin |
| logic_pushPtr_valueNext = (logic_pushPtr_value + _zz_6); |
| if(logic_pushPtr_willClear)begin |
| logic_pushPtr_valueNext = 6'h0; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willIncrement = 1'b0; |
| if(logic_popping)begin |
| logic_popPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_popPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_popPtr_willOverflowIfInc = (logic_popPtr_value == 6'h3f); |
| assign logic_popPtr_willOverflow = (logic_popPtr_willOverflowIfInc && logic_popPtr_willIncrement); |
| always @ (*) begin |
| logic_popPtr_valueNext = (logic_popPtr_value + _zz_8); |
| if(logic_popPtr_willClear)begin |
| logic_popPtr_valueNext = 6'h0; |
| end |
| end |
| |
| assign logic_ptrMatch = (logic_pushPtr_value == logic_popPtr_value); |
| assign logic_pushing = (io_push_valid && io_push_ready); |
| assign logic_popping = (io_pop_valid && io_pop_ready); |
| assign logic_empty = (logic_ptrMatch && (! logic_risingOccupancy)); |
| assign logic_full = (logic_ptrMatch && logic_risingOccupancy); |
| assign io_push_ready = (! logic_full); |
| assign io_pop_valid = ((! logic_empty) && (! (_zz_2 && (! logic_full)))); |
| assign _zz_3 = _zz_4; |
| assign io_pop_payload_addr = _zz_3[31 : 0]; |
| assign io_pop_payload_id = _zz_3[35 : 32]; |
| assign io_pop_payload_len = _zz_3[43 : 36]; |
| assign io_pop_payload_size = _zz_3[46 : 44]; |
| assign io_pop_payload_burst = _zz_3[48 : 47]; |
| assign logic_ptrDif = (logic_pushPtr_value - logic_popPtr_value); |
| assign io_occupancy = {(logic_risingOccupancy && logic_ptrMatch),logic_ptrDif}; |
| assign io_availability = {((! logic_risingOccupancy) && logic_ptrMatch),_zz_9}; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| logic_pushPtr_value <= 6'h0; |
| logic_popPtr_value <= 6'h0; |
| logic_risingOccupancy <= 1'b0; |
| _zz_2 <= 1'b0; |
| end else begin |
| logic_pushPtr_value <= logic_pushPtr_valueNext; |
| logic_popPtr_value <= logic_popPtr_valueNext; |
| _zz_2 <= (logic_popPtr_valueNext == logic_pushPtr_value); |
| if((logic_pushing != logic_popping))begin |
| logic_risingOccupancy <= logic_pushing; |
| end |
| if(io_flush)begin |
| logic_risingOccupancy <= 1'b0; |
| end |
| end |
| end |
| |
| |
| endmodule |
| |
| module StreamFifo ( |
| input io_push_valid, |
| output io_push_ready, |
| input [31:0] io_push_payload, |
| output io_pop_valid, |
| input io_pop_ready, |
| output [31:0] io_pop_payload, |
| input io_flush, |
| output [4:0] io_occupancy, |
| output [4:0] io_availability, |
| input clk, |
| input reset |
| ); |
| reg [31:0] _zz_3; |
| wire [0:0] _zz_4; |
| wire [3:0] _zz_5; |
| wire [0:0] _zz_6; |
| wire [3:0] _zz_7; |
| wire [3:0] _zz_8; |
| wire _zz_9; |
| reg _zz_1; |
| reg logic_pushPtr_willIncrement; |
| reg logic_pushPtr_willClear; |
| reg [3:0] logic_pushPtr_valueNext; |
| reg [3:0] logic_pushPtr_value; |
| wire logic_pushPtr_willOverflowIfInc; |
| wire logic_pushPtr_willOverflow; |
| reg logic_popPtr_willIncrement; |
| reg logic_popPtr_willClear; |
| reg [3:0] logic_popPtr_valueNext; |
| reg [3:0] logic_popPtr_value; |
| wire logic_popPtr_willOverflowIfInc; |
| wire logic_popPtr_willOverflow; |
| wire logic_ptrMatch; |
| reg logic_risingOccupancy; |
| wire logic_pushing; |
| wire logic_popping; |
| wire logic_empty; |
| wire logic_full; |
| reg _zz_2; |
| wire [3:0] logic_ptrDif; |
| reg [31:0] logic_ram [0:15]; |
| |
| assign _zz_4 = logic_pushPtr_willIncrement; |
| assign _zz_5 = {3'd0, _zz_4}; |
| assign _zz_6 = logic_popPtr_willIncrement; |
| assign _zz_7 = {3'd0, _zz_6}; |
| assign _zz_8 = (logic_popPtr_value - logic_pushPtr_value); |
| assign _zz_9 = 1'b1; |
| always @ (posedge clk) begin |
| if(_zz_9) begin |
| _zz_3 <= logic_ram[logic_popPtr_valueNext]; |
| end |
| end |
| |
| always @ (posedge clk) begin |
| if(_zz_1) begin |
| logic_ram[logic_pushPtr_value] <= io_push_payload; |
| end |
| end |
| |
| always @ (*) begin |
| _zz_1 = 1'b0; |
| if(logic_pushing)begin |
| _zz_1 = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willIncrement = 1'b0; |
| if(logic_pushing)begin |
| logic_pushPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_pushPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_pushPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_pushPtr_willOverflowIfInc = (logic_pushPtr_value == 4'b1111); |
| assign logic_pushPtr_willOverflow = (logic_pushPtr_willOverflowIfInc && logic_pushPtr_willIncrement); |
| always @ (*) begin |
| logic_pushPtr_valueNext = (logic_pushPtr_value + _zz_5); |
| if(logic_pushPtr_willClear)begin |
| logic_pushPtr_valueNext = 4'b0000; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willIncrement = 1'b0; |
| if(logic_popping)begin |
| logic_popPtr_willIncrement = 1'b1; |
| end |
| end |
| |
| always @ (*) begin |
| logic_popPtr_willClear = 1'b0; |
| if(io_flush)begin |
| logic_popPtr_willClear = 1'b1; |
| end |
| end |
| |
| assign logic_popPtr_willOverflowIfInc = (logic_popPtr_value == 4'b1111); |
| assign logic_popPtr_willOverflow = (logic_popPtr_willOverflowIfInc && logic_popPtr_willIncrement); |
| always @ (*) begin |
| logic_popPtr_valueNext = (logic_popPtr_value + _zz_7); |
| if(logic_popPtr_willClear)begin |
| logic_popPtr_valueNext = 4'b0000; |
| end |
| end |
| |
| assign logic_ptrMatch = (logic_pushPtr_value == logic_popPtr_value); |
| assign logic_pushing = (io_push_valid && io_push_ready); |
| assign logic_popping = (io_pop_valid && io_pop_ready); |
| assign logic_empty = (logic_ptrMatch && (! logic_risingOccupancy)); |
| assign logic_full = (logic_ptrMatch && logic_risingOccupancy); |
| assign io_push_ready = (! logic_full); |
| assign io_pop_valid = ((! logic_empty) && (! (_zz_2 && (! logic_full)))); |
| assign io_pop_payload = _zz_3; |
| assign logic_ptrDif = (logic_pushPtr_value - logic_popPtr_value); |
| assign io_occupancy = {(logic_risingOccupancy && logic_ptrMatch),logic_ptrDif}; |
| assign io_availability = {((! logic_risingOccupancy) && logic_ptrMatch),_zz_8}; |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| logic_pushPtr_value <= 4'b0000; |
| logic_popPtr_value <= 4'b0000; |
| logic_risingOccupancy <= 1'b0; |
| _zz_2 <= 1'b0; |
| end else begin |
| logic_pushPtr_value <= logic_pushPtr_valueNext; |
| logic_popPtr_value <= logic_popPtr_valueNext; |
| _zz_2 <= (logic_popPtr_valueNext == logic_pushPtr_value); |
| if((logic_pushing != logic_popping))begin |
| logic_risingOccupancy <= logic_pushing; |
| end |
| if(io_flush)begin |
| logic_risingOccupancy <= 1'b0; |
| end |
| end |
| end |
| |
| |
| endmodule |
| |
| module DmaWrite ( |
| input io_din_valid, |
| output io_din_ready, |
| input [31:0] io_din_payload, |
| input [31:0] io_param_sar, |
| input [31:0] io_param_dar, |
| input [7:0] io_param_xsize, |
| input [7:0] io_param_ysize, |
| input [7:0] io_param_srcystep, |
| input [7:0] io_param_dstystep, |
| input [31:0] io_param_llr, |
| input io_param_bf, |
| input io_param_cf, |
| output io_axiW_aw_valid, |
| input io_axiW_aw_ready, |
| output [31:0] io_axiW_aw_payload_addr, |
| output [3:0] io_axiW_aw_payload_id, |
| output [7:0] io_axiW_aw_payload_len, |
| output [2:0] io_axiW_aw_payload_size, |
| output [1:0] io_axiW_aw_payload_burst, |
| output io_axiW_w_valid, |
| input io_axiW_w_ready, |
| output [31:0] io_axiW_w_payload_data, |
| output [3:0] io_axiW_w_payload_strb, |
| output io_axiW_w_payload_last, |
| input io_axiW_b_valid, |
| output io_axiW_b_ready, |
| input [3:0] io_axiW_b_payload_id, |
| input [1:0] io_axiW_b_payload_resp, |
| input io_ctrl_start, |
| output io_ctrl_busy, |
| output reg io_ctrl_done, |
| input io_ctrl_halt, |
| input clk, |
| input reset |
| ); |
| wire _zz_1; |
| wire _zz_2; |
| wire _zz_3; |
| wire _zz_4; |
| wire _zz_5; |
| wire _zz_6; |
| wire _zz_7; |
| wire [31:0] _zz_8; |
| wire [9:0] _zz_9; |
| wire [31:0] _zz_10; |
| wire [31:0] _zz_11; |
| wire [0:0] _zz_12; |
| wire [3:0] _zz_13; |
| wire [7:0] _zz_14; |
| wire [7:0] _zz_15; |
| wire [7:0] _zz_16; |
| wire [7:0] _zz_17; |
| wire [31:0] _zz_18; |
| wire [11:0] _zz_19; |
| wire [12:0] _zz_20; |
| wire [7:0] _zz_21; |
| wire [12:0] _zz_22; |
| wire [10:0] _zz_23; |
| wire [5:0] _zz_24; |
| wire [5:0] _zz_25; |
| wire [5:0] _zz_26; |
| wire [5:0] _zz_27; |
| wire [5:0] _zz_28; |
| wire [5:0] _zz_29; |
| wire [3:0] _zz_30; |
| wire [3:0] _zz_31; |
| wire [2:0] _zz_32; |
| wire [255:0] _zz_33; |
| wire [255:0] _zz_34; |
| wire [31:0] _zz_35; |
| wire [31:0] _zz_36; |
| wire [31:0] _zz_37; |
| reg busyReg; |
| reg awValidReg; |
| reg [7:0] burstLenReg; |
| reg [7:0] nxtBurstLen; |
| reg [31:0] curRowAddrReg; |
| reg [1:0] alignOffsetReg; |
| wire [1:0] alignOffsetNxt; |
| reg [31:0] curAlignedAddrReg; |
| wire [31:0] curAlignedRowAddr; |
| wire [31:0] nxtAlignedAddr; |
| wire [7:0] dstRowGap; |
| wire [31:0] nxtRowAddr; |
| reg beatCnt_willIncrement; |
| reg beatCnt_willClear; |
| reg [3:0] beatCnt_valueNext; |
| reg [3:0] beatCnt_value; |
| wire beatCnt_willOverflowIfInc; |
| wire beatCnt_willOverflow; |
| wire runSignal; |
| wire idMatch; |
| reg bReadyReg; |
| reg [31:0] dinPrevReg; |
| reg [2:0] curBeatBytes; |
| reg [3:0] strobe; |
| reg [31:0] payload; |
| reg dinReady; |
| reg wValid; |
| reg [7:0] rowWriteCntReg; |
| wire [7:0] rowWriteCntNxt; |
| reg [7:0] colByteWriteCntReg; |
| wire [7:0] colByteWriteCntNxt; |
| reg [7:0] colRemainByteCntReg; |
| wire [7:0] colRemainByteCntNxt; |
| reg rowFirstBurstReg; |
| reg rowFirstBeatReg; |
| wire rowLastBeat; |
| reg nxtRow; |
| wire fsmW_wantExit; |
| reg fsmW_wantStart; |
| wire [31:0] computeNextWriteBurstLen_nxtAlignedRowAddr; |
| wire [12:0] computeNextWriteBurstLen_tmpBurstByteSizeIn4K; |
| wire [7:0] computeNextWriteBurstLen_nxtAlignedRowByteSize; |
| wire computeNextWriteBurstLen_rowCross4K; |
| reg `fsmW_enumDefinition_binary_sequential_type fsmW_stateReg; |
| reg `fsmW_enumDefinition_binary_sequential_type fsmW_stateNext; |
| `ifndef SYNTHESIS |
| reg [71:0] fsmW_stateReg_string; |
| reg [71:0] fsmW_stateNext_string; |
| `endif |
| |
| |
| assign _zz_1 = ((runSignal && io_axiW_b_valid) && io_axiW_b_ready); |
| assign _zz_2 = (colByteWriteCntReg < io_param_xsize); |
| assign _zz_3 = (rowWriteCntNxt < io_param_ysize); |
| assign _zz_4 = ((runSignal && io_axiW_w_valid) && io_axiW_w_ready); |
| assign _zz_5 = (io_axiW_w_valid && io_axiW_w_ready); |
| assign _zz_6 = (((runSignal && io_axiW_w_payload_last) && io_axiW_w_valid) && io_axiW_w_ready); |
| assign _zz_7 = (runSignal && io_ctrl_start); |
| assign _zz_8 = {30'd0, alignOffsetReg}; |
| assign _zz_9 = ({2'd0,burstLenReg} <<< 2); |
| assign _zz_10 = {22'd0, _zz_9}; |
| assign _zz_11 = {24'd0, dstRowGap}; |
| assign _zz_12 = beatCnt_willIncrement; |
| assign _zz_13 = {3'd0, _zz_12}; |
| assign _zz_14 = {4'd0, beatCnt_value}; |
| assign _zz_15 = (burstLenReg - 8'h01); |
| assign _zz_16 = {5'd0, curBeatBytes}; |
| assign _zz_17 = {5'd0, curBeatBytes}; |
| assign _zz_18 = {30'd0, alignOffsetNxt}; |
| assign _zz_19 = computeNextWriteBurstLen_nxtAlignedRowAddr[11 : 0]; |
| assign _zz_20 = {1'd0, _zz_19}; |
| assign _zz_21 = {6'd0, alignOffsetNxt}; |
| assign _zz_22 = {5'd0, computeNextWriteBurstLen_nxtAlignedRowByteSize}; |
| assign _zz_23 = (computeNextWriteBurstLen_tmpBurstByteSizeIn4K >>> 2); |
| assign _zz_24 = (_zz_25 + 6'h01); |
| assign _zz_25 = (computeNextWriteBurstLen_nxtAlignedRowByteSize >>> 2); |
| assign _zz_26 = (computeNextWriteBurstLen_nxtAlignedRowByteSize >>> 2); |
| assign _zz_27 = (_zz_28 + 6'h01); |
| assign _zz_28 = (colRemainByteCntReg >>> 2); |
| assign _zz_29 = (colRemainByteCntReg >>> 2); |
| assign _zz_30 = (_zz_31 - 4'b0001); |
| assign _zz_31 = ({3'd0,1'b1} <<< alignOffsetReg); |
| assign _zz_32 = {1'd0, alignOffsetReg}; |
| assign _zz_33 = (_zz_34 - 256'h0000000000000000000000000000000000000000000000000000000000000001); |
| assign _zz_34 = ({255'd0,1'b1} <<< colRemainByteCntReg); |
| assign _zz_35 = {24'd0, dstRowGap}; |
| assign _zz_36 = {30'd0, alignOffsetNxt}; |
| assign _zz_37 = {30'd0, alignOffsetNxt}; |
| `ifndef SYNTHESIS |
| always @(*) begin |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_BOOT : fsmW_stateReg_string = "fsmW_BOOT"; |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : fsmW_stateReg_string = "fsmW_IDLE"; |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : fsmW_stateReg_string = "fsmW_W "; |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : fsmW_stateReg_string = "fsmW_LAST"; |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : fsmW_stateReg_string = "fsmW_B "; |
| default : fsmW_stateReg_string = "?????????"; |
| endcase |
| end |
| always @(*) begin |
| case(fsmW_stateNext) |
| `fsmW_enumDefinition_binary_sequential_fsmW_BOOT : fsmW_stateNext_string = "fsmW_BOOT"; |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : fsmW_stateNext_string = "fsmW_IDLE"; |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : fsmW_stateNext_string = "fsmW_W "; |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : fsmW_stateNext_string = "fsmW_LAST"; |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : fsmW_stateNext_string = "fsmW_B "; |
| default : fsmW_stateNext_string = "?????????"; |
| endcase |
| end |
| `endif |
| |
| always @ (*) begin |
| io_ctrl_done = 1'b0; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| if(_zz_1)begin |
| if(! _zz_2) begin |
| if(! _zz_3) begin |
| io_ctrl_done = 1'b1; |
| end |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| assign io_ctrl_busy = busyReg; |
| assign curAlignedRowAddr = (curRowAddrReg - _zz_8); |
| assign nxtAlignedAddr = (curAlignedAddrReg + _zz_10); |
| assign dstRowGap = (io_param_xsize + io_param_dstystep); |
| assign nxtRowAddr = (curRowAddrReg + _zz_11); |
| always @ (*) begin |
| beatCnt_willIncrement = 1'b0; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| if(_zz_4)begin |
| beatCnt_willIncrement = 1'b1; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| beatCnt_willClear = 1'b0; |
| if(io_axiW_w_payload_last)begin |
| beatCnt_willClear = 1'b1; |
| end |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| if(runSignal)begin |
| if(_zz_5)begin |
| if(io_axiW_w_payload_last)begin |
| beatCnt_willClear = 1'b1; |
| end |
| end |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| if(_zz_6)begin |
| beatCnt_willClear = 1'b1; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| end |
| default : begin |
| end |
| endcase |
| if(((! (fsmW_stateReg == `fsmW_enumDefinition_binary_sequential_fsmW_W)) && (fsmW_stateNext == `fsmW_enumDefinition_binary_sequential_fsmW_W)))begin |
| beatCnt_willClear = 1'b1; |
| end |
| end |
| |
| assign beatCnt_willOverflowIfInc = (beatCnt_value == 4'b1000); |
| assign beatCnt_willOverflow = (beatCnt_willOverflowIfInc && beatCnt_willIncrement); |
| always @ (*) begin |
| if(beatCnt_willOverflow)begin |
| beatCnt_valueNext = 4'b0000; |
| end else begin |
| beatCnt_valueNext = (beatCnt_value + _zz_13); |
| end |
| if(beatCnt_willClear)begin |
| beatCnt_valueNext = 4'b0000; |
| end |
| end |
| |
| assign runSignal = (! io_ctrl_halt); |
| assign idMatch = (io_axiW_b_payload_id == 4'b0101); |
| assign io_axiW_aw_payload_id = 4'b0101; |
| assign io_axiW_aw_payload_addr = curAlignedAddrReg; |
| assign io_axiW_aw_payload_len = (burstLenReg - 8'h01); |
| assign io_axiW_aw_payload_size = 3'b101; |
| assign io_axiW_aw_payload_burst = 2'b01; |
| assign io_axiW_aw_valid = awValidReg; |
| assign io_axiW_b_ready = bReadyReg; |
| assign io_axiW_w_payload_last = (_zz_14 == _zz_15); |
| always @ (*) begin |
| dinReady = 1'b0; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| dinReady = io_axiW_w_ready; |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| dinReady = 1'b0; |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| wValid = 1'b0; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| wValid = io_din_valid; |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| wValid = 1'b1; |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| assign io_axiW_w_valid = wValid; |
| assign io_din_ready = dinReady; |
| assign io_axiW_w_payload_data = payload; |
| assign io_axiW_w_payload_strb = strobe; |
| assign rowWriteCntNxt = (rowWriteCntReg + 8'h01); |
| assign colByteWriteCntNxt = (colByteWriteCntReg + _zz_16); |
| assign colRemainByteCntNxt = (colRemainByteCntReg - _zz_17); |
| assign rowLastBeat = (colRemainByteCntReg <= 8'h04); |
| always @ (*) begin |
| nxtRow = 1'b0; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| if(_zz_7)begin |
| nxtRow = 1'b1; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| if(_zz_1)begin |
| if(! _zz_2) begin |
| if(_zz_3)begin |
| nxtRow = 1'b1; |
| end |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| assign fsmW_wantExit = 1'b0; |
| always @ (*) begin |
| fsmW_wantStart = 1'b0; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| end |
| default : begin |
| fsmW_wantStart = 1'b1; |
| end |
| endcase |
| end |
| |
| assign alignOffsetNxt = nxtRowAddr[1 : 0]; |
| assign computeNextWriteBurstLen_nxtAlignedRowAddr = (nxtRowAddr - _zz_18); |
| assign computeNextWriteBurstLen_tmpBurstByteSizeIn4K = (13'h1000 - _zz_20); |
| assign computeNextWriteBurstLen_nxtAlignedRowByteSize = (io_param_xsize + _zz_21); |
| assign computeNextWriteBurstLen_rowCross4K = ((computeNextWriteBurstLen_tmpBurstByteSizeIn4K < 13'h0020) && (computeNextWriteBurstLen_tmpBurstByteSizeIn4K < _zz_22)); |
| always @ (*) begin |
| if(nxtRow)begin |
| if(computeNextWriteBurstLen_rowCross4K)begin |
| nxtBurstLen = _zz_23[7:0]; |
| end else begin |
| if((8'h20 < computeNextWriteBurstLen_nxtAlignedRowByteSize))begin |
| nxtBurstLen = 8'h08; |
| end else begin |
| if((computeNextWriteBurstLen_nxtAlignedRowByteSize[1 : 0] != 2'b00))begin |
| nxtBurstLen = {2'd0, _zz_24}; |
| end else begin |
| nxtBurstLen = {2'd0, _zz_26}; |
| end |
| end |
| end |
| end else begin |
| if((colRemainByteCntReg < 8'h20))begin |
| if((colRemainByteCntReg[1 : 0] != 2'b00))begin |
| nxtBurstLen = {2'd0, _zz_27}; |
| end else begin |
| nxtBurstLen = {2'd0, _zz_29}; |
| end |
| end else begin |
| nxtBurstLen = 8'h08; |
| end |
| end |
| end |
| |
| always @ (*) begin |
| if(rowFirstBeatReg)begin |
| strobe = (4'b1111 - _zz_30); |
| end else begin |
| if(rowLastBeat)begin |
| strobe = _zz_33[3:0]; |
| end else begin |
| strobe = 4'b1111; |
| end |
| end |
| end |
| |
| always @ (*) begin |
| if(rowFirstBeatReg)begin |
| curBeatBytes = (3'b100 - _zz_32); |
| end else begin |
| if(rowLastBeat)begin |
| curBeatBytes = colRemainByteCntReg[2:0]; |
| end else begin |
| curBeatBytes = 3'b100; |
| end |
| end |
| end |
| |
| always @ (*) begin |
| case(alignOffsetReg) |
| 2'b00 : begin |
| payload = io_din_payload[31 : 0]; |
| end |
| 2'b01 : begin |
| payload = {io_din_payload[23 : 0],dinPrevReg[31 : 24]}; |
| end |
| 2'b10 : begin |
| payload = {io_din_payload[15 : 0],dinPrevReg[31 : 16]}; |
| end |
| default : begin |
| payload = {io_din_payload[7 : 0],dinPrevReg[31 : 8]}; |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| fsmW_stateNext = fsmW_stateReg; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| if(_zz_7)begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_W; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| if(runSignal)begin |
| if(_zz_5)begin |
| if(io_axiW_w_payload_last)begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_B; |
| end else begin |
| if(((alignOffsetReg != 2'b00) && (colRemainByteCntNxt < 8'h04)))begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_LAST; |
| end |
| end |
| end |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| if(_zz_6)begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_B; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| if(_zz_1)begin |
| if(_zz_2)begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_W; |
| end else begin |
| if(_zz_3)begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_W; |
| end else begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_IDLE; |
| end |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| if(fsmW_wantStart)begin |
| fsmW_stateNext = `fsmW_enumDefinition_binary_sequential_fsmW_IDLE; |
| end |
| end |
| |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| busyReg <= 1'b0; |
| awValidReg <= 1'b0; |
| burstLenReg <= 8'h0; |
| curRowAddrReg <= 32'h0; |
| alignOffsetReg <= 2'b00; |
| curAlignedAddrReg <= 32'h0; |
| beatCnt_value <= 4'b0000; |
| bReadyReg <= 1'b0; |
| dinPrevReg <= 32'h0; |
| rowWriteCntReg <= 8'h0; |
| colByteWriteCntReg <= 8'h0; |
| colRemainByteCntReg <= io_param_xsize; |
| rowFirstBurstReg <= 1'b0; |
| rowFirstBeatReg <= 1'b0; |
| fsmW_stateReg <= `fsmW_enumDefinition_binary_sequential_fsmW_BOOT; |
| end else begin |
| if(io_ctrl_start)begin |
| busyReg <= 1'b1; |
| end else begin |
| if(io_ctrl_done)begin |
| busyReg <= 1'b0; |
| end |
| end |
| beatCnt_value <= beatCnt_valueNext; |
| if((io_din_valid && io_din_ready))begin |
| dinPrevReg <= io_din_payload; |
| end |
| fsmW_stateReg <= fsmW_stateNext; |
| case(fsmW_stateReg) |
| `fsmW_enumDefinition_binary_sequential_fsmW_IDLE : begin |
| awValidReg <= 1'b0; |
| alignOffsetReg <= 2'b00; |
| burstLenReg <= 8'h0; |
| curRowAddrReg <= (io_param_dar - _zz_35); |
| curAlignedAddrReg <= 32'h0; |
| bReadyReg <= 1'b0; |
| dinPrevReg <= 32'h0; |
| rowFirstBurstReg <= 1'b0; |
| rowFirstBeatReg <= 1'b0; |
| rowWriteCntReg <= 8'h0; |
| colByteWriteCntReg <= 8'h0; |
| colRemainByteCntReg <= io_param_xsize; |
| if(_zz_7)begin |
| awValidReg <= 1'b1; |
| alignOffsetReg <= alignOffsetNxt; |
| burstLenReg <= nxtBurstLen; |
| curRowAddrReg <= io_param_dar; |
| curAlignedAddrReg <= (io_param_dar - _zz_36); |
| rowFirstBeatReg <= 1'b1; |
| rowFirstBurstReg <= 1'b1; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_W : begin |
| if(((runSignal && io_axiW_aw_valid) && io_axiW_aw_ready))begin |
| awValidReg <= 1'b0; |
| end |
| if(_zz_4)begin |
| colByteWriteCntReg <= colByteWriteCntNxt; |
| colRemainByteCntReg <= colRemainByteCntNxt; |
| rowFirstBeatReg <= 1'b0; |
| end |
| if(runSignal)begin |
| if(_zz_5)begin |
| if(io_axiW_w_payload_last)begin |
| rowFirstBurstReg <= 1'b0; |
| bReadyReg <= 1'b1; |
| end |
| end |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_LAST : begin |
| if(_zz_6)begin |
| rowFirstBurstReg <= 1'b0; |
| bReadyReg <= 1'b1; |
| end |
| end |
| `fsmW_enumDefinition_binary_sequential_fsmW_B : begin |
| if(_zz_1)begin |
| bReadyReg <= 1'b0; |
| burstLenReg <= nxtBurstLen; |
| if(_zz_2)begin |
| curAlignedAddrReg <= nxtAlignedAddr; |
| awValidReg <= 1'b1; |
| end else begin |
| colByteWriteCntReg <= 8'h0; |
| colRemainByteCntReg <= io_param_xsize; |
| if(_zz_3)begin |
| rowWriteCntReg <= rowWriteCntNxt; |
| rowFirstBeatReg <= 1'b1; |
| rowFirstBurstReg <= 1'b1; |
| alignOffsetReg <= alignOffsetNxt; |
| curAlignedAddrReg <= (nxtRowAddr - _zz_37); |
| curRowAddrReg <= nxtRowAddr; |
| awValidReg <= 1'b1; |
| end |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| end |
| |
| |
| endmodule |
| |
| module DmaRead ( |
| output io_dout_valid, |
| input io_dout_ready, |
| output [31:0] io_dout_payload, |
| input [31:0] io_param_sar, |
| input [31:0] io_param_dar, |
| input [7:0] io_param_xsize, |
| input [7:0] io_param_ysize, |
| input [7:0] io_param_srcystep, |
| input [7:0] io_param_dstystep, |
| input [31:0] io_param_llr, |
| input io_param_bf, |
| input io_param_cf, |
| output io_axiR_ar_valid, |
| input io_axiR_ar_ready, |
| output [31:0] io_axiR_ar_payload_addr, |
| output [3:0] io_axiR_ar_payload_id, |
| output [7:0] io_axiR_ar_payload_len, |
| output [2:0] io_axiR_ar_payload_size, |
| output [1:0] io_axiR_ar_payload_burst, |
| input io_axiR_r_valid, |
| output io_axiR_r_ready, |
| input [31:0] io_axiR_r_payload_data, |
| input [3:0] io_axiR_r_payload_id, |
| input [1:0] io_axiR_r_payload_resp, |
| input io_axiR_r_payload_last, |
| input io_ctrl_start, |
| output io_ctrl_busy, |
| output reg io_ctrl_done, |
| input io_ctrl_halt, |
| input clk, |
| input reset |
| ); |
| wire _zz_1; |
| wire _zz_2; |
| wire _zz_3; |
| wire _zz_4; |
| wire _zz_5; |
| wire _zz_6; |
| wire _zz_7; |
| wire _zz_8; |
| wire _zz_9; |
| wire [31:0] _zz_10; |
| wire [9:0] _zz_11; |
| wire [31:0] _zz_12; |
| wire [31:0] _zz_13; |
| wire [7:0] _zz_14; |
| wire [7:0] _zz_15; |
| wire [31:0] _zz_16; |
| wire [11:0] _zz_17; |
| wire [12:0] _zz_18; |
| wire [7:0] _zz_19; |
| wire [12:0] _zz_20; |
| wire [10:0] _zz_21; |
| wire [5:0] _zz_22; |
| wire [5:0] _zz_23; |
| wire [5:0] _zz_24; |
| wire [5:0] _zz_25; |
| wire [5:0] _zz_26; |
| wire [5:0] _zz_27; |
| wire [2:0] _zz_28; |
| wire [31:0] _zz_29; |
| wire [31:0] _zz_30; |
| wire [31:0] _zz_31; |
| wire [31:0] _zz_32; |
| reg busyReg; |
| reg arValidReg; |
| reg [7:0] burstLenReg; |
| reg [7:0] nxtBurstLen; |
| reg [31:0] curRowAddrReg; |
| reg [1:0] alignOffsetReg; |
| wire [1:0] alignOffsetNxt; |
| reg [31:0] curAlignedAddrReg; |
| wire [31:0] curAlignedRowAddr; |
| wire [31:0] nxtAlignedAddr; |
| wire [7:0] srcRowGap; |
| wire [31:0] nxtRowAddr; |
| wire runSignal; |
| wire idMatch; |
| reg [31:0] dataPreReg; |
| reg [2:0] curBeatBytes; |
| reg [31:0] output_1; |
| reg doutValid; |
| reg rReady; |
| reg [7:0] rowReadCntReg; |
| wire [7:0] rowReadCntNxt; |
| reg [7:0] colByteReadCntReg; |
| wire [7:0] colByteReadCntNxt; |
| reg [7:0] colRemainByteCntReg; |
| wire [7:0] colRemainByteCntNxt; |
| reg rowFirstBurstReg; |
| reg rowFirstBeatReg; |
| reg nxtRow; |
| wire fsmR_wantExit; |
| reg fsmR_wantStart; |
| wire [31:0] computeNextReadBurstLen_nxtAlignedRowAddr; |
| wire [12:0] computeNextReadBurstLen_tmpBurstByteSizeIn4K; |
| wire [7:0] computeNextReadBurstLen_nxtAlignedRowByteSize; |
| wire computeNextReadBurstLen_rowCross4K; |
| reg `fsmR_enumDefinition_binary_sequential_type fsmR_stateReg; |
| reg `fsmR_enumDefinition_binary_sequential_type fsmR_stateNext; |
| `ifndef SYNTHESIS |
| reg [71:0] fsmR_stateReg_string; |
| reg [71:0] fsmR_stateNext_string; |
| `endif |
| |
| |
| assign _zz_1 = (((runSignal && io_axiR_r_valid) && io_axiR_r_ready) && io_axiR_r_payload_last); |
| assign _zz_2 = (colByteReadCntNxt < io_param_xsize); |
| assign _zz_3 = (alignOffsetReg != 2'b00); |
| assign _zz_4 = (rowReadCntNxt < io_param_ysize); |
| assign _zz_5 = ((runSignal && io_dout_valid) && io_dout_ready); |
| assign _zz_6 = (rowReadCntNxt < io_param_ysize); |
| assign _zz_7 = (runSignal && io_ctrl_start); |
| assign _zz_8 = ((runSignal && io_axiR_ar_valid) && io_axiR_ar_ready); |
| assign _zz_9 = ((runSignal && io_axiR_r_valid) && io_axiR_r_ready); |
| assign _zz_10 = {30'd0, alignOffsetReg}; |
| assign _zz_11 = ({2'd0,burstLenReg} <<< 2); |
| assign _zz_12 = {22'd0, _zz_11}; |
| assign _zz_13 = {24'd0, srcRowGap}; |
| assign _zz_14 = {5'd0, curBeatBytes}; |
| assign _zz_15 = {5'd0, curBeatBytes}; |
| assign _zz_16 = {30'd0, alignOffsetNxt}; |
| assign _zz_17 = computeNextReadBurstLen_nxtAlignedRowAddr[11 : 0]; |
| assign _zz_18 = {1'd0, _zz_17}; |
| assign _zz_19 = {6'd0, alignOffsetNxt}; |
| assign _zz_20 = {5'd0, computeNextReadBurstLen_nxtAlignedRowByteSize}; |
| assign _zz_21 = (computeNextReadBurstLen_tmpBurstByteSizeIn4K >>> 2); |
| assign _zz_22 = (_zz_23 + 6'h01); |
| assign _zz_23 = (computeNextReadBurstLen_nxtAlignedRowByteSize >>> 2); |
| assign _zz_24 = (computeNextReadBurstLen_nxtAlignedRowByteSize >>> 2); |
| assign _zz_25 = (_zz_26 + 6'h01); |
| assign _zz_26 = (colRemainByteCntNxt >>> 2); |
| assign _zz_27 = (colRemainByteCntNxt >>> 2); |
| assign _zz_28 = {1'd0, alignOffsetReg}; |
| assign _zz_29 = {24'd0, srcRowGap}; |
| assign _zz_30 = {30'd0, alignOffsetNxt}; |
| assign _zz_31 = {30'd0, alignOffsetNxt}; |
| assign _zz_32 = {30'd0, alignOffsetNxt}; |
| `ifndef SYNTHESIS |
| always @(*) begin |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_BOOT : fsmR_stateReg_string = "fsmR_BOOT"; |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : fsmR_stateReg_string = "fsmR_IDLE"; |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : fsmR_stateReg_string = "fsmR_AR "; |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : fsmR_stateReg_string = "fsmR_FR "; |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : fsmR_stateReg_string = "fsmR_BR "; |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : fsmR_stateReg_string = "fsmR_LAST"; |
| default : fsmR_stateReg_string = "?????????"; |
| endcase |
| end |
| always @(*) begin |
| case(fsmR_stateNext) |
| `fsmR_enumDefinition_binary_sequential_fsmR_BOOT : fsmR_stateNext_string = "fsmR_BOOT"; |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : fsmR_stateNext_string = "fsmR_IDLE"; |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : fsmR_stateNext_string = "fsmR_AR "; |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : fsmR_stateNext_string = "fsmR_FR "; |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : fsmR_stateNext_string = "fsmR_BR "; |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : fsmR_stateNext_string = "fsmR_LAST"; |
| default : fsmR_stateNext_string = "?????????"; |
| endcase |
| end |
| `endif |
| |
| always @ (*) begin |
| io_ctrl_done = 1'b0; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| if(_zz_1)begin |
| if(! _zz_2) begin |
| if(! _zz_3) begin |
| if(! _zz_4) begin |
| io_ctrl_done = 1'b1; |
| end |
| end |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| if(_zz_5)begin |
| if(! _zz_6) begin |
| io_ctrl_done = 1'b1; |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| assign io_ctrl_busy = busyReg; |
| assign curAlignedRowAddr = (curRowAddrReg - _zz_10); |
| assign nxtAlignedAddr = (curAlignedAddrReg + _zz_12); |
| assign srcRowGap = (io_param_xsize + io_param_srcystep); |
| assign nxtRowAddr = (curRowAddrReg + _zz_13); |
| assign runSignal = (! io_ctrl_halt); |
| assign idMatch = (io_axiR_r_payload_id == 4'b0011); |
| assign io_axiR_ar_payload_id = 4'b0011; |
| assign io_axiR_ar_payload_addr = curAlignedAddrReg; |
| assign io_axiR_ar_payload_len = (burstLenReg - 8'h01); |
| assign io_axiR_ar_payload_size = 3'b101; |
| assign io_axiR_ar_payload_burst = 2'b01; |
| assign io_axiR_ar_valid = arValidReg; |
| always @ (*) begin |
| doutValid = 1'b0; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| doutValid = 1'b0; |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| doutValid = io_axiR_r_valid; |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| doutValid = 1'b1; |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| always @ (*) begin |
| rReady = 1'b0; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| rReady = 1'b1; |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| rReady = io_dout_ready; |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| rReady = 1'b0; |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| assign io_dout_valid = doutValid; |
| assign io_axiR_r_ready = rReady; |
| assign io_dout_payload = output_1; |
| assign rowReadCntNxt = (rowReadCntReg + 8'h01); |
| assign colByteReadCntNxt = (colByteReadCntReg + _zz_14); |
| assign colRemainByteCntNxt = (colRemainByteCntReg - _zz_15); |
| always @ (*) begin |
| nxtRow = 1'b0; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| if(_zz_7)begin |
| nxtRow = 1'b1; |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| if(_zz_1)begin |
| if(! _zz_2) begin |
| if(! _zz_3) begin |
| if(_zz_4)begin |
| nxtRow = 1'b1; |
| end |
| end |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| if(_zz_5)begin |
| if(_zz_6)begin |
| nxtRow = 1'b1; |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| |
| assign fsmR_wantExit = 1'b0; |
| always @ (*) begin |
| fsmR_wantStart = 1'b0; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| end |
| default : begin |
| fsmR_wantStart = 1'b1; |
| end |
| endcase |
| end |
| |
| assign alignOffsetNxt = nxtRowAddr[1 : 0]; |
| assign computeNextReadBurstLen_nxtAlignedRowAddr = (nxtRowAddr - _zz_16); |
| assign computeNextReadBurstLen_tmpBurstByteSizeIn4K = (13'h1000 - _zz_18); |
| assign computeNextReadBurstLen_nxtAlignedRowByteSize = (io_param_xsize + _zz_19); |
| assign computeNextReadBurstLen_rowCross4K = ((computeNextReadBurstLen_tmpBurstByteSizeIn4K < 13'h0020) && (computeNextReadBurstLen_tmpBurstByteSizeIn4K < _zz_20)); |
| always @ (*) begin |
| if(nxtRow)begin |
| if(computeNextReadBurstLen_rowCross4K)begin |
| nxtBurstLen = _zz_21[7:0]; |
| end else begin |
| if((8'h20 < computeNextReadBurstLen_nxtAlignedRowByteSize))begin |
| nxtBurstLen = 8'h08; |
| end else begin |
| if((computeNextReadBurstLen_nxtAlignedRowByteSize[1 : 0] != 2'b00))begin |
| nxtBurstLen = {2'd0, _zz_22}; |
| end else begin |
| nxtBurstLen = {2'd0, _zz_24}; |
| end |
| end |
| end |
| end else begin |
| if((colRemainByteCntNxt < 8'h20))begin |
| if((colRemainByteCntReg[1 : 0] != 2'b00))begin |
| nxtBurstLen = {2'd0, _zz_25}; |
| end else begin |
| nxtBurstLen = {2'd0, _zz_27}; |
| end |
| end else begin |
| nxtBurstLen = 8'h08; |
| end |
| end |
| end |
| |
| always @ (*) begin |
| if(rowFirstBeatReg)begin |
| curBeatBytes = (3'b100 - _zz_28); |
| end else begin |
| curBeatBytes = 3'b100; |
| end |
| end |
| |
| always @ (*) begin |
| if((alignOffsetReg != 2'b00))begin |
| case(alignOffsetReg) |
| 2'b00 : begin |
| output_1 = dataPreReg[31 : 0]; |
| end |
| 2'b01 : begin |
| output_1 = {io_axiR_r_payload_data[7 : 0],dataPreReg[31 : 8]}; |
| end |
| 2'b10 : begin |
| output_1 = {io_axiR_r_payload_data[15 : 0],dataPreReg[31 : 16]}; |
| end |
| default : begin |
| output_1 = {io_axiR_r_payload_data[23 : 0],dataPreReg[31 : 24]}; |
| end |
| endcase |
| end else begin |
| output_1 = io_axiR_r_payload_data; |
| end |
| end |
| |
| always @ (*) begin |
| fsmR_stateNext = fsmR_stateReg; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| if(_zz_7)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_AR; |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| if(_zz_8)begin |
| if(((alignOffsetReg != 2'b00) && rowFirstBeatReg))begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_FR; |
| end else begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_BR; |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| if(_zz_9)begin |
| if(io_axiR_r_payload_last)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_AR; |
| end else begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_BR; |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| if(_zz_1)begin |
| if(_zz_2)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_AR; |
| end else begin |
| if(_zz_3)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_LAST; |
| end else begin |
| if(_zz_4)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_AR; |
| end else begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_IDLE; |
| end |
| end |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| if(_zz_5)begin |
| if(_zz_6)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_AR; |
| end else begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_IDLE; |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| if(fsmR_wantStart)begin |
| fsmR_stateNext = `fsmR_enumDefinition_binary_sequential_fsmR_IDLE; |
| end |
| end |
| |
| always @ (posedge clk or posedge reset) begin |
| if (reset) begin |
| busyReg <= 1'b0; |
| arValidReg <= 1'b0; |
| burstLenReg <= 8'h0; |
| curRowAddrReg <= 32'h0; |
| alignOffsetReg <= 2'b00; |
| curAlignedAddrReg <= 32'h0; |
| dataPreReg <= 32'h0; |
| rowReadCntReg <= 8'h0; |
| colByteReadCntReg <= 8'h0; |
| colRemainByteCntReg <= io_param_xsize; |
| rowFirstBurstReg <= 1'b0; |
| rowFirstBeatReg <= 1'b0; |
| fsmR_stateReg <= `fsmR_enumDefinition_binary_sequential_fsmR_BOOT; |
| end else begin |
| if(io_ctrl_start)begin |
| busyReg <= 1'b1; |
| end else begin |
| if(io_ctrl_done)begin |
| busyReg <= 1'b0; |
| end |
| end |
| if(((runSignal && io_axiR_r_valid) && io_axiR_r_ready))begin |
| dataPreReg <= io_axiR_r_payload_data; |
| end |
| fsmR_stateReg <= fsmR_stateNext; |
| case(fsmR_stateReg) |
| `fsmR_enumDefinition_binary_sequential_fsmR_IDLE : begin |
| arValidReg <= 1'b0; |
| alignOffsetReg <= 2'b00; |
| burstLenReg <= 8'h0; |
| curRowAddrReg <= (io_param_sar - _zz_29); |
| curAlignedAddrReg <= 32'h0; |
| dataPreReg <= 32'h0; |
| rowFirstBurstReg <= 1'b0; |
| rowFirstBeatReg <= 1'b0; |
| rowReadCntReg <= 8'h0; |
| colByteReadCntReg <= 8'h0; |
| colRemainByteCntReg <= io_param_xsize; |
| if(_zz_7)begin |
| arValidReg <= 1'b1; |
| alignOffsetReg <= alignOffsetNxt; |
| burstLenReg <= nxtBurstLen; |
| curRowAddrReg <= io_param_sar; |
| curAlignedAddrReg <= (io_param_sar - _zz_30); |
| rowFirstBeatReg <= 1'b1; |
| rowFirstBurstReg <= 1'b1; |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_AR : begin |
| if(_zz_8)begin |
| arValidReg <= 1'b0; |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_FR : begin |
| if(_zz_9)begin |
| colByteReadCntReg <= colByteReadCntNxt; |
| colRemainByteCntReg <= colRemainByteCntNxt; |
| rowFirstBeatReg <= 1'b0; |
| if(io_axiR_r_payload_last)begin |
| curAlignedAddrReg <= nxtAlignedAddr; |
| burstLenReg <= nxtBurstLen; |
| arValidReg <= 1'b1; |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_BR : begin |
| if(((runSignal && io_axiR_r_valid) && io_axiR_r_ready))begin |
| colByteReadCntReg <= colByteReadCntNxt; |
| colRemainByteCntReg <= colRemainByteCntNxt; |
| rowFirstBeatReg <= 1'b0; |
| end |
| if(_zz_1)begin |
| rowFirstBurstReg <= 1'b0; |
| if(_zz_2)begin |
| curAlignedAddrReg <= nxtAlignedAddr; |
| burstLenReg <= nxtBurstLen; |
| arValidReg <= 1'b1; |
| end else begin |
| colByteReadCntReg <= 8'h0; |
| colRemainByteCntReg <= io_param_xsize; |
| if(! _zz_3) begin |
| if(_zz_4)begin |
| burstLenReg <= nxtBurstLen; |
| rowReadCntReg <= rowReadCntNxt; |
| rowFirstBeatReg <= 1'b1; |
| rowFirstBurstReg <= 1'b1; |
| alignOffsetReg <= alignOffsetNxt; |
| curAlignedAddrReg <= (nxtRowAddr - _zz_31); |
| curRowAddrReg <= nxtRowAddr; |
| arValidReg <= 1'b1; |
| end |
| end |
| end |
| end |
| end |
| `fsmR_enumDefinition_binary_sequential_fsmR_LAST : begin |
| if(_zz_5)begin |
| if(_zz_6)begin |
| burstLenReg <= nxtBurstLen; |
| rowReadCntReg <= rowReadCntNxt; |
| rowFirstBeatReg <= 1'b1; |
| rowFirstBurstReg <= 1'b1; |
| alignOffsetReg <= alignOffsetNxt; |
| curAlignedAddrReg <= (nxtRowAddr - _zz_32); |
| curRowAddrReg <= nxtRowAddr; |
| arValidReg <= 1'b1; |
| end |
| end |
| end |
| default : begin |
| end |
| endcase |
| end |
| end |
| |
| |
| endmodule |