在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2285|回复: 5

[原创] 一路8M数据转4路2M数据,输出2M不能帧同步,高手请帮忙看看。

[复制链接]
发表于 2016-6-27 09:37:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
//-----------------------------------------------//
//按字复用,8M的TDM码流顺序为
//第一路TS0,第二路TS0,第三路TS0,第4路TS0;
//第一路TS1,第二路TS1,第三路TS1,第4路TS1;
//   ............................. ...
//第一路TS31,第二路TS31,第三路TS31,第四路TS31;              
//分为4路2M的PCM 第一路TS0,TS1.............TS31;
//              第二路TS0,TS1.............TS31;
//              第三路TS0,TS1.............TS31;
//              第四路TS0,TS1.............TS31;
//----------------------------------------------//

`timescale 10ns/1ns
module fenpin(clk,rst,clk8m,pcm1,pcm2,pcm3,pcm4,
              clk2m,clk8k,datain,out1,out2);
input  clk,rst,datain;
output clk8m,clk2m,clk8k,pcm1,pcm2,pcm3,pcm4,out1,out2;
reg[3:0] cnt1,cnt4;
reg[9:0] cnt5;
reg clk8m,clk2m,clk8k,pcm1,pcm2,pcm3,pcm4;
reg[7:0] indata0[3:0];
reg[7:0] outdata[3:0];
reg[7:0] tem_8m,tem_2m;
reg[7:0] data2m1,data2m2,data2m3,data2m4;
reg[7:0] tem1,tem2,tem3,tem4,mem1,mem2,mem3,mem4;
parameter data0=8'b00000000;      
reg clk4m,clk5bk,clk1m,clk125;
reg[2:0] cnt,cnt3,addr;
reg[1:0] cnt6,cnt2,num;
reg[3:0] count,cnt7,cnt8;
reg numb1;

//reg[1:0] num;
//integer i,j,k,l;
initial
begin

  cnt3=3'b000;
  numb1=1'b0;
  cnt=3'b000;
count=4'b0000;
// cnt7=4'b0000;
num=2'b00;
// cnt8=4'b0000;
addr=3'b000;
// i=0;
// j=0;
// k=0;
// l=0;
end


//--------------------------------8MHz---

always @(posedge clk or negedge rst)
    begin

    if(!rst)

   begin

  clk8m<=0;

  cnt1<=0;

end

else

   begin

  if(cnt1==4'b0010)

   begin

clk8m<=~clk8m;

cnt1<=0;

end

else

cnt1<=cnt1+1'b1;

end

end
//------------------------------2MHz------
always @(posedge clk8m or negedge rst)

    begin

     

    if(!rst)

   begin

  clk2m<=1;

clk4m<=1;

cnt2<=0;

end

else

   begin

  clk4m<=~clk4m;

  if(cnt2==2'b01)

   begin

clk2m<=~clk2m;



cnt2<=0;

end

else

cnt2<=cnt2+1'b1;

end

end
//----------------------------500k/1m---------
always @(posedge clk2m or negedge rst)
begin

  if(!rst)

    begin

cnt6<=0;

clk5bk<=0;

clk1m<=1;

end

else

begin

  clk1m<=~clk1m;

if(cnt6==2'b11)//01,clk500k

begin

clk125<=~clk125;

cnt6<=0;

end

else

begin

cnt6<=cnt6+1'b1;

end

end

end
//-----------------------------clk8khz-----
always @(posedge clk2m or negedge rst)
   begin

  if(!rst)

    begin

cnt5<=0;

clk8k<=0;

end

  else if(cnt5==10'b0011111001)//10'b1111100111---8m;10'b0011111001---2m

    begin

clk8k<=1;

cnt5<=0;

end

else

begin

clk8k<=0;

cnt5<=cnt5+1'b1;

end

end

//-----------------------采集8K脉冲---
always @(posedge clk8k)


begin
   if(clk8k&clk2m)


numb1<=1'b1;

else

numb1<=0;

end
//end


//  ----------------------串转并---                  
always @(posedge clk8m)
begin
   if(numb1==1)

begin

tem_8m[0]<=clk4m;

tem_8m[1]<=tem_8m[0];

tem_8m[2]<=tem_8m[1];

tem_8m[3]<=tem_8m[2];

tem_8m[4]<=tem_8m[3];

tem_8m[5]<=tem_8m[4];

tem_8m[6]<=tem_8m[5];

tem_8m[7]<=tem_8m[6];

cnt3<=cnt3+1'b1;

end

if(cnt3==3'b111)
   begin

indata0[addr]<=tem_8m[7:0];
  // tem_2m[7:0]<=tem_8m[7:0];
   cnt3<=0;

addr<=addr+1'b1;
   cnt<=cnt+1'b1;

end


if(addr==3'b100)

addr<=0;



if(cnt==3'b101)

cnt<=0;
end
//-------------------------------

assign out1=clk1m;
assign out2=clk125;
//------------------------------


always @(posedge clk2m)
begin
case(cnt)
3'b001:begin
        data2m1<=indata0[0];

  tem1<=data2m1+1'b1;

  end
3'b010:begin
        data2m2<=indata0[1];

  tem2<=data2m2;

  end
3'b011:begin
        data2m3<=indata0[2];

  tem3<=data2m3;

  end
3'b100:begin

   

     data2m4<=indata0[3];

  tem4<=data2m4+1'b1;

  end

  default:;

  endcase  



  

  
   end
//----------------------------------------


always @(posedge clk2m)
  begin  


mem1[7:1]<=mem1[6:0];

mem2[7:1]<=mem2[6:0];

mem3[7:1]<=mem3[6:0];

mem4[7:1]<=mem4[6:0];

count<=count+1'b1;

if(count==4'b0111)

begin

count<=4'b0000;

mem1<=tem1;

mem2<=tem2;

mem3<=tem3;

mem4<=tem4;

end

pcm1<=mem1[7];

pcm2<=mem2[7];

pcm3<=mem3[7];
         pcm4<=mem4[7];  






end
endmodule
 楼主| 发表于 2016-6-27 09:39:25 | 显示全部楼层
输出的2M数据与8K帧同步时钟不能同步,怎么实现以2M时钟移出的数据能和8K时钟帧同步。
 楼主| 发表于 2016-6-27 16:33:16 | 显示全部楼层
有专业人事吗,帮忙瞧瞧。
 楼主| 发表于 2016-6-28 08:31:43 | 显示全部楼层
有做个这方面的吗?
发表于 2016-6-28 12:04:35 | 显示全部楼层
你的思路已经有问题了,FPGA设计中是很忌讳拿分频时钟来做时钟的。
1、电路是一对寄存器和门组成,第一次分频肯定有延迟,也就是clk8m分频是clk4m,他们的相位已经有差别了,clk4m的时钟上升沿会比clk8m的时钟上升沿后一点到达,你又层层分频下去,最后2k的时钟跟8m的时钟相位相差肯定大。
2、分频出来的时钟他的时钟偏斜较大,不像晶振出来的时钟,上升沿和下降沿偏斜很小,拿来作为触发时钟很容易出问题
3、你可以使用PLL分频或者用计数器,分频到了给一个时钟高电平作为出发信号(这个我也不这道怎么描述,你百度分频时钟使用就能找到这种做法)
 楼主| 发表于 2016-6-28 15:28:36 | 显示全部楼层
谢谢,这个我试了,都用输入CLK做源头计数分频,8M,4M,2M的上升沿是错开的,上升沿没法同时取得。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-20 19:55 , Processed in 0.019324 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表