avl_dacfifo: Add support for MEM_RATIO 32
parent
a1539a62b7
commit
398619d866
|
@ -54,11 +54,12 @@ module avl_dacfifo_rd #(
|
||||||
|
|
||||||
// Max supported MEM_RATIO is 16
|
// Max supported MEM_RATIO is 16
|
||||||
localparam MEM_RATIO = AVL_DATA_WIDTH/DAC_DATA_WIDTH;
|
localparam MEM_RATIO = AVL_DATA_WIDTH/DAC_DATA_WIDTH;
|
||||||
localparam AVL_MEM_ADDRESS_WIDTH = (MEM_RATIO == 1) ? DAC_MEM_ADDRESS_WIDTH :
|
localparam AVL_MEM_ADDRESS_WIDTH = (MEM_RATIO == 1) ? DAC_MEM_ADDRESS_WIDTH :
|
||||||
(MEM_RATIO == 2) ? (DAC_MEM_ADDRESS_WIDTH - 1) :
|
(MEM_RATIO == 2) ? (DAC_MEM_ADDRESS_WIDTH - 1) :
|
||||||
(MEM_RATIO == 4) ? (DAC_MEM_ADDRESS_WIDTH - 2) :
|
(MEM_RATIO == 4) ? (DAC_MEM_ADDRESS_WIDTH - 2) :
|
||||||
(MEM_RATIO == 8) ? (DAC_MEM_ADDRESS_WIDTH - 3) :
|
(MEM_RATIO == 8) ? (DAC_MEM_ADDRESS_WIDTH - 3) :
|
||||||
(DAC_MEM_ADDRESS_WIDTH - 4);
|
(MEM_RATIO == 16) ? (DAC_MEM_ADDRESS_WIDTH - 4) :
|
||||||
|
(DAC_MEM_ADDRESS_WIDTH - 5);
|
||||||
localparam AVL_MEM_THRESHOLD_LO = 8;
|
localparam AVL_MEM_THRESHOLD_LO = 8;
|
||||||
localparam AVL_MEM_THRESHOLD_HI = {(AVL_MEM_ADDRESS_WIDTH){1'b1}} - 7;
|
localparam AVL_MEM_THRESHOLD_HI = {(AVL_MEM_ADDRESS_WIDTH){1'b1}} - 7;
|
||||||
|
|
||||||
|
@ -232,11 +233,12 @@ module avl_dacfifo_rd #(
|
||||||
// control the FIFO to prevent overflow, underfloq is monitored
|
// control the FIFO to prevent overflow, underfloq is monitored
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
assign avl_mem_rd_address_s = (MEM_RATIO == 1) ? avl_mem_rd_address :
|
assign avl_mem_rd_address_s = (MEM_RATIO == 1) ? avl_mem_rd_address :
|
||||||
(MEM_RATIO == 2) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):1] :
|
(MEM_RATIO == 2) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):1] :
|
||||||
(MEM_RATIO == 4) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):2] :
|
(MEM_RATIO == 4) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):2] :
|
||||||
(MEM_RATIO == 8) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):3] :
|
(MEM_RATIO == 8) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):3] :
|
||||||
avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):4];
|
(MEM_RATIO == 16) ? avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):4] :
|
||||||
|
avl_mem_rd_address[(DAC_MEM_ADDRESS_WIDTH-1):5];
|
||||||
|
|
||||||
assign avl_mem_address_diff_s = {1'b1, avl_mem_wr_address} - avl_mem_rd_address_s;
|
assign avl_mem_address_diff_s = {1'b1, avl_mem_wr_address} - avl_mem_rd_address_s;
|
||||||
|
|
||||||
|
@ -266,11 +268,12 @@ module avl_dacfifo_rd #(
|
||||||
// ready, data will be dropped
|
// ready, data will be dropped
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
assign dac_mem_wr_address_s = (MEM_RATIO == 1) ? dac_mem_wr_address :
|
assign dac_mem_wr_address_s = (MEM_RATIO == 1) ? dac_mem_wr_address :
|
||||||
(MEM_RATIO == 2) ? {dac_mem_wr_address, 1'b0} :
|
(MEM_RATIO == 2) ? {dac_mem_wr_address, 1'b0} :
|
||||||
(MEM_RATIO == 4) ? {dac_mem_wr_address, 2'b0} :
|
(MEM_RATIO == 4) ? {dac_mem_wr_address, 2'b0} :
|
||||||
(MEM_RATIO == 8) ? {dac_mem_wr_address, 3'b0} :
|
(MEM_RATIO == 8) ? {dac_mem_wr_address, 3'b0} :
|
||||||
{dac_mem_wr_address, 4'b0};
|
(MEM_RATIO == 16) ? {dac_mem_wr_address, 4'b0} :
|
||||||
|
{dac_mem_wr_address, 5'b0};
|
||||||
|
|
||||||
assign dac_mem_address_diff_s = {1'b1, dac_mem_wr_address_s} - dac_mem_rd_address;
|
assign dac_mem_address_diff_s = {1'b1, dac_mem_wr_address_s} - dac_mem_rd_address;
|
||||||
|
|
||||||
|
|
|
@ -54,15 +54,17 @@ module avl_dacfifo_wr #(
|
||||||
output reg avl_xfer_req);
|
output reg avl_xfer_req);
|
||||||
|
|
||||||
localparam MEM_RATIO = AVL_DATA_WIDTH/DMA_DATA_WIDTH; // Max supported MEM_RATIO is 16
|
localparam MEM_RATIO = AVL_DATA_WIDTH/DMA_DATA_WIDTH; // Max supported MEM_RATIO is 16
|
||||||
localparam AVL_MEM_ADDRESS_WIDTH = (MEM_RATIO == 1) ? DMA_MEM_ADDRESS_WIDTH :
|
localparam AVL_MEM_ADDRESS_WIDTH = (MEM_RATIO == 1) ? DMA_MEM_ADDRESS_WIDTH :
|
||||||
(MEM_RATIO == 2) ? (DMA_MEM_ADDRESS_WIDTH - 1) :
|
(MEM_RATIO == 2) ? (DMA_MEM_ADDRESS_WIDTH - 1) :
|
||||||
(MEM_RATIO == 4) ? (DMA_MEM_ADDRESS_WIDTH - 2) :
|
(MEM_RATIO == 4) ? (DMA_MEM_ADDRESS_WIDTH - 2) :
|
||||||
(MEM_RATIO == 8) ? (DMA_MEM_ADDRESS_WIDTH - 3) :
|
(MEM_RATIO == 8) ? (DMA_MEM_ADDRESS_WIDTH - 3) :
|
||||||
(DMA_MEM_ADDRESS_WIDTH - 4);
|
(MEM_RATIO == 16) ? (DMA_MEM_ADDRESS_WIDTH - 4) :
|
||||||
localparam MEM_WIDTH_DIFF = (MEM_RATIO > 8) ? 4 :
|
(DMA_MEM_ADDRESS_WIDTH - 5);
|
||||||
(MEM_RATIO > 4) ? 3 :
|
localparam MEM_WIDTH_DIFF = (MEM_RATIO > 16) ? 5 :
|
||||||
(MEM_RATIO > 2) ? 2 :
|
(MEM_RATIO > 8) ? 4 :
|
||||||
(MEM_RATIO > 1) ? 1 : 1;
|
(MEM_RATIO > 4) ? 3 :
|
||||||
|
(MEM_RATIO > 2) ? 2 :
|
||||||
|
(MEM_RATIO > 1) ? 1 : 1;
|
||||||
|
|
||||||
localparam DMA_BUF_THRESHOLD_HI = {(DMA_MEM_ADDRESS_WIDTH){1'b1}} - 4;
|
localparam DMA_BUF_THRESHOLD_HI = {(DMA_MEM_ADDRESS_WIDTH){1'b1}} - 4;
|
||||||
localparam DMA_BYTE_DATA_WIDTH = DMA_DATA_WIDTH/8;
|
localparam DMA_BYTE_DATA_WIDTH = DMA_DATA_WIDTH/8;
|
||||||
|
@ -176,11 +178,12 @@ module avl_dacfifo_wr #(
|
||||||
// write address generation
|
// write address generation
|
||||||
|
|
||||||
assign dma_mem_address_diff_s = {1'b1, dma_mem_wr_address} - dma_mem_rd_address_s;
|
assign dma_mem_address_diff_s = {1'b1, dma_mem_wr_address} - dma_mem_rd_address_s;
|
||||||
assign dma_mem_rd_address_s = (MEM_RATIO == 1) ? dma_mem_rd_address :
|
assign dma_mem_rd_address_s = (MEM_RATIO == 1) ? dma_mem_rd_address :
|
||||||
(MEM_RATIO == 2) ? {dma_mem_rd_address, 1'b0} :
|
(MEM_RATIO == 2) ? {dma_mem_rd_address, 1'b0} :
|
||||||
(MEM_RATIO == 4) ? {dma_mem_rd_address, 2'b0} :
|
(MEM_RATIO == 4) ? {dma_mem_rd_address, 2'b0} :
|
||||||
(MEM_RATIO == 8) ? {dma_mem_rd_address, 3'b0} :
|
(MEM_RATIO == 8) ? {dma_mem_rd_address, 3'b0} :
|
||||||
{dma_mem_rd_address, 4'b0};
|
(MEM_RATIO == 16) ? {dma_mem_rd_address, 4'b0} :
|
||||||
|
{dma_mem_rd_address, 5'b0};
|
||||||
assign dma_mem_wea_s = dma_ready & dma_valid & dma_xfer_req;
|
assign dma_mem_wea_s = dma_ready & dma_valid & dma_xfer_req;
|
||||||
|
|
||||||
always @(posedge dma_clk) begin
|
always @(posedge dma_clk) begin
|
||||||
|
@ -362,107 +365,170 @@ module avl_dacfifo_wr #(
|
||||||
case (avl_last_beats)
|
case (avl_last_beats)
|
||||||
0 : begin
|
0 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
2 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
2 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
||||||
4 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
4 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
||||||
8 : avl_byteenable <= {56'b0, {8{1'b1}}};
|
8 : avl_byteenable <= {56'b0, {8{1'b1}}};
|
||||||
16 : avl_byteenable <= {60'b0, {4{1'b1}}};
|
16 : avl_byteenable <= {60'b0, {4{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {62'b0, {2{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
1 : begin
|
1 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
4 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
4 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
||||||
8 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
8 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
||||||
16 : avl_byteenable <= {56'b0, {8{1'b1}}};
|
16 : avl_byteenable <= {56'b0, {8{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {60'b0, {4{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
2 : begin
|
2 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
4 : avl_byteenable <= {16'b0, {48{1'b1}}};
|
4 : avl_byteenable <= {16'b0, {48{1'b1}}};
|
||||||
8 : avl_byteenable <= {40'b0, {24{1'b1}}};
|
8 : avl_byteenable <= {40'b0, {24{1'b1}}};
|
||||||
16 : avl_byteenable <= {52'b0, {12{1'b1}}};
|
16 : avl_byteenable <= {52'b0, {12{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {58'b0, {6{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
3 : begin
|
3 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
8 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
8 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
||||||
16 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
16 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {56'b0, {8{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
4 : begin
|
4 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
8 : avl_byteenable <= {24'b0, {40{1'b1}}};
|
8 : avl_byteenable <= {24'b0, {40{1'b1}}};
|
||||||
16 : avl_byteenable <= {44'b0, {20{1'b1}}};
|
16 : avl_byteenable <= {44'b0, {20{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {54'b0, {10{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
5 : begin
|
5 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
8 : avl_byteenable <= {16'b0, {48{1'b1}}};
|
8 : avl_byteenable <= {16'b0, {48{1'b1}}};
|
||||||
16 : avl_byteenable <= {40'b0, {24{1'b1}}};
|
16 : avl_byteenable <= {40'b0, {24{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {52'b0, {12{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
6 : begin
|
6 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
8 : avl_byteenable <= {8'b0, {56{1'b1}}};
|
8 : avl_byteenable <= {8'b0, {56{1'b1}}};
|
||||||
16 : avl_byteenable <= {36'b0, {28{1'b1}}};
|
16 : avl_byteenable <= {36'b0, {28{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {50'b0, {14{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
7 : begin
|
7 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
16 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {48'b0, {16{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
8 : begin
|
8 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {28'b0, {36{1'b1}}};
|
16 : avl_byteenable <= {28'b0, {36{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {46'b0, {18{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
9 : begin
|
9 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {24'b0, {40{1'b1}}};
|
16 : avl_byteenable <= {24'b0, {40{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {44'b0, {20{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
10 : begin
|
10 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {20'b0, {44{1'b1}}};
|
16 : avl_byteenable <= {20'b0, {44{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {42'b0, {22{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
11 : begin
|
11 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {16'b0, {48{1'b1}}};
|
16 : avl_byteenable <= {16'b0, {48{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {40'b0, {24{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
12 : begin
|
12 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {12'b0, {52{1'b1}}};
|
16 : avl_byteenable <= {12'b0, {52{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {38'b0, {26{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
13 : begin
|
13 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {8'b0, {56{1'b1}}};
|
16 : avl_byteenable <= {8'b0, {56{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {36'b0, {28{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
14 : begin
|
14 : begin
|
||||||
case (MEM_RATIO)
|
case (MEM_RATIO)
|
||||||
16 : avl_byteenable <= {4'b0, {60{1'b1}}};
|
16 : avl_byteenable <= {4'b0, {60{1'b1}}};
|
||||||
|
32 : avl_byteenable <= {34'b0, {30{1'b1}}};
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
15 : begin
|
15 : begin
|
||||||
avl_byteenable <= {64{1'b1}};
|
case (MEM_RATIO)
|
||||||
|
32 : avl_byteenable <= {32'b0, {32{1'b1}}};
|
||||||
|
default: avl_byteenable <= {64{1'b1}};
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
16 : begin
|
||||||
|
avl_byteenable <= {30'b0, {34{1'b1}}};
|
||||||
|
end
|
||||||
|
17 : begin
|
||||||
|
avl_byteenable <= {28'b0, {36{1'b1}}};
|
||||||
|
end
|
||||||
|
18 : begin
|
||||||
|
avl_byteenable <= {26'b0, {38{1'b1}}};
|
||||||
|
end
|
||||||
|
19 : begin
|
||||||
|
avl_byteenable <= {24'b0, {40{1'b1}}};
|
||||||
|
end
|
||||||
|
20 : begin
|
||||||
|
avl_byteenable <= {22'b0, {42{1'b1}}};
|
||||||
|
end
|
||||||
|
21 : begin
|
||||||
|
avl_byteenable <= {20'b0, {44{1'b1}}};
|
||||||
|
end
|
||||||
|
22 : begin
|
||||||
|
avl_byteenable <= {18'b0, {46{1'b1}}};
|
||||||
|
end
|
||||||
|
23 : begin
|
||||||
|
avl_byteenable <= {16'b0, {48{1'b1}}};
|
||||||
|
end
|
||||||
|
24 : begin
|
||||||
|
avl_byteenable <= {14'b0, {50{1'b1}}};
|
||||||
|
end
|
||||||
|
25 : begin
|
||||||
|
avl_byteenable <= {12'b0, {52{1'b1}}};
|
||||||
|
end
|
||||||
|
26 : begin
|
||||||
|
avl_byteenable <= {10'b0, {54{1'b1}}};
|
||||||
|
end
|
||||||
|
27 : begin
|
||||||
|
avl_byteenable <= {8'b0, {56{1'b1}}};
|
||||||
|
end
|
||||||
|
28 : begin
|
||||||
|
avl_byteenable <= {6'b0, {58{1'b1}}};
|
||||||
|
end
|
||||||
|
29 : begin
|
||||||
|
avl_byteenable <= {4'b0, {60{1'b1}}};
|
||||||
|
end
|
||||||
|
30 : begin
|
||||||
|
avl_byteenable <= {2'b0, {62{1'b1}}};
|
||||||
end
|
end
|
||||||
default : avl_byteenable <= {64{1'b1}};
|
default : avl_byteenable <= {64{1'b1}};
|
||||||
endcase
|
endcase
|
||||||
|
|
Loading…
Reference in New Issue