连续打拍
方法1:
always @ (posedge clk) begin
r_a_d1 <= i_a;
r_a_d2 <= r_a_d1;
r_a_d3 <= r_a_d2;
r_a_d4 <= r_a_d3;
end
assign o_a = r_a_d4;
方法2:
always @ (posedge clk) begin
r_a_4ff <= {r_a_4ff[23:0],i_a};
end
assign o_a = r_a_4ff[31:24];
方法3:
always @ (posedge clk) begin
r_a_4ff <= {i_a,r_a_4ff[31:8]};
end
assign o_a = r_a_4ff[7:0];
方法1:
方法2:
方法3:
标识节拍
假设我们有一个串行输入的8bit信号i_a,将提供给3个通道的数据顺序放在i_a上。即i_a输入的数据为:ch0的数据->ch1的数据->ch2的数据->ch0的数据。
例如i_a输入1,2,3,4,5,那么1是ch0通道的数据,2是ch1通道的数据,3是ch2通道的数据,4是ch0通道的数据,以此类推。
always @ (posedge clk) begin
if (rst) begin
r_ch_flag <= 3'b001;
r_a <= 8'd0;
r_ch0_valid <= 1'b0;
r_ch1_valid <= 1'b0;
r_ch2_valid <= 1'b0;
end else begin
if (i_a_valid) begin
r_ch_flag <= {r_ch_flag[1:0],r_ch_flag[2]};
r_a <= i_a;
end
r_ch0_valid <= i_a_valid & r_ch_flag[0];
r_ch1_valid <= i_a_valid & r_ch_flag[1];
r_ch2_valid <= i_a_valid &