题解 | #数据串转并电路#
数据串转并电路
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
);
// always@(*)begin
// ready_a = 1'b1;
// end
// assign ready_a = 1'b1;
reg [2:0] counter ;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
counter <= 3'b0;
ready_a <= 1'b0;
// data_b <= 6'b0;
end
else if(valid_a == 1) begin
if(counter == 3'b101) begin
counter <= 3'b0;
ready_a <= 1'b1;
end
else begin
counter <= counter + 1'b1;
ready_a <= 1'b1;
end
end
else begin
counter <= counter;
ready_a <= 1'b1;
end
end
reg [5:0] data_temp ;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
data_temp <= 6'b0;
// data_b <= 6'b0;
end
// else if(counter == 3'b101)begin
// data_temp <= {data_a,data_temp[5:1]};
// data_b <= data_temp;
// end
else if(valid_a) begin
data_temp <= {data_a,data_temp[5:1]};
// data_b <= data_b;
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
data_b <= 6'b0;
else if(counter == 3'd5)
data_b <= {data_a,data_temp[5:1]};
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
valid_b <= 1'b0;
else if(counter == 3'b101 && valid_b == 0)
valid_b <= 1'b1;
else
valid_b <= 1'b0;
end
endmodule
可以提前一个cycle输出temp数据
查看19道真题和解析