Verilog 有符号数和无符号数的运算和连接实验

module test (
    input signed [7:0] A0,
    input signed [7:0] A1,
    input signed [15:0] A2,
    input [7:0] B0,
    input [7:0] B1
);
    wire [8:0] C0,C1,C2,C3;
    wire signed [8:0] D0,D1,D2,D3;
    wire [15:0] E0,E1,E2,E3;
    wire signed [15:0] F0,F1,F2,F3;
    wire signed [15:0] G0,G1,G4,G5;
    wire signed [16:0] G2,G3;

    assign C0 = B0 + B1;
    assign C1 = B0 + A0;
    assign C2 = B1 + A1;
    assign C3 = A0 + A1;

    assign D0 = B0 + B1;
    assign D1 = B0 + A0;
    assign D2 = B1 + A1;
    assign D3 = A0 + A1;

    assign E0 = B0 * B1;
    assign E1 = B0 * A0;
    assign E2 = B1 * A1;
    assign E3 = A0 * A1;

    assign F0 = B0 * B1;
    assign F1 = B0 * A0;
    assign F2 = B1 * A1;
    assign F3 = A0 * A1;

    assign G0 = {A0,A1}>>>2;
    assign G1 = {A0,B0}>>>2;
    assign G2 = {A0,A1} + A2;
    assign G3 = {A0,B0} + A2;
    assign G4 = {A0,A1};
    assign G5 = {A0,B0};

endmodule
module test_tb(

    );
    reg signed [15:0] A2;
    reg signed [7:0] A0,A1;
    reg [7:0] B0,B1;

    test test1(
        .A0(A0),
        .A1(A1),
        .A2(A2),
        .B0(B0),
        .B1(B1)
    );
    initial begin
        A0 = -100;
        B0 = 80;
        A1 = -20;
        B1 = 120;
        A2 = -12000;
        #2
        $stop;
    end
endmodule

 设计代码和仿真代码如上。

内容一:

        A0为-100,若视作无符号数为156。A1为-20,若视作无符号数为236。

查看C系列结果,C系列显示设置为无符号数

查看D系列结果,D系列显示设置为有符号数

观察C,D系列在十六进制显示下的值,发现是相同的。

观察D系列和F系列验证,两系列均设置显示为无符号数

        结论:无符号数和无符号数,无符号数和有符号数运算时,均将两者视作无符号数进行运算。有符号和有符号数运算时,才按照有符号数的规则进行运算。同样,运算操作位于赋值操作中时,被赋值变量的类型不影响运算结果。

实验二:

        观察系列G的结果,可以发现拼接两个变量后,无论是两个有符号数还是一个有符号数和无符号数,得到结果均不发生算术右移,而是逻辑右移。

        A2为-12000,对应无符号数为51536。以下均设置为无符号数显示。

结论:使用拼接运算符得到的临时结果,都可以视作一个无符号数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值