美文网首页
在Verilog中如何使用signed信号(有符号数)

在Verilog中如何使用signed信号(有符号数)

作者: monokent | 来源:发表于2017-02-18 21:49 被阅读0次

    此文为 "How to use signed variable in System Verilog" 中文版
    版权归作者monokent所有,转载请注明出处

    示例 1

    在Verilog语言中,有符号数signed以2进制补码形式表示。
    下例中,我们声明一个变量为signed类型,并用sd表示有符号整数。

    logic signed [35:0] c0, c1;
    logic signed [17:0] a0, a1;
    always@(*) begin
        c0 <= a0 * 18'sd2017;
        c1 <= a1 * -18'sd2016;
    end
    

    其中, sd 表示 signed decimal.

    示例 2

    在示例1中,如果我们写

    c1 <= a1 * -18'd2016;
    

    结果会出错,因为Verilog视 -18'd2016为无符号数(unsigned),从而将其转化为一个正的值。
    那如果我们将示例1中的c0赋值写成如下形式呢?

    c0 <= a0 * 18'd2017
    

    结果也是错误的,因为如果表达式中有一个无符号数,则所有的操作数都会被强行转换为无符号数。这样的话,如果a0为负数,则其会被转换为正数导致出错。

    示例 3

    右移一个有符号数

    assign c0_normal = c0 >>> 17;
    

    ">>>" 是专门针对signed信号的右移符号

    示例 4

    下面各表达式的结果是多少?

    integer a;
    a = -18 / 3;     // -6
    a = -6'd18 / 3;  // 23
    a = -6'sd18 / 3  // -6
    a = -5'sd18 / 3  // (14/3)=4
    

    相关文章

      网友评论

          本文标题:在Verilog中如何使用signed信号(有符号数)

          本文链接:https://www.haomeiwen.com/subject/gpsdwttx.html