Verilog功能模块——符号位扩展

一. 模块功能与应用场景

模块功能:符号位扩展

应用场景:DDR等存储器通常是32/64位的,数据需要转为合适的位数再存入。


二. 模块框图与使用说明

signExtension

输入和输出都是二进制补码,补码的符号位扩展就是补最高位即符号位即可


三. 模块代码

/*
 * @Author       : Xu Dakang
 * @Email        : XudaKang_up@qq.com
 * @Date         : 2021-05-14 09:50:48
 * @LastEditors  : Xu Dakang
 * @LastEditTime : 2021-05-14 22:59:16
 * @Filename     : signExtension.v
 * @Description  : 符号位扩展模块
*/

/*
* 思路: 输入数据为二进制补码,判断输入数据的最高位,为1则高位补1,为0则高位补0;
*/



module signExtension
#(
  parameter INPUT_WIDTH  = 24,
  parameter OUTPUT_WIDTH = 32
)(
  input  wire signed [INPUT_WIDTH-1  : 0] input_number,
  output wire signed [OUTPUT_WIDTH-1 : 0] output_number
);



assign output_number = {{(OUTPUT_WIDTH - INPUT_WIDTH){input_number[INPUT_WIDTH-1]}}, input_number};



endmodule

四. testbench

/*
 * @Author       : Xu Dakang
 * @Email        : XudaKang_up@qq.com
 * @Date         : 2021-05-14 19:40:46
 * @LastEditors  : Xu Dakang
 * @LastEditTime : 2021-05-14 22:58:24
 * @Filename     : signExtension_tb.sv
 * @Description  : testbench of signExtension
*/



module signExtension_tb();

timeunit 1ns;
timeprecision 10ps;

parameter INPUT_WIDTH  = 24;
parameter OUTPUT_WIDTH = 32;

logic signed [INPUT_WIDTH-1  : 0] input_number;
logic signed [OUTPUT_WIDTH-1 : 0] output_number;



signExtension  signExtension_inst(.*);



// 生成时钟
localparam CLKT = 2;
logic clk;
initial begin
  clk = 0;
  forever #(CLKT / 2) clk = ~clk;
end



initial begin
  input_number = 12;
  #CLKT;
  input_number = 88;
  #CLKT;
  input_number = -18;
  #CLKT;
  input_number = -300;
  #CLKT;
  input_number = 24'hXX8CX2;
  #CLKT;
  $stop;
end



endmodule

五. 仿真验证

仿真工具:Vivado 2020.2 Simulator。

16进制显示:

有符号10进制显示:


六. 工程分享

signExtension 符号位扩展模块 vivado 2020.2工程.7z

欢迎大家关注我的公众号:徐晓康的博客,回复以下代码获取。

1365

建议复制过去不会码错字!


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值