描述问题:进行数据解码时,对于曼彻斯特编码而言,并不是所有的沿都是数据,因此需要对有用的沿进行一个提取。最初对沿没有提取,当数据进来后,解码失败。
问题难点:当state置1时,会对数据的所有沿源源不断的采,无法特定选择我们想要的数据沿,
目标:只对有用的数据沿进行解码:上升沿-1,下降沿-0.
问题解决:虽然每个沿都在采,其实只要保证只判断在tx_cnt的56、78、9和10....中间沿即可,也就是要保证被解析的沿在rx_cnt中的01、23、45、67、89、1011、1213、1415 当中。
最终发觉,有用的沿均在rx_cnt的偶数上出现,因此将对上升和下降沿的转换,放在rx_cnt的偶数下面即可。
always @(posedge Clk or negedge Rst_n)
if(!Rst_n)
r_pe_data_byte <= 8'd0;
else if(rx_cnt == 0 || rx_cnt == 2 ||rx_cnt == 4 ||rx_cnt == 6 ||rx_cnt == 8
||rx_cnt == 10 ||rx_cnt == 12 || rx_cnt == 14)
if(nedge)
r_pe_data_byte <= {1'd0,r_pe_data_byte[7:1]};
else if(podge)
r_pe_data_byte <= {1'd1,r_pe_data_byte[7:1]};
else
r_pe_data_byte <= r_pe_data_byte;
else if(pe_rx_done)
r_pe_data_byte <= 8'd0;
else
r_pe_data_byte <= r_pe_data_byte;