题解 | #并串转换#
并串转换
https://www.nowcoder.com/practice/296e1060c1734cf0a450ea58dd09d36c
阅读题目可以,当复位信号有效后,对时钟进行计数,当计数到4个时钟上升沿时,将valid_in信号拉高一个时钟周期。同时dout输入数据d的最高位,然后下个时钟按照顺序输出计数字为4的数据d。 此题目需要注意: 1,在计数4个时钟上升沿时候需要锁存当前的数据d,然后按照顺序输出。 2,需要观察题目中给的时序图,按照高到低位输出数据d。 3,注意题目中已经定义了输出类型为wire型。 4,如果采用同步复位的方式编写,会不通过,可查看错位,进行修改。 `timescale 1ns/1ns module huawei5( input wire clk , input wire rst , input wire [3:0]d , output wire valid_in , output wire dout ); //*************code***********// reg [1:0] cnt; reg [3:0] d_reg; reg valid_in_reg; reg dout_reg; assign dout = dout_reg; assign valid_in = valid_in_reg; always@(posedge clk or negedge rst) begin if(!rst) begin cnt <= 2'd0; d_reg <= 4'd0; valid_in_reg <= 1'b0; end else if(cnt == 2'd3) begin cnt <= 2'd0; d_reg <= d; valid_in_reg <= 1'b1; end else begin cnt <= cnt + 1'b1; d_reg <= d_reg; valid_in_reg <= 1'b0; end end always@ (*)begin if(!rst) begin dout_reg = 1'b0; end else begin case(cnt) 2'b00: begin dout_reg = d_reg[3]; end 2'b01: begin dout_reg = d_reg[2]; end 2'b10: begin dout_reg = d_reg[1]; end 2'b11: begin dout_reg = d_reg[0]; end default: begin dout_reg = 1'b0; end endcase end end //*************code***********// endmodule