aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rtlil.cc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2019-05-06 20:57:15 +0200
committerGitHub <noreply@github.com>2019-05-06 20:57:15 +0200
commit752553d8e91643228714e04d9887d32f5d47870a (patch)
treee7e427b9e6558800b6131022c880af8ccc053845 /kernel/rtlil.cc
parent1706798f4e595266a8758ae6d0ff9d978299de10 (diff)
parent8c6e94d57c430fc516dbcfbde312dbd7c860477b (diff)
downloadyosys-752553d8e91643228714e04d9887d32f5d47870a.tar.gz
yosys-752553d8e91643228714e04d9887d32f5d47870a.tar.bz2
yosys-752553d8e91643228714e04d9887d32f5d47870a.zip
Merge pull request #946 from YosysHQ/clifford/specify
Add specify parser
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r--kernel/rtlil.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index dd6817873..147d378e5 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -1194,6 +1194,46 @@ namespace {
return;
}
+ if (cell->type.in("$specify2", "$specify3")) {
+ param_bool("\\FULL");
+ param_bool("\\SRC_DST_PEN");
+ param_bool("\\SRC_DST_POL");
+ param("\\T_RISE_MIN");
+ param("\\T_RISE_TYP");
+ param("\\T_RISE_MAX");
+ param("\\T_FALL_MIN");
+ param("\\T_FALL_TYP");
+ param("\\T_FALL_MAX");
+ port("\\EN", 1);
+ port("\\SRC", param("\\SRC_WIDTH"));
+ port("\\DST", param("\\DST_WIDTH"));
+ if (cell->type == "$specify3") {
+ param_bool("\\EDGE_EN");
+ param_bool("\\EDGE_POL");
+ param_bool("\\DAT_DST_PEN");
+ param_bool("\\DAT_DST_POL");
+ port("\\DAT", param("\\DST_WIDTH"));
+ }
+ check_expected();
+ return;
+ }
+
+ if (cell->type == "$specrule") {
+ param("\\TYPE");
+ param_bool("\\SRC_PEN");
+ param_bool("\\SRC_POL");
+ param_bool("\\DST_PEN");
+ param_bool("\\DST_POL");
+ param("\\T_LIMIT");
+ param("\\T_LIMIT2");
+ port("\\SRC_EN", 1);
+ port("\\DST_EN", 1);
+ port("\\SRC", param("\\SRC_WIDTH"));
+ port("\\DST", param("\\DST_WIDTH"));
+ check_expected();
+ return;
+ }
+
if (cell->type == "$_BUF_") { check_gate("AY"); return; }
if (cell->type == "$_NOT_") { check_gate("AY"); return; }
if (cell->type == "$_AND_") { check_gate("ABY"); return; }