题解 | #整数倍数据位宽转换8to16#

整数倍数据位宽转换8to16

http://www.nowcoder.com/practice/f1fb03cb0baf46ada2969806114bce5e

`timescale 1ns/1ns

module width_8to16(
    input                    clk         ,   
    input                    rst_n        ,
    input                      valid_in    ,
    input       [7:0]           data_in    ,
 
     output    reg            valid_out,
    output   reg [15:0]    data_out
);
    
    reg  data_cnt;
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
            data_cnt <= 1'd0;
        else if(data_cnt == 1'b1 && valid_in)
            data_cnt <= 1'b0;
        else if(valid_in)
            data_cnt <= data_cnt + 1'b1;
        else
            data_cnt <= data_cnt;
    end
    
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
            valid_out <= 1'b0;
        else if(valid_in && data_cnt ==1'b1)
            valid_out <= 1'b1;
        else
            valid_out <= 1'b0;
    end
    
    reg [7:0] data_temp;
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
            data_temp <= 8'd0;
        else if(valid_in)
            data_temp <= data_in;
        else
            data_temp <= data_temp;
    end
    
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
            data_out <= 16'd0;
        else if(valid_in && data_cnt == 1'b1)
            data_out <= {data_temp,data_in};
        else
            data_out <= data_out;
    end
    
endmodule
全部评论

相关推荐

07-29 14:37
门头沟学院 Java
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务