0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

自定义位宽输入输出截位模块的灵活配置方案

pdh的FPGA 来源:pdh的FPGA 2024-04-25 11:36 次阅读

内容如标题。方便又简单。可作为类似IP使用。

/**********************************************************当前版本修订**********************************************************************
**  文件名称:       round_truncation
**创建人/修改人:pdh
**  版本日期:       2024.4.24
**  版本号:         v1.0
**  版本功能描述:   本模块实现可配置,输入任意位宽,输出任意位宽的截位操作,对标matlab round函数
**
*******************************************************************************************************************************************/


`timescale 1ns / 1ps
 
module round_truncation #
(
    parameter IN_WIDTH    = 22                      ,
    parameter TRUNC_WIDTH = 5                       ,
    parameter OUT_WIDTH   = IN_WIDTH-TRUNC_WIDTH    
)   
(   
    input                           i_clk           ,
    
    input           [IN_WIDTH-1:0]  i_full_data     ,
    input                           i_full_data_vld ,


    output  logic   [OUT_WIDTH-1:0] o_trunc_data    ,
    output  logic                   o_trunc_data_vld
);


/****************************************************************************/
/*  signal
/****************************************************************************/
logic   [IN_WIDTH-1:0]  round_data      ;
logic                   round_data_vld  ;


/****************************************************************************/
/*  process
/****************************************************************************/
always @(posedge i_clk)
begin
    if (i_full_data[IN_WIDTH-1] == 1'b0)                            // 正数,就加0.5,位宽大小以要截位的位宽大小
    begin
        round_data <= i_full_data + {{1'b0},{(TRUNC_WIDTH-1){1'b1}}};
    end
    else if (i_full_data[IN_WIDTH-1])                               // 负数,就减0.5,位宽大小以要截位的位宽大小
    begin
        round_data <= i_full_data + {{1'b1},{(TRUNC_WIDTH-1){1'b0}}};
    end
end


always @(posedge i_clk)
begin
    if (round_data[IN_WIDTH-1] == 1'b0 && round_data[IN_WIDTH-2])   
    begin
        o_trunc_data <= {{1'b0},{(OUT_WIDTH-1){1'b1}}};             // 如果正数溢出,就给正数最大值,7ff,位宽大小以要截位的位宽大小
    end
    else if (round_data[IN_WIDTH-1] && round_data[IN_WIDTH-2] == 1'b0)
    begin
        o_trunc_data <= {{1'b1},{(OUT_WIDTH-1){1'b0}}};             // 如果负数溢出,就给负数最大值,800,位宽大小以要截位的位宽大小
    end
    else 
    begin
        o_trunc_data <= round_data[(IN_WIDTH-1):TRUNC_WIDTH];       // 没溢出,就直接给需要截位的值
    end
end


always @(posedge i_clk)
begin
    round_data_vld   <= i_full_data_vld;
    o_trunc_data_vld <= round_data_vld;
end


endmodule

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 输入输出
    +关注

    关注

    0

    文章

    42

    浏览量

    10779

原文标题:可配置任意输入输出位宽截位模块

文章出处:【微信号:pdh的FPGA,微信公众号:pdh的FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    SIMULINK线的处理/SIMULINK自定义功能模块

    SIMULINK线的处理/SIMULINK自定义功能模块     SIMULINK模型的构建是通过用线将各种功能模块进行连接而构成的。用鼠标可以在功能
    发表于 06-19 12:51 5415次阅读

    SOPC中自定义外设和自定义指令性能分析

    SOPC中自定义外设和自定义指令性能分析 NiosII是一个建立在FPGA上的嵌入式软核处理器,灵活性很强。作为体现NiosII灵活性精髓的两个最主要方面,自
    发表于 03-29 15:12 1635次阅读
    SOPC中<b class='flag-5'>自定义</b>外设和<b class='flag-5'>自定义</b>指令性能分析

    1602自定义字符

    1602液晶能够显示自定义字符,能够根据读者的具体情况显示自定义字符。
    发表于 01-20 15:43 1次下载

    如何配置自定义工具链?

    Atmel小贴士 如何配置自定义工具链内爱特梅尔公司螺柱
    的头像 发表于 07-10 03:04 2076次阅读

    C#与STM32自定义通信协议

    C#与STM32自定义通信协议功能:1.可通过C#上位机对多台STM32下机进行控制2.自定义上位机与下位机通信协议
    发表于 12-24 18:59 37次下载
    C#与STM32<b class='flag-5'>自定义</b>通信协议

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 03-13 19:33 0次下载
    教程 2:<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件示例

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 03-15 19:39 0次下载
    教程 3:构建<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 03-15 19:39 0次下载
    教程 2:添加特征-<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件创建

    教程 3:自定义配置文件 gatt cmd 示例

    教程 3:自定义配置文件 gatt cmd 示例
    发表于 03-15 19:40 0次下载
    教程 3:<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件 gatt cmd 示例

    自定义蓝牙低功耗配置文件

    自定义蓝牙低功耗配置文件
    发表于 03-15 20:14 1次下载
    <b class='flag-5'>自定义</b>蓝牙低功耗<b class='flag-5'>配置</b>文件

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 07-04 20:50 1次下载
    教程 2:<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件示例

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 07-06 18:49 1次下载
    教程 3:构建<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件

    教程 2:添加特征-自定义配置文件创建

    教程 2:添加特征 - 自定义配置文件创建
    发表于 07-06 18:50 0次下载
    教程 2:添加特征-<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件创建

    教程 3:自定义配置文件 gatt cmd 示例

    教程 3:自定义配置文件 gatt cmd 示例
    发表于 07-06 18:50 1次下载
    教程 3:<b class='flag-5'>自定义</b><b class='flag-5'>配置</b>文件 gatt cmd 示例

    自定义蓝牙低功耗配置文件

    自定义蓝牙低功耗配置文件
    发表于 07-06 19:24 0次下载
    <b class='flag-5'>自定义</b>蓝牙低功耗<b class='flag-5'>配置</b>文件