mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
verific: Fix enum_values support and signed attribute values
This uses the same constant parsing for enum_values and for attributes and extends it to handle signed values as those are used for enums that implicitly use the int type.
This commit is contained in:
parent
c50f641812
commit
390d1c583a
3 changed files with 89 additions and 34 deletions
37
tests/verific/enum_values.sv
Normal file
37
tests/verific/enum_values.sv
Normal file
|
@ -0,0 +1,37 @@
|
|||
typedef enum {
|
||||
WA, WB, WC, WD
|
||||
} wide_state_t;
|
||||
|
||||
typedef enum logic [1:0] {
|
||||
A = 3, B = 0, C, D
|
||||
} state_t;
|
||||
|
||||
module top(input clk, output z);
|
||||
|
||||
wide_state_t wide_state = WA;
|
||||
|
||||
always @(posedge clk) begin
|
||||
case (wide_state)
|
||||
WA: wide_state <= WB;
|
||||
WB: wide_state <= WC;
|
||||
WC: wide_state <= WD;
|
||||
default: wide_state <= WA;
|
||||
endcase
|
||||
end
|
||||
|
||||
(* some_attribute = shortint'(42) *)
|
||||
(* another_attribute = -1 *)
|
||||
state_t state = A;
|
||||
|
||||
always @(posedge clk) begin
|
||||
case (state)
|
||||
A: state <= B;
|
||||
B: state <= C;
|
||||
C: state <= D;
|
||||
default: state <= A;
|
||||
endcase
|
||||
end
|
||||
|
||||
assign z = (wide_state == WB) ^ (state == B);
|
||||
|
||||
endmodule
|
19
tests/verific/enum_values.ys
Normal file
19
tests/verific/enum_values.ys
Normal file
|
@ -0,0 +1,19 @@
|
|||
read -sv enum_values.sv
|
||||
hierarchy -top top
|
||||
printattrs a:*
|
||||
|
||||
select -assert-count 1 a:some_attribute=16'd42
|
||||
# currently select doesn't support negative values in attributes
|
||||
select -assert-count 1 a:another_attribute=32'hffffffff
|
||||
|
||||
select -assert-count 1 top/state a:wiretype=\state_t %i
|
||||
select -assert-count 1 top/state a:enum_value_11=\A %i
|
||||
select -assert-count 1 top/state a:enum_value_00=\B %i
|
||||
select -assert-count 1 top/state a:enum_value_01=\C %i
|
||||
select -assert-count 1 top/state a:enum_value_10=\D %i
|
||||
|
||||
select -assert-count 1 top/wide_state a:wiretype=\wide_state_t %i
|
||||
select -assert-count 1 top/wide_state a:enum_value_00000000000000000000000000000000=\WA %i
|
||||
select -assert-count 1 top/wide_state a:enum_value_00000000000000000000000000000001=\WB %i
|
||||
select -assert-count 1 top/wide_state a:enum_value_00000000000000000000000000000010=\WC %i
|
||||
select -assert-count 1 top/wide_state a:enum_value_00000000000000000000000000000011=\WD %i
|
Loading…
Add table
Add a link
Reference in a new issue