如何在 SystemVerilog 中签署扩展?

Jos*_* S. 4 system-verilog

下面是我的模块的代码:

module sext(input in[3:0], output out[7:0]);

    always_comb
        begin
            if(in[3]==1'b0)
                assign out = {4'b0000,in};
            else
                assign out = {4'b1111,in};
        end

endmodule
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这不起作用。它不是符号扩展,而是零扩展。为什么会出现这种情况的任何想法?

dav*_*_59 7

我假设你的意思是(input [3:0] in, output [7:0] out)。如果这是真的,那么你只需要写

module sext(input signed [3:0] in, output signed [7:0] out);

    assign out = in;

endmodule
Run Code Online (Sandbox Code Playgroud)

你也可以写

module sext(input [3:0] in, output [7:0] out);

    assign out = 8'(signed'(in));

endmodule
Run Code Online (Sandbox Code Playgroud)

也许您甚至不需要将其编写为单独的模块。