通信雷达一体化-data域卷积编码
模块有二个时钟,一个是输入时钟,一个是输出时钟(按照所得速率不同而不同)。
signal域,输入时钟(20M),输出时钟(40M)。
data域, 输入时钟(60M),输出时钟(80M)。
模块思想是:首先生成1/2码率的卷积码,然后缓存起来,根据不同的速率要求,给予不同的输出方式。
reg punc_34_ready;
reg [1:0] i;
always @(posedge clk_60M or negedge rst_n) begin
if(!rst_n) begin
punc_34 <= 6'd0;
punc_34_ready <= 1'd0;
i <= 2'd0;
end
else if(data_out_conv_ready) begin
case (i)
2'b00: begin
punc_34[1:0] <= data_out_conv;
punc_34_ready <= 1'd1;
i <= i+1'd1;
end
2'b01: begin
punc_34[3:2] <= data_out_conv;
punc_34_ready <= 1'd1;
i <= i+1'd1;
end
2'b10: begin
punc_34[5:4] <= data_out_conv;
punc_34_ready <= 1'd1;
i <= 2'b00;
end
default: begin
punc_34 <= 6'd0;
punc_34_ready <= 1'd0;
i <= 2'b00;
end
endcase
end
else begin
punc_34 <= 6'd0;
punc_34_ready <= 1'd0;
i <= 2'b00;
end
end
reg [2:0] j;
always @(posedge clk_80M or negedge rst_n) begin //时钟问题80 1/80 *4===1/60*3
if(!rst_n) begin
data_out_conv2 <= 1'd0;
data_out_conv2_ready <= 1'd0;
j <= 3'b000;
end
else if(punc_34_ready) begin
case(j)
3'b000,3'b001,3'b010: begin
data_out_conv2 <= punc_34[j];
data_out_conv2_ready <= 1'd1;
j <= j+1'b1;
end
3'd011: begin
data_out_conv2 <= punc_34[j+2];
data_out_conv2_ready <= 1'd1;
j <= 3'b000;
end
default: begin
data_out_conv2 <= 1'b0;
data_out_conv2_ready <= 1'd0;
j <= 3'b000;
end
endcase
end
else begin
data_out_conv2 <= 1'b0;
data_out_conv2_ready <= 1'b0;
end
end