关于2倍频同步问题
我想问下,大家有什么好的建议么?还是我的思路有问题?<br />
希望大家在百忙之中可以帮我解答一下,万分感谢。<br />
<br />
ps:以下是一些核心代码<br />
<br />
process(rclk,RPOS) --rclk是2M恢复时钟<br />
variable flag2: std_logic;<br />
begin<br />
if (rclk'event and rclk='1') then<br />
if RPOS = '1' then<br />
if flag2 = '0' then --如果flag2为'0',则输"00",flag2为'1' <br />
Dataout <= "00";<br />
flag2 := '1';<br />
else --否则如果flag2为'1',则输出"11",同时置flag2为'0'<br />
Dataout <= "11";<br />
flag2:= '0'; <br />
end if;<br />
else --其它:"01"<br />
Dataout <= "01"; <br />
end if;<br />
end if;<br />
end process;<br />
process(clk4,Dataout,sign) -- clk4是cpld外部16M晶振分频<br />
variable flag3 : std_logic;<br />
begin<br />
if (clk4'event and clk4='1')then<br />
if flag3 = '0' then<br />
T_DATA <= Dataout(0);<br />
flag3 := '1'; <br />
else<br />
T_DATA <= Dataout(1);<br />
flag3 := '0';<br />
end if;<br />
end if;<br />
end process;
我想我不是很明白你的具体运用的设计是什么原理,不知道回答你是否合适。但是还是给点自己的考虑吧,如果有些用处将非常高兴,如果没有用处的话也请原谅。
我先大概的总结一下你的问题:外部输入两个信号,同步的时钟和数据;
希望对其做一个数码的转换运算,就是你称其为nrz-cmi的编码;
最后,你发现输出的cim码有错,并且是周期性的错误?
是这样的吗?
代码看起来很费劲,你其实应该花更多的时间来阐述一下你的问题,然后从思路上解决问题。最后的代码实现就容易多了。
这样你看好不好,你把你想实现的输入和输出的关系,并且相关的时序大概描述一下,也许这样能够帮你想到方法的人会更多。
从我以往的设计来看,时序电路出现问题很多时候,不仅仅是你代码的问题,还会和你的PCB走线等外部原因有关系的...当然,设计的好的时序可以给外部电路更多的冗余,保证后续的测试觉得它不会出错。
具体问题
很很很谢谢楼上的,我最近一直在被这个东西折磨。
我可能说的不是很清楚,我整理了一下思路。
是这样的:
输入: 2M的NRZ数据(RPOS),2M的数据的同步时钟(RCLK).
cpld需要进行的处理: 把NRZ码进行转换到CMI码,然后从一个管脚输出。
问题: 可以用2M的RCLK来对NRZ数据进行1位变2位的码型转换,变成4M的数据,现在要用一个同步的4M时钟来同步串行发送这个CMI码,这个4M的时钟想用CPLD来实现,
不知道该如何操作?没有思路。
想法: 我想可以用晶振的16M时钟来同步这个2M的RCLK,产生2M的信号时钟,但是又该如何产生同样同步的4M时钟呢?总不能用95144来实现一个PLL吧?太复杂况且
很可能95144的资源也不够啊?
万分急迫,万分谢谢。
希望大家提些思路啊。
是不是有4B/5B转换没有做呀?
:time: :time: :time: :time:
关于时钟
怎么会有4B/5B转换的问题呢?我这个应该是1B/2B的转换啊。
继续等待。
我先大体说一下我的思路,不对之处敬请指正。
首先分频16MHz的晶振得到2M和4M的输入和输出时钟。由于你要把1b转换为2b那么在输入和输出之间可以使用一个fifo来实现。即实际是使用fifo来同步你的输入输出时钟。
NRZ编码应该有4B/5B的问题呀,CMI编码我不熟悉。
等待
是不是用cpld不可能实现倍频?
是不是该考虑用专门的pll芯片?
顶。ddd
你不需要外面的2M时钟,也不需要fifo,你只需要16M时钟和2m数据就可以了。你用16M时钟提取2m时钟,提取过程中自然会产生4M时钟,你用恢复出来的2m和4m时钟作NRZ-CMI转换就可以了。嘻嘻,思路要活,其实CMI-NRZ解码的时候才有小技巧呢
呵呵
我觉得小编遇到的是一个时钟之间相位差的问题。用16M时钟生成2M,4M的时钟都不难,但是一定要保证这生成的两个时钟与输入数据的参考时钟有确定的相位关系,否则数据采集就会出错。怎样保证相位关系呢?我想应该是用DPLL吧.
说错的地方请别见笑哈各位。
