首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTKwave给出了不好的结果?

GTKwave给出了不好的结果?
EN

Stack Overflow用户
提问于 2022-11-12 21:20:15
回答 1查看 27关注 0票数 0

我试着把算术移到左边。如果我使用"i_a <<< i_b“而i_b是否定的(i_a和i_b是两个补语),会发生什么?它应该给错误或类似的东西,而不是它的工作方式。例如,如果我有i_a = 1010和i_b = 1000,那么i_a应该是-8位的移位器,因为i_b是负的。

以下是代码:

代码语言:javascript
复制
`timescale 1ns/1ps 
`include "ashift_example1.sv"

module testbench;
    parameter BITY = 4;
    parameter OPER = 2;
    logic [OPER-1:0] i_oper;
    logic [OPER-1:0] i_rsn;
    logic signed [BITY-1:0] i_argA,i_argB;
    logic signed [BITY-1:0] o_result; 
    logic [1:0] o_status;

    ashift_example1  #(.BITS(BITY))   Shift_left    (.i_a(i_argA), .i_b(i_argB), .o_arith_left(o_result));

    initial
        begin
            $dumpfile("signals.vcd");  
                                            
            $dumpvars(0,testbench); 

            i_argA = '0;
            i_argB = '0;
            #1
            i_argA[3] = 1;
            i_argA[1] = 1;
            i_argB[0] = 1;
            #1
            i_argB[0] = 0;
            i_argB[1] = 1;
            #1
            i_argB[1] = 0;
            i_argB[3] = 1;
            #1

            $finish;
        end
endmodule 

这是个测试台。下面是一个模块:

代码语言:javascript
复制
module ashift_example1(i_a, i_b, o_arith_left);
    parameter BITS = 4;
    input  logic signed [BITS-1:0] i_a, i_b;
    output logic signed [BITS-1:0] o_arith_left;
    // Blok opisujacy logike 
    always_comb
    begin
        // arytmetyczne przesuniecie o i_b bitow
        //                 w lewo (w strone MSB)
        o_arith_left = (i_a <<< i_b);      
    end
endmodule

我正在使用SystemVerilog,因为这是我的学校告诉我要使用的。那我做错什么了?我对每一个输入和输出都使用了“签名”。

在gtkwave中,当i_b为负时,它仍然有效。我被告知要使用if循环来消除负i_b,但是当我用负值进行模拟时,它并没有给出一个错误。那么,为什么我要给这个如果循环公式,以消除负数,当他们不影响程序?

如果我有i_b = 1111和i_a = 1010,那么结果应该是什么呢?GTKwave显示o_y = 0000,尽管i_b = -1 (2的补码)。所以它应该向后移动?还是我在这里犯了个错误?

GTKwave应该给出没有定义的输出,而应该给出0000

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-13 01:06:50

11.4.10换档操作员.右操作数始终被视为无符号数,对结果的签名性没有任何影响。..。

因此,你的两次恭维被视为一个无符号数,即-1 (2-称赞4‘b 1111)被视为15,并将左操作数在给定的方向上移动15个位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74416677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档