From 9d69d0163a3473033495f68655f922148f8ffae6 Mon Sep 17 00:00:00 2001 From: m0_56903617 Date: Sat, 12 Jun 2021 21:25:33 +0800 Subject: [PATCH] =?UTF-8?q?202106122123:=20=E7=BC=96=E8=AF=91=E5=99=A8?= =?UTF-8?q?=E7=BB=88=E4=BA=8E=E8=83=BD=E5=A4=9F=E5=B0=86=E4=BF=84=E7=BD=97?= =?UTF-8?q?=E6=96=AF=E6=96=B9=E5=9D=97=E7=9A=84verilog=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E4=B8=BA=E6=AD=A3=E7=A1=AE=E7=9A=84=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E4=BB=A3=E7=A0=81=E4=BA=86=EF=BC=8C=E8=BF=98=E5=B7=AE?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=B1=82=E5=80=BC=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=B0=9D?= =?UTF-8?q?=E8=AF=95=E5=81=9A=E8=AE=A1=E6=95=B0=E5=99=A8=E8=BF=99=E8=BE=B9?= =?UTF-8?q?=E7=9A=84=E7=BD=91=E8=A1=A8=E6=96=87=E4=BB=B6=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bignumber/src/bignumber.c | 4 +- examples/counter/src/main_gen.c | 579 +++++++---------------- examples/counter/verilog/main_asm.v | 28 +- examples/counter/verilog/main_asm_dump.v | 28 +- examples/terris/src/main.c | 2 +- examples/terris/src/topmodule.c | 53 +-- hdl4secell/src/hdl4secell.c | 2 +- parser/verilog_expr.c | 37 +- parser/verilog_module.c | 60 ++- parser/verilog_parsetree.h | 2 + 10 files changed, 294 insertions(+), 501 deletions(-) diff --git a/bignumber/src/bignumber.c b/bignumber/src/bignumber.c index c9cd332..af2a0ec 100644 --- a/bignumber/src/bignumber.c +++ b/bignumber/src/bignumber.c @@ -336,14 +336,12 @@ static int bigint_bn_GetStr(HOBJECT object, int base, char* str, int buflen) i = ((bc + (CELL_WIDTH-1)) / CELL_WIDTH) - 1; ac = actualwidth(pobj->buf[i]); ac = (ac + 7) / 8; - sprintf(fmt, "%%%dx_", ac); + sprintf(fmt, "%%%dx", ac); sprintf(buf, fmt, pobj->buf[i]); strcat(str, buf); for (i = ((bc + (CELL_WIDTH-1)) / CELL_WIDTH)-2; i >= 0; i--) { sprintf(buf, "%08x", pobj->buf[i]); strcat(str, buf); - if (i > 0) - strcat(str, "_"); } return 0; } diff --git a/examples/counter/src/main_gen.c b/examples/counter/src/main_gen.c index a496522..a1cf35b 100644 --- a/examples/counter/src/main_gen.c +++ b/examples/counter/src/main_gen.c @@ -31,7 +31,7 @@ /* -* Created by HDL4SE @ Sat Jun 12 18:30:32 2021 +* Created by HDL4SE @ Sat Jun 12 21:20:54 2021 * Don't edit it. */ @@ -82,7 +82,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -100,7 +100,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -116,7 +116,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -132,7 +132,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -149,7 +149,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -165,7 +165,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -182,7 +182,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -198,7 +198,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -214,7 +214,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -233,7 +233,7 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ {.exprtype=EXPRTYPE_NUMBER, .value="1" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, - {.exprtype=EXPRTYPE_NUMBER, .value="2'h0_" }, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, {.exprtype=EXPRTYPE_BINOP, .op=OP_MINUS}, {.exprtype=EXPRTYPE_NUMBER, .value="1"}, {.exprtype=EXPRTYPE_BINOP, .op=OP_PLUS}, @@ -249,79 +249,100 @@ IHDL4SEUnit** hdl4seCreate_0010(IHDL4SEModule** parent, const char* instancepara {/* 模块实例化 */ /* 0 hdl4se_reg bCurrentCounter*/ { - char *instanceparam; - modules[0] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "bCurrentCounter"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 0] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", const_expr_list_eval(2, expr_info, 3, parameters), "bCurrentCounter"); } /* 1 hdl4se_const const_MAXVALUE*/ { - char *instanceparam; - modules[1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_MAXVALUE"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_PARAM, .index=1},/* MAXVALUE */ + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", const_expr_list_eval(4, expr_info, 3, parameters), "const_MAXVALUE"); } /* 2 hdl4se_const const_RESETVALUE*/ { - char *instanceparam; - modules[2] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_RESETVALUE"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_PARAM, .index=2},/* RESETVALUE */ + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 2] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", const_expr_list_eval(4, expr_info, 3, parameters), "const_RESETVALUE"); } /* 3 hdl4se_binop binop_EQ_bCurrentCounter_MAXVALUE*/ { - char *instanceparam; - modules[3] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "binop_EQ_bCurrentCounter_MAXVALUE"); - } - /* 4 hdl4se_binop binop_counter_overfloat*/ - { - char *instanceparam; - modules[4] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "binop_counter_overfloat"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h1" }, + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_NUMBER, .value="4'h4" }, + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 3] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", const_expr_list_eval(8, expr_info, 3, parameters), "binop_EQ_bCurrentCounter_MAXVALUE"); } + modules[ 4] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'ha", "binop_counter_overfloat"); /* 5 hdl4se_const const_One*/ { - char *instanceparam; - modules[5] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_One"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h1" }, + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 5] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", const_expr_list_eval(4, expr_info, 3, parameters), "const_One"); } /* 6 hdl4se_binop binop_bCurrentCounterInc*/ { - char *instanceparam; - modules[6] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "binop_bCurrentCounterInc"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h1" }, + {.exprtype=EXPRTYPE_EMIT}, + {.exprtype=EXPRTYPE_NUMBER, .value="2'h0" }, + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 6] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", const_expr_list_eval(8, expr_info, 3, parameters), "binop_bCurrentCounterInc"); } /* 7 hdl4se_mux2 mux_bCurrentCounter_if_wCounterIt*/ { - char *instanceparam; - modules[7] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bCurrentCounter_if_wCounterIt"); - } - /* 8 hdl4se_const const_1*/ - { - char *instanceparam; - modules[8] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_1"); - } - /* 9 hdl4se_const const_0*/ - { - char *instanceparam; - modules[9] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_0"); - } - /* 10 hdl4se_mux2 mux_wOverflow_if_wCounterIt*/ - { - char *instanceparam; - modules[10] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_wOverflow_if_wCounterIt"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 7] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", const_expr_list_eval(2, expr_info, 3, parameters), "mux_bCurrentCounter_if_wCounterIt"); } + modules[ 8] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "2'h1, 2'h1", "const_1"); + modules[ 9] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "2'h1, 2'h0", "const_0"); + modules[ 10] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "2'h1", "mux_wOverflow_if_wCounterIt"); /* 11 hdl4se_mux2 mux_bCurrentCounter_if_nwReset*/ { - char *instanceparam; - modules[11] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bCurrentCounter_if_nwReset"); - } - /* 12 hdl4se_mux2 mux_wOverflow_if_nwReset*/ - { - char *instanceparam; - modules[12] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_wOverflow_if_nwReset"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 11] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", const_expr_list_eval(2, expr_info, 3, parameters), "mux_bCurrentCounter_if_nwReset"); } + modules[ 12] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "2'h1", "mux_wOverflow_if_nwReset"); /* 13 hdl4se_mux2 mux_bCurrentCounter*/ { - char *instanceparam; - modules[13] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bCurrentCounter"); - } - /* 14 hdl4se_mux2 mux_wOverflow*/ - { - char *instanceparam; - modules[14] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_wOverflow"); + const expr_code expr_info[] = { + {.exprtype=EXPRTYPE_PARAM, .index=0},/* WIDTH */ + {.exprtype=EXPRTYPE_EMIT}, + }; + modules[ 13] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", const_expr_list_eval(2, expr_info, 3, parameters), "mux_bCurrentCounter"); } + modules[ 14] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "2'h1", "mux_wOverflow"); } /* 线网连接 */ @@ -440,66 +461,18 @@ IHDL4SEUnit** hdl4seCreate_000F(IHDL4SEModule** parent, const char* instancepara } {/* 模块实例化 */ - /* 0 hdl4se_const const_cst0*/ - { - char *instanceparam; - modules[0] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst0"); - } - /* 1 hdl4se_const const_cst1*/ - { - char *instanceparam; - modules[1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst1"); - } - /* 2 hdl4se_const const_cst2*/ - { - char *instanceparam; - modules[2] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst2"); - } - /* 3 hdl4se_const const_cst3*/ - { - char *instanceparam; - modules[3] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst3"); - } - /* 4 hdl4se_const const_cst4*/ - { - char *instanceparam; - modules[4] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst4"); - } - /* 5 hdl4se_const const_cst5*/ - { - char *instanceparam; - modules[5] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst5"); - } - /* 6 hdl4se_const const_cst6*/ - { - char *instanceparam; - modules[6] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst6"); - } - /* 7 hdl4se_const const_cst7*/ - { - char *instanceparam; - modules[7] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst7"); - } - /* 8 hdl4se_const const_cst8*/ - { - char *instanceparam; - modules[8] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst8"); - } - /* 9 hdl4se_const const_cst9*/ - { - char *instanceparam; - modules[9] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst9"); - } - /* 10 hdl4se_const const_cst10*/ - { - char *instanceparam; - modules[10] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_cst10"); - } - /* 11 hdl4se_mux16 mux_dec*/ - { - char *instanceparam; - modules[11] = hdl4seCreateUnit2(module, "69B4A095-0644-4B9E-9CF0-295474D7C243", instanceparam, "mux_dec"); - } + modules[ 0] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h3f", "const_cst0"); + modules[ 1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h6", "const_cst1"); + modules[ 2] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h5b", "const_cst2"); + modules[ 3] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h4f", "const_cst3"); + modules[ 4] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h66", "const_cst4"); + modules[ 5] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h6d", "const_cst5"); + modules[ 6] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h7d", "const_cst6"); + modules[ 7] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h7", "const_cst7"); + modules[ 8] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h7f", "const_cst8"); + modules[ 9] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h6f", "const_cst9"); + modules[ 10] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 32'h79", "const_cst10"); + modules[ 11] = hdl4seCreateUnit2(module, "69B4A095-0644-4B9E-9CF0-295474D7C243", "5'h8", "mux_dec"); } /* 线网连接 */ @@ -686,306 +659,74 @@ IHDL4SEUnit** hdl4seCreate_main(IHDL4SEModule** parent, const char* instancepara } {/* 模块实例化 */ - /* 0 hdl4se_const const_0_wRead*/ - { - char *instanceparam; - modules[0] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_0_wRead"); - } - /* 1 hdl4se_const const_bReadAddr*/ - { - char *instanceparam; - modules[1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_bReadAddr"); - } - /* 2 hdl4se_split4 bReadData_wButton012*/ - { - char *instanceparam; - modules[2] = hdl4seCreateUnit2(module, "D5152459-6798-49C8-8376-21EBE8A9EE3C", instanceparam, "bReadData_wButton012"); - } - /* 3 counter counter0*/ - { - char *instanceparam; - modules[3] = hdl4seCreate_0010(module, instanceparam, "counter0"); - } - /* 4 counter counter1*/ - { - char *instanceparam; - modules[4] = hdl4seCreate_0010(module, instanceparam, "counter1"); - } - /* 5 counter counter2*/ - { - char *instanceparam; - modules[5] = hdl4seCreate_0010(module, instanceparam, "counter2"); - } - /* 6 counter counter3*/ - { - char *instanceparam; - modules[6] = hdl4seCreate_0010(module, instanceparam, "counter3"); - } - /* 7 counter counter4*/ - { - char *instanceparam; - modules[7] = hdl4seCreate_0010(module, instanceparam, "counter4"); - } - /* 8 counter counter5*/ - { - char *instanceparam; - modules[8] = hdl4seCreate_0010(module, instanceparam, "counter5"); - } - /* 9 counter counter6*/ - { - char *instanceparam; - modules[9] = hdl4seCreate_0010(module, instanceparam, "counter6"); - } - /* 10 counter counter7*/ - { - char *instanceparam; - modules[10] = hdl4seCreate_0010(module, instanceparam, "counter7"); - } - /* 11 counter counter8*/ - { - char *instanceparam; - modules[11] = hdl4seCreate_0010(module, instanceparam, "counter8"); - } - /* 12 counter counter9*/ - { - char *instanceparam; - modules[12] = hdl4seCreate_0010(module, instanceparam, "counter9"); - } - /* 13 hdl4se_reg wCounterIt*/ - { - char *instanceparam; - modules[13] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "wCounterIt"); - } - /* 14 hdl4se_unop Button0NotPressed*/ - { - char *instanceparam; - modules[14] = hdl4seCreateUnit2(module, "E6772805-57BB-4b39-A10D-FDA6A4810E3B", instanceparam, "Button0NotPressed"); - } - /* 15 hdl4se_unop unop_Button1NotPressed*/ - { - char *instanceparam; - modules[15] = hdl4seCreateUnit2(module, "E6772805-57BB-4b39-A10D-FDA6A4810E3B", instanceparam, "unop_Button1NotPressed"); - } - /* 16 hdl4se_binop binop_counterit*/ - { - char *instanceparam; - modules[16] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "binop_counterit"); - } - /* 17 hdl4se_binop binop_resetcounter*/ - { - char *instanceparam; - modules[17] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "binop_resetcounter"); - } - modules[18] = hdl4seCreate_000F(module, "", "dec0"); - modules[19] = hdl4seCreate_000F(module, "", "dec1"); - modules[20] = hdl4seCreate_000F(module, "", "dec2"); - modules[21] = hdl4seCreate_000F(module, "", "dec3"); - modules[22] = hdl4seCreate_000F(module, "", "dec4"); - modules[23] = hdl4seCreate_000F(module, "", "dec5"); - modules[24] = hdl4seCreate_000F(module, "", "dec6"); - modules[25] = hdl4seCreate_000F(module, "", "dec7"); - modules[26] = hdl4seCreate_000F(module, "", "dec8"); - modules[27] = hdl4seCreate_000F(module, "", "dec9"); - /* 28 hdl4se_binop or98*/ - { - char *instanceparam; - modules[28] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or98"); - } - /* 29 hdl4se_binop or76*/ - { - char *instanceparam; - modules[29] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or76"); - } - /* 30 hdl4se_binop or54*/ - { - char *instanceparam; - modules[30] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or54"); - } - /* 31 hdl4se_binop or32*/ - { - char *instanceparam; - modules[31] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or32"); - } - /* 32 hdl4se_binop or10*/ - { - char *instanceparam; - modules[32] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or10"); - } - /* 33 hdl4se_binop or32*/ - { - char *instanceparam; - modules[33] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or32"); - } - /* 34 hdl4se_binop or10*/ - { - char *instanceparam; - modules[34] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "or10"); - } - /* 35 hdl4se_reg reg_bCounterChanged*/ - { - char *instanceparam; - modules[35] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "reg_bCounterChanged"); - } - /* 36 hdl4se_bind3 bind_wCounterin*/ - { - char *instanceparam; - modules[36] = hdl4seCreateUnit2(module, "D1F303E2-3ED1-42FD-8762-3AA623DA901E", instanceparam, "bind_wCounterin"); - } - /* 37 hdl4se_const const_b3b0*/ - { - char *instanceparam; - modules[37] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b3b0"); - } - /* 38 hdl4se_mux2 mux_if_nwReset*/ - { - char *instanceparam; - modules[38] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_if_nwReset"); - } - /* 39 hdl4se_split4 split4_bCounterChanged*/ - { - char *instanceparam; - modules[39] = hdl4seCreateUnit2(module, "D5152459-6798-49C8-8376-21EBE8A9EE3C", instanceparam, "split4_bCounterChanged"); - } - /* 40 hdl4se_reg reg_wWrite*/ - { - char *instanceparam; - modules[40] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "reg_wWrite"); - } - /* 41 hdl4se_reg reg_bWriteAddr*/ - { - char *instanceparam; - modules[41] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "reg_bWriteAddr"); - } - /* 42 hdl4se_reg reg_bWriteData*/ - { - char *instanceparam; - modules[42] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "reg_bWriteData"); - } - /* 43 hdl4se_reg reg_bWriteMask*/ - { - char *instanceparam; - modules[43] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", instanceparam, "reg_bWriteMask"); - } - /* 44 hdl4se_const const_b8b0*/ - { - char *instanceparam; - modules[44] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b8b0"); - } - /* 45 hdl4se_const const_b4b0000*/ - { - char *instanceparam; - modules[45] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b4b0000"); - } - /* 46 hdl4se_const const_b4b1100*/ - { - char *instanceparam; - modules[46] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b4b1100"); - } - /* 47 hdl4se_const const_b32b0*/ - { - char *instanceparam; - modules[47] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b32b0"); - } - /* 48 hdl4se_const const_b32hf0000018*/ - { - char *instanceparam; - modules[48] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b32hf0000018"); - } - /* 49 hdl4se_const const_b32hf0000014*/ - { - char *instanceparam; - modules[49] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b32hf0000014"); - } - /* 50 hdl4se_const const_b32hf0000018*/ - { - char *instanceparam; - modules[50] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_b32hf0000018"); - } - /* 51 hdl4se_bind4 bind_0098*/ - { - char *instanceparam; - modules[51] = hdl4seCreateUnit2(module, "0234ECE7-A9C5-406B-9AE7-4841EA0DF7C9", instanceparam, "bind_0098"); - } - /* 52 hdl4se_bind4 bind_7654*/ - { - char *instanceparam; - modules[52] = hdl4seCreateUnit2(module, "0234ECE7-A9C5-406B-9AE7-4841EA0DF7C9", instanceparam, "bind_7654"); - } - /* 53 hdl4se_bind4 bind_3210*/ - { - char *instanceparam; - modules[53] = hdl4seCreateUnit2(module, "0234ECE7-A9C5-406B-9AE7-4841EA0DF7C9", instanceparam, "bind_3210"); - } - /* 54 hdl4se_mux2 mux_bWriteMask_if_bCounterChanged0*/ - { - char *instanceparam; - modules[54] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteMask_if_bCounterChanged0"); - } - /* 55 hdl4se_mux2 mux_bWriteAddr_if_bCounterChanged0*/ - { - char *instanceparam; - modules[55] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteAddr_if_bCounterChanged0"); - } - /* 56 hdl4se_mux2 mux_bWriteData_if_bCounterChanged0*/ - { - char *instanceparam; - modules[56] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteData_if_bCounterChanged0"); - } - /* 57 hdl4se_mux2 mux_bWriteMask_if_bCounterChanged1*/ - { - char *instanceparam; - modules[57] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteMask_if_bCounterChanged1"); - } - /* 58 hdl4se_mux2 mux_bWriteAddr_if_bCounterChanged1*/ - { - char *instanceparam; - modules[58] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteAddr_if_bCounterChanged1"); - } - /* 59 hdl4se_mux2 mux_bWriteData_if_bCounterChanged1*/ - { - char *instanceparam; - modules[59] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteData_if_bCounterChanged1"); - } - /* 60 hdl4se_mux2 mux_bWriteMask_if_bCounterChanged2*/ - { - char *instanceparam; - modules[60] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteMask_if_bCounterChanged2"); - } - /* 61 hdl4se_mux2 mux_bWriteAddr_if_bCounterChanged1*/ - { - char *instanceparam; - modules[61] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteAddr_if_bCounterChanged1"); - } - /* 62 hdl4se_mux2 mux_bWriteData_if_bCounterChanged2*/ - { - char *instanceparam; - modules[62] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteData_if_bCounterChanged2"); - } - /* 63 hdl4se_mux2 mux_bWriteMask_if_nwReset*/ - { - char *instanceparam; - modules[63] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteMask_if_nwReset"); - } - /* 64 hdl4se_mux2 mux_bWriteAddr_if_nwReset*/ - { - char *instanceparam; - modules[64] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteAddr_if_nwReset"); - } - /* 65 hdl4se_mux2 mux_bWriteData_if_nwReset*/ - { - char *instanceparam; - modules[65] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", instanceparam, "mux_bWriteData_if_nwReset"); - } - /* 66 hdl4se_unop or_bCounterChanged*/ - { - char *instanceparam; - modules[66] = hdl4seCreateUnit2(module, "E6772805-57BB-4b39-A10D-FDA6A4810E3B", instanceparam, "or_bCounterChanged"); - } - /* 67 hdl4se_binop and_nwReset_bCounterChanged*/ - { - char *instanceparam; - modules[67] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", instanceparam, "and_nwReset_bCounterChanged"); - } + modules[ 0] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "2'h1, 2'h1", "const_0_wRead"); + modules[ 1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "7'h20, 32'hf0000000", "const_bReadAddr"); + modules[ 2] = hdl4seCreateUnit2(module, "D5152459-6798-49C8-8376-21EBE8A9EE3C", "7'h20, 2'h1, 2'h0, 2'h1, 2'h1, 2'h1, 3'h2, 2'h1, 3'h3", "bReadData_wButton012"); + modules[ 3] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter0"); + modules[ 4] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter1"); + modules[ 5] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter2"); + modules[ 6] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter3"); + modules[ 7] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter4"); + modules[ 8] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter5"); + modules[ 9] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter6"); + modules[ 10] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter7"); + modules[ 11] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter8"); + modules[ 12] = hdl4seCreate_0010(module, "4'h4, 5'h9, 2'h0", "counter9"); + modules[ 13] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", "2'h1", "wCounterIt"); + modules[ 14] = hdl4seCreateUnit2(module, "E6772805-57BB-4b39-A10D-FDA6A4810E3B", "2'h1, 2'h1, 2'h1", "Button0NotPressed"); + modules[ 15] = hdl4seCreateUnit2(module, "E6772805-57BB-4b39-A10D-FDA6A4810E3B", "2'h1, 2'h1, 2'h1", "unop_Button1NotPressed"); + modules[ 16] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'ha", "binop_counterit"); + modules[ 17] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'ha", "binop_resetcounter"); + modules[ 18] = hdl4seCreate_000F(module, "", "dec0"); + modules[ 19] = hdl4seCreate_000F(module, "", "dec1"); + modules[ 20] = hdl4seCreate_000F(module, "", "dec2"); + modules[ 21] = hdl4seCreate_000F(module, "", "dec3"); + modules[ 22] = hdl4seCreate_000F(module, "", "dec4"); + modules[ 23] = hdl4seCreate_000F(module, "", "dec5"); + modules[ 24] = hdl4seCreate_000F(module, "", "dec6"); + modules[ 25] = hdl4seCreate_000F(module, "", "dec7"); + modules[ 26] = hdl4seCreate_000F(module, "", "dec8"); + modules[ 27] = hdl4seCreate_000F(module, "", "dec9"); + modules[ 28] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or98"); + modules[ 29] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or76"); + modules[ 30] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or54"); + modules[ 31] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or32"); + modules[ 32] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or10"); + modules[ 33] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or32"); + modules[ 34] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'hb", "or10"); + modules[ 35] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", "3'h3", "reg_bCounterChanged"); + modules[ 36] = hdl4seCreateUnit2(module, "D1F303E2-3ED1-42FD-8762-3AA623DA901E", "2'h1, 2'h1, 2'h1", "bind_wCounterin"); + modules[ 37] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "3'h3, 2'h0", "const_b3b0"); + modules[ 38] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "3'h3", "mux_if_nwReset"); + modules[ 39] = hdl4seCreateUnit2(module, "D5152459-6798-49C8-8376-21EBE8A9EE3C", "3'h3, 2'h1, 2'h0, 2'h1, 2'h1, 2'h1, 3'h2, 2'h1, 3'h2", "split4_bCounterChanged"); + modules[ 40] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", "2'h1", "reg_wWrite"); + modules[ 41] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", "7'h20", "reg_bWriteAddr"); + modules[ 42] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", "7'h20", "reg_bWriteData"); + modules[ 43] = hdl4seCreateUnit2(module, "76FBFD4B-FEAD-45fd-AA27-AFC58AC241C2", "4'h4", "reg_bWriteMask"); + modules[ 44] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "5'h8, 2'h0", "const_b8b0"); + modules[ 45] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "4'h4, 2'h0", "const_b4b0000"); + modules[ 46] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "4'h4, 32'hfffffffc", "const_b4b1100"); + modules[ 47] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "7'h20, 2'h0", "const_b32b0"); + modules[ 48] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "7'h20, 32'hf0000018", "const_b32hf0000018"); + modules[ 49] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "7'h20, 32'hf0000014", "const_b32hf0000014"); + modules[ 50] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "7'h20, 32'hf0000010", "const_b32hf0000018"); + modules[ 51] = hdl4seCreateUnit2(module, "0234ECE7-A9C5-406B-9AE7-4841EA0DF7C9", "5'h8, 5'h8, 5'h8, 5'h8", "bind_0098"); + modules[ 52] = hdl4seCreateUnit2(module, "0234ECE7-A9C5-406B-9AE7-4841EA0DF7C9", "5'h8, 5'h8, 5'h8, 5'h8", "bind_7654"); + modules[ 53] = hdl4seCreateUnit2(module, "0234ECE7-A9C5-406B-9AE7-4841EA0DF7C9", "5'h8, 5'h8, 5'h8, 5'h8", "bind_3210"); + modules[ 54] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "4'h4", "mux_bWriteMask_if_bCounterChanged0"); + modules[ 55] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteAddr_if_bCounterChanged0"); + modules[ 56] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteData_if_bCounterChanged0"); + modules[ 57] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "4'h4", "mux_bWriteMask_if_bCounterChanged1"); + modules[ 58] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteAddr_if_bCounterChanged1"); + modules[ 59] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteData_if_bCounterChanged1"); + modules[ 60] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "4'h4", "mux_bWriteMask_if_bCounterChanged2"); + modules[ 61] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteAddr_if_bCounterChanged1"); + modules[ 62] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteData_if_bCounterChanged2"); + modules[ 63] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "4'h4", "mux_bWriteMask_if_nwReset"); + modules[ 64] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteAddr_if_nwReset"); + modules[ 65] = hdl4seCreateUnit2(module, "9B0B3D25-346D-48B9-ABB9-ED755910425D", "7'h20", "mux_bWriteData_if_nwReset"); + modules[ 66] = hdl4seCreateUnit2(module, "E6772805-57BB-4b39-A10D-FDA6A4810E3B", "3'h3, 2'h1, 3'h3", "or_bCounterChanged"); + modules[ 67] = hdl4seCreateUnit2(module, "060FB913-1C0F-4704-8EC2-A08BF5387062", "2'h1, 2'h1, 2'h1, 5'ha", "and_nwReset_bCounterChanged"); } /* 线网连接 */ diff --git a/examples/counter/verilog/main_asm.v b/examples/counter/verilog/main_asm.v index ac94159..f335d01 100644 --- a/examples/counter/verilog/main_asm.v +++ b/examples/counter/verilog/main_asm.v @@ -104,14 +104,14 @@ hdl4se_const #(WIDTH, RESETVALUE) const_RESETVALUE(bConst_RESETVALUE); wire wEQ_bCurrentCounter_MAXVALUE; /* 比较器 bCurrentCounter == MAXVALUE */ -hdl4se_binop #(WIDTH, WIDTH, 1, BINOP_EQ) +hdl4se_binop #(WIDTH, WIDTH, 1, `BINOP_EQ) binop_EQ_bCurrentCounter_MAXVALUE( wireout_bCurrentCounter, bConst_MAXVALUE, wEQ_bCurrentCounter_MAXVALUE ); -hdl4se_binop #(1, 1, 1, BINOP_AND) +hdl4se_binop #(1, 1, 1, `BINOP_AND) binop_counter_overfloat( wEQ_bCurrentCounter_MAXVALUE, wCounterIt, @@ -123,7 +123,7 @@ hdl4se_binop #(1, 1, 1, BINOP_AND) wire [WIDTH-1:0] bConst_One; wire [WIDTH-1:0] bCurrentCounterPlusOne; hdl4se_const #(WIDTH, 1) const_One(bConst_One); -hdl4se_binop #(WIDTH, WIDTH, 1, BINOP_ADD) +hdl4se_binop #(WIDTH, WIDTH, 1, `BINOP_ADD) binop_bCurrentCounterInc( wireout_bCurrentCounter, bConst_One, @@ -249,15 +249,15 @@ assign wCounterin9 = wCounterin8; wireout_wCounterIt ); wire wButton0NotPressed; - hdl4se_unop #(1, 1, UNOP_NOT) Button0NotPressed(wButton0Pressed, wButton0NotPressed); + hdl4se_unop #(1, 1, `UNOP_NOT) Button0NotPressed(wButton0Pressed, wButton0NotPressed); /*counterit= (~b1) & b2*/ wire wButton1NotPressed; - hdl4se_unop #(1, 1, UNOP_NOT) unop_Button1NotPressed(wButton1Pressed, wButton1NotPressed); - hdl4se_binop #(1, 1, 1, BINOP_AND) binop_counterit(wButton1NotPressed, wButton2Pressed, wirein_wCounterIt); + hdl4se_unop #(1, 1, `UNOP_NOT) unop_Button1NotPressed(wButton1Pressed, wButton1NotPressed); + hdl4se_binop #(1, 1, 1, `BINOP_AND) binop_counterit(wButton1NotPressed, wButton2Pressed, wirein_wCounterIt); /*assign nwResetCount = (~b0) & nwReset; */ - hdl4se_binop #(1, 1, 1, BINOP_AND) binop_resetcounter(wButton0NotPressed, nwReset, nwResetCount); + hdl4se_binop #(1, 1, 1, `BINOP_AND) binop_resetcounter(wButton0NotPressed, nwReset, nwResetCount); /* 以下是译码器连接,十个计数器的输出对应到十个译码器 */ wire [7:0] code0; @@ -286,13 +286,13 @@ dec2seg dec9(bCount9, code9); wire wCounterin98, wCounterin76, wCounterin54, wCounterin32, wCounterin10, wCounterin7654, wCounterin3210; - hdl4se_binop #(1, 1, 1, BINOP_OR) or98(wCounterin9, wCounterin8, wCounterin98); - hdl4se_binop #(1, 1, 1, BINOP_OR) or76(wCounterin7, wCounterin6, wCounterin76); - hdl4se_binop #(1, 1, 1, BINOP_OR) or54(wCounterin5, wCounterin4, wCounterin54); - hdl4se_binop #(1, 1, 1, BINOP_OR) or32(wCounterin3, wCounterin2, wCounterin32); - hdl4se_binop #(1, 1, 1, BINOP_OR) or10(wCounterin1, wCounterin0, wCounterin10); - hdl4se_binop #(1, 1, 1, BINOP_OR) or32(wCounterin76, wCounterin54, wCounterin7654); - hdl4se_binop #(1, 1, 1, BINOP_OR) or10(wCounterin32, wCounterin10, wCounterin3210); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or98(wCounterin9, wCounterin8, wCounterin98); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or76(wCounterin7, wCounterin6, wCounterin76); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or54(wCounterin5, wCounterin4, wCounterin54); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or32(wCounterin3, wCounterin2, wCounterin32); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or10(wCounterin1, wCounterin0, wCounterin10); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or32(wCounterin76, wCounterin54, wCounterin7654); + hdl4se_binop #(1, 1, 1, `BINOP_OR) or10(wCounterin32, wCounterin10, wCounterin3210); wire[2:0] wirein_bCounterChanged, wireout_bCounterChanged; hdl4se_reg #(3) reg_bCounterChanged( diff --git a/examples/counter/verilog/main_asm_dump.v b/examples/counter/verilog/main_asm_dump.v index b4cbdc2..0be029a 100644 --- a/examples/counter/verilog/main_asm_dump.v +++ b/examples/counter/verilog/main_asm_dump.v @@ -461,10 +461,10 @@ module counter hdl4se_reg #( WIDTH ) bCurrentCounter( wClk, wirein_bCurrentCounter, wireout_bCurrentCounter ); hdl4se_const #( WIDTH, MAXVALUE ) const_MAXVALUE( bConst_MAXVALUE ); hdl4se_const #( WIDTH, RESETVALUE ) const_RESETVALUE( bConst_RESETVALUE ); - hdl4se_binop #( WIDTH, WIDTH, 1, BINOP_EQ ) binop_EQ_bCurrentCounter_MAXVALUE( wireout_bCurrentCounter, bConst_MAXVALUE, wEQ_bCurrentCounter_MAXVALUE ); - hdl4se_binop #( 1, 1, 1, BINOP_AND ) binop_counter_overfloat( wEQ_bCurrentCounter_MAXVALUE, wCounterIt, wCounterOverflow ); + hdl4se_binop #( WIDTH, WIDTH, 1, 4 ) binop_EQ_bCurrentCounter_MAXVALUE( wireout_bCurrentCounter, bConst_MAXVALUE, wEQ_bCurrentCounter_MAXVALUE ); + hdl4se_binop #( 1, 1, 1, 10 ) binop_counter_overfloat( wEQ_bCurrentCounter_MAXVALUE, wCounterIt, wCounterOverflow ); hdl4se_const #( WIDTH, 1 ) const_One( bConst_One ); - hdl4se_binop #( WIDTH, WIDTH, 1, BINOP_ADD ) binop_bCurrentCounterInc( wireout_bCurrentCounter, bConst_One, bCurrentCounterPlusOne ); + hdl4se_binop #( WIDTH, WIDTH, 1, 0 ) binop_bCurrentCounterInc( wireout_bCurrentCounter, bConst_One, bCurrentCounterPlusOne ); hdl4se_mux2 #( WIDTH ) mux_bCurrentCounter_if_wCounterIt( wEQ_bCurrentCounter_MAXVALUE, bCurrentCounterPlusOne, bConst_RESETVALUE, bCurrentCounter_if_wCounterIt ); hdl4se_const #( 1, 1 ) const_1( wConst_1 ); hdl4se_const #( 1, 0 ) const_0( wConst_0 ); @@ -598,10 +598,10 @@ module main counter #( 4, 9, 0 ) counter8( wClk, nwResetCount, wCounterin8, bCount8, wOverflow8 ); counter #( 4, 9, 0 ) counter9( wClk, nwResetCount, wCounterin9, bCount9, wnouse ); hdl4se_reg #( 1 ) wCounterIt( wClk, wirein_wCounterIt, wireout_wCounterIt ); - hdl4se_unop #( 1, 1, UNOP_NOT ) Button0NotPressed( wButton0Pressed, wButton0NotPressed ); - hdl4se_unop #( 1, 1, UNOP_NOT ) unop_Button1NotPressed( wButton1Pressed, wButton1NotPressed ); - hdl4se_binop #( 1, 1, 1, BINOP_AND ) binop_counterit( wButton1NotPressed, wButton2Pressed, wirein_wCounterIt ); - hdl4se_binop #( 1, 1, 1, BINOP_AND ) binop_resetcounter( wButton0NotPressed, nwReset, nwResetCount ); + hdl4se_unop #( 1, 1, 1 ) Button0NotPressed( wButton0Pressed, wButton0NotPressed ); + hdl4se_unop #( 1, 1, 1 ) unop_Button1NotPressed( wButton1Pressed, wButton1NotPressed ); + hdl4se_binop #( 1, 1, 1, 10 ) binop_counterit( wButton1NotPressed, wButton2Pressed, wirein_wCounterIt ); + hdl4se_binop #( 1, 1, 1, 10 ) binop_resetcounter( wButton0NotPressed, nwReset, nwResetCount ); dec2seg dec0( bCount0, code0 ); dec2seg dec1( bCount1, code1 ); dec2seg dec2( bCount2, code2 ); @@ -612,13 +612,13 @@ module main dec2seg dec7( bCount7, code7 ); dec2seg dec8( bCount8, code8 ); dec2seg dec9( bCount9, code9 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or98( wCounterin9, wCounterin8, wCounterin98 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or76( wCounterin7, wCounterin6, wCounterin76 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or54( wCounterin5, wCounterin4, wCounterin54 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or32( wCounterin3, wCounterin2, wCounterin32 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or10( wCounterin1, wCounterin0, wCounterin10 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or32( wCounterin76, wCounterin54, wCounterin7654 ); - hdl4se_binop #( 1, 1, 1, BINOP_OR ) or10( wCounterin32, wCounterin10, wCounterin3210 ); + hdl4se_binop #( 1, 1, 1, 11 ) or98( wCounterin9, wCounterin8, wCounterin98 ); + hdl4se_binop #( 1, 1, 1, 11 ) or76( wCounterin7, wCounterin6, wCounterin76 ); + hdl4se_binop #( 1, 1, 1, 11 ) or54( wCounterin5, wCounterin4, wCounterin54 ); + hdl4se_binop #( 1, 1, 1, 11 ) or32( wCounterin3, wCounterin2, wCounterin32 ); + hdl4se_binop #( 1, 1, 1, 11 ) or10( wCounterin1, wCounterin0, wCounterin10 ); + hdl4se_binop #( 1, 1, 1, 11 ) or32( wCounterin76, wCounterin54, wCounterin7654 ); + hdl4se_binop #( 1, 1, 1, 11 ) or10( wCounterin32, wCounterin10, wCounterin3210 ); hdl4se_reg #( 3 ) reg_bCounterChanged( wClk, wirein_bCounterChanged, wireout_bCounterChanged ); hdl4se_bind3 #( 1, 1, 1 ) bind_wCounterin( wCounterin98, wCounterin7654, wCounterin3210, bChanged_if_nwReset ); hdl4se_const #( 3, 0 ) const_b3b0( b3b0 ); diff --git a/examples/terris/src/main.c b/examples/terris/src/main.c index f24527e..dc89e16 100644 --- a/examples/terris/src/main.c +++ b/examples/terris/src/main.c @@ -68,7 +68,7 @@ int main(int argc, char* argv[]) IHDL4SEUnit** sim_unit; A_u_t_o_registor_terrisctrl(); sim = hdl4sesimCreateSimulator(); - topmodule = hdl4seCreate_main2(NULL, "", "main"); + topmodule = hdl4seCreate_main(NULL, "", "main"); gui = guiCreate(0xf0000000, "terris"); objectCall1(sim, SetTopModule, topmodule); objectCall1(sim, AddDevice, gui); diff --git a/examples/terris/src/topmodule.c b/examples/terris/src/topmodule.c index 60c74a1..d3cafc2 100644 --- a/examples/terris/src/topmodule.c +++ b/examples/terris/src/topmodule.c @@ -31,7 +31,7 @@ /* -* Created by HDL4SE @ Sat Jun 12 15:21:53 2021 +* Created by HDL4SE @ Sat Jun 12 21:02:17 2021 * Don't edit it. */ @@ -47,20 +47,6 @@ #include "verilog_parsetree.h" -typedef IHDL4SEUnit** (*hdl4seCreate_Func)(IHDL4SEModule** parent, const char* instanceparam, const char* name); - -typedef struct s_module_info { - int isbasiccell; - int moduleindex; - union { - const char** clsid; - hdl4seCreate_Func *hdl4seCreate_func; - }; -}module_info; - -static const char *softmodule_000F = "hdl4se"; -static const char *softmodule_000B = "hdl4se"; - IHDL4SEUnit** hdl4seCreate_main(IHDL4SEModule** parent, const char* instanceparam, const char* name) { /* module main */ IHDL4SEModule** module; @@ -84,42 +70,29 @@ IHDL4SEUnit** hdl4seCreate_main(IHDL4SEModule** parent, const char* instancepara /* 8*/ objectCall3(module, AddPort, PORT_DIRECT_INPUT , 32, "bReadData"); {/* 模块实例化 */ - char instanceparam[256]; - /* 0 teris_ctrl ctrl*/ - { - modules[0] = hdl4seCreateUnit2(module, "6f8a9aa6-ec57-4734-a183-7871ed57ea95", instanceparam, "ctrl"); - } - /* 1 hdl4se_const const_wRead*/ - { - modules[1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_wRead"); - } - /* 2 hdl4se_const const_bReadAddr*/ - { - modules[2] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_bReadAddr"); - } - /* 3 hdl4se_const const_wWrite*/ - { - modules[3] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", instanceparam, "const_wWrite"); - } + modules[ 0] = hdl4seCreateUnit2(module, "6f8a9aa6-ec57-4734-a183-7871ed57ea95", "", "ctrl"); + modules[ 1] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "2'h1, 2'h1", "const_wRead"); + modules[ 2] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "7'h20, 32'hf0000000", "const_bReadAddr"); + modules[ 3] = hdl4seCreateUnit2(module, "8FBE5B87-B484-4f95-8291-DBEF86A1C354", "2'h1, 2'h1", "const_wWrite"); } /* 线网连接 */ /* instance "ctrl", module "teris_ctrl" */ - objectCall3(modules[0], Connect, 0, unit, 0); - objectCall3(modules[0], Connect, 1, unit, 1); - objectCall3(unit, Connect, 3, modules[0], 2); - objectCall3(unit, Connect, 4, modules[0], 3); - objectCall3(modules[0], Connect, 4, unit, 8); + objectCall3(modules[0], Connect, 0, unit, 0); + objectCall3(modules[0], Connect, 1, unit, 1); + objectCall3(unit, Connect, 3, modules[0], 2); + objectCall3(unit, Connect, 4, modules[0], 3); + objectCall3(modules[0], Connect, 4, unit, 8); /* instance "const_wRead", module "hdl4se_const" */ - objectCall3(unit, Connect, 6, modules[1], 0); + objectCall3(unit, Connect, 6, modules[1], 0); /* instance "const_bReadAddr", module "hdl4se_const" */ - objectCall3(unit, Connect, 7, modules[2], 0); + objectCall3(unit, Connect, 7, modules[2], 0); /* instance "const_wWrite", module "hdl4se_const" */ - objectCall3(unit, Connect, 2, modules[3], 0); + objectCall3(unit, Connect, 2, modules[3], 0); /*释放module接口*/ objectRelease(module); diff --git a/hdl4secell/src/hdl4secell.c b/hdl4secell/src/hdl4secell.c index 10eb1de..0d43ea6 100644 --- a/hdl4secell/src/hdl4secell.c +++ b/hdl4secell/src/hdl4secell.c @@ -110,7 +110,7 @@ IHDL4SEUnit** hdl4seCreateUnit2(IHDL4SEModule** parent, const char* clsid, const { unsigned int inclsid[4]; str2iid(clsid, inclsid); - return hdl4seCreateUnit2(parent, inclsid, instanceparam, name); + return hdl4seCreateUnit(parent, inclsid, instanceparam, name); } diff --git a/parser/verilog_expr.c b/parser/verilog_expr.c index b8064e7..0f4cdef 100644 --- a/parser/verilog_expr.c +++ b/parser/verilog_expr.c @@ -45,6 +45,7 @@ #include "conststring.h" #include "verilog_parsetree.h" #include "verilog_module.h" +#include "verilog_varsel.h" #define IMPLEMENT_GUID #include "verilog_expr.h" #undef IMPLEMENT_GUID @@ -420,42 +421,76 @@ int verilogparseGenConstExpr(FILE* pFile, const char* pre, HOBJECT expr, HOBJECT count = 1; switch (pobj->data.exprtype) { case EXPRTYPE_NUMBER: + { fprintf(pFile, "%s{.exprtype=EXPRTYPE_NUMBER, .value=\"%s\" }, \n", pre, pobj->data.value->string); break; + } case EXPRTYPE_BIGNUMBER: + { objectCall3(pobj->data.bignumber, GetStr, 16, hdl4se_parse_logbuf(), 1024); fprintf(pFile, "%s{.exprtype=EXPRTYPE_NUMBER, .value=\"%s\" }, \n", pre, hdl4se_parse_logbuf()); break; + } case EXPRTYPE_STRING: + { fprintf(pFile, "%s{.exprtype=EXPRTYPE_STRING, .value=%s},\n", pre, pobj->data.value->string); break; + } case EXPRTYPE_PARAM: + { fprintf(pFile, "%s{.exprtype=EXPRTYPE_PARAM, .index=%d},/* %s */\n", pre, verilogModuleGetParamIndex(module, pobj->data.value->string), pobj->data.value->string); break; + } case EXPRTYPE_LOCALPARAM: + { fprintf(pFile, "%s{.exprtype=EXPRTYPE_LOCALPARAM, .index=%d},/* %s */\n", pre, verilogModuleGetLocalParamIndex(module, pobj->data.value->string), pobj->data.value->string); break; + } case EXPRTYPE_BINOP: + { count = verilogparseGenConstExpr(pFile, pre, pobj->data.expr0, module); count += verilogparseGenConstExpr(pFile, pre, pobj->data.expr1, module); fprintf(pFile, "%s{.exprtype=EXPRTYPE_BINOP, .op=%s},\n", pre, OPERATOR_name[pobj->data.op]); count++; break; + } case EXPRTYPE_UNOP: + { count = verilogparseGenConstExpr(pFile, pre, pobj->data.expr0, module); fprintf(pFile, "%s{.exprtype=EXPRTYPE_UNOP, .op=%s},\n", pre, OPERATOR_name[pobj->data.op]); count++; break; + } case EXPRTYPE_IFOP: + { count = verilogparseGenConstExpr(pFile, pre, pobj->data.expr0, module); count += verilogparseGenConstExpr(pFile, pre, pobj->data.expr1, module); count += verilogparseGenConstExpr(pFile, pre, pobj->data.expr2, module); fprintf(pFile, "%s{.exprtype=EXPRTYPE_IFOP, .op=0},\n", pre); count++; break; + } + case EXPRTYPE_HIERARCHICAL_IDENT: + { + int index = -1; + /* 目前只取第一个名称 */ + verilogVarSel* select; + select = verilogVarSelGetData(pobj->data.elementselect->__dlist_pNext); + if (select != NULL) { + index = verilogModuleGetParamIndex(module, select->name->string); + } + if (index >= 0) + fprintf(pFile, "%s{.exprtype=EXPRTYPE_PARAM, .index=%d},/* %s */\n", pre, index, select->name->string); + else + fprintf(pFile, "%s{error: can not find parameter %s}\n", pre, select->name->string); + break; + } default: + { + fprintf(pFile, "%s error type %d,\n", pre, pobj->data.exprtype); count = 0; - break; + break; + } } return count; } \ No newline at end of file diff --git a/parser/verilog_module.c b/parser/verilog_module.c index 87857bd..9516e74 100644 --- a/parser/verilog_module.c +++ b/parser/verilog_module.c @@ -277,15 +277,35 @@ int verilogModuleGetLocalParamIndex(HOBJECT object, const char* name) char* moduleinstanceGetParameterString(verilogModuleInstance* moduleinstance) { /* 目前先简单地假定实参中已经列出所有的参数 */ + int index; IDListVarPtr pitem, pitemtemp; verilogParameterInstance* paraminst; IDListVarPtr plist = moduleinstance->parameter_value_assignment; + char* buf = hdl4se_parse_logbuf(); pitem = plist->__dlist_pNext; + index = 0; while (pitem != plist) { + verilogExpr* expr0; paraminst = verilogParameterInstanceGetData(pitem); pitemtemp = pitem->__dlist_pNext; + expr0 = verilogExprGetData(paraminst->expr0); + if (expr0 == NULL) + return NULL; + if (expr0->exprtype != EXPRTYPE_BIGNUMBER) { + return NULL; + } + if (index > 0) { + *buf++ = ','; + *buf++ = ' '; + } + if (0 != objectCall3(expr0->bignumber, GetStr, 16, buf, 1024)) { + return NULL; + } + buf = buf + strlen(buf); + index++; + pitem = pitemtemp; } - return NULL; + return hdl4se_parse_logbuf(); } static int verilogmodule_verilognode_gencode(HOBJECT object, FILE * pFile, const char * modulename, void * opt) @@ -503,13 +523,13 @@ static int verilogmodule_verilognode_gencode(HOBJECT object, FILE * pFile, const moduleinstance->index = index++; if (dlistItemCount(moduleinfo->module_parameters) <= 0) { if (moduleinfo->isbasiccell) { - fprintf(pFile, "\t\tmodules[%d] = hdl4seCreateUnit2(module, %s, \"\", \"%s\");\n", + fprintf(pFile, "\t\tmodules[%3d] = hdl4seCreateUnit2(module, %s, \"\", \"%s\");\n", moduleinstance->index, moduleinfo->cell_clsid->string, moduleinstance->instname->string); } else { - fprintf(pFile, "\t\tmodules[%d] = hdl4seCreate_%04X(module, \"\", \"%s\");\n", + fprintf(pFile, "\t\tmodules[%3d] = hdl4seCreate_%04X(module, \"\", \"%s\");\n", moduleinstance->index, moduleinfo->moduleindex, moduleinstance->instname->string); @@ -519,14 +539,14 @@ static int verilogmodule_verilognode_gencode(HOBJECT object, FILE * pFile, const parameterstring = moduleinstanceGetParameterString(moduleinstance); if (parameterstring != NULL) { if (moduleinfo->isbasiccell) { - fprintf(pFile, "\t\t\tmodules[%d] = hdl4seCreateUnit2(module, %s, \"%s\", \"%s\");\n", + fprintf(pFile, "\t\tmodules[%3d] = hdl4seCreateUnit2(module, %s, \"%s\", \"%s\");\n", moduleinstance->index, moduleinfo->cell_clsid->string, parameterstring, moduleinstance->instname->string); } else { - fprintf(pFile, "\t\t\tmodules[%d] = hdl4seCreate_%04X(module, \"%s\", \"%s\");\n", + fprintf(pFile, "\t\tmodules[%3d] = hdl4seCreate_%04X(module, \"%s\", \"%s\");\n", moduleinstance->index, moduleinfo->moduleindex, parameterstring, @@ -534,22 +554,46 @@ static int verilogmodule_verilognode_gencode(HOBJECT object, FILE * pFile, const } } else { + int exprcount; fprintf(pFile, "\t\t/*%3d %s %s*/\n", moduleinstance->index, moduleinstance->modulename->string, moduleinstance->instname->string); fprintf(pFile, "\t\t{\n"); - fprintf(pFile, "\t\t\tchar *instanceparam;\n"); + fprintf(pFile, "\t\t\tconst expr_code expr_info[] = {\n"); + exprcount = 0; + { + IDListVarPtr pitem, pitemtemp; + verilogParameterInstance* paraminst; + IDListVarPtr plist = moduleinstance->parameter_value_assignment; + pitem = plist->__dlist_pNext; + while (pitem != plist) { + paraminst = verilogParameterInstanceGetData(pitem); + pitemtemp = pitem->__dlist_pNext; + exprcount += verilogparseGenConstExpr(pFile, "\t\t\t\t", paraminst->expr0, object); + fprintf(pFile, "\t\t\t\t{.exprtype=EXPRTYPE_EMIT},\n"); + exprcount++; + pitem = pitemtemp; + } + + } + fprintf(pFile, "\t\t\t};\n"); if (moduleinfo->isbasiccell) { - fprintf(pFile, "\t\t\tmodules[%d] = hdl4seCreateUnit2(module, %s, instanceparam, \"%s\");\n", + fprintf(pFile, "\t\t\tmodules[%3d] = hdl4seCreateUnit2(module, %s, const_expr_list_eval(%d, expr_info, %d, %s), \"%s\");\n", moduleinstance->index, moduleinfo->cell_clsid->string, + exprcount, + paramcount, + paramcount > 0 ? "parameters" : "NULL", moduleinstance->instname->string); } else { - fprintf(pFile, "\t\t\tmodules[%d] = hdl4seCreate_%04X(module, instanceparam, \"%s\");\n", + fprintf(pFile, "\t\t\tmodules[%3d] = hdl4seCreate_%04X(module, const_expr_list_eval(%d, expr_info, %d, %s), \"%s\");\n", moduleinstance->index, moduleinfo->moduleindex, + exprcount, + paramcount, + paramcount > 0 ? "parameters" : "NULL", moduleinstance->instname->string); } fprintf(pFile, "\t\t}\n"); diff --git a/parser/verilog_parsetree.h b/parser/verilog_parsetree.h index ee538b7..5898ba9 100644 --- a/parser/verilog_parsetree.h +++ b/parser/verilog_parsetree.h @@ -155,6 +155,7 @@ enum exprtype { EXPRTYPE_IFOP, EXPRTYPE_IDENT, EXPRTYPE_HIERARCHICAL_IDENT, + EXPRTYPE_EMIT, }; enum RANGE_TYPE { @@ -300,6 +301,7 @@ typedef struct _expr_code { }expr_code; int const_expr_eval(int expr_infosize, expr_code *expr_info, int paramcount, IBigNumber***parameters); +const char * const_expr_list_eval(int expr_infosize, expr_code* expr_info, int paramcount, IBigNumber*** parameters); #endif -- GitLab