diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-12-17 16:26:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-17 16:26:57 +0100 |
commit | ce701fd3348f43e66a445ef58e4818adaf3e574d (patch) | |
tree | 40b08270c0b3dc8e000c2ea181b0c741bae4d355 | |
parent | dc6e63d8cd138ef36ac8cbc892c2f262b7bf01c5 (diff) | |
parent | ca866d384e666f27e2cd7bb80950d0a1dd7c0ebd (diff) | |
download | yosys-ce701fd3348f43e66a445ef58e4818adaf3e574d.tar.gz yosys-ce701fd3348f43e66a445ef58e4818adaf3e574d.tar.bz2 yosys-ce701fd3348f43e66a445ef58e4818adaf3e574d.zip |
Merge pull request #744 from whitequark/write_verilog_$shift
write_verilog: handle the $shift cell
-rw-r--r-- | backends/verilog/verilog_backend.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/backends/verilog/verilog_backend.cc b/backends/verilog/verilog_backend.cc index 3a47b478f..71db25f98 100644 --- a/backends/verilog/verilog_backend.cc +++ b/backends/verilog/verilog_backend.cc @@ -678,6 +678,35 @@ bool dump_cell_expr(std::ostream &f, std::string indent, RTLIL::Cell *cell) #undef HANDLE_UNIOP #undef HANDLE_BINOP + if (cell->type == "$shift") + { + f << stringf("%s" "assign ", indent.c_str()); + dump_sigspec(f, cell->getPort("\\Y")); + f << stringf(" = "); + if (cell->getParam("\\B_SIGNED").as_bool()) + { + f << stringf("$signed("); + dump_sigspec(f, cell->getPort("\\B")); + f << stringf(")"); + f << stringf(" < 0 ? "); + dump_sigspec(f, cell->getPort("\\A")); + f << stringf(" << - "); + dump_sigspec(f, cell->getPort("\\B")); + f << stringf(" : "); + dump_sigspec(f, cell->getPort("\\A")); + f << stringf(" >> "); + dump_sigspec(f, cell->getPort("\\B")); + } + else + { + dump_sigspec(f, cell->getPort("\\A")); + f << stringf(" >> "); + dump_sigspec(f, cell->getPort("\\B")); + } + f << stringf(";\n"); + return true; + } + if (cell->type == "$shiftx") { f << stringf("%s" "assign ", indent.c_str()); |