mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-21 13:23:40 +00:00
Update yosys from upstream
This commit is contained in:
commit
e23e33441f
13 changed files with 95 additions and 23 deletions
11
CHANGELOG
11
CHANGELOG
|
@ -2,9 +2,18 @@
|
||||||
List of major changes and improvements between releases
|
List of major changes and improvements between releases
|
||||||
=======================================================
|
=======================================================
|
||||||
|
|
||||||
Yosys 0.41 .. Yosys 0.42-dev
|
Yosys 0.42 .. Yosys 0.43-dev
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
Yosys 0.41 .. Yosys 0.42
|
||||||
|
--------------------------
|
||||||
|
* New commands and options
|
||||||
|
- Added "box_derive" pass to derive box modules.
|
||||||
|
- Added option "assert-mod-count" to "select" pass.
|
||||||
|
- Added option "-header","-push" and "-pop" to "log" pass.
|
||||||
|
* Intel support
|
||||||
|
- Dropped Quartus support in "synth_intel_alm" pass.
|
||||||
|
|
||||||
Yosys 0.40 .. Yosys 0.41
|
Yosys 0.40 .. Yosys 0.41
|
||||||
--------------------------
|
--------------------------
|
||||||
* New commands and options
|
* New commands and options
|
||||||
|
|
5
Makefile
5
Makefile
|
@ -140,7 +140,7 @@ LIBS += -lrt
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
YOSYS_VER := 0.41+129
|
YOSYS_VER := 0.42+15
|
||||||
|
|
||||||
# Note: We arrange for .gitcommit to contain the (short) commit hash in
|
# Note: We arrange for .gitcommit to contain the (short) commit hash in
|
||||||
# tarballs generated with git-archive(1) using .gitattributes. The git repo
|
# tarballs generated with git-archive(1) using .gitattributes. The git repo
|
||||||
|
@ -155,6 +155,9 @@ endif
|
||||||
|
|
||||||
OBJS = kernel/version_$(GIT_REV).o
|
OBJS = kernel/version_$(GIT_REV).o
|
||||||
|
|
||||||
|
bumpversion:
|
||||||
|
sed -i "/^YOSYS_VER := / s/+[0-9][0-9]*$$/+`git log --oneline 9b6afcf.. | wc -l`/;" Makefile
|
||||||
|
|
||||||
ABCMKARGS = CC="$(CXX)" CXX="$(CXX)" ABC_USE_LIBSTDCXX=1 ABC_USE_NAMESPACE=abc VERBOSE=$(Q)
|
ABCMKARGS = CC="$(CXX)" CXX="$(CXX)" ABC_USE_LIBSTDCXX=1 ABC_USE_NAMESPACE=abc VERBOSE=$(Q)
|
||||||
|
|
||||||
# set ABCEXTERNAL = <abc-command> to use an external ABC instance
|
# set ABCEXTERNAL = <abc-command> to use an external ABC instance
|
||||||
|
|
|
@ -1138,7 +1138,7 @@ struct CxxrtlWorker {
|
||||||
f << indent << "// cell " << cell->name.str() << " syncs\n";
|
f << indent << "// cell " << cell->name.str() << " syncs\n";
|
||||||
for (auto conn : cell->connections())
|
for (auto conn : cell->connections())
|
||||||
if (cell->output(conn.first))
|
if (cell->output(conn.first))
|
||||||
if (is_cxxrtl_sync_port(cell, conn.first)) {
|
if (is_cxxrtl_sync_port(cell, conn.first) && !conn.second.empty()) {
|
||||||
f << indent;
|
f << indent;
|
||||||
dump_sigspec_lhs(conn.second, for_debug);
|
dump_sigspec_lhs(conn.second, for_debug);
|
||||||
f << " = " << mangle(cell) << access << mangle_wire_name(conn.first) << ".curr;\n";
|
f << " = " << mangle(cell) << access << mangle_wire_name(conn.first) << ".curr;\n";
|
||||||
|
|
|
@ -47,7 +47,7 @@ cxxrtl_handle cxxrtl_create_at(cxxrtl_toplevel design, const char *top_path_) {
|
||||||
|
|
||||||
cxxrtl_handle handle = new _cxxrtl_handle;
|
cxxrtl_handle handle = new _cxxrtl_handle;
|
||||||
handle->module = std::move(design->module);
|
handle->module = std::move(design->module);
|
||||||
handle->module->debug_info(handle->objects, top_path);
|
handle->module->debug_info(&handle->objects, nullptr, top_path);
|
||||||
delete design;
|
delete design;
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1582,7 +1582,7 @@ struct module {
|
||||||
|
|
||||||
// Compatibility method.
|
// Compatibility method.
|
||||||
#if __has_attribute(deprecated)
|
#if __has_attribute(deprecated)
|
||||||
__attribute__((deprecated("Use `debug_info(path, &items, /*scopes=*/nullptr);` instead. (`path` could be \"top \".)")))
|
__attribute__((deprecated("Use `debug_info(&items, /*scopes=*/nullptr, path);` instead.")))
|
||||||
#endif
|
#endif
|
||||||
void debug_info(debug_items &items, std::string path) {
|
void debug_info(debug_items &items, std::string path) {
|
||||||
debug_info(&items, /*scopes=*/nullptr, path);
|
debug_info(&items, /*scopes=*/nullptr, path);
|
||||||
|
|
|
@ -5,7 +5,7 @@ import os
|
||||||
project = 'YosysHQ Yosys'
|
project = 'YosysHQ Yosys'
|
||||||
author = 'YosysHQ GmbH'
|
author = 'YosysHQ GmbH'
|
||||||
copyright ='2024 YosysHQ GmbH'
|
copyright ='2024 YosysHQ GmbH'
|
||||||
yosys_ver = "0.41"
|
yosys_ver = "0.42"
|
||||||
|
|
||||||
# select HTML theme
|
# select HTML theme
|
||||||
html_theme = 'furo'
|
html_theme = 'furo'
|
||||||
|
|
|
@ -8,10 +8,40 @@ file format and how you can make your own synthesis scripts.
|
||||||
Yosys script files typically use the :file:`.ys` extension and contain a set of
|
Yosys script files typically use the :file:`.ys` extension and contain a set of
|
||||||
commands for Yosys to run sequentially. These commands are the same ones we
|
commands for Yosys to run sequentially. These commands are the same ones we
|
||||||
were using on the previous page like :cmd:ref:`read_verilog` and
|
were using on the previous page like :cmd:ref:`read_verilog` and
|
||||||
:cmd:ref:`hierarchy`. As with the interactive shell, each command consists of
|
:cmd:ref:`hierarchy`.
|
||||||
the command name, and an optional whitespace separated list of arguments.
|
|
||||||
Commands are terminated with the newline character, or by a semicolon (;). Empty
|
Script parsing
|
||||||
lines, and lines starting with the hash sign (#), are ignored.
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
As with the interactive shell, each command consists of the command name, and an
|
||||||
|
optional whitespace separated list of arguments. Commands are terminated with
|
||||||
|
the newline character, and anything after a hash sign ``#`` is a comment (i.e.
|
||||||
|
it is ignored).
|
||||||
|
|
||||||
|
It is also possible to terminate commands with a semicolon ``;``. This is
|
||||||
|
particularly useful in conjunction with the ``-p <command>`` command line
|
||||||
|
option, where ``<command>`` can be a string with multiple commands separated by
|
||||||
|
semicolon. In-line comments can also be made with the colon ``:``, where the end
|
||||||
|
of the comment is a semicolon ``;`` or a new line.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
:caption: Using the ``-p`` option
|
||||||
|
|
||||||
|
$ yosys -p "read_verilog fifo.v; :this is a comment; prep"
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The space after the semicolon is required for correct parsing. ``log a;log
|
||||||
|
b;`` for example will display ``a;log b`` instead of ``a`` and ``b`` as might
|
||||||
|
be expected.
|
||||||
|
|
||||||
|
Another special character that can be used in Yosys scripts is the bang ``!``.
|
||||||
|
Anything after the bang will be executed as a shell command. This can only be
|
||||||
|
terminated with a new line. Any semicolons, hashes, or other special characters
|
||||||
|
will be passed to the shell. If an error code is returned from the shell it
|
||||||
|
will be raised by Yosys. :cmd:ref:`exec` provides a much more flexible way of
|
||||||
|
executing commands, allowing the output to be logged and more control over when
|
||||||
|
to generate errors.
|
||||||
|
|
||||||
The synthesis starter script
|
The synthesis starter script
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -17,12 +17,7 @@
|
||||||
*
|
*
|
||||||
* ---
|
* ---
|
||||||
*
|
*
|
||||||
* This is the AST frontend library.
|
* This is support code for the Verilog frontend at frontends/verilog
|
||||||
*
|
|
||||||
* The AST frontend library is not a frontend on it's own but provides a
|
|
||||||
* generic abstract syntax tree (AST) abstraction for HDL code and can be
|
|
||||||
* used by HDL frontends. See "ast.h" for an overview of the API and the
|
|
||||||
* Verilog frontend for an usage example.
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -3687,6 +3687,12 @@ struct VerificPass : public Pass {
|
||||||
verific_error_msg.clear();
|
verific_error_msg.clear();
|
||||||
log_cmd_error("Reading Verilog/SystemVerilog sources failed.\n");
|
log_cmd_error("Reading Verilog/SystemVerilog sources failed.\n");
|
||||||
}
|
}
|
||||||
|
char* fn;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
FOREACH_ARRAY_ITEM(&file_names, i, fn) {
|
||||||
|
free(fn);
|
||||||
|
}
|
||||||
set_modules_to_blackbox(map, work, flag_lib);
|
set_modules_to_blackbox(map, work, flag_lib);
|
||||||
verific_import_pending = true;
|
verific_import_pending = true;
|
||||||
goto check_error;
|
goto check_error;
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct LogPass : public Pass {
|
||||||
log(" -push\n");
|
log(" -push\n");
|
||||||
log(" push a new level on the pass counter\n");
|
log(" push a new level on the pass counter\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
log(" -push\n");
|
log(" -pop\n");
|
||||||
log(" pop from the pass counter\n");
|
log(" pop from the pass counter\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,3 +11,7 @@ run_subtest () {
|
||||||
|
|
||||||
run_subtest value
|
run_subtest value
|
||||||
run_subtest value_fuzz
|
run_subtest value_fuzz
|
||||||
|
|
||||||
|
# Compile-only test.
|
||||||
|
../../yosys -p "read_verilog test_unconnected_output.v; proc; clean; write_cxxrtl cxxrtl-test-unconnected_output.cc"
|
||||||
|
${CC:-gcc} -std=c++11 -c -o cxxrtl-test-unconnected_output -I../../backends/cxxrtl/runtime cxxrtl-test-unconnected_output.cc
|
||||||
|
|
24
tests/cxxrtl/test_unconnected_output.v
Normal file
24
tests/cxxrtl/test_unconnected_output.v
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
(* cxxrtl_blackbox *)
|
||||||
|
module blackbox(...);
|
||||||
|
(* cxxrtl_edge = "p" *)
|
||||||
|
input clk;
|
||||||
|
|
||||||
|
(* cxxrtl_sync *)
|
||||||
|
output [7:0] out1;
|
||||||
|
|
||||||
|
(* cxxrtl_sync *)
|
||||||
|
output [7:0] out2;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module unconnected_output(
|
||||||
|
input clk,
|
||||||
|
in,
|
||||||
|
output out
|
||||||
|
);
|
||||||
|
blackbox bb (
|
||||||
|
.clock (clock),
|
||||||
|
.in (in),
|
||||||
|
.out1 (out),
|
||||||
|
.out2 (/* unconnected */),
|
||||||
|
);
|
||||||
|
endmodule
|
|
@ -1,3 +1,4 @@
|
||||||
|
#include <cinttypes>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
@ -62,17 +63,17 @@ void test_binary_operation_for_bitsize(Operation &op)
|
||||||
for (size_t i = 0; i * chunk_bits < Bits; i++) {
|
for (size_t i = 0; i * chunk_bits < Bits; i++) {
|
||||||
if ((chunk_type)(iresult >> (i * chunk_bits)) != vresult.data[i]) {
|
if ((chunk_type)(iresult >> (i * chunk_bits)) != vresult.data[i]) {
|
||||||
std::printf("Test failure:\n");
|
std::printf("Test failure:\n");
|
||||||
std::printf("Bits: %i\n", Bits);
|
std::printf("Bits: %zu\n", Bits);
|
||||||
std::printf("a: %016lx\n", ia);
|
std::printf("a: %016" PRIx64 "\n", ia);
|
||||||
std::printf("b: %016lx\n", ib);
|
std::printf("b: %016" PRIx64 "\n", ib);
|
||||||
std::printf("iresult: %016lx\n", iresult);
|
std::printf("iresult: %016" PRIx64 "\n", iresult);
|
||||||
std::printf("vresult: %016lx\n", vresult.template get<uint64_t>());
|
std::printf("vresult: %016" PRIx64 "\n", vresult.template get<uint64_t>());
|
||||||
|
|
||||||
std::terminate();
|
std::terminate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::printf("Test passed @ Bits = %i.\n", Bits);
|
std::printf("Test passed @ Bits = %zu.\n", Bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Operation>
|
template<typename Operation>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue