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

📄 zonghe.v

📁 对PCM编码的多路复用与解复用程序
💻 V
字号:
module ZongHe (ClkIn,Din0,Din1,Din2,DAddin,count8,count64,count2048
				,DAddout,Dout0,Dout1,Dout2);

	input 	ClkIn,						//时钟输入,(若16.384MHz
			Din0,Din1,Din2,DAddin;		//多路PCM数码流输入,复接数码流输入
			
	output	count8,count64,count2048,	//输出,8、64、2048分频(则2.048M,256K=64K*4(一帧分4个时隙),8K
										//分别为编码时钟,位同步,帧同步时钟
										//其中位同步时钟可以64K--2048K,本试验一帧分4个时隙,256K=8K*8*4									
			DAddout,Dout0,Dout1,Dout2;	//多路复接输出,各路分离输出
	
	reg [15:0] count;					//计数寄存器,16位
	reg count8,count64,count2048;		//输出口位寄存器									
										
										//TP3067
										//Din0,第一个时隙(TS0),不延时接入复接线路
	reg	[7:0]  DataBufOut1;				//Din1,第二个时隙,延迟8位输出接入复接线路
										//第三第四个时隙不用,分别全0接入复接线路
										//DataBufOut1为一号输出寄存器
										
										//Dout0,选择第一个时隙直接分接输出
	reg	[23:0]  DataBufIn1;				//Dout1,选择第二个时隙,送入一号输入寄存器DataBufIn1延迟24位
										//(加上复接前延迟的8位,共32位,
										//去到下一帧的第一时隙输出,因为解码时只对一帧的第一个时隙编码输入有效
										//第三第四个时隙不作处理
	wire DataBufIn1_wire;				//一号输入寄存器DataBufIn1的输入线
	
	//计数器部分
	always @ (posedge ClkIn)					//上升沿,negedge 下降沿
		begin 
			count=count+1;
			if(count==16'b0100_0000_0000_0000)	//1024分频的一半
				begin
					count=16'h0000;				//计数寄存器清零
				end
		end
			
	//编码时钟,2048K
	always @(posedge count[1])		//8分频的一半
		begin
			count8=~count8;			//输出取反,占空比50%
		end
		
	//位同步,256K
	always @(posedge count[4])		//64分频的一半
		begin
			count64=~count64;		//输出取反,占空比50%
		end
		
	//帧同步,8K
	always @(posedge count[9])		//1024分频的一半
		begin
			count2048=~count2048;	//输出取反,占空比50%	
		end
	
	//复接移位寄存器部分
	always @(posedge count[5])				//位同步时钟,256K
		begin
			DataBufOut1<=DataBufOut1<<1;	//第二路输入的移位寄存
			DataBufOut1[0]<=Din2;
		end
		
	//分接移位寄存器部分
	always @(posedge count[5])				//位同步时钟,256K
		begin
			DataBufIn1<=DataBufIn1<<1;		//第二路输入的移位寄存
			DataBufIn1[0]<=DataBufIn1_wire;
		end
	
	//多路复接输出部分
	assign DAddout=(count[10:9]==1)?Din1:((count[10:9]==2)?DataBufOut1[7]:0);
	
	//多路分接输出
	assign Dout0=Din0;
	assign Dout1=(count[10:9]==1)?DAddin:0;				//[10:9]==1:TS0;2:TS1;0:TS3;3:TS2	
	assign DataBufIn1_wire=(count[10:9]==2)?DAddin:0;
	assign Dout2=(count[10:9]==1)?DataBufIn1[23]:0;
					
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -