内容如标题。方便又简单。可作为类似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>指令性能分析](https://file1.elecfans.com//web2/M00/A4/AC/wKgZomUMNTmAMwqyAAAZMrUo_VI741.gif)
评论