小转大,非整数倍数数据位宽转换电路代码

该代码实现了一个FPGA模块,用于将24位数据转换为128位数据,通过计数器和锁存器处理输入数据,支持非整数倍的位宽转换,在特定时钟周期内将输入数据分段转移到输出。
摘要由CSDN通过智能技术生成

`timescale 1ns/1ns

module width_24to128(
    input                 clk         ,   
    input                 rst_n        ,
    input                valid_in    ,
    input    [23:0]        data_in        ,
 
     output    reg            valid_out    ,
    output  reg [127:0]    data_out
);
reg     [119:0]        data_lock        ;        //5*24
reg     [3:0]        valid_cnt        ;

always @(posedge clk or negedge rst_n ) begin
    if(!rst_n) 
        valid_cnt <= 'd0;
    else if(valid_in)begin
        if(valid_cnt == 4'd15)
            valid_cnt <= 4'd0;
        else
            valid_cnt <= valid_cnt + 1'd1;
    end 
end

always @(posedge clk or negedge rst_n ) begin
    if(!rst_n) begin 
        data_lock <= 'd0;
        data_out  <= 'd0;
    end 
    else if(valid_in)begin
        if(valid_cnt == 4'd5)begin
            data_lock <= {data_lock[119:16], data_in[15:0]};
            data_out  <= {data_lock, data_in[23:16]};
        end 
        if(valid_cnt == 4'd10)begin
            data_lock <= {data_lock[119:8], data_in[7:0]};
            data_out  <= {data_lock[111:0], data_in[23:8]};
        end 
        if(valid_cnt == 4'd15)begin
            data_lock <= {data_lock[119:24], data_in};
            data_out  <= {data_lock[103:0], data_in};
        end 
        else
            data_lock <= {data_lock[95:0], data_in};
    end 
end

always @(posedge clk or negedge rst_n ) begin
    if(!rst_n) 
        valid_out <= 'd0;
    else if(valid_in && valid_cnt == 4'd5)begin        
        if(valid_cnt == 4'd5)
            valid_out <= 1'd1;
        else if(valid_cnt == 4'd10)
            valid_out <= 1'd1;
        else if(valid_cnt == 4'd15)
            valid_out <= 1'd1;
    end else begin
        valid_out <= 'd0;
    end
end

endmodule
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值