From b6216e8dbcdb4c375a6f7991b61403ba986d53b5 Mon Sep 17 00:00:00 2001 From: Leoric <1563827298@qq.com> Date: Wed, 27 Jan 2021 17:29:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=8B=E9=9A=86=E4=B8=BB=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 34 + README.md | 82 + pics/QQ截图20210123232228.png | Bin 0 -> 9500 bytes pics/QQ截图20210123232905.png | Bin 0 -> 9700 bytes pics/QQ截图20210123233154.png | Bin 0 -> 8294 bytes pics/QQ截图20210123233330.png | Bin 0 -> 2805 bytes pics/QQ截图20210123233336.png | Bin 0 -> 2763 bytes pics/QQ截图20210123234037.png | Bin 0 -> 7545 bytes pics/QQ截图20210123234621.png | Bin 0 -> 1210 bytes pics/QQ截图20210123234626.png | Bin 0 -> 1548 bytes pics/QQ截图20210123234630.png | Bin 0 -> 1167 bytes pics/icon/矩形.png | Bin 0 -> 1940 bytes pics/icon/箭头(input或output).png | Bin 0 -> 4043 bytes pics/icon/长方形(inout).png | Bin 0 -> 1935 bytes pics/矩形.png | Bin 0 -> 1940 bytes src/.keep | 0 .../.qmake.stash | 21 + .../Makefile | 469 ++++++ .../Makefile.Debug | 1378 +++++++++++++++++ .../Makefile.Release | 1378 +++++++++++++++++ .../debug/moc_mainwindow.cpp | 147 ++ .../debug/moc_new_constrain.cpp | 119 ++ .../debug/moc_new_file.cpp | 148 ++ .../debug/moc_new_testbench.cpp | 119 ++ .../debug/moc_predefs.h | 394 +++++ .../object_script.eda_qt.Debug | 13 + .../object_script.eda_qt.Release | 13 + .../ui_mainwindow.h | 318 ++++ .../ui_new_constrain.h | 173 +++ .../ui_new_file.h | 173 +++ .../ui_new_testbench.h | 173 +++ src/eda_qt/constrain.cpp | 90 ++ src/eda_qt/constrain.h | 31 + src/eda_qt/eda_qt.pro | 51 + src/eda_qt/eda_qt.pro.user | 328 ++++ src/eda_qt/eda_qt.pro.user.c7d4991.22 | 319 ++++ src/eda_qt/eda_qt.pro.user.f13ef12.22 | 848 ++++++++++ src/eda_qt/main.cpp | 11 + src/eda_qt/mainwindow.cpp | 104 ++ src/eda_qt/mainwindow.h | 49 + src/eda_qt/mainwindow.ui | 369 +++++ src/eda_qt/module.cpp | 99 ++ src/eda_qt/module.h | 28 + src/eda_qt/new_constrain.cpp | 19 + src/eda_qt/new_constrain.h | 23 + src/eda_qt/new_constrain.ui | 147 ++ src/eda_qt/new_file.cpp | 35 + src/eda_qt/new_file.h | 33 + src/eda_qt/new_file.ui | 147 ++ src/eda_qt/new_testbench.cpp | 19 + src/eda_qt/new_testbench.h | 23 + src/eda_qt/new_testbench.ui | 147 ++ src/eda_qt/port.cpp | 55 + src/eda_qt/port.h | 29 + src/eda_qt/testbench.cpp | 84 + src/eda_qt/testbench.h | 29 + src/eda_qt/矩形.png | Bin 0 -> 1940 bytes 57 files changed, 8269 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pics/QQ截图20210123232228.png create mode 100644 pics/QQ截图20210123232905.png create mode 100644 pics/QQ截图20210123233154.png create mode 100644 pics/QQ截图20210123233330.png create mode 100644 pics/QQ截图20210123233336.png create mode 100644 pics/QQ截图20210123234037.png create mode 100644 pics/QQ截图20210123234621.png create mode 100644 pics/QQ截图20210123234626.png create mode 100644 pics/QQ截图20210123234630.png create mode 100644 pics/icon/矩形.png create mode 100644 pics/icon/箭头(input或output).png create mode 100644 pics/icon/长方形(inout).png create mode 100644 pics/矩形.png create mode 100644 src/.keep create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/.qmake.stash create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/Makefile create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/Makefile.Debug create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/Makefile.Release create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_mainwindow.cpp create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_constrain.cpp create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_file.cpp create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_testbench.cpp create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_predefs.h create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Debug create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Release create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_mainwindow.h create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_constrain.h create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_file.h create mode 100644 src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_testbench.h create mode 100644 src/eda_qt/constrain.cpp create mode 100644 src/eda_qt/constrain.h create mode 100644 src/eda_qt/eda_qt.pro create mode 100644 src/eda_qt/eda_qt.pro.user create mode 100644 src/eda_qt/eda_qt.pro.user.c7d4991.22 create mode 100644 src/eda_qt/eda_qt.pro.user.f13ef12.22 create mode 100644 src/eda_qt/main.cpp create mode 100644 src/eda_qt/mainwindow.cpp create mode 100644 src/eda_qt/mainwindow.h create mode 100644 src/eda_qt/mainwindow.ui create mode 100644 src/eda_qt/module.cpp create mode 100644 src/eda_qt/module.h create mode 100644 src/eda_qt/new_constrain.cpp create mode 100644 src/eda_qt/new_constrain.h create mode 100644 src/eda_qt/new_constrain.ui create mode 100644 src/eda_qt/new_file.cpp create mode 100644 src/eda_qt/new_file.h create mode 100644 src/eda_qt/new_file.ui create mode 100644 src/eda_qt/new_testbench.cpp create mode 100644 src/eda_qt/new_testbench.h create mode 100644 src/eda_qt/new_testbench.ui create mode 100644 src/eda_qt/port.cpp create mode 100644 src/eda_qt/port.h create mode 100644 src/eda_qt/testbench.cpp create mode 100644 src/eda_qt/testbench.h create mode 100644 src/eda_qt/矩形.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b14041c --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +/eda/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d27854 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# eda_qt + +### -介绍 +eda软件开发 + +## - 开发需求 +### ------------001------------ +点击“新建模块”按钮后,弹出一对话框,如: +![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/232300_bb1cd7c7_8607408.png "QQ截图20210123232228.png") + +用户可输入:模块名称、input端口数量、output端口数量、inout端口数量 +点击ok后,将出现一“矩形图”,代表着该模块 +![这是我们软件里用的矩形](https://images.gitee.com/uploads/images/2021/0123/232810_4125e7a6_8607408.png "矩形.png") +上图是我们要开发的软件里用的矩形图 +这是我们仿照的软件里的截图,模块名为123,input、output、inout都为1 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/232955_c341839e_8607408.png "QQ截图20210123232905.png") +点击某一端口时,应做到可以修改端口的属性,包括:![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/233219_b40e4d51_8607408.png "QQ截图20210123233154.png") +|端口名:要在矩形图上体现 +|输入输出类型:可以在input、output、inout中选![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/233346_328b5e77_8607408.png "QQ截图20210123233330.png") +|数据类型:可以在wire、reg中选![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/233408_06262ce9_8607408.png "QQ截图20210123233336.png") +|数据长度:可设置正整数值 +|颜色:此功能目前可先不做。。 +### ------------002------------ +双击模块矩形,可查看此模块所包含的子模块 +此时用户只需要输入算法代码 如:assign c = a & b; +其他代码由软件自动生成。 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/234049_deade8af_8607408.png "QQ截图20210123234037.png") +其中第一段的格式为module xxx\[*\](端口名); 如用户在最开始的对话框中填写模块名为123,且整个模块中所有的端口为a、b、c三个时 +软件将会生成module 123\[*\](a,b,c); + **第二段** 代码为:input/output/inout 端口名;例如用户设置a为input,b为output,c为inout。则代码为 +input a; output b; inout c; + **第三段** 代码为:端口数据类型 端口名;例如用户定义a端口为wire型,b、c端口为reg型,则: +wire a; reg b; reg c; +第四段代码为之前用户输入的算法代码 +最后是固定句式:endmodule 相当于这个模块结束了 +另外要注意:当端口的数据长度定义为i(正整数)时,相应的在上述 **第二段、第三段** 代码中要有所改变,在端口名前加[i-1:0] +例如:![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/234717_374091e7_8607408.png "QQ截图20210123234621.png")用户定义了p0为3位 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/234922_d18c6d0d_8607408.png "QQ截图20210123234626.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0123/234930_6490091b_8607408.png "QQ截图20210123234630.png") +则p0前面加[2:0] +### ------------003------------ +应有“保存模块”和“生成代码”两个按钮。其中: +保存模块:做到将此次用户新建的模块里的所有内容打包保存 下次用户双击时可以直接在软件里打开 +生成代码:将软件生成的代码 让用户选择位置保存。保存为 **verilog目录** 目录下应有 **此模块及其内部子模块** 所有的verilog代码文件 **扩展名为.v** +### ------------004------------ +Verilog代码高亮规则 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0124/214040_f85bdd83_8607408.png "QQ截图20210124214026.png") +### ------------005------------ +在上层模块下添加子模块 可用线将子模块的端口连接 并生成实例化代码 +1. 添加子模块 +在左侧选中已有的模块后,在工作区的父模块中点击一下 可将左侧的模块作为子模块添加进去 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0124/214508_f7266bf7_8607408.png "QQ截图20210124214450.png") +如图,我在module1中添加了两个add作为子模块,软件自动命名为add1和add2 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0124/214851_14585215_8607408.png "QQ截图20210124214547.png") +2. 子模块之间连线 +可在菜单栏的“连线”按钮进行两个子模块的端口之间的连线 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0124/214919_efffb479_8607408.png "QQ截图20210124214839.png") + **注意:连线只能从output开始,input结束** 。另有对 **inout类型** 的补充见 **第4点** +此时,数据线的名称为: **输出模块_输出端口** 如图有两条线,分别是从 **add1的CO、add2的S** 输出 +所以 信号线的名称分别为 **add1_CO** 、 **add2_S** +![输入图片说明](https://images.gitee.com/uploads/images/2021/0124/215153_4d5c3687_8607408.png "QQ截图20210124215034.png") +3. 生成代码 +下面是软件生成代码 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0124/215715_bd27271d_8607408.png "QQ截图20210124215647.png") +4. 补充 + **inout** 类型的端口 既可以作为 **输出** 也可以作为 **输入** +即对于 **inout** 来说 有: + **inout** -------》input +output------》 **inout** + **inout** -------》 **inout** +### ------------006------------ +New Constrain功能 +点击New Constrain后,弹出一跟New Module **功能结构** 一样的对话框 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0125/191954_ddb6349a_8607408.png "QQ截图20210125191941.png") +注意,实际上是和New Module的对话框区分开的,分别在菜单栏的New下 +此时,工作区内生成的图型框与与New Module生成的几乎一致,都是由各种端口围绕在矩形周围,为与Module矩形区分,将其称为Constrain矩形 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0125/192237_1724e7ec_8607408.png "QQ截图20210125192118.png") +与 **005** 中生成子模块类似,在左侧选择已有的模块后,点击工作区的矩形图,将会把选中的Module置于Constrain矩形中。 +用户可通过上面的工具栏中的 **连线** 工具 将Constrain的端口和Module端口连接,输入只能到输入,输出只能到输出。 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0125/192602_93919f28_8607408.png "QQ截图20210125192546.png") +然后将会自动生成 **约束文件** 的代码 如下(还暂未具体研究规则) +![输入图片说明](https://images.gitee.com/uploads/images/2021/0125/192713_9c06abe4_8607408.png "QQ截图20210125192658.png") +constrain保存后生成.const文件;生成的代码保存为.qsf文件。 diff --git a/pics/QQ截图20210123232228.png b/pics/QQ截图20210123232228.png new file mode 100644 index 0000000000000000000000000000000000000000..13d9c58fe3ad78c0b7be7c3df3b5c10901109a23 GIT binary patch literal 9500 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 Xi6-i=VC^7IJs~N|s>#$ynFs$rkUl_z literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123232905.png b/pics/QQ截图20210123232905.png new file mode 100644 index 0000000000000000000000000000000000000000..b9407beedf26f04aae5be812b5dac38990c2892e GIT binary patch literal 9700 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 c9`JEh4Z=l}o! literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123233154.png b/pics/QQ截图20210123233154.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8a9eb9af3236208eebe33e44489950408e5097 GIT binary patch literal 8294 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 literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123233330.png b/pics/QQ截图20210123233330.png new file mode 100644 index 0000000000000000000000000000000000000000..5a84cab03c361c652fae0bced315d5b27bb7cda2 GIT binary patch literal 2805 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 Hu0mjf=iqW3 literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123233336.png b/pics/QQ截图20210123233336.png new file mode 100644 index 0000000000000000000000000000000000000000..c4385fa550d9ad0e9542256770f457bd48310ad2 GIT binary patch literal 2763 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 RMOFX+002ovPDHLkV1n;RCuaZv literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123234037.png b/pics/QQ截图20210123234037.png new file mode 100644 index 0000000000000000000000000000000000000000..a57fe0efb23f3b15496f51ba7ed86d1c255d01a7 GIT binary patch literal 7545 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 literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123234621.png b/pics/QQ截图20210123234621.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9974b8c1909ceeaaa09497ced4e13b96387758 GIT binary patch literal 1210 zcmV;r1V#IaP)P03efu68Yp13PaM(XzzY9udug zkxGN5k^#%I#LYknHnfTe2KR2|psAU#I}?sjt_H7Nl_%_H7M!>7>yLYI$_MCnPqB?X zY%Z&4Cp|8D^2S^vkf0Q^;@-wl6bZamBbGI&A_MT#1rIG%6RrHFn#dwr@CLRW&`&SY z#502E_xMfi^&zsChI*H^v_{NYo|HE^=-n>5dhYHq`3Jm7ZbURAp8IPAW33ZN3s@3& z7nfde@NJnF$QV{IYuB?bY_lnH0TD3tI{c7B!jr{TBuTn%MYf4WxN2iaWO>0)eDJ zw`!O__Ge=iT95)<;IiLrJVIO7-iIoteyQLe>{Se^2E5jOm~CW>Q2aP>d1(I9F!fF2K2ueKM;7A;_wx7@j^5c=PS?-J6I^z#7sVHyCH2wkSLb?Ji`^i zKtrV>QvOC*PW0<%%XIw_pj3#53Rh$SQE3oHnJ{aaVYv@w@pBKK7zt=X|M~Rc;=FV_ z6PIe$U}koXf@d%Gc=9f(<^Zzp3HonR%>T{YI#wSFCm*1>Af8t?2?RvNcU}1L*5qKSVP*%RTy<(OY6Okc)nzWrwn6t zewbDGY-o8q8czv^u0XGMpvJea&tP_t({Z{D{Jgo0)Ta1bF5}=-2jc)u>e;}=JyWN}~6H1rJwy^kGIviwV;b6?Oy@!wxPEDeZ=i-knQKtM!bARr>) YA5~Q7TBJC~8~^|S07*qoM6N<$g1QSVga7~l literal 0 HcmV?d00001 diff --git a/pics/QQ截图20210123234626.png b/pics/QQ截图20210123234626.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce31a275337ed5451f480e3c3a041cea9102cc8 GIT binary patch literal 1548 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 literal 0 HcmV?d00001 diff --git a/pics/icon/矩形.png b/pics/icon/矩形.png new file mode 100644 index 0000000000000000000000000000000000000000..828bf6a2fbb3fa44b9d9d51d89d5f9f0f25b7f53 GIT binary patch literal 1940 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 Aj{pDw literal 0 HcmV?d00001 diff --git a/pics/icon/长方形(inout).png b/pics/icon/长方形(inout).png new file mode 100644 index 0000000000000000000000000000000000000000..575fc55443c1483c58205e218decb8dea3ebc47b GIT binary patch literal 1935 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFtFi#i9kczmsS2pI#go&_T zR82O0V8-(NNZ8|PcX%0(nO$k)F4)yjqyfWwUjhL+>)=NcGx zFtQzDV^OfND`8_fz-u62roiy<<3eKvhP;Nx4UCK&{rqzo84H+sT6j4eDr#Qva5PAd zT0w#y%;G1~Bi@b1~a zzyAM^A3qcsu5urk3yhzaKM!69#>QW!56gj6Ro#bDW~PAs41Y42nI_DWuesa6a7CY? z{#FCSlIQI4<_Zj7xev@A)ixR=qp5^y8Rt5~pO000|E=;qeEz_M#{KipKd;~aX%8=> zQ({BoVn#*_uFrEDRhgMKY*7tkbipmC<0Z5j{9flIR@BrK!^8WtPemy9q{VDQdP xN_>#vz|eQ7COzR~1B1@m&el-_s2c|MjJ`L`Y~N|7J_c5_44$rjF6*2UngDyv-E{x} literal 0 HcmV?d00001 diff --git a/pics/矩形.png b/pics/矩形.png new file mode 100644 index 0000000000000000000000000000000000000000..828bf6a2fbb3fa44b9d9d51d89d5f9f0f25b7f53 GIT binary patch literal 1940 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFtXipc%kczms*Ejmg1WL4C z{Jw}chK29s%EOb4-E$5FamZS@O<2QS;Jb`TDZ5jSlhNtc0Sl?xbgdcH|5mS_X=%g4 zk;0m0w(|iC2M_ZC7M4RyYzj3s7da&uWEBL&3>Y3h?)E#t@PeUnLjxm+e0&KLn*%#X z3oDPqj~|PK4H&E(6m$|84jmVt+rW5%ktvapS-@`J3l^RRJ^>DHiG~j!UDXp9N*Wv@ z4luOz>sv80FJK-hD;~UIcq7+$|Jj`I4i14E`wmFG{`oZR|L5dMpP4^Y?3tf@FVB7# z3kyfj)_H#Ie_I(Zurj$ep65Fd_4@tk#Q#e()QlU~a=($Q`#Z0==KmM*2F4pztb6Js z4=_wwuU{Q^fZ>TY!vbJXoVq^URzHE^lPE&~F!Y|jK0Qy|fZ-<>g9b1(K7CC+52R{X z8KwXO@aL~h&w_eLN#WDkF2izI|^h8JQ=nXK2{ez^D-)|7}kL z +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'mainwindow.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.12.1. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_MainWindow_t { + QByteArrayData data[10]; + char stringdata0[205]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = { + { +QT_MOC_LITERAL(0, 0, 10), // "MainWindow" +QT_MOC_LITERAL(1, 11, 22), // "on_actionNew_triggered" +QT_MOC_LITERAL(2, 34, 0), // "" +QT_MOC_LITERAL(3, 35, 13), // "recv_new_file" +QT_MOC_LITERAL(4, 49, 4), // "name" +QT_MOC_LITERAL(5, 54, 30), // "on_pushButton_new_file_clicked" +QT_MOC_LITERAL(6, 85, 23), // "on_actionExit_triggered" +QT_MOC_LITERAL(7, 109, 29), // "on_actionNew_Module_triggered" +QT_MOC_LITERAL(8, 139, 32), // "on_actionNew_Constrain_triggered" +QT_MOC_LITERAL(9, 172, 32) // "on_actionNew_Testbench_triggered" + + }, + "MainWindow\0on_actionNew_triggered\0\0" + "recv_new_file\0name\0on_pushButton_new_file_clicked\0" + "on_actionExit_triggered\0" + "on_actionNew_Module_triggered\0" + "on_actionNew_Constrain_triggered\0" + "on_actionNew_Testbench_triggered" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_MainWindow[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 7, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: name, argc, parameters, tag, flags + 1, 0, 49, 2, 0x08 /* Private */, + 3, 1, 50, 2, 0x08 /* Private */, + 5, 0, 53, 2, 0x08 /* Private */, + 6, 0, 54, 2, 0x08 /* Private */, + 7, 0, 55, 2, 0x08 /* Private */, + 8, 0, 56, 2, 0x08 /* Private */, + 9, 0, 57, 2, 0x08 /* Private */, + + // slots: parameters + QMetaType::Void, + QMetaType::Void, QMetaType::QString, 4, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + QMetaType::Void, + + 0 // eod +}; + +void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->on_actionNew_triggered(); break; + case 1: _t->recv_new_file((*reinterpret_cast< QString(*)>(_a[1]))); break; + case 2: _t->on_pushButton_new_file_clicked(); break; + case 3: _t->on_actionExit_triggered(); break; + case 4: _t->on_actionNew_Module_triggered(); break; + case 5: _t->on_actionNew_Constrain_triggered(); break; + case 6: _t->on_actionNew_Testbench_triggered(); break; + default: ; + } + } +} + +QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = { { + &QMainWindow::staticMetaObject, + qt_meta_stringdata_MainWindow.data, + qt_meta_data_MainWindow, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *MainWindow::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *MainWindow::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0)) + return static_cast(this); + return QMainWindow::qt_metacast(_clname); +} + +int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QMainWindow::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 7) + qt_static_metacall(this, _c, _id, _a); + _id -= 7; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 7) + *reinterpret_cast(_a[0]) = -1; + _id -= 7; + } + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_constrain.cpp b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_constrain.cpp new file mode 100644 index 0000000..a34e573 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_constrain.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'new_constrain.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../eda_qt/new_constrain.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'new_constrain.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.12.1. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_new_constrain_t { + QByteArrayData data[3]; + char stringdata0[37]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_new_constrain_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_new_constrain_t qt_meta_stringdata_new_constrain = { + { +QT_MOC_LITERAL(0, 0, 13), // "new_constrain" +QT_MOC_LITERAL(1, 14, 21), // "on_pushButton_clicked" +QT_MOC_LITERAL(2, 36, 0) // "" + + }, + "new_constrain\0on_pushButton_clicked\0" + "" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_new_constrain[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 1, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: name, argc, parameters, tag, flags + 1, 0, 19, 2, 0x08 /* Private */, + + // slots: parameters + QMetaType::Void, + + 0 // eod +}; + +void new_constrain::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->on_pushButton_clicked(); break; + default: ; + } + } + Q_UNUSED(_a); +} + +QT_INIT_METAOBJECT const QMetaObject new_constrain::staticMetaObject = { { + &QDialog::staticMetaObject, + qt_meta_stringdata_new_constrain.data, + qt_meta_data_new_constrain, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *new_constrain::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *new_constrain::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_new_constrain.stringdata0)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int new_constrain::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = -1; + _id -= 1; + } + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_file.cpp b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_file.cpp new file mode 100644 index 0000000..f51df81 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_file.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'new_file.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../eda_qt/new_file.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'new_file.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.12.1. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_new_file_t { + QByteArrayData data[6]; + char stringdata0[79]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_new_file_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_new_file_t qt_meta_stringdata_new_file = { + { +QT_MOC_LITERAL(0, 0, 8), // "new_file" +QT_MOC_LITERAL(1, 9, 9), // "send_data" +QT_MOC_LITERAL(2, 19, 0), // "" +QT_MOC_LITERAL(3, 20, 4), // "name" +QT_MOC_LITERAL(4, 25, 28), // "on_pushButton_cancel_clicked" +QT_MOC_LITERAL(5, 54, 24) // "on_pushButton_ok_clicked" + + }, + "new_file\0send_data\0\0name\0" + "on_pushButton_cancel_clicked\0" + "on_pushButton_ok_clicked" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_new_file[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 3, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 1, // signalCount + + // signals: name, argc, parameters, tag, flags + 1, 1, 29, 2, 0x06 /* Public */, + + // slots: name, argc, parameters, tag, flags + 4, 0, 32, 2, 0x08 /* Private */, + 5, 0, 33, 2, 0x08 /* Private */, + + // signals: parameters + QMetaType::Void, QMetaType::QString, 3, + + // slots: parameters + QMetaType::Void, + QMetaType::Void, + + 0 // eod +}; + +void new_file::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->send_data((*reinterpret_cast< QString(*)>(_a[1]))); break; + case 1: _t->on_pushButton_cancel_clicked(); break; + case 2: _t->on_pushButton_ok_clicked(); break; + default: ; + } + } else if (_c == QMetaObject::IndexOfMethod) { + int *result = reinterpret_cast(_a[0]); + { + using _t = void (new_file::*)(QString ); + if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&new_file::send_data)) { + *result = 0; + return; + } + } + } +} + +QT_INIT_METAOBJECT const QMetaObject new_file::staticMetaObject = { { + &QDialog::staticMetaObject, + qt_meta_stringdata_new_file.data, + qt_meta_data_new_file, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *new_file::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *new_file::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_new_file.stringdata0)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int new_file::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 3) + qt_static_metacall(this, _c, _id, _a); + _id -= 3; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 3) + *reinterpret_cast(_a[0]) = -1; + _id -= 3; + } + return _id; +} + +// SIGNAL 0 +void new_file::send_data(QString _t1) +{ + void *_a[] = { nullptr, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_testbench.cpp b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_testbench.cpp new file mode 100644 index 0000000..5ec3e6a --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_new_testbench.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'new_testbench.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../eda_qt/new_testbench.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'new_testbench.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.12.1. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_new_testbench_t { + QByteArrayData data[3]; + char stringdata0[37]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_new_testbench_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_new_testbench_t qt_meta_stringdata_new_testbench = { + { +QT_MOC_LITERAL(0, 0, 13), // "new_testbench" +QT_MOC_LITERAL(1, 14, 21), // "on_pushButton_clicked" +QT_MOC_LITERAL(2, 36, 0) // "" + + }, + "new_testbench\0on_pushButton_clicked\0" + "" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_new_testbench[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 1, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: name, argc, parameters, tag, flags + 1, 0, 19, 2, 0x08 /* Private */, + + // slots: parameters + QMetaType::Void, + + 0 // eod +}; + +void new_testbench::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + switch (_id) { + case 0: _t->on_pushButton_clicked(); break; + default: ; + } + } + Q_UNUSED(_a); +} + +QT_INIT_METAOBJECT const QMetaObject new_testbench::staticMetaObject = { { + &QDialog::staticMetaObject, + qt_meta_stringdata_new_testbench.data, + qt_meta_data_new_testbench, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *new_testbench::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *new_testbench::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_new_testbench.stringdata0)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int new_testbench::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = -1; + _id -= 1; + } + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_predefs.h b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_predefs.h new file mode 100644 index 0000000..4a0f7a7 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/debug/moc_predefs.h @@ -0,0 +1,394 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __FLT32X_MAX_EXP__ 1024 +#define __cpp_attributes 200809 +#define __UINT_LEAST16_MAX__ 0xffff +#define __ATOMIC_ACQUIRE 2 +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define _WIN32 1 +#define __INTMAX_C(c) c ## LL +#define __CHAR_BIT__ 8 +#define __UINT8_MAX__ 0xff +#define _WIN64 1 +#define __WINT_MAX__ 0xffff +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 200410 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __SIZE_MAX__ 0xffffffffffffffffULL +#define __WCHAR_MAX__ 0xffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304 +#define __FLT64_DECIMAL_DIG__ 17 +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __x86_64 1 +#define __cpp_variadic_templates 200704 +#define __UINT_FAST64_MAX__ 0xffffffffffffffffULL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __GNUC_PATCHLEVEL__ 0 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __has_include(STR) __has_include__(STR) +#define _stdcall __attribute__((__stdcall__)) +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __INT_LEAST8_WIDTH__ 8 +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long long unsigned int +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __LDBL_MAX_EXP__ 16384 +#define __FLT128_MIN_EXP__ (-16381) +#define __WINT_MIN__ 0 +#define __FLT128_MIN_10_EXP__ (-4931) +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ 0 +#define __INT64_C(c) c ## LL +#define __DBL_DIG__ 15 +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define __FLT64X_MANT_DIG__ 64 +#define __SIZEOF_INT__ 4 +#define __SIZEOF_POINTER__ 8 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __WIN32 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __WIN64 1 +#define __FLT32_DIG__ 6 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DEC32_MAX__ 9.999999E96DF +#define __cpp_threadsafe_static_init 200806 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __MINGW32__ 1 +#define __FLT32X_HAS_INFINITY__ 1 +#define __INT32_MAX__ 0x7fffffff +#define __INT_WIDTH__ 32 +#define __SIZEOF_LONG__ 4 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __DECIMAL_DIG__ 21 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __INTMAX_WIDTH__ 64 +#define __FLT64_MIN_EXP__ (-1021) +#define __has_include_next(STR) __has_include_next__(STR) +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT64_MANT_DIG__ 53 +#define _REENTRANT 1 +#define __GNUC__ 7 +#define _cdecl __attribute__((__cdecl__)) +#define __GXX_RTTI 1 +#define __MMX__ 1 +#define __cpp_delegating_constructors 200604 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __FLT32_HAS_INFINITY__ 1 +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define _thiscall __attribute__((__thiscall__)) +#define __cpp_raw_strings 200710 +#define __INT_FAST32_MAX__ 0x7fffffff +#define __WINNT 1 +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffLL +#define __WINNT__ 1 +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ short int +#define _fastcall __attribute__((__fastcall__)) +#define __LDBL_HAS_DENORM__ 1 +#define __cplusplus 201103L +#define __cpp_ref_qualifiers 200710 +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610 +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 16 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __WIN32__ 1 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffLL +#define __amd64 1 +#define __tune_core2__ 1 +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __GNUG__ 7 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __cpp_rvalue_reference 200610 +#define __cpp_nsdmi 200809 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 2 +#define __LONG_LONG_WIDTH__ 64 +#define __cpp_initializer_lists 200806 +#define __FLT32_MAX_EXP__ 128 +#define __cpp_hex_float 201603 +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define __GXX_ABI_VERSION 1011 +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT_MIN_EXP__ (-125) +#define __cpp_lambdas 200907 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define __INT_FAST64_TYPE__ long long int +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __DECIMAL_BID_FORMAT__ 1 +#define __GXX_TYPEINFO_EQUALITY_INLINE 0 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __DBL_HAS_DENORM__ 1 +#define __cdecl __attribute__((__cdecl__)) +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __NO_INLINE__ 1 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "7.3.0" +#define __UINT64_C(c) c ## ULL +#define __cpp_unicode_characters 200704 +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __FLT32_MANT_DIG__ 24 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __FLT128_HAS_DENORM__ 1 +#define __FLT128_DIG__ 33 +#define __SCHAR_WIDTH__ 8 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __FLT32_MAX_10_EXP__ 38 +#define __INT_FAST32_TYPE__ int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __FLT64X_HAS_INFINITY__ 1 +#define __INT16_MAX__ 0x7fff +#define __cpp_rtti 199711 +#define __SIZE_TYPE__ long long unsigned int +#define __UINT64_MAX__ 0xffffffffffffffffULL +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## ULL +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __SEH__ 1 +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT32X_MANT_DIG__ 53 +#define __x86_64__ 1 +#define __FLT32X_MIN_EXP__ (-1021) +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __MSVCRT__ 1 +#define __INT_FAST16_MAX__ 0x7fff +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffU +#define __UINT_LEAST64_TYPE__ long long unsigned int +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __LONG_MAX__ 0x7fffffffL +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __cpp_unicode_literals 200710 +#define __UINT_FAST16_TYPE__ short unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __INT_FAST32_WIDTH__ 32 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __DEC64_MANT_DIG__ 16 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __SEG_GS 1 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __INT_LEAST64_TYPE__ long long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffLL +#define __GXX_MERGED_TYPEINFO_NAMES 0 +#define __cpp_range_based_for 200907 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __stdcall __attribute__((__stdcall__)) +#define __FLT32_MIN_10_EXP__ (-37) +#define __SSE2__ 1 +#define __EXCEPTIONS 1 +#define __LDBL_MANT_DIG__ 64 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __INTPTR_TYPE__ long long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ short unsigned int +#define __SIZEOF_FLOAT__ 4 +#define __pic__ 1 +#define __UINTPTR_MAX__ 0xffffffffffffffffULL +#define __INT_FAST64_WIDTH__ 64 +#define __DEC64_MIN_EXP__ (-382) +#define __cpp_decltype 200707 +#define __FLT32_DECIMAL_DIG__ 9 +#define __INT_FAST64_MAX__ 0x7fffffffffffffffLL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_DIG__ 6 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long long unsigned int +#define __INT_MAX__ 0x7fffffff +#define __amd64__ 1 +#define WIN32 1 +#define __nocona 1 +#define __code_model_medium__ 1 +#define __INT64_TYPE__ long long int +#define __FLT_MAX_EXP__ 128 +#define WIN64 1 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define __cpp_inheriting_constructors 201511 +#define __SIZEOF_FLOAT128__ 16 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ short unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __WINT_WIDTH__ 16 +#define __INT_LEAST8_MAX__ 0x7f +#define __FLT32X_MAX_10_EXP__ 308 +#define __SIZEOF_INT128__ 16 +#define __WCHAR_UNSIGNED__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __thiscall __attribute__((__thiscall__)) +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __INT_LEAST32_TYPE__ int +#define __SIZEOF_WCHAR_T__ 2 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INT_FAST8_TYPE__ signed char +#define __fastcall __attribute__((__fastcall__)) +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __MINGW64__ 1 +#define __cpp_runtime_arrays 198712 +#define __UINT64_TYPE__ long long unsigned int +#define __UINT32_C(c) c ## U +#define __INTMAX_MAX__ 0x7fffffffffffffffLL +#define __cpp_alias_templates 200704 +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define WINNT 1 +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 32 +#define __PIC__ 1 +#define __UINT_FAST32_TYPE__ unsigned int +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __cpp_constexpr 200704 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711 +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long long int +#define _INTEGRAL_MAX_BITS 64 +#define __DEC128_MAX_EXP__ 6145 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __nocona__ 1 +#define __GNUC_MINOR__ 3 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __INT_FAST16_WIDTH__ 16 +#define __UINTMAX_MAX__ 0xffffffffffffffffULL +#define __DEC32_MANT_DIG__ 7 +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __FLT32X_DIG__ 15 +#define __PTRDIFF_TYPE__ long long int +#define __ATOMIC_SEQ_CST 5 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 +#define __UINT32_TYPE__ unsigned int +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809 +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __LDBL_DIG__ 18 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffff +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __INT_LEAST64_WIDTH__ 64 +#define __SSE3__ 1 +#define __UINT_FAST8_TYPE__ unsigned char +#define __WIN64__ 1 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 +#define __declspec(x) __attribute__((x)) diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Debug b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Debug new file mode 100644 index 0000000..f1e3c07 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Debug @@ -0,0 +1,13 @@ +debug/main.o +debug/mainwindow.o +debug/new_file.o +debug/new_constrain.o +debug/module.o +debug/constrain.o +debug/port.o +debug/testbench.o +debug/new_testbench.o +debug/moc_mainwindow.o +debug/moc_new_file.o +debug/moc_new_constrain.o +debug/moc_new_testbench.o diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Release b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Release new file mode 100644 index 0000000..54666eb --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/object_script.eda_qt.Release @@ -0,0 +1,13 @@ +release/main.o +release/mainwindow.o +release/new_file.o +release/new_constrain.o +release/module.o +release/constrain.o +release/port.o +release/testbench.o +release/new_testbench.o +release/moc_mainwindow.o +release/moc_new_file.o +release/moc_new_constrain.o +release/moc_new_testbench.o diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_mainwindow.h b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_mainwindow.h new file mode 100644 index 0000000..dc30ca1 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_mainwindow.h @@ -0,0 +1,318 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 5.12.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QAction *actionOpen; + QAction *actionSave; + QAction *actionSave_As; + QAction *actionPrint; + QAction *actionExit; + QAction *actionNew_Module; + QAction *actionNew_Constrain; + QAction *actionNew_Testbench; + QWidget *centralwidget; + QVBoxLayout *verticalLayout_2; + QVBoxLayout *verticalLayout; + QHBoxLayout *horizontalLayout_top; + QPushButton *pushButton_new_file; + QPushButton *pushButton_17; + QPushButton *pushButton_4; + QPushButton *pushButton_3; + QPushButton *pushButton_2; + QPushButton *pushButton; + QPushButton *pushButton_5; + QPushButton *pushButton_6; + QSpacerItem *horizontalSpacer; + QHBoxLayout *horizontalLayout_body; + QToolBox *toolBox_left; + QWidget *page; + QWidget *toolbox_system; + QListView *listView_left; + QTabWidget *tabWidget; + QWidget *tab; + QWidget *tab_widget; + QToolBox *toolBox_right; + QWidget *toolbox_search; + QWidget *toolbox_property; + QHBoxLayout *horizontalLayout_bottom; + QTextEdit *textEdit; + QMenuBar *menubar; + QMenu *menuEdit; + QMenu *menuFile; + QMenu *menuNew; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName(QString::fromUtf8("MainWindow")); + MainWindow->resize(1056, 672); + actionOpen = new QAction(MainWindow); + actionOpen->setObjectName(QString::fromUtf8("actionOpen")); + actionSave = new QAction(MainWindow); + actionSave->setObjectName(QString::fromUtf8("actionSave")); + actionSave_As = new QAction(MainWindow); + actionSave_As->setObjectName(QString::fromUtf8("actionSave_As")); + actionPrint = new QAction(MainWindow); + actionPrint->setObjectName(QString::fromUtf8("actionPrint")); + actionExit = new QAction(MainWindow); + actionExit->setObjectName(QString::fromUtf8("actionExit")); + actionNew_Module = new QAction(MainWindow); + actionNew_Module->setObjectName(QString::fromUtf8("actionNew_Module")); + actionNew_Constrain = new QAction(MainWindow); + actionNew_Constrain->setObjectName(QString::fromUtf8("actionNew_Constrain")); + actionNew_Testbench = new QAction(MainWindow); + actionNew_Testbench->setObjectName(QString::fromUtf8("actionNew_Testbench")); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName(QString::fromUtf8("centralwidget")); + QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(centralwidget->sizePolicy().hasHeightForWidth()); + centralwidget->setSizePolicy(sizePolicy); + centralwidget->setContextMenuPolicy(Qt::DefaultContextMenu); + centralwidget->setLayoutDirection(Qt::LeftToRight); + verticalLayout_2 = new QVBoxLayout(centralwidget); + verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); + verticalLayout = new QVBoxLayout(); + verticalLayout->setSpacing(2); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + verticalLayout->setSizeConstraint(QLayout::SetMaximumSize); + horizontalLayout_top = new QHBoxLayout(); + horizontalLayout_top->setObjectName(QString::fromUtf8("horizontalLayout_top")); + horizontalLayout_top->setSizeConstraint(QLayout::SetMinimumSize); + pushButton_new_file = new QPushButton(centralwidget); + pushButton_new_file->setObjectName(QString::fromUtf8("pushButton_new_file")); + + horizontalLayout_top->addWidget(pushButton_new_file); + + pushButton_17 = new QPushButton(centralwidget); + pushButton_17->setObjectName(QString::fromUtf8("pushButton_17")); + + horizontalLayout_top->addWidget(pushButton_17); + + pushButton_4 = new QPushButton(centralwidget); + pushButton_4->setObjectName(QString::fromUtf8("pushButton_4")); + + horizontalLayout_top->addWidget(pushButton_4); + + pushButton_3 = new QPushButton(centralwidget); + pushButton_3->setObjectName(QString::fromUtf8("pushButton_3")); + + horizontalLayout_top->addWidget(pushButton_3); + + pushButton_2 = new QPushButton(centralwidget); + pushButton_2->setObjectName(QString::fromUtf8("pushButton_2")); + + horizontalLayout_top->addWidget(pushButton_2); + + pushButton = new QPushButton(centralwidget); + pushButton->setObjectName(QString::fromUtf8("pushButton")); + + horizontalLayout_top->addWidget(pushButton); + + pushButton_5 = new QPushButton(centralwidget); + pushButton_5->setObjectName(QString::fromUtf8("pushButton_5")); + + horizontalLayout_top->addWidget(pushButton_5); + + pushButton_6 = new QPushButton(centralwidget); + pushButton_6->setObjectName(QString::fromUtf8("pushButton_6")); + + horizontalLayout_top->addWidget(pushButton_6); + + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + horizontalLayout_top->addItem(horizontalSpacer); + + + verticalLayout->addLayout(horizontalLayout_top); + + horizontalLayout_body = new QHBoxLayout(); + horizontalLayout_body->setObjectName(QString::fromUtf8("horizontalLayout_body")); + toolBox_left = new QToolBox(centralwidget); + toolBox_left->setObjectName(QString::fromUtf8("toolBox_left")); + toolBox_left->setEnabled(true); + QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Preferred); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(toolBox_left->sizePolicy().hasHeightForWidth()); + toolBox_left->setSizePolicy(sizePolicy1); + toolBox_left->setMinimumSize(QSize(200, 0)); + toolBox_left->setSizeIncrement(QSize(0, 0)); + page = new QWidget(); + page->setObjectName(QString::fromUtf8("page")); + page->setGeometry(QRect(0, 0, 200, 330)); + toolBox_left->addItem(page, QString::fromUtf8("Page 1")); + toolbox_system = new QWidget(); + toolbox_system->setObjectName(QString::fromUtf8("toolbox_system")); + toolbox_system->setGeometry(QRect(0, 0, 200, 330)); + listView_left = new QListView(toolbox_system); + listView_left->setObjectName(QString::fromUtf8("listView_left")); + listView_left->setGeometry(QRect(0, 0, 200, 16777215)); + QSizePolicy sizePolicy2(QSizePolicy::Preferred, QSizePolicy::Preferred); + sizePolicy2.setHorizontalStretch(0); + sizePolicy2.setVerticalStretch(0); + sizePolicy2.setHeightForWidth(listView_left->sizePolicy().hasHeightForWidth()); + listView_left->setSizePolicy(sizePolicy2); + listView_left->setMinimumSize(QSize(200, 0)); + listView_left->setEditTriggers(QAbstractItemView::NoEditTriggers); + toolBox_left->addItem(toolbox_system, QString::fromUtf8("System")); + + horizontalLayout_body->addWidget(toolBox_left); + + tabWidget = new QTabWidget(centralwidget); + tabWidget->setObjectName(QString::fromUtf8("tabWidget")); + tab = new QWidget(); + tab->setObjectName(QString::fromUtf8("tab")); + tab_widget = new QWidget(tab); + tab_widget->setObjectName(QString::fromUtf8("tab_widget")); + tab_widget->setGeometry(QRect(50, 50, 561, 251)); + tab_widget->setStyleSheet(QString::fromUtf8("")); + tabWidget->addTab(tab, QString()); + + horizontalLayout_body->addWidget(tabWidget); + + toolBox_right = new QToolBox(centralwidget); + toolBox_right->setObjectName(QString::fromUtf8("toolBox_right")); + sizePolicy1.setHeightForWidth(toolBox_right->sizePolicy().hasHeightForWidth()); + toolBox_right->setSizePolicy(sizePolicy1); + toolBox_right->setMinimumSize(QSize(200, 0)); + toolbox_search = new QWidget(); + toolbox_search->setObjectName(QString::fromUtf8("toolbox_search")); + toolbox_search->setGeometry(QRect(0, 0, 200, 330)); + toolBox_right->addItem(toolbox_search, QString::fromUtf8("Search")); + toolbox_property = new QWidget(); + toolbox_property->setObjectName(QString::fromUtf8("toolbox_property")); + toolbox_property->setGeometry(QRect(0, 0, 200, 330)); + toolBox_right->addItem(toolbox_property, QString::fromUtf8("Property")); + + horizontalLayout_body->addWidget(toolBox_right); + + + verticalLayout->addLayout(horizontalLayout_body); + + horizontalLayout_bottom = new QHBoxLayout(); + horizontalLayout_bottom->setObjectName(QString::fromUtf8("horizontalLayout_bottom")); + horizontalLayout_bottom->setSizeConstraint(QLayout::SetDefaultConstraint); + textEdit = new QTextEdit(centralwidget); + textEdit->setObjectName(QString::fromUtf8("textEdit")); + QSizePolicy sizePolicy3(QSizePolicy::Minimum, QSizePolicy::Preferred); + sizePolicy3.setHorizontalStretch(0); + sizePolicy3.setVerticalStretch(0); + sizePolicy3.setHeightForWidth(textEdit->sizePolicy().hasHeightForWidth()); + textEdit->setSizePolicy(sizePolicy3); + + horizontalLayout_bottom->addWidget(textEdit); + + + verticalLayout->addLayout(horizontalLayout_bottom); + + + verticalLayout_2->addLayout(verticalLayout); + + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName(QString::fromUtf8("menubar")); + menubar->setGeometry(QRect(0, 0, 1056, 23)); + menuEdit = new QMenu(menubar); + menuEdit->setObjectName(QString::fromUtf8("menuEdit")); + menuFile = new QMenu(menubar); + menuFile->setObjectName(QString::fromUtf8("menuFile")); + menuNew = new QMenu(menuFile); + menuNew->setObjectName(QString::fromUtf8("menuNew")); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName(QString::fromUtf8("statusbar")); + MainWindow->setStatusBar(statusbar); + + menubar->addAction(menuFile->menuAction()); + menubar->addAction(menuEdit->menuAction()); + menuFile->addAction(menuNew->menuAction()); + menuFile->addAction(actionOpen); + menuFile->addSeparator(); + menuFile->addAction(actionSave); + menuFile->addAction(actionSave_As); + menuFile->addSeparator(); + menuFile->addAction(actionExit); + menuNew->addAction(actionNew_Module); + menuNew->addAction(actionNew_Constrain); + menuNew->addAction(actionNew_Testbench); + + retranslateUi(MainWindow); + + toolBox_left->setCurrentIndex(1); + tabWidget->setCurrentIndex(0); + toolBox_right->setCurrentIndex(1); + + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", nullptr)); + actionOpen->setText(QApplication::translate("MainWindow", "Open", nullptr)); + actionSave->setText(QApplication::translate("MainWindow", "Save", nullptr)); + actionSave_As->setText(QApplication::translate("MainWindow", "Save As", nullptr)); + actionPrint->setText(QApplication::translate("MainWindow", "Print", nullptr)); + actionExit->setText(QApplication::translate("MainWindow", "Exit", nullptr)); + actionNew_Module->setText(QApplication::translate("MainWindow", "New Module", nullptr)); + actionNew_Constrain->setText(QApplication::translate("MainWindow", "New Constrain", nullptr)); + actionNew_Testbench->setText(QApplication::translate("MainWindow", "New Testbench", nullptr)); + pushButton_new_file->setText(QApplication::translate("MainWindow", "New File", nullptr)); + pushButton_17->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + pushButton_4->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + pushButton_3->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + pushButton_2->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + pushButton->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + pushButton_5->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + pushButton_6->setText(QApplication::translate("MainWindow", "PushButton", nullptr)); + toolBox_left->setItemText(toolBox_left->indexOf(page), QApplication::translate("MainWindow", "Page 1", nullptr)); + toolBox_left->setItemText(toolBox_left->indexOf(toolbox_system), QApplication::translate("MainWindow", "System", nullptr)); + tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("MainWindow", "Tab 1", nullptr)); + toolBox_right->setItemText(toolBox_right->indexOf(toolbox_search), QApplication::translate("MainWindow", "Search", nullptr)); + toolBox_right->setItemText(toolBox_right->indexOf(toolbox_property), QApplication::translate("MainWindow", "Property", nullptr)); + menuEdit->setTitle(QApplication::translate("MainWindow", "Edit", nullptr)); + menuFile->setTitle(QApplication::translate("MainWindow", "File", nullptr)); + menuNew->setTitle(QApplication::translate("MainWindow", "New", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_constrain.h b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_constrain.h new file mode 100644 index 0000000..530d6df --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_constrain.h @@ -0,0 +1,173 @@ +/******************************************************************************** +** Form generated from reading UI file 'new_constrain.ui' +** +** Created by: Qt User Interface Compiler version 5.12.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_NEW_CONSTRAIN_H +#define UI_NEW_CONSTRAIN_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_new_constrain +{ +public: + QWidget *horizontalLayoutWidget_3; + QHBoxLayout *horizontalLayout_6; + QPushButton *pushButton_ok; + QSpacerItem *horizontalSpacer; + QPushButton *pushButton_cancel; + QLabel *label_2; + QWidget *verticalLayoutWidget; + QVBoxLayout *verticalLayout; + QHBoxLayout *horizontalLayout_5; + QLabel *label_3; + QLineEdit *lineEdit_module_name; + QHBoxLayout *horizontalLayout_4; + QLabel *label_4; + QLineEdit *lineEdit_input_1; + QHBoxLayout *horizontalLayout_2; + QLabel *label_8; + QLineEdit *lineEdit_out; + QHBoxLayout *horizontalLayout; + QLabel *label; + QLineEdit *lineEdit_input_2; + + void setupUi(QDialog *new_constrain) + { + if (new_constrain->objectName().isEmpty()) + new_constrain->setObjectName(QString::fromUtf8("new_constrain")); + new_constrain->resize(447, 513); + horizontalLayoutWidget_3 = new QWidget(new_constrain); + horizontalLayoutWidget_3->setObjectName(QString::fromUtf8("horizontalLayoutWidget_3")); + horizontalLayoutWidget_3->setGeometry(QRect(50, 440, 341, 41)); + horizontalLayout_6 = new QHBoxLayout(horizontalLayoutWidget_3); + horizontalLayout_6->setObjectName(QString::fromUtf8("horizontalLayout_6")); + horizontalLayout_6->setContentsMargins(0, 0, 0, 0); + pushButton_ok = new QPushButton(horizontalLayoutWidget_3); + pushButton_ok->setObjectName(QString::fromUtf8("pushButton_ok")); + + horizontalLayout_6->addWidget(pushButton_ok); + + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + horizontalLayout_6->addItem(horizontalSpacer); + + pushButton_cancel = new QPushButton(horizontalLayoutWidget_3); + pushButton_cancel->setObjectName(QString::fromUtf8("pushButton_cancel")); + + horizontalLayout_6->addWidget(pushButton_cancel); + + label_2 = new QLabel(new_constrain); + label_2->setObjectName(QString::fromUtf8("label_2")); + label_2->setGeometry(QRect(150, 10, 171, 61)); + QFont font; + font.setPointSize(18); + label_2->setFont(font); + verticalLayoutWidget = new QWidget(new_constrain); + verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget")); + verticalLayoutWidget->setGeometry(QRect(50, 80, 341, 371)); + verticalLayout = new QVBoxLayout(verticalLayoutWidget); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + verticalLayout->setSizeConstraint(QLayout::SetDefaultConstraint); + verticalLayout->setContentsMargins(0, 0, 0, 0); + horizontalLayout_5 = new QHBoxLayout(); + horizontalLayout_5->setObjectName(QString::fromUtf8("horizontalLayout_5")); + label_3 = new QLabel(verticalLayoutWidget); + label_3->setObjectName(QString::fromUtf8("label_3")); + + horizontalLayout_5->addWidget(label_3); + + lineEdit_module_name = new QLineEdit(verticalLayoutWidget); + lineEdit_module_name->setObjectName(QString::fromUtf8("lineEdit_module_name")); + + horizontalLayout_5->addWidget(lineEdit_module_name); + + + verticalLayout->addLayout(horizontalLayout_5); + + horizontalLayout_4 = new QHBoxLayout(); + horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4")); + label_4 = new QLabel(verticalLayoutWidget); + label_4->setObjectName(QString::fromUtf8("label_4")); + + horizontalLayout_4->addWidget(label_4); + + lineEdit_input_1 = new QLineEdit(verticalLayoutWidget); + lineEdit_input_1->setObjectName(QString::fromUtf8("lineEdit_input_1")); + + horizontalLayout_4->addWidget(lineEdit_input_1); + + + verticalLayout->addLayout(horizontalLayout_4); + + horizontalLayout_2 = new QHBoxLayout(); + horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); + label_8 = new QLabel(verticalLayoutWidget); + label_8->setObjectName(QString::fromUtf8("label_8")); + + horizontalLayout_2->addWidget(label_8); + + lineEdit_out = new QLineEdit(verticalLayoutWidget); + lineEdit_out->setObjectName(QString::fromUtf8("lineEdit_out")); + + horizontalLayout_2->addWidget(lineEdit_out); + + + verticalLayout->addLayout(horizontalLayout_2); + + horizontalLayout = new QHBoxLayout(); + horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); + label = new QLabel(verticalLayoutWidget); + label->setObjectName(QString::fromUtf8("label")); + + horizontalLayout->addWidget(label); + + lineEdit_input_2 = new QLineEdit(verticalLayoutWidget); + lineEdit_input_2->setObjectName(QString::fromUtf8("lineEdit_input_2")); + + horizontalLayout->addWidget(lineEdit_input_2); + + + verticalLayout->addLayout(horizontalLayout); + + + retranslateUi(new_constrain); + + QMetaObject::connectSlotsByName(new_constrain); + } // setupUi + + void retranslateUi(QDialog *new_constrain) + { + new_constrain->setWindowTitle(QApplication::translate("new_constrain", "Dialog", nullptr)); + pushButton_ok->setText(QApplication::translate("new_constrain", "Ok", nullptr)); + pushButton_cancel->setText(QApplication::translate("new_constrain", "Cancel", nullptr)); + label_2->setText(QApplication::translate("new_constrain", "New Constrian", nullptr)); + label_3->setText(QApplication::translate("new_constrain", "Module Name:", nullptr)); + label_4->setText(QApplication::translate("new_constrain", "Input Ports:", nullptr)); + label_8->setText(QApplication::translate("new_constrain", "Output Ports:", nullptr)); + label->setText(QApplication::translate("new_constrain", "Input Ports:", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class new_constrain: public Ui_new_constrain {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_NEW_CONSTRAIN_H diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_file.h b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_file.h new file mode 100644 index 0000000..94dd339 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_file.h @@ -0,0 +1,173 @@ +/******************************************************************************** +** Form generated from reading UI file 'new_file.ui' +** +** Created by: Qt User Interface Compiler version 5.12.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_NEW_FILE_H +#define UI_NEW_FILE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_new_file +{ +public: + QWidget *verticalLayoutWidget; + QVBoxLayout *verticalLayout; + QHBoxLayout *horizontalLayout_5; + QLabel *label_3; + QLineEdit *lineEdit_module_name; + QHBoxLayout *horizontalLayout_4; + QLabel *label_4; + QLineEdit *lineEdit_input_1; + QHBoxLayout *horizontalLayout_2; + QLabel *label_8; + QLineEdit *lineEdit_out; + QHBoxLayout *horizontalLayout; + QLabel *label; + QLineEdit *lineEdit_input_2; + QWidget *horizontalLayoutWidget_3; + QHBoxLayout *horizontalLayout_6; + QPushButton *pushButton_ok; + QSpacerItem *horizontalSpacer; + QPushButton *pushButton_cancel; + QLabel *label_2; + + void setupUi(QDialog *new_file) + { + if (new_file->objectName().isEmpty()) + new_file->setObjectName(QString::fromUtf8("new_file")); + new_file->resize(430, 503); + verticalLayoutWidget = new QWidget(new_file); + verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget")); + verticalLayoutWidget->setGeometry(QRect(40, 80, 341, 371)); + verticalLayout = new QVBoxLayout(verticalLayoutWidget); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + verticalLayout->setSizeConstraint(QLayout::SetDefaultConstraint); + verticalLayout->setContentsMargins(0, 0, 0, 0); + horizontalLayout_5 = new QHBoxLayout(); + horizontalLayout_5->setObjectName(QString::fromUtf8("horizontalLayout_5")); + label_3 = new QLabel(verticalLayoutWidget); + label_3->setObjectName(QString::fromUtf8("label_3")); + + horizontalLayout_5->addWidget(label_3); + + lineEdit_module_name = new QLineEdit(verticalLayoutWidget); + lineEdit_module_name->setObjectName(QString::fromUtf8("lineEdit_module_name")); + + horizontalLayout_5->addWidget(lineEdit_module_name); + + + verticalLayout->addLayout(horizontalLayout_5); + + horizontalLayout_4 = new QHBoxLayout(); + horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4")); + label_4 = new QLabel(verticalLayoutWidget); + label_4->setObjectName(QString::fromUtf8("label_4")); + + horizontalLayout_4->addWidget(label_4); + + lineEdit_input_1 = new QLineEdit(verticalLayoutWidget); + lineEdit_input_1->setObjectName(QString::fromUtf8("lineEdit_input_1")); + + horizontalLayout_4->addWidget(lineEdit_input_1); + + + verticalLayout->addLayout(horizontalLayout_4); + + horizontalLayout_2 = new QHBoxLayout(); + horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); + label_8 = new QLabel(verticalLayoutWidget); + label_8->setObjectName(QString::fromUtf8("label_8")); + + horizontalLayout_2->addWidget(label_8); + + lineEdit_out = new QLineEdit(verticalLayoutWidget); + lineEdit_out->setObjectName(QString::fromUtf8("lineEdit_out")); + + horizontalLayout_2->addWidget(lineEdit_out); + + + verticalLayout->addLayout(horizontalLayout_2); + + horizontalLayout = new QHBoxLayout(); + horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); + label = new QLabel(verticalLayoutWidget); + label->setObjectName(QString::fromUtf8("label")); + + horizontalLayout->addWidget(label); + + lineEdit_input_2 = new QLineEdit(verticalLayoutWidget); + lineEdit_input_2->setObjectName(QString::fromUtf8("lineEdit_input_2")); + + horizontalLayout->addWidget(lineEdit_input_2); + + + verticalLayout->addLayout(horizontalLayout); + + horizontalLayoutWidget_3 = new QWidget(new_file); + horizontalLayoutWidget_3->setObjectName(QString::fromUtf8("horizontalLayoutWidget_3")); + horizontalLayoutWidget_3->setGeometry(QRect(40, 440, 341, 41)); + horizontalLayout_6 = new QHBoxLayout(horizontalLayoutWidget_3); + horizontalLayout_6->setObjectName(QString::fromUtf8("horizontalLayout_6")); + horizontalLayout_6->setContentsMargins(0, 0, 0, 0); + pushButton_ok = new QPushButton(horizontalLayoutWidget_3); + pushButton_ok->setObjectName(QString::fromUtf8("pushButton_ok")); + + horizontalLayout_6->addWidget(pushButton_ok); + + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + horizontalLayout_6->addItem(horizontalSpacer); + + pushButton_cancel = new QPushButton(horizontalLayoutWidget_3); + pushButton_cancel->setObjectName(QString::fromUtf8("pushButton_cancel")); + + horizontalLayout_6->addWidget(pushButton_cancel); + + label_2 = new QLabel(new_file); + label_2->setObjectName(QString::fromUtf8("label_2")); + label_2->setGeometry(QRect(150, 10, 171, 61)); + QFont font; + font.setPointSize(18); + label_2->setFont(font); + + retranslateUi(new_file); + + QMetaObject::connectSlotsByName(new_file); + } // setupUi + + void retranslateUi(QDialog *new_file) + { + new_file->setWindowTitle(QApplication::translate("new_file", "Dialog", nullptr)); + label_3->setText(QApplication::translate("new_file", "Module Name:", nullptr)); + label_4->setText(QApplication::translate("new_file", "Input Ports:", nullptr)); + label_8->setText(QApplication::translate("new_file", "Output Ports:", nullptr)); + label->setText(QApplication::translate("new_file", "Input Ports:", nullptr)); + pushButton_ok->setText(QApplication::translate("new_file", "Ok", nullptr)); + pushButton_cancel->setText(QApplication::translate("new_file", "Cancel", nullptr)); + label_2->setText(QApplication::translate("new_file", "New Module", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class new_file: public Ui_new_file {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_NEW_FILE_H diff --git a/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_testbench.h b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_testbench.h new file mode 100644 index 0000000..9c73de7 --- /dev/null +++ b/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug/ui_new_testbench.h @@ -0,0 +1,173 @@ +/******************************************************************************** +** Form generated from reading UI file 'new_testbench.ui' +** +** Created by: Qt User Interface Compiler version 5.12.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_NEW_TESTBENCH_H +#define UI_NEW_TESTBENCH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_new_testbench +{ +public: + QWidget *verticalLayoutWidget; + QVBoxLayout *verticalLayout_2; + QHBoxLayout *horizontalLayout_7; + QLabel *label_5; + QLineEdit *lineEdit_module_name_2; + QHBoxLayout *horizontalLayout_8; + QLabel *label_6; + QLineEdit *lineEdit_input_3; + QHBoxLayout *horizontalLayout_3; + QLabel *label_9; + QLineEdit *lineEdit_out_2; + QHBoxLayout *horizontalLayout_9; + QLabel *label_2; + QLineEdit *lineEdit_input_4; + QLabel *label_7; + QWidget *horizontalLayoutWidget_3; + QHBoxLayout *horizontalLayout_10; + QPushButton *pushButton_ok_2; + QSpacerItem *horizontalSpacer_2; + QPushButton *pushButton_cancel_2; + + void setupUi(QDialog *new_testbench) + { + if (new_testbench->objectName().isEmpty()) + new_testbench->setObjectName(QString::fromUtf8("new_testbench")); + new_testbench->resize(405, 486); + verticalLayoutWidget = new QWidget(new_testbench); + verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget")); + verticalLayoutWidget->setGeometry(QRect(30, 70, 341, 371)); + verticalLayout_2 = new QVBoxLayout(verticalLayoutWidget); + verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); + verticalLayout_2->setSizeConstraint(QLayout::SetDefaultConstraint); + verticalLayout_2->setContentsMargins(0, 0, 0, 0); + horizontalLayout_7 = new QHBoxLayout(); + horizontalLayout_7->setObjectName(QString::fromUtf8("horizontalLayout_7")); + label_5 = new QLabel(verticalLayoutWidget); + label_5->setObjectName(QString::fromUtf8("label_5")); + + horizontalLayout_7->addWidget(label_5); + + lineEdit_module_name_2 = new QLineEdit(verticalLayoutWidget); + lineEdit_module_name_2->setObjectName(QString::fromUtf8("lineEdit_module_name_2")); + + horizontalLayout_7->addWidget(lineEdit_module_name_2); + + + verticalLayout_2->addLayout(horizontalLayout_7); + + horizontalLayout_8 = new QHBoxLayout(); + horizontalLayout_8->setObjectName(QString::fromUtf8("horizontalLayout_8")); + label_6 = new QLabel(verticalLayoutWidget); + label_6->setObjectName(QString::fromUtf8("label_6")); + + horizontalLayout_8->addWidget(label_6); + + lineEdit_input_3 = new QLineEdit(verticalLayoutWidget); + lineEdit_input_3->setObjectName(QString::fromUtf8("lineEdit_input_3")); + + horizontalLayout_8->addWidget(lineEdit_input_3); + + + verticalLayout_2->addLayout(horizontalLayout_8); + + horizontalLayout_3 = new QHBoxLayout(); + horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3")); + label_9 = new QLabel(verticalLayoutWidget); + label_9->setObjectName(QString::fromUtf8("label_9")); + + horizontalLayout_3->addWidget(label_9); + + lineEdit_out_2 = new QLineEdit(verticalLayoutWidget); + lineEdit_out_2->setObjectName(QString::fromUtf8("lineEdit_out_2")); + + horizontalLayout_3->addWidget(lineEdit_out_2); + + + verticalLayout_2->addLayout(horizontalLayout_3); + + horizontalLayout_9 = new QHBoxLayout(); + horizontalLayout_9->setObjectName(QString::fromUtf8("horizontalLayout_9")); + label_2 = new QLabel(verticalLayoutWidget); + label_2->setObjectName(QString::fromUtf8("label_2")); + + horizontalLayout_9->addWidget(label_2); + + lineEdit_input_4 = new QLineEdit(verticalLayoutWidget); + lineEdit_input_4->setObjectName(QString::fromUtf8("lineEdit_input_4")); + + horizontalLayout_9->addWidget(lineEdit_input_4); + + + verticalLayout_2->addLayout(horizontalLayout_9); + + label_7 = new QLabel(new_testbench); + label_7->setObjectName(QString::fromUtf8("label_7")); + label_7->setGeometry(QRect(120, 0, 171, 61)); + QFont font; + font.setPointSize(18); + label_7->setFont(font); + horizontalLayoutWidget_3 = new QWidget(new_testbench); + horizontalLayoutWidget_3->setObjectName(QString::fromUtf8("horizontalLayoutWidget_3")); + horizontalLayoutWidget_3->setGeometry(QRect(30, 430, 341, 41)); + horizontalLayout_10 = new QHBoxLayout(horizontalLayoutWidget_3); + horizontalLayout_10->setObjectName(QString::fromUtf8("horizontalLayout_10")); + horizontalLayout_10->setContentsMargins(0, 0, 0, 0); + pushButton_ok_2 = new QPushButton(horizontalLayoutWidget_3); + pushButton_ok_2->setObjectName(QString::fromUtf8("pushButton_ok_2")); + + horizontalLayout_10->addWidget(pushButton_ok_2); + + horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + horizontalLayout_10->addItem(horizontalSpacer_2); + + pushButton_cancel_2 = new QPushButton(horizontalLayoutWidget_3); + pushButton_cancel_2->setObjectName(QString::fromUtf8("pushButton_cancel_2")); + + horizontalLayout_10->addWidget(pushButton_cancel_2); + + + retranslateUi(new_testbench); + + QMetaObject::connectSlotsByName(new_testbench); + } // setupUi + + void retranslateUi(QDialog *new_testbench) + { + new_testbench->setWindowTitle(QApplication::translate("new_testbench", "Dialog", nullptr)); + label_5->setText(QApplication::translate("new_testbench", "Module Name:", nullptr)); + label_6->setText(QApplication::translate("new_testbench", "Input Ports:", nullptr)); + label_9->setText(QApplication::translate("new_testbench", "Output Ports:", nullptr)); + label_2->setText(QApplication::translate("new_testbench", "Input Ports:", nullptr)); + label_7->setText(QApplication::translate("new_testbench", "New Testbench", nullptr)); + pushButton_ok_2->setText(QApplication::translate("new_testbench", "Ok", nullptr)); + pushButton_cancel_2->setText(QApplication::translate("new_testbench", "Cancel", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class new_testbench: public Ui_new_testbench {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_NEW_TESTBENCH_H diff --git a/src/eda_qt/constrain.cpp b/src/eda_qt/constrain.cpp new file mode 100644 index 0000000..b327c40 --- /dev/null +++ b/src/eda_qt/constrain.cpp @@ -0,0 +1,90 @@ +#include "constrain.h" + +constrain::constrain() +{ + +} + +constrain::constrain(QString name,int inputPorts,int outputPorts,int inOutPorts) +{ + this->name = name; + this->latestNum = 0; + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),INPUT,0,1,this->latestNum)); + } + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),OUTPUT,0,1,this->latestNum)); + } + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),INOUT,0,1,this->latestNum)); + } +} + +Port constrain::getSelectedPort(int portNum) +{ + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortNum()==portNum) + return this->ports.at(i); + } + return Port(); +} + +void constrain::addPort() +{ + this->ports.push_back(Port("p"+QString::number(this->latestNum),INPUT,0,1,this->latestNum)); +} + +void constrain::deletePort(int portNum) +{ + + if(this->ports[portNum].getPortType()==INPUT){ + this->inputPorts--; + }else if(this->ports[portNum].getPortType()==OUTPUT) { + this->outputPorts--; + }else{ + this->inOutPorts--; + } + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortNum()==portNum) + this->ports.erase(this->ports.begin()+i); + } +} + +void constrain::setCode(QString code) +{ + this->code = code; +} + +QString constrain::getCode() +{ + return this->code; +} + +QString constrain::generateCodeAltera()//生成约束文件代码;还没研究完 +//生成的是Altera芯片在Quartus下的 +{ + + QString generateCodes; + generateCodes = "#This code is generated by :\n#Pin Assignment for Altera FPGA with Software Quartus.\n"; + + for(unsigned long i = 0;iports.size();i++){ + generateCodes = generateCodes + "set_location_assignment PIN_" + this->ports.at(i).getName() +" -to" + "所包含的module连接的端口\n"; + } + + return generateCodes; +} + +QString constrain::generateCodeXilinx()//生成约束文件代码;还没研究完 +//生成的是Xilinx芯片在Vivado下的 +{ + QString generateCodes; + generateCodes = "#This code is generated by :\n#Pin Assignment for Xilinx FPGA with Software Vivado.\n"; + for (unsigned long i = 0;iports.size();i++) { + generateCodes = generateCodes + "set_property PACKAGE_PIN " + this->ports.at(i).getName() + " [get_ports 所包含的module连接的端口\n]"; + generateCodes = generateCodes + "set_property IOSTANDARD LVCMOS33 [get_ports 所包含的module连接的端口\n]"; + } + return generateCodes; +} diff --git a/src/eda_qt/constrain.h b/src/eda_qt/constrain.h new file mode 100644 index 0000000..ec1b792 --- /dev/null +++ b/src/eda_qt/constrain.h @@ -0,0 +1,31 @@ +/* New Constrain功能的类*/ +#ifndef CONSTRAIN_H +#define CONSTRAIN_H +#include +#include +#include +#include + +class constrain +{ +private: + QString name; + int inputPorts;//输入端口数 + int outputPorts;//输出端口数 + int inOutPorts;//双向端口数 + int latestNum; //vector标识 + QString code; //code + std::vector ports; //端口类数组 +public: + constrain(); + constrain(QString,int,int,int); //构造函数 (名字,输入端口数量,输出端口数量,双向端口数量) + Port getSelectedPort(int); //返回选中的Port 参数为port对象标识默认从0开始 + void addPort(); //添加Port + void deletePort(int); //删除Port + void setCode(QString); + QString getCode(); + QString generateCodeAltera(); + QString generateCodeXilinx(); +}; + +#endif // CONSTRAIN_H diff --git a/src/eda_qt/eda_qt.pro b/src/eda_qt/eda_qt.pro new file mode 100644 index 0000000..e6145d0 --- /dev/null +++ b/src/eda_qt/eda_qt.pro @@ -0,0 +1,51 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++11 + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + new_file.cpp \ + new_constrain.cpp \ + module.cpp \ + constrain.cpp \ + port.cpp \ + testbench.cpp \ + new_testbench.cpp + +HEADERS += \ + mainwindow.h \ + new_file.h \ + new_constrain.h \ + module.h \ + constrain.h \ + port.h \ + testbench.h \ + new_testbench.h + +FORMS += \ + mainwindow.ui \ + new_file.ui \ + new_constrain.ui \ + new_testbench.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +DISTFILES += \ + 矩形.png diff --git a/src/eda_qt/eda_qt.pro.user b/src/eda_qt/eda_qt.pro.user new file mode 100644 index 0000000..d6e4740 --- /dev/null +++ b/src/eda_qt/eda_qt.pro.user @@ -0,0 +1,328 @@ + + + + + + EnvironmentId + {d7319875-1e1d-4456-a97d-d87e35d07a5e} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.12.1 MinGW 64-bit + Desktop Qt 5.12.1 MinGW 64-bit + qt.qt5.5121.win64_mingw73_kit + 0 + 0 + 0 + + F:/eda_dev/eda_qt/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + F:/eda_dev/eda_qt/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + F:/eda_dev/eda_qt/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy Configuration + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + eda_qt + + Qt4ProjectManager.Qt4RunConfiguration:F:/eda_dev/eda_qt/src/eda_qt/eda_qt.pro + eda_qt.pro + + 3768 + false + true + true + false + false + true + + F:/eda_dev/eda_qt/src/build-eda_qt-Desktop_Qt_5_12_1_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 20 + + + Version + 20 + + diff --git a/src/eda_qt/eda_qt.pro.user.c7d4991.22 b/src/eda_qt/eda_qt.pro.user.c7d4991.22 new file mode 100644 index 0000000..0468277 --- /dev/null +++ b/src/eda_qt/eda_qt.pro.user.c7d4991.22 @@ -0,0 +1,319 @@ + + + + + + EnvironmentId + {c7d49916-8da1-4252-9fa0-c2c4861f43da} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.14.2 MinGW 64-bit + Desktop Qt 5.14.2 MinGW 64-bit + qt.qt5.5142.win64_mingw73_kit + 0 + 0 + 0 + + C:/Users/Dell/Desktop/eda_qt/src/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + C:/Users/Dell/Desktop/eda_qt/src/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + + C:/Users/Dell/Desktop/eda_qt/src/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Dell/Desktop/eda_qt/src/eda_qt 1-24 2_06/eda_qt.pro + C:/Users/Dell/Desktop/eda_qt/src/eda_qt 1-24 2_06/eda_qt.pro + + false + + false + true + true + false + false + true + + C:/Users/Dell/Desktop/eda_qt/src/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/src/eda_qt/eda_qt.pro.user.f13ef12.22 b/src/eda_qt/eda_qt.pro.user.f13ef12.22 new file mode 100644 index 0000000..40234a0 --- /dev/null +++ b/src/eda_qt/eda_qt.pro.user.f13ef12.22 @@ -0,0 +1,848 @@ + + + + + + EnvironmentId + {f13ef12e-62a1-4aaf-ac39-302b77838bbe} + + + ProjectExplorer.Project.ActiveTarget + 1 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + Builtin.Questionable + + true + Builtin.DefaultTidyAndClazy + 2 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.14.2 MinGW 32-bit + Desktop Qt 5.14.2 MinGW 32-bit + qt.qt5.5142.win32_mingw73_kit + 0 + 0 + 0 + + true + 0 + C:\Users\dawn\Documents\Project\build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Debug + C:\Users\dawn\Documents\Project\build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 2 + 2 + + + true + 2 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Release + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 2 + + + true + 0 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Profile + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/dawn/Documents/Project/eda_qt/eda_qt.pro + C:/Users/dawn/Documents/Project/eda_qt/eda_qt.pro + + false + + false + true + true + false + false + true + + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_32_bit-Debug + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop Qt 5.14.2 MinGW 64-bit + Desktop Qt 5.14.2 MinGW 64-bit + qt.qt5.5142.win64_mingw73_kit + 0 + 0 + 0 + + true + 0 + C:\Users\dawn\Documents\Project\build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + C:\Users\dawn\Documents\Project\build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 2 + 2 + + + true + 2 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Release + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 2 + + + true + 0 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Profile + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/dawn/Documents/Project/eda_qt/eda_qt.pro + C:/Users/dawn/Documents/Project/eda_qt/eda_qt.pro + + false + + false + true + true + false + false + true + + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.Target.2 + + Desktop Qt 5.9.9 MinGW 32bit + Desktop Qt 5.9.9 MinGW 32bit + qt.qt5.599.win32_mingw53_kit + 0 + 0 + 0 + + true + 0 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_9_9_MinGW_32bit-Debug + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_9_9_MinGW_32bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 2 + 2 + + + true + 2 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_9_9_MinGW_32bit-Release + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_9_9_MinGW_32bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 2 + 2 + + + true + 0 + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_9_9_MinGW_32bit-Profile + C:/Users/dawn/Documents/Project/build-eda_qt-Desktop_Qt_5_9_9_MinGW_32bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 2 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + + ProjectExplorer.CustomExecutableRunConfiguration + + + false + + false + true + false + false + true + + + + 1 + + + + ProjectExplorer.Project.TargetCount + 3 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/src/eda_qt/main.cpp b/src/eda_qt/main.cpp new file mode 100644 index 0000000..fd3e533 --- /dev/null +++ b/src/eda_qt/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/src/eda_qt/mainwindow.cpp b/src/eda_qt/mainwindow.cpp new file mode 100644 index 0000000..4d20832 --- /dev/null +++ b/src/eda_qt/mainwindow.cpp @@ -0,0 +1,104 @@ +//1.24-23_12 新增了new_constrain.ui +//修改了mainwindow的菜单栏 +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "new_testbench.h" +#include "new_constrain.h" +#include "new_file.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + this->showMaximized(); + + // 设置背景颜色 + QPalette pal(ui->tab_widget->palette()); + pal.setColor(QPalette::Background, Qt::black); + ui->tab_widget->setAutoFillBackground(true); + ui->tab_widget->setPalette(pal); + + ui->tab_widget->resize(ui->tab->width() + 200, ui->tab->height() + 200); + ui->tab_widget->move(ui->tab->width() / 2, ui->tab->height() / 2 - 100); + + // 初始化左边list表 + this->init_list(); + + qDebug() << ui->tab->geometry().width(); +// ui->tabWidget->insertTab(3, new QWidget, "s"); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + + +void MainWindow::on_actionNew_triggered() +{ + this->dailog_new_file(); +} + +void MainWindow::recv_new_file(QString name) +{ + ui->textEdit->setText(name); +} + +void MainWindow::on_pushButton_new_file_clicked() +{ + this->dailog_new_file(); +} + +void MainWindow::dailog_new_file() +{ + new_file *s = new new_file(this); + connect(s, SIGNAL(send_data(QString)), this, SLOT(recv_new_file(QString))); + s->show(); +} + +void MainWindow::init_list() +{ + QStandardItemModel *itemModel = new QStandardItemModel(this); + + QStringList list; + list.append("_74HC138"); + list.append("_74HC151"); + list.append("_74HC181"); + list.append("_74HC182"); + list.append("_74HC190"); + list.append("_74HC194"); + list.append("_74HC238"); + list.append("AD0809"); + list.append("add"); + + for (int i = 0; i < list.size(); i++) + { + QString s = static_cast(list.at(i)); + QStandardItem *item = new QStandardItem(s); + itemModel->appendRow(item); + } + ui->listView_left->setModel(itemModel); +} + +void MainWindow::on_actionExit_triggered() +{ + this->close(); +} + +void MainWindow::on_actionNew_Module_triggered()//菜单栏new module弹出的对话框 +{ + this->dailog_new_file(); +} + +void MainWindow::on_actionNew_Constrain_triggered() +{ + new_constrain *s = new new_constrain(this); + s->show(); +} +void MainWindow::on_actionNew_Testbench_triggered() +{ + new_testbench *s = new new_testbench(this); + s->show(); +} + diff --git a/src/eda_qt/mainwindow.h b/src/eda_qt/mainwindow.h new file mode 100644 index 0000000..a2577ce --- /dev/null +++ b/src/eda_qt/mainwindow.h @@ -0,0 +1,49 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +#include +#include +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void on_actionNew_triggered(); + + void recv_new_file(QString name); + + void on_pushButton_new_file_clicked(); + + void on_actionExit_triggered(); + + void on_actionNew_Module_triggered(); + + void on_actionNew_Constrain_triggered(); + + void on_actionNew_Testbench_triggered(); + +private: + Ui::MainWindow *ui; + + void dailog_new_file(); + + void init_list(); +}; +#endif // MAINWINDOW_H diff --git a/src/eda_qt/mainwindow.ui b/src/eda_qt/mainwindow.ui new file mode 100644 index 0000000..685fcba --- /dev/null +++ b/src/eda_qt/mainwindow.ui @@ -0,0 +1,369 @@ + + + MainWindow + + + + 0 + 0 + 1056 + 672 + + + + MainWindow + + + + + 0 + 0 + + + + Qt::DefaultContextMenu + + + Qt::LeftToRight + + + + + + 2 + + + QLayout::SetMaximumSize + + + + + QLayout::SetMinimumSize + + + + + New File + + + + + + + PushButton + + + + + + + PushButton + + + + + + + PushButton + + + + + + + PushButton + + + + + + + PushButton + + + + + + + PushButton + + + + + + + PushButton + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + true + + + + 0 + 0 + + + + + 200 + 0 + + + + + 0 + 0 + + + + 1 + + + + + 0 + 0 + 200 + 330 + + + + Page 1 + + + + + + 0 + 0 + 200 + 330 + + + + System + + + + + 0 + 0 + 200 + 16777215 + + + + + 0 + 0 + + + + + 200 + 0 + + + + QAbstractItemView::NoEditTriggers + + + + + + + + + 0 + + + + Tab 1 + + + + + 50 + 50 + 561 + 251 + + + + + + + + + + + + + + 0 + 0 + + + + + 200 + 0 + + + + 1 + + + + + 0 + 0 + 200 + 330 + + + + Search + + + + + + 0 + 0 + 200 + 330 + + + + Property + + + + + + + + + + QLayout::SetDefaultConstraint + + + + + + 0 + 0 + + + + + + + + + + + + + + 0 + 0 + 1056 + 23 + + + + + Edit + + + + + File + + + + New + + + + + + + + + + + + + + + + + + + + Open + + + + + Save + + + + + Save As + + + + + Print + + + + + Exit + + + + + New Module + + + + + New Constrain + + + + + New Testbench + + + + + + diff --git a/src/eda_qt/module.cpp b/src/eda_qt/module.cpp new file mode 100644 index 0000000..bd72101 --- /dev/null +++ b/src/eda_qt/module.cpp @@ -0,0 +1,99 @@ +#include "module.h" + +Module::Module() +{ + +} + +Module::Module(QString name,int inputPorts,int outputPorts,int inOutPorts) +{ + this->name = name; + this->latestNum = 0; + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),INPUT,0,1,this->latestNum)); + } + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),OUTPUT,0,1,this->latestNum)); + } + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),INOUT,0,1,this->latestNum)); + } +} + +Port Module::getSelectedPort(int portNum) +{ + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortNum()==portNum) + return this->ports.at(i); + } + return Port(); +} + +void Module::addPort() +{ + this->ports.push_back(Port("p"+QString::number(this->latestNum),INPUT,0,1,this->latestNum)); +} +void Module::deletePort(int portNum) +{ + + if(this->ports[portNum].getPortType()==INPUT){ + this->inputPorts--; + }else if(this->ports[portNum].getPortType()==OUTPUT) { + this->outputPorts--; + }else{ + this->inOutPorts--; + } + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortNum()==portNum) + this->ports.erase(this->ports.begin()+i); + } +} + +void Module::setCode(QString code) +{ + this->code = code; +} + +QString Module::getCode() +{ + return this->code; +} + +QString Module::generateCode(QString code) +{ + QString generateCodes; + generateCodes = "Module "+this->name+"(\n"; + for(unsigned long i = 0;iports.size();i++){ + if(i ==this->ports.size()-1){ + generateCodes =generateCodes + this->ports.at(i).getName(); + }else{ + generateCodes =generateCodes + this->ports.at(i).getName()+",\n"; + } + } + generateCodes = generateCodes+");\n\n"; + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortType()==INPUT){ + generateCodes =generateCodes + "input "; + + }else if (this->ports.at(i).getPortType()==OUTPUT) { + generateCodes =generateCodes + "output "; + }else{ + generateCodes =generateCodes + "inout "; + } + generateCodes =generateCodes + this->ports.at(i).getName()+";\n"; + } + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getDataType()==0){ + generateCodes =generateCodes + "wire "; + + }else{ + generateCodes =generateCodes + "reg "; + } + generateCodes =generateCodes + this->ports.at(i).getName()+";\n"; + } + generateCodes = generateCodes +code+"\nendmodule"; + return generateCodes; +} diff --git a/src/eda_qt/module.h b/src/eda_qt/module.h new file mode 100644 index 0000000..e7e9d0b --- /dev/null +++ b/src/eda_qt/module.h @@ -0,0 +1,28 @@ +#ifndef MODULE_H +#define MODULE_H +#include +#include +#include +#include "port.h" +class Module +{ +private: + QString name; //模块名字 + int inputPorts; //输入端口数量 + int outputPorts; //输出端口数量 + int inOutPorts; //双向端口数量 + int latestNum; //vector标识 + QString code; //code + std::vector ports; //端口类数组 +public: + Module(); + Module(QString,int,int,int); //构造函数 (名字,输入端口数量,输出端口数量,双向端口数量) + Port getSelectedPort(int); //返回选中的Port 参数为port对象标识默认从0开始 + void addPort(); //添加Port + void deletePort(int); //删除Port + void setCode(QString); + QString getCode(); + QString generateCode(QString); +}; + +#endif // MODULE_H diff --git a/src/eda_qt/new_constrain.cpp b/src/eda_qt/new_constrain.cpp new file mode 100644 index 0000000..61e608d --- /dev/null +++ b/src/eda_qt/new_constrain.cpp @@ -0,0 +1,19 @@ +#include "new_constrain.h" +#include "ui_new_constrain.h" + +new_constrain::new_constrain(QWidget *parent) : + QDialog(parent), + ui(new Ui::new_constrain) +{ + ui->setupUi(this); + this->setModal(true); +} + +new_constrain::~new_constrain() +{ + delete ui; +} +void new_constrain::on_pushButton_clicked() +{ + this->exec(); +} diff --git a/src/eda_qt/new_constrain.h b/src/eda_qt/new_constrain.h new file mode 100644 index 0000000..12c6af9 --- /dev/null +++ b/src/eda_qt/new_constrain.h @@ -0,0 +1,23 @@ +#ifndef NEW_CONSTRAIN_H +#define NEW_CONSTRAIN_H + +#include + +namespace Ui { +class new_constrain; +} + +class new_constrain : public QDialog +{ + Q_OBJECT + +public: + explicit new_constrain(QWidget *parent = nullptr); + ~new_constrain(); +private slots: + void on_pushButton_clicked(); +private: + Ui::new_constrain *ui; +}; + +#endif // NEW_CONSTRAIN_H diff --git a/src/eda_qt/new_constrain.ui b/src/eda_qt/new_constrain.ui new file mode 100644 index 0000000..65666e7 --- /dev/null +++ b/src/eda_qt/new_constrain.ui @@ -0,0 +1,147 @@ + + + new_constrain + + + + 0 + 0 + 447 + 513 + + + + Dialog + + + + + 50 + 440 + 341 + 41 + + + + + + + Ok + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + + + + + 150 + 10 + 171 + 61 + + + + + 18 + + + + New Constrian + + + + + + 50 + 80 + 341 + 371 + + + + + QLayout::SetDefaultConstraint + + + + + + + Module Name: + + + + + + + + + + + + + + Input Ports: + + + + + + + + + + + + + + Output Ports: + + + + + + + + + + + + + + Input Ports: + + + + + + + + + + + + + + diff --git a/src/eda_qt/new_file.cpp b/src/eda_qt/new_file.cpp new file mode 100644 index 0000000..a3e748c --- /dev/null +++ b/src/eda_qt/new_file.cpp @@ -0,0 +1,35 @@ +#include "new_file.h" +#include "ui_new_file.h" + +new_file::new_file(QWidget *parent) : + QDialog(parent), + ui(new Ui::new_file) +{ + ui->setupUi(this); + this->setModal(true); + + // 限制为 int 格式,范围两位数 + QIntValidator *int_v = new QIntValidator; + int_v->setRange(0, 50); + ui->lineEdit_out->setValidator(int_v); + ui->lineEdit_input_1->setValidator(int_v); + ui->lineEdit_input_2->setValidator(int_v); +} + +new_file::~new_file() +{ + delete ui; +} + +void new_file::on_pushButton_cancel_clicked() +{ + this->~new_file(); +} + +void new_file::on_pushButton_ok_clicked() +{ + QString name = ui->lineEdit_module_name->text(); + emit send_data(name); + + this->~new_file(); +} diff --git a/src/eda_qt/new_file.h b/src/eda_qt/new_file.h new file mode 100644 index 0000000..490d583 --- /dev/null +++ b/src/eda_qt/new_file.h @@ -0,0 +1,33 @@ +#ifndef NEW_FILE_H +#define NEW_FILE_H + +#include + +#include + +namespace Ui { +class new_file; +} + +class new_file : public QDialog +{ + Q_OBJECT + +public: + explicit new_file(QWidget *parent = nullptr); + ~new_file(); + +private slots: + + void on_pushButton_cancel_clicked(); + + void on_pushButton_ok_clicked(); + +signals: + void send_data(QString name); + +private: + Ui::new_file *ui; +}; + +#endif // NEW_FILE_H diff --git a/src/eda_qt/new_file.ui b/src/eda_qt/new_file.ui new file mode 100644 index 0000000..912ff2c --- /dev/null +++ b/src/eda_qt/new_file.ui @@ -0,0 +1,147 @@ + + + new_file + + + + 0 + 0 + 430 + 503 + + + + Dialog + + + + + 40 + 80 + 341 + 371 + + + + + QLayout::SetDefaultConstraint + + + + + + + Module Name: + + + + + + + + + + + + + + Input Ports: + + + + + + + + + + + + + + Output Ports: + + + + + + + + + + + + + + Input Ports: + + + + + + + + + + + + + + 40 + 440 + 341 + 41 + + + + + + + Ok + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + + + + + 150 + 10 + 171 + 61 + + + + + 18 + + + + New Module + + + + + + diff --git a/src/eda_qt/new_testbench.cpp b/src/eda_qt/new_testbench.cpp new file mode 100644 index 0000000..f6dd143 --- /dev/null +++ b/src/eda_qt/new_testbench.cpp @@ -0,0 +1,19 @@ +#include "new_testbench.h" +#include "ui_new_testbench.h" + +new_testbench::new_testbench(QWidget *parent) : + QDialog(parent), + ui(new Ui::new_testbench) +{ + ui->setupUi(this); + this->setModal(true); +} + +new_testbench::~new_testbench() +{ + delete ui; +} +void new_testbench::on_pushButton_clicked() +{ + this->exec(); +} diff --git a/src/eda_qt/new_testbench.h b/src/eda_qt/new_testbench.h new file mode 100644 index 0000000..d1b7664 --- /dev/null +++ b/src/eda_qt/new_testbench.h @@ -0,0 +1,23 @@ +#ifndef NEW_TESTBENCH_H +#define NEW_TESTBENCH_H + +#include + +namespace Ui { +class new_testbench; +} + +class new_testbench : public QDialog +{ + Q_OBJECT + +public: + explicit new_testbench(QWidget *parent = nullptr); + ~new_testbench(); +private slots: + void on_pushButton_clicked(); +private: + Ui::new_testbench *ui; +}; + +#endif // NEW_TESTBENCH_H diff --git a/src/eda_qt/new_testbench.ui b/src/eda_qt/new_testbench.ui new file mode 100644 index 0000000..dbe0cf0 --- /dev/null +++ b/src/eda_qt/new_testbench.ui @@ -0,0 +1,147 @@ + + + new_testbench + + + + 0 + 0 + 405 + 486 + + + + Dialog + + + + + 30 + 70 + 341 + 371 + + + + + QLayout::SetDefaultConstraint + + + + + + + Module Name: + + + + + + + + + + + + + + Input Ports: + + + + + + + + + + + + + + Output Ports: + + + + + + + + + + + + + + Input Ports: + + + + + + + + + + + + + + 120 + 0 + 171 + 61 + + + + + 18 + + + + New Testbench + + + + + + 30 + 430 + 341 + 41 + + + + + + + Ok + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + + + + + diff --git a/src/eda_qt/port.cpp b/src/eda_qt/port.cpp new file mode 100644 index 0000000..f8d052f --- /dev/null +++ b/src/eda_qt/port.cpp @@ -0,0 +1,55 @@ +#include "port.h" + +Port::Port() +{ + +} + +Port::Port(QString name,PortType portType,bool dataType,int dataSize,int portNum) +{ + this->name = name; + this->portType = portType; + this->dataSize =dataSize; + this->dataType = dataType; + this->portNum = portNum; +} + +void Port::setName(QString name) +{ + this->name = name; +} + +QString Port::getName() +{ + return this->name; +} + +void Port::setPortType(PortType portType) +{ + this->portType = portType; +} +PortType Port::getPortType() +{ + return this->portType; +} + +void Port::setDataType(bool dataType) +{ + this->dataType = dataType; +} +bool Port::getDataType() +{ + return this->dataType; +} + +void Port::setDataSize(int dataSize) +{ + this->dataSize = dataSize; +} +int Port::getDataSize() +{ + return this->dataSize; +} +int Port::getPortNum(){ + return this->portNum; +} diff --git a/src/eda_qt/port.h b/src/eda_qt/port.h new file mode 100644 index 0000000..dec93ba --- /dev/null +++ b/src/eda_qt/port.h @@ -0,0 +1,29 @@ +#ifndef PORT_H +#define PORT_H +#include +#include +enum PortType{INPUT,OUTPUT,INOUT}; + +class Port +{ +private: + QString name; //端口名 + PortType portType; //输入或输出 0为in 1为out + bool dataType; //数据类型 0为wire 1为reg + int dataSize; //数据长度 + int portNum; //端口标识 +public: + Port(); + Port(QString,PortType,bool,int,int); + void setName(QString); + QString getName(); + void setPortType(PortType); + PortType getPortType(); + void setDataType(bool); + bool getDataType(); + void setDataSize(int); + int getDataSize(); + int getPortNum(); +}; + +#endif // PORT_H diff --git a/src/eda_qt/testbench.cpp b/src/eda_qt/testbench.cpp new file mode 100644 index 0000000..b360e88 --- /dev/null +++ b/src/eda_qt/testbench.cpp @@ -0,0 +1,84 @@ +#include "testbench.h" + +testbench::testbench() +{ + +} +testbench::testbench(QString name,int inputPorts,int outputPorts,int inOutPorts) +{ + this->name = name; + this->latestNum = 0; + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),INPUT,0,1,this->latestNum)); + } + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),OUTPUT,0,1,this->latestNum)); + } + for(int i = 0;ilatestNum++) + { + this->ports.push_back(Port("p"+QString::number(this->latestNum),INOUT,0,1,this->latestNum)); + } +} + +Port testbench::getSelectedPort(int portNum) +{ + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortNum()==portNum) + return this->ports.at(i); + } + return Port(); +} + +void testbench::addPort() +{ + this->ports.push_back(Port("p"+QString::number(this->latestNum),INPUT,0,1,this->latestNum)); +} +void testbench::deletePort(int portNum) +{ + + if(this->ports[portNum].getPortType()==INPUT){ + this->inputPorts--; + }else if(this->ports[portNum].getPortType()==OUTPUT) { + this->outputPorts--; + }else{ + this->inOutPorts--; + } + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getPortNum()==portNum) + this->ports.erase(this->ports.begin()+i); + } +} + +void testbench::setCode(QString code) +{ + this->code = code; +} + +QString testbench::getCode() +{ + return this->code; +} + +QString testbench::generateCode(QString code) +{ + QString generateCodes; + generateCodes = "Module "+this->name+"();\n"; + + for(unsigned long i = 0;iports.size();i++){ + if(this->ports.at(i).getDataType()==0){ + generateCodes =generateCodes + "wire "; + + }else{ + generateCodes =generateCodes + "reg "; + } + generateCodes =generateCodes + this->ports.at(i).getName()+";\n"; + } + + generateCodes = generateCodes + code; + generateCodes = generateCodes + "initial begin\n" + "$dumpfile (\"保存路径.vcd\");\n$dumpvars;\nend\n"; + generateCodes = generateCodes + "testbench中例化的module以及相关的连线操作"; + generateCodes = generateCodes + "endmodule"; + return generateCodes; +} diff --git a/src/eda_qt/testbench.h b/src/eda_qt/testbench.h new file mode 100644 index 0000000..d7658d7 --- /dev/null +++ b/src/eda_qt/testbench.h @@ -0,0 +1,29 @@ +#ifndef TESTBENCH_H +#define TESTBENCH_H +#include +#include +#include +#include "port.h" + +class testbench +{ +private: + QString name; //模块名字 + int inputPorts; //输入端口数量 + int outputPorts; //输出端口数量 + int inOutPorts; //双向端口数量 + int latestNum; //vector标识 + QString code; //code + std::vector ports; //端口类数组 +public: + testbench(); + testbench(QString,int,int,int); //构造函数 (名字,输入端口数量,输出端口数量,双向端口数量) + Port getSelectedPort(int); //返回选中的Port 参数为port对象标识默认从0开始 + void addPort(); //添加Port + void deletePort(int); //删除Port + void setCode(QString); + QString getCode(); + QString generateCode(QString); +}; + +#endif // TESTBENCH_H diff --git a/src/eda_qt/矩形.png b/src/eda_qt/矩形.png new file mode 100644 index 0000000000000000000000000000000000000000..828bf6a2fbb3fa44b9d9d51d89d5f9f0f25b7f53 GIT binary patch literal 1940 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFtXipc%kczms*Ejmg1WL4C z{Jw}chK29s%EOb4-E$5FamZS@O<2QS;Jb`TDZ5jSlhNtc0Sl?xbgdcH|5mS_X=%g4 zk;0m0w(|iC2M_ZC7M4RyYzj3s7da&uWEBL&3>Y3h?)E#t@PeUnLjxm+e0&KLn*%#X z3oDPqj~|PK4H&E(6m$|84jmVt+rW5%ktvapS-@`J3l^RRJ^>DHiG~j!UDXp9N*Wv@ z4luOz>sv80FJK-hD;~UIcq7+$|Jj`I4i14E`wmFG{`oZR|L5dMpP4^Y?3tf@FVB7# z3kyfj)_H#Ie_I(Zurj$ep65Fd_4@tk#Q#e()QlU~a=($Q`#Z0==KmM*2F4pztb6Js z4=_wwuU{Q^fZ>TY!vbJXoVq^URzHE^lPE&~F!Y|jK0Qy|fZ-<>g9b1(K7CC+52R{X z8KwXO@aL~h&w_eLN#WDkF2izI|^h8JQ=nXK2{ez^D-)|7}kL z