是不是再fiber或者gt設計中經常遇到接收數據沒有對齊?
是的。很多協議需要手動對齊設計。這不,它來了。下面是手動對齊代碼設計,本人在很多工程和項目中應用過,現在共享出來,給大家使用。
module gt_k_char
(
input ?? ??? ??? ?gt_clk,
input ?? ??? ??? ?gt_rst_n,
input[3:0]?? ??? ?b_gt_rxcharisk,
input[31:0]?? ??? ?b_gt_rxdata,
output[3:0]?? ??? ?a_gt_rxcharisk,
output[31:0]?? ?a_gt_rxdata
);
?? ?reg[3:0]?? ?gt_rxcharisk_r;
reg[31:0]?? ?gt_rxdata_r;
reg[3:0]?? ?mux_code;
reg[3:0]?? ?a_gt_rxcharisk_r;
reg[31:0]?? ?a_gt_rxdata_r;
always@(posedge gt_clk)begin
gt_rxcharisk_r ? <= b_gt_rxcharisk;
gt_rxdata_r?? ??? ? <= b_gt_rxdata;
a_gt_rxcharisk_r <= gt_rxcharisk_r;
end
always@(posedge gt_clk or negedge gt_rst_n)begin
if(gt_rst_n==1'b0)begin
mux_code <= 4'd0;
end
else begin
if(b_gt_rxcharisk==4'd8)begin
mux_code <= 4'd8;
end
else if(b_gt_rxcharisk==4'd4)begin
mux_code <= 4'd4;
end
else if(b_gt_rxcharisk==4'd2)begin
mux_code <= 4'd2;
end
else if(b_gt_rxcharisk==4'd1)begin
mux_code <= 4'd1;
end
end
end
always@(posedge gt0_rxusrclk2_out)begin
if(mux_code==4'd8)begin
a_gt_rxdata_r <= {b_gt_rxdata[23:0],gt_rxdata_r[31:24]};
end
else if(mux_code==4'd4)begin
a_gt_rxdata_r <= {b_gt_rxdata[15:0],gt_rxdata_r[31:16]};
end
else if(mux_code==4'd2)begin?? ?
a_gt_rxdata_r <= {b_gt_rxdata[7:0],gt_rxdata_r[31:8]};
end
else if(mux_code==4'd1) begin
a_gt_rxdata_r <= gt_rxdata_r[31:0];
end
end
assign ?? ?a_gt_rxcharisk = a_gt_rxcharisk_r;
assign ?a_gt_rxdata = a_gt_rxdata_r;
endmodule