Skip to content

Commit

Permalink
Verilog: add symbols below generate-if
Browse files Browse the repository at this point in the history
  • Loading branch information
kroening committed Jan 5, 2024
1 parent 28be476 commit e882287
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 1 deletion.
6 changes: 6 additions & 0 deletions regression/verilog/generate/generate-if1.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
generate-if1.v
--module main --bound 0
^EXIT=0$
^SIGNAL=0$
--
18 changes: 18 additions & 0 deletions regression/verilog/generate/generate-if1.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module main;

parameter MAX = 'd1;
parameter something = 1;

wire [MAX-1:0] my_wire;

generate
if(something) begin
genvar i;
for (i = 0; i < MAX; i = i + 1)
assign my_wire[i] = 1;
end
endgenerate

always assert p1: my_wire == 1;

endmodule
2 changes: 1 addition & 1 deletion regression/verilog/generate/generate-inst1.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CORE
KNOWNBUG
generate-inst1.v

^EXIT=10$
Expand Down
43 changes: 43 additions & 0 deletions src/verilog/verilog_interfaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,45 @@ void verilog_typecheckt::interface_generate_block(

/*******************************************************************\
Function: verilog_typecheckt::interface_generate_for
Inputs:
Outputs:
Purpose:
\*******************************************************************/

void verilog_typecheckt::interface_generate_for(
const verilog_generate_fort &generate_for)
{
interface_module_item(generate_for.body());
}

/*******************************************************************\
Function: verilog_typecheckt::interface_generate_if
Inputs:
Outputs:
Purpose:
\*******************************************************************/

void verilog_typecheckt::interface_generate_if(
const verilog_generate_ift &generate_if)
{
interface_module_item(generate_if.then_case());

if(generate_if.has_else_case())
interface_module_item(generate_if.else_case());
}

/*******************************************************************\
Function: verilog_typecheckt::interface_module_item
Inputs:
Expand Down Expand Up @@ -757,6 +796,10 @@ void verilog_typecheckt::interface_module_item(
interface_statement(to_verilog_initial(module_item).statement());
else if(module_item.id()==ID_generate_block)
interface_generate_block(to_verilog_generate_block(module_item));
else if(module_item.id() == ID_generate_if)
interface_generate_if(to_verilog_generate_if(module_item));
else if(module_item.id() == ID_generate_for)
interface_generate_for(to_verilog_generate_for(module_item));
}

/*******************************************************************\
Expand Down
2 changes: 2 additions & 0 deletions src/verilog/verilog_typecheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ class verilog_typecheckt:
void interface_module_item(const class verilog_module_itemt &);
void interface_block(const class verilog_blockt &);
void interface_generate_block(const class verilog_generate_blockt &);
void interface_generate_for(const verilog_generate_fort &);
void interface_generate_if(const verilog_generate_ift &);
void interface_statement(const class verilog_statementt &);
void interface_function_or_task(const class verilog_declt &);

Expand Down

0 comments on commit e882287

Please sign in to comment.