题解 | #数据串转并电路#
数据串转并电路
https://www.nowcoder.com/practice/6134dc3c8d0741d08eb522542913583d
`timescale 1ns/1ns module s_to_p( input clk , input rst_n , input valid_a , input data_a , output reg ready_a , output reg valid_b , output reg [5:0] data_b ); reg [5:0] d_r; reg [2:0] cnt; always@(posedge clk or negedge rst_n)begin//上游移位寄存器存数据 if(!rst_n)begin d_r<=6'b0; ready_a<=0; end else if(valid_a && ready_a) d_r<={data_a,d_r[5:1]}; else ready_a<=1; end always@(posedge clk or negedge rst_n)begin//设置计数器用于存放有效数据个数 if(!rst_n)begin cnt<=0; valid_b<=0; end else if(valid_a && ready_a)begin cnt<=cnt+1; if(cnt==5)begin valid_b<=1; cnt<=0; end else valid_b<=0; end end always@(posedge clk or negedge rst_n)begin if(!rst_n) data_b<=0; else if(cnt==5 && valid_a && ready_a) data_b<={data_a,d_r[5:1]};//根据波形图,需要同时赋值过去 end endmodule
上游需要valid和ready两个信号同时满足条件才能进行移位寄存器缓存,下游根据上游移位次数设置计数器判断valid_b什么时候置一,然后输出data_b