`timescale 1ns/1ns module width_8to12( input clk , input rst_n , input valid_in , input [7:0] data_in , output reg valid_out, output reg [11:0] data_out ); //此题与上一题的思路是一致的,只是说 这一道题 只需要缓存上一个时钟周期的值就行 reg [1:0] COUNT ; reg [7:0] data_in_reg ; always@(posedge clk or negedge rst_n)begin if(!rst_n) COUNT <= 'd0 ; else if(COUNT == 'd2 && valid_in == 1'b1) COUNT <= 'd0 ; else if(valid_in == 1'b1) COUNT <= COUNT + 1'b1 ; end always@(posedge clk or negedge rst_n)begin if(!rst_n) data_in_reg <= 'd0 ; else if(valid_in == 1'b1) data_in_reg <= data_in ; end always@(posedge clk or negedge rst_n)begin if(!rst_n)begin valid_out <= 1'b0 ; data_out <= 'd0 ; end else if(COUNT == 'd1 && valid_in == 1'b1)begin valid_out <= 1'b1 ; data_out <= {data_in_reg,data_in[7:4]} ; end else if(COUNT == 'd2 && valid_in == 1'b1)begin valid_out <= 1'b1 ; data_out <= {data_in_reg[3:0],data_in} ; end else begin valid_out <= 1'b0 ; data_out <= data_out ; end end endmodule