📄 wb_dma_ch_sel.v
字号:
assign pri14[2] = (pri_sel == 2'd2) ? ch14_csr[15] : 1'b0;assign pri15[0] = ch15_csr[13];assign pri15[1] = (pri_sel == 2'd0) ? 1'b0 : ch15_csr[14];assign pri15[2] = (pri_sel == 2'd2) ? ch15_csr[15] : 1'b0;assign pri16[0] = ch16_csr[13];assign pri16[1] = (pri_sel == 2'd0) ? 1'b0 : ch16_csr[14];assign pri16[2] = (pri_sel == 2'd2) ? ch16_csr[15] : 1'b0;assign pri17[0] = ch17_csr[13];assign pri17[1] = (pri_sel == 2'd0) ? 1'b0 : ch17_csr[14];assign pri17[2] = (pri_sel == 2'd2) ? ch17_csr[15] : 1'b0;assign pri18[0] = ch18_csr[13];assign pri18[1] = (pri_sel == 2'd0) ? 1'b0 : ch18_csr[14];assign pri18[2] = (pri_sel == 2'd2) ? ch18_csr[15] : 1'b0;assign pri19[0] = ch19_csr[13];assign pri19[1] = (pri_sel == 2'd0) ? 1'b0 : ch19_csr[14];assign pri19[2] = (pri_sel == 2'd2) ? ch19_csr[15] : 1'b0;assign pri20[0] = ch20_csr[13];assign pri20[1] = (pri_sel == 2'd0) ? 1'b0 : ch20_csr[14];assign pri20[2] = (pri_sel == 2'd2) ? ch20_csr[15] : 1'b0;assign pri21[0] = ch21_csr[13];assign pri21[1] = (pri_sel == 2'd0) ? 1'b0 : ch21_csr[14];assign pri21[2] = (pri_sel == 2'd2) ? ch21_csr[15] : 1'b0;assign pri22[0] = ch22_csr[13];assign pri22[1] = (pri_sel == 2'd0) ? 1'b0 : ch22_csr[14];assign pri22[2] = (pri_sel == 2'd2) ? ch22_csr[15] : 1'b0;assign pri23[0] = ch23_csr[13];assign pri23[1] = (pri_sel == 2'd0) ? 1'b0 : ch23_csr[14];assign pri23[2] = (pri_sel == 2'd2) ? ch23_csr[15] : 1'b0;assign pri24[0] = ch24_csr[13];assign pri24[1] = (pri_sel == 2'd0) ? 1'b0 : ch24_csr[14];assign pri24[2] = (pri_sel == 2'd2) ? ch24_csr[15] : 1'b0;assign pri25[0] = ch25_csr[13];assign pri25[1] = (pri_sel == 2'd0) ? 1'b0 : ch25_csr[14];assign pri25[2] = (pri_sel == 2'd2) ? ch25_csr[15] : 1'b0;assign pri26[0] = ch26_csr[13];assign pri26[1] = (pri_sel == 2'd0) ? 1'b0 : ch26_csr[14];assign pri26[2] = (pri_sel == 2'd2) ? ch26_csr[15] : 1'b0;assign pri27[0] = ch27_csr[13];assign pri27[1] = (pri_sel == 2'd0) ? 1'b0 : ch27_csr[14];assign pri27[2] = (pri_sel == 2'd2) ? ch27_csr[15] : 1'b0;assign pri28[0] = ch28_csr[13];assign pri28[1] = (pri_sel == 2'd0) ? 1'b0 : ch28_csr[14];assign pri28[2] = (pri_sel == 2'd2) ? ch28_csr[15] : 1'b0;assign pri29[0] = ch29_csr[13];assign pri29[1] = (pri_sel == 2'd0) ? 1'b0 : ch29_csr[14];assign pri29[2] = (pri_sel == 2'd2) ? ch29_csr[15] : 1'b0;assign pri30[0] = ch30_csr[13];assign pri30[1] = (pri_sel == 2'd0) ? 1'b0 : ch30_csr[14];assign pri30[2] = (pri_sel == 2'd2) ? ch30_csr[15] : 1'b0;//////////////////////////////////////////////////////////////////////// Misc logic//// Chanel Valid flag// The valid flag is asserted when the channel is enabled,// and is either in "normal mode" (software control) or// "hw handshake mode" (reqN control)// validN = ch_enabled & (sw_mode | (hw_mode & reqN) )always @(posedge clk) req_r <= #1 req_i & ~ack_o;assign valid[0] = ch0_conf[0] & ch0_csr[`WDMA_CH_EN] & (ch0_csr[`WDMA_MODE] ? (req_r[0] & !ack_o[0]) : 1'b1);assign valid[1] = ch1_conf[0] & ch1_csr[`WDMA_CH_EN] & (ch1_csr[`WDMA_MODE] ? (req_r[1] & !ack_o[1]) : 1'b1);assign valid[2] = ch2_conf[0] & ch2_csr[`WDMA_CH_EN] & (ch2_csr[`WDMA_MODE] ? (req_r[2] & !ack_o[2]) : 1'b1);assign valid[3] = ch3_conf[0] & ch3_csr[`WDMA_CH_EN] & (ch3_csr[`WDMA_MODE] ? (req_r[3] & !ack_o[3]) : 1'b1);assign valid[4] = ch4_conf[0] & ch4_csr[`WDMA_CH_EN] & (ch4_csr[`WDMA_MODE] ? (req_r[4] & !ack_o[4]) : 1'b1);assign valid[5] = ch5_conf[0] & ch5_csr[`WDMA_CH_EN] & (ch5_csr[`WDMA_MODE] ? (req_r[5] & !ack_o[5]) : 1'b1);assign valid[6] = ch6_conf[0] & ch6_csr[`WDMA_CH_EN] & (ch6_csr[`WDMA_MODE] ? (req_r[6] & !ack_o[6]) : 1'b1);assign valid[7] = ch7_conf[0] & ch7_csr[`WDMA_CH_EN] & (ch7_csr[`WDMA_MODE] ? (req_r[7] & !ack_o[7]) : 1'b1);assign valid[8] = ch8_conf[0] & ch8_csr[`WDMA_CH_EN] & (ch8_csr[`WDMA_MODE] ? (req_r[8] & !ack_o[8]) : 1'b1);assign valid[9] = ch9_conf[0] & ch9_csr[`WDMA_CH_EN] & (ch9_csr[`WDMA_MODE] ? (req_r[9] & !ack_o[9]) : 1'b1);assign valid[10] = ch10_conf[0] & ch10_csr[`WDMA_CH_EN] & (ch10_csr[`WDMA_MODE] ? (req_r[10] & !ack_o[10]) : 1'b1);assign valid[11] = ch11_conf[0] & ch11_csr[`WDMA_CH_EN] & (ch11_csr[`WDMA_MODE] ? (req_r[11] & !ack_o[11]) : 1'b1);assign valid[12] = ch12_conf[0] & ch12_csr[`WDMA_CH_EN] & (ch12_csr[`WDMA_MODE] ? (req_r[12] & !ack_o[12]) : 1'b1);assign valid[13] = ch13_conf[0] & ch13_csr[`WDMA_CH_EN] & (ch13_csr[`WDMA_MODE] ? (req_r[13] & !ack_o[13]) : 1'b1);assign valid[14] = ch14_conf[0] & ch14_csr[`WDMA_CH_EN] & (ch14_csr[`WDMA_MODE] ? (req_r[14] & !ack_o[14]) : 1'b1);assign valid[15] = ch15_conf[0] & ch15_csr[`WDMA_CH_EN] & (ch15_csr[`WDMA_MODE] ? (req_r[15] & !ack_o[15]) : 1'b1);assign valid[16] = ch16_conf[0] & ch16_csr[`WDMA_CH_EN] & (ch16_csr[`WDMA_MODE] ? (req_r[16] & !ack_o[16]) : 1'b1);assign valid[17] = ch17_conf[0] & ch17_csr[`WDMA_CH_EN] & (ch17_csr[`WDMA_MODE] ? (req_r[17] & !ack_o[17]) : 1'b1);assign valid[18] = ch18_conf[0] & ch18_csr[`WDMA_CH_EN] & (ch18_csr[`WDMA_MODE] ? (req_r[18] & !ack_o[18]) : 1'b1);assign valid[19] = ch19_conf[0] & ch19_csr[`WDMA_CH_EN] & (ch19_csr[`WDMA_MODE] ? (req_r[19] & !ack_o[19]) : 1'b1);assign valid[20] = ch20_conf[0] & ch20_csr[`WDMA_CH_EN] & (ch20_csr[`WDMA_MODE] ? (req_r[20] & !ack_o[20]) : 1'b1);assign valid[21] = ch21_conf[0] & ch21_csr[`WDMA_CH_EN] & (ch21_csr[`WDMA_MODE] ? (req_r[21] & !ack_o[21]) : 1'b1);assign valid[22] = ch22_conf[0] & ch22_csr[`WDMA_CH_EN] & (ch22_csr[`WDMA_MODE] ? (req_r[22] & !ack_o[22]) : 1'b1);assign valid[23] = ch23_conf[0] & ch23_csr[`WDMA_CH_EN] & (ch23_csr[`WDMA_MODE] ? (req_r[23] & !ack_o[23]) : 1'b1);assign valid[24] = ch24_conf[0] & ch24_csr[`WDMA_CH_EN] & (ch24_csr[`WDMA_MODE] ? (req_r[24] & !ack_o[24]) : 1'b1);assign valid[25] = ch25_conf[0] & ch25_csr[`WDMA_CH_EN] & (ch25_csr[`WDMA_MODE] ? (req_r[25] & !ack_o[25]) : 1'b1);assign valid[26] = ch26_conf[0] & ch26_csr[`WDMA_CH_EN] & (ch26_csr[`WDMA_MODE] ? (req_r[26] & !ack_o[26]) : 1'b1);assign valid[27] = ch27_conf[0] & ch27_csr[`WDMA_CH_EN] & (ch27_csr[`WDMA_MODE] ? (req_r[27] & !ack_o[27]) : 1'b1);assign valid[28] = ch28_conf[0] & ch28_csr[`WDMA_CH_EN] & (ch28_csr[`WDMA_MODE] ? (req_r[28] & !ack_o[28]) : 1'b1);assign valid[29] = ch29_conf[0] & ch29_csr[`WDMA_CH_EN] & (ch29_csr[`WDMA_MODE] ? (req_r[29] & !ack_o[29]) : 1'b1);assign valid[30] = ch30_conf[0] & ch30_csr[`WDMA_CH_EN] & (ch30_csr[`WDMA_MODE] ? (req_r[30] & !ack_o[30]) : 1'b1);always @(posedge clk) ndr_r <= #1 nd_i & req_i;always @(posedge clk) ndnr <= #1 nd_i & ~req_i;// Start Signal for DMA engineassign de_start = (valid_sel & !de_start_r ) | next_start;always @(posedge clk) de_start_r <= #1 valid_sel;always @(posedge clk) next_start <= #1 next_ch & valid_sel;// Ack outputs for HW handshake modealways @(posedge clk) ack_o[0] <= #1 ch0_conf[0] & (ch_sel == 5'h0) & ch0_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[1] <= #1 ch1_conf[0] & (ch_sel == 5'h1) & ch1_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[2] <= #1 ch2_conf[0] & (ch_sel == 5'h2) & ch2_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[3] <= #1 ch3_conf[0] & (ch_sel == 5'h3) & ch3_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[4] <= #1 ch4_conf[0] & (ch_sel == 5'h4) & ch4_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[5] <= #1 ch5_conf[0] & (ch_sel == 5'h5) & ch5_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[6] <= #1 ch6_conf[0] & (ch_sel == 5'h6) & ch6_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[7] <= #1 ch7_conf[0] & (ch_sel == 5'h7) & ch7_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[8] <= #1 ch8_conf[0] & (ch_sel == 5'h8) & ch8_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[9] <= #1 ch9_conf[0] & (ch_sel == 5'h9) & ch9_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[10] <= #1 ch10_conf[0] & (ch_sel == 5'ha) & ch10_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[11] <= #1 ch11_conf[0] & (ch_sel == 5'hb) & ch11_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[12] <= #1 ch12_conf[0] & (ch_sel == 5'hc) & ch12_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[13] <= #1 ch13_conf[0] & (ch_sel == 5'hd) & ch13_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[14] <= #1 ch14_conf[0] & (ch_sel == 5'he) & ch14_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[15] <= #1 ch15_conf[0] & (ch_sel == 5'hf) & ch15_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[16] <= #1 ch16_conf[0] & (ch_sel == 5'h10) & ch16_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[17] <= #1 ch17_conf[0] & (ch_sel == 5'h11) & ch17_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[18] <= #1 ch18_conf[0] & (ch_sel == 5'h12) & ch18_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[19] <= #1 ch19_conf[0] & (ch_sel == 5'h13) & ch19_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[20] <= #1 ch20_conf[0] & (ch_sel == 5'h14) & ch20_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[21] <= #1 ch21_conf[0] & (ch_sel == 5'h15) & ch21_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[22] <= #1 ch22_conf[0] & (ch_sel == 5'h16) & ch22_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[23] <= #1 ch23_conf[0] & (ch_sel == 5'h17) & ch23_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[24] <= #1 ch24_conf[0] & (ch_sel == 5'h18) & ch24_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[25] <= #1 ch25_conf[0] & (ch_sel == 5'h19) & ch25_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[26] <= #1 ch26_conf[0] & (ch_sel == 5'h1a) & ch26_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[27] <= #1 ch27_conf[0] & (ch_sel == 5'h1b) & ch27_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[28] <= #1 ch28_conf[0] & (ch_sel == 5'h1c) & ch28_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[29] <= #1 ch29_conf[0] & (ch_sel == 5'h1d) & ch29_csr[`WDMA_MODE] & de_ack;always @(posedge clk) ack_o[30] <= #1 ch30_conf[0] & (ch_sel == 5'h1e) & ch30_csr[`WDMA_MODE] & de_ack;// Channel Selectalways @(posedge clk or negedge rst) if(!rst) ch_sel_r <= #1 0; else if(de_start) ch_sel_r <= #1 ch_sel_d;assign ch_sel = !dma_busy ? ch_sel_d : ch_sel_r;//////////////////////////////////////////////////////////////////////// Select Registers based on arbiter (and priority) outputs//always @(ch_sel or valid) case(ch_sel) // synopsys parallel_case full_case 5'h0: valid_sel = valid[0]; 5'h1: valid_sel = valid[1]; 5'h2: valid_sel = valid[2]; 5'h3: valid_sel = valid[3]; 5'h4: valid_sel = valid[4]; 5'h5: valid_sel = valid[5]; 5'h6: valid_sel = valid[6]; 5'h7: valid_sel = valid[7]; 5'h8: valid_sel = valid[8]; 5'h9: valid_sel = valid[9]; 5'ha: valid_sel = valid[10]; 5'hb: valid_sel = valid[11]; 5'hc: valid_sel = valid[12]; 5'hd: valid_sel = valid[13]; 5'he: valid_sel = valid[14]; 5'hf: valid_sel = valid[15]; 5'h10: valid_sel = valid[16]; 5'h11: valid_sel = valid[17]; 5'h12: valid_sel = valid[18]; 5'h13: valid_sel = valid[19]; 5'h14: valid_sel = valid[20]; 5'h15: valid_sel = valid[21]; 5'h16: valid_sel = valid[22]; 5'h17: valid_sel = valid[23]; 5'h18: valid_sel = valid[24]; 5'h19: valid_sel = valid[25]; 5'h1a: valid_sel = valid[26]; 5'h1b: valid_sel = valid[27]; 5'h1c: valid_sel = valid[28]; 5'h1d: valid_sel = valid[29]; 5'h1e: valid_sel = valid[30]; endcasealways @(ch_sel or ndr_r) case(ch_sel) // synopsys parallel_case full_case 5'h0: ndr = ndr_r[0]; 5'h1: ndr = ndr_r[1]; 5'h2: ndr = ndr_r[2]; 5'h3: ndr = ndr_r[3]; 5'h4: ndr = ndr_r[4]; 5'h5: ndr = ndr_r[5]; 5'h6: ndr = ndr_r[6]; 5'h7: ndr = ndr_r[7]; 5'h8: ndr = ndr_r[8]; 5'h9: ndr = ndr_r[9]; 5'ha: ndr = ndr_r[10]; 5'hb: ndr = ndr_r[11]; 5'hc: ndr = ndr_r[12]; 5'hd: ndr = ndr_r[13]; 5'he: ndr = ndr_r[14]; 5'hf: ndr = ndr_r[15]; 5'h10: ndr = ndr_r[16]; 5'h11: ndr = ndr_r[17]; 5'h12: ndr = ndr_r[18]; 5'h13: ndr = ndr_r[19]; 5'h14: ndr = ndr_r[20]; 5'h15: ndr = ndr_r[21]; 5'h16: ndr = ndr_r[22]; 5'h17: ndr = ndr_r[23]; 5'h18: ndr = ndr_r[24]; 5'h19: ndr = ndr_r[25]; 5'h1a: ndr = ndr_r[26]; 5'h1b: ndr = ndr_r[27]; 5'h1c: ndr = ndr_r[28]; 5'h1d: ndr = ndr_r[29]; 5'h1e: ndr = ndr_r[30]; endcasealways @(ch_sel or pointer0 or pointer1 or pointer2 or pointer3 or pointer4 or pointer5 or pointer6 or pointer7 or pointer8 or pointer9 or pointer10 or pointer11 or pointer12 or pointer13 or pointer14 or pointer15 or pointer16 or pointer17 or pointer18 or pointer19 or pointer20 or pointer21 or pointer22 or pointer23 or pointer24 or pointer25 or pointer26 or pointer27 or pointer28 or pointer29 or pointer30 ) case(ch_sel) // synopsys parallel_case full_case 5'h0: pointer = pointer0; 5'h1: pointer = pointer1; 5'h2: pointer = pointer2; 5'h3: pointer = pointer3; 5'h4: pointer = pointer4; 5'h5: pointer = pointer5; 5'h6: pointer = pointer6; 5'h7: pointer = pointer7; 5'h8: pointer = pointer8; 5'h9: pointer = pointer9; 5'ha: pointer = pointer10; 5'hb: pointer = pointer11; 5'hc: pointer = pointer12; 5'hd: pointer = pointer13; 5'he: pointer = pointer14; 5'hf: pointer = pointer15; 5'h10: pointer = pointer16; 5'h11: pointer = pointer17; 5'h12: pointer = pointer18; 5'h13: pointer = pointer19; 5'h14: pointer = pointer20; 5'h15: pointer = pointer21; 5'h16: pointer = pointer22; 5'h17: pointer = pointer23; 5'h18: pointer = pointer24; 5'h19: pointer = pointer25; 5'h1a: pointer = pointer26; 5'h1b: pointer = pointer27; 5'h1c: pointer = pointer28; 5'h1d: pointer = pointer29; 5'h1e: pointer = pointer30; endcasealways @(ch_sel or pointer0_s or pointer1_s or pointer2_s or pointer3_s or pointer4_s or pointer5_s or pointer6_s or pointer7_s or pointer8_s or pointer9_s or pointer10_s or pointer11_s or pointer12_s or pointer13_s or pointer14_s or pointer15_s or pointer16_s or pointer17_s or pointer18_s or pointer19_s or pointer20_s or pointer21_s or pointer22_s or pointer23_s or pointer24_s or pointer25_s or pointer26_s or pointer27_s or pointer28_s or pointer29_s or pointer30_s ) case(ch_sel) // synopsys parallel_case full_case 5'h0: pointer_s = pointer0_s; 5'h1: pointer_s = pointer1_s; 5'h2: pointer_s = pointer2_s; 5'h3: pointer_s = pointer3_s; 5'h4: pointer_s = pointer4_s; 5'h5: pointer_s = pointer5_s; 5'h6: pointer_s = pointer6_s; 5'h7: pointer_s = pointer7_s; 5'h8: pointer_s = pointer8_s; 5'h9: pointer_s = pointer9_s; 5'ha: pointer_s = pointer10_s; 5'hb: pointer_s = pointer11_s;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -