⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wb_dma_ch_sel.v

📁 DMA的实现,通过此文件以及后面的文件可以实现DMA,可以在CPU之外工作.
💻 V
📖 第 1 页 / 共 4 页
字号:
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 + -