题解 | #数据串转并电路#
数据串转并电路
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
查看23道真题和解析