📄 zonghe.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 + -