aboutsummaryrefslogtreecommitdiffstats
path: root/frontends/verilog
diff options
context:
space:
mode:
authorAhmed Irfan <irfan@ubuntu.(none)>2014-01-20 09:58:04 +0100
committerAhmed Irfan <irfan@ubuntu.(none)>2014-01-20 09:58:04 +0100
commitb7adf4c7a0d0f561d08d7e4dcf66b4e651596318 (patch)
treed5b7e8e79e7ab98eaca898f65c438f8aa1be5407 /frontends/verilog
parent234d0d0e1c316d7253c56c522dcc982a5e6049a1 (diff)
parent32a91458a7dde9994ca28ec635c1bec8fe20111b (diff)
downloadyosys-b7adf4c7a0d0f561d08d7e4dcf66b4e651596318.tar.gz
yosys-b7adf4c7a0d0f561d08d7e4dcf66b4e651596318.tar.bz2
yosys-b7adf4c7a0d0f561d08d7e4dcf66b4e651596318.zip
Merge branch 'master' of https://github.com/cliffordwolf/yosys into btor
Diffstat (limited to 'frontends/verilog')
-rw-r--r--frontends/verilog/lexer.l2
-rw-r--r--frontends/verilog/parser.y11
-rw-r--r--frontends/verilog/preproc.cc2
3 files changed, 11 insertions, 4 deletions
diff --git a/frontends/verilog/lexer.l b/frontends/verilog/lexer.l
index 9e606d90f..81167cf4e 100644
--- a/frontends/verilog/lexer.l
+++ b/frontends/verilog/lexer.l
@@ -113,6 +113,8 @@ namespace VERILOG_FRONTEND {
"generate" { return TOK_GENERATE; }
"endgenerate" { return TOK_ENDGENERATE; }
+"assert"([ \t\r\n]+"property")? { return TOK_ASSERT; }
+
"input" { return TOK_INPUT; }
"output" { return TOK_OUTPUT; }
"inout" { return TOK_INOUT; }
diff --git a/frontends/verilog/parser.y b/frontends/verilog/parser.y
index 874482d6e..b0c4db8ae 100644
--- a/frontends/verilog/parser.y
+++ b/frontends/verilog/parser.y
@@ -104,7 +104,7 @@ static void free_attr(std::map<std::string, AstNode*> *al)
%token TOK_GENERATE TOK_ENDGENERATE TOK_GENVAR
%token TOK_SYNOPSYS_FULL_CASE TOK_SYNOPSYS_PARALLEL_CASE
%token TOK_SUPPLY0 TOK_SUPPLY1 TOK_TO_SIGNED TOK_TO_UNSIGNED
-%token TOK_POS_INDEXED TOK_NEG_INDEXED
+%token TOK_POS_INDEXED TOK_NEG_INDEXED TOK_ASSERT
%type <ast> wire_type range non_opt_range expr basic_expr concat_list rvalue lvalue lvalue_concat_list
%type <string> opt_label tok_prim_wrapper hierarchical_id
@@ -366,7 +366,7 @@ module_body:
module_body_stmt:
task_func_decl | param_decl | localparam_decl | defparam_decl | wire_decl | assign_stmt | cell_stmt |
- always_stmt | TOK_GENERATE module_gen_body TOK_ENDGENERATE | defattr;
+ always_stmt | TOK_GENERATE module_gen_body TOK_ENDGENERATE | defattr | assert;
task_func_decl:
TOK_TASK TOK_ID ';' {
@@ -748,6 +748,11 @@ opt_label:
$$ = NULL;
};
+assert:
+ TOK_ASSERT '(' expr ')' ';' {
+ ast_stack.back()->children.push_back(new AstNode(AST_ASSERT, $3));
+ };
+
simple_behavioral_stmt:
lvalue '=' expr {
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, $3);
@@ -760,7 +765,7 @@ simple_behavioral_stmt:
// this production creates the obligatory if-else shift/reduce conflict
behavioral_stmt:
- defattr | wire_decl |
+ defattr | assert | wire_decl |
simple_behavioral_stmt ';' |
hierarchical_id attr {
AstNode *node = new AstNode(AST_TCALL);
diff --git a/frontends/verilog/preproc.cc b/frontends/verilog/preproc.cc
index 5cfa0f24b..db53e8c68 100644
--- a/frontends/verilog/preproc.cc
+++ b/frontends/verilog/preproc.cc
@@ -386,7 +386,7 @@ std::string frontend_verilog_preproc(FILE *f, std::string filename, const std::m
std::string name = tok.substr(1);
// printf("expand: >>%s<< -> >>%s<<\n", name.c_str(), defines_map[name].c_str());
std::string skipped_spaces = skip_spaces();
- tok = next_token(true);
+ tok = next_token(false);
if (tok == "(" && defines_with_args.count(name) > 0) {
int level = 1;
std::vector<std::string> args;