3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-13 20:38:44 +00:00
yosys/tests/verilog/sign_array_query.ys
Jannis Harder 4bfaaea0d5 verilog: fix size and signedness of array querying functions
genrtlil.cc and simplify.cc had inconsistent and slightly broken
handling of signedness for array querying functions. These functions are
defined to return a signed result. Simplify always produced an unsigned
and genrtlil always a signed 32-bit result ignoring the context.

Includes tests for the the relvant edge cases for context dependent
conversions.
2022-05-30 09:11:31 -04:00

53 lines
904 B
Plaintext

logger -expect-no-warnings
read_verilog -formal <<EOT
module top(input clk);
reg [-1:-1] x;
reg good = 0;
reg signed [31:0] zero = 0;
always @(posedge clk) begin
case ($left(x) + zero) 36'shfffffffff: good = 1; endcase
assert (good);
end
endmodule
EOT
prep -top top
sim -n 3 -clock clk
design -reset
read_verilog -formal <<EOT
module top(input clk);
reg [-1:-1] x;
reg good = 0;
always @(posedge clk) begin
case ($left(x)) 36'sh0ffffffff: good = 1; (32'h0 + $left(good)): ; endcase
assert (good);
end
endmodule
EOT
prep -top top
sim -n 3 -clock clk
design -reset
read_verilog -formal <<EOT
module top(input clk);
reg [-1:-1] x;
reg good = 1;
always @(posedge clk) begin
case (36'sh100000000 + $left(x)) -1: good = 0; endcase
assert (good);
end
endmodule
EOT
prep -top top
sim -n 3 -clock clk