新手上路
- 积分
- 36
- 金钱
- 36
- 注册时间
- 2023-2-19
- 在线时间
- 5 小时
|
5金钱
各位老师,我最近在学习”基于光口的视频传输实验“这一节,有个问题一直弄不明白。教程里面
“光口字对齐模块是将接收回来不对齐的数据转化为对齐的数据,然后再输出到光口解码模块”
”在实际测试过程中发现,发送的 32 位数据会有可能出现 16 位的数据的移位,就是说发送的数据和接收到的数据会有 16 位的错位,所以这里要添加一段信号对齐的逻辑代码“,
对应的代码如下:
always@(posedge rx_clk or negedge rst_n)
if(!rst_n)
rx_data_align <= 32'd0;
else
case(align_bit)
4'b0001:
rx_data_align <= rx_data;
4'b0100:
rx_data_align <= {rx_data[15:0],rx_data_r[31:16]};
default:
rx_data_align <= 32'd0;
endcase
我不太明白,在网上找了以下有没有人跟我有同样的问题,找到这样一篇博客,看完后解除了我的一些疑惑,但同时有增加了疑惑
我把这篇博客截图,请大家看看,不知道我理解的对不对。
光纤发送的时候往往以数据帧的形式发送,包含帧头、数据和帧尾。
在帧头和帧尾内嵌K码,假设在发送端把K码放在[7:0]这里,
接收端GTH IP核自动检测K码所在的位置,然后用一个四比特位数据把K码所在的位置告诉用户;
比如:0B0001表示K码在[7:0];0B0100表示K码在[23:16];
如果K码不在用户指定的那几个比特位,用户就知道K码在32个比特位里面发生了“位移”,接收到的数据不是原始数据,所以要进行数据“对齐”
我现在的疑问是:
1.我对位移的理解是否正确;
2.为什么会发生数据位移的情况?是发送的逻辑导致的还是传输过程导致的,和硬件设计是否有关;
3.如果以“帧”这种形式发送数据,帧头或帧尾发生数据移位,是否意味这一帧里面的数据也全部发生了位移;
最后还有一个小问题:
data_align模块input信号有4个,rx_ctrl0、rx_ctrl1、rx_ctrl2、rx_ctrl3,我猜测:
rx_ctrl0 = 0B‘0001 表示K码在[7:0] 此时:rx_ctrl1 = 0B‘0000;rx_ctrl2 = 0B‘0000;rx_ctrl3 = 0B‘0000;
rx_ctrl1= 0B‘0010 表示K码在[15:8] 此时:rx_ctrl0 = 0B‘0000;rx_ctrl2 = 0B‘0000;rx_ctrl3 = 0B‘0000;
rx_ctrl2 = 0B‘0100 表示K码在[23:16] 此时:rx_ctrl0 = 0B‘0000;rx_ctrl1 = 0B‘0000;rx_ctrl3 = 0B‘0000;
rx_ctrl3 = 0B‘1000 表示K码在[32:24] 此时:rx_ctrl0 = 0B‘0000;rx_ctrl1 = 0B‘0000;rx_ctrl2 = 0B‘0000;
欢迎讨论一下,提出不同的见解,看看我理解的对不对。
|
-
|