module comp(clk, buf_size, adr, dma_en, adr_incw, rx_dma_en_r, tx_dma_en_r); input clk; input [13:0] buf_size; input [16:0] adr; input dma_en; input adr_incw; input rx_dma_en_r; input tx_dma_en_r; reg [14:0] adr_cw; // Internal word address counter reg [14:0] last_buf_adr; // Last Buffer Address initial begin adr_cw = 15'd0; last_buf_adr = 15'd0; end // address counter always @(posedge clk) begin last_buf_adr = adr + { 3'b000, buf_size }; if(rx_dma_en_r || tx_dma_en_r) adr_cw = adr[16:2]; else begin if((adr_cw == last_buf_adr) && dma_en) adr_cw = {15{1'b0}}; else adr_cw = (adr_incw) ? (adr_cw + {{14{1'b0}}, 1'b1}) : adr_cw ; end end endmodule // comp