mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-27 19:05:52 +00:00
Moved presentation_prog
This commit is contained in:
parent
045c04096e
commit
cd6e63e1a9
11 changed files with 257 additions and 621 deletions
2
docs/resources/PRESENTATION_Prog/.gitignore
vendored
Normal file
2
docs/resources/PRESENTATION_Prog/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
my_cmd.so
|
||||
my_cmd.d
|
21
docs/resources/PRESENTATION_Prog/Makefile
Normal file
21
docs/resources/PRESENTATION_Prog/Makefile
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
all: test0.log test1.log test2.log
|
||||
|
||||
CXXFLAGS=$(shell ../../yosys-config --cxxflags)
|
||||
DATDIR=$(shell ../../yosys-config --datdir)
|
||||
|
||||
my_cmd.so: my_cmd.cc
|
||||
../../yosys-config --exec --cxx $(subst $(DATDIR),../../share,$(CXXFLAGS)) --ldflags -o my_cmd.so -shared my_cmd.cc --ldlibs
|
||||
|
||||
test0.log: my_cmd.so
|
||||
../../yosys -Ql test0.log_new -m ./my_cmd.so -p 'my_cmd foo bar' absval_ref.v
|
||||
mv test0.log_new test0.log
|
||||
|
||||
test1.log: my_cmd.so
|
||||
../../yosys -Ql test1.log_new -m ./my_cmd.so -p 'clean; test1; dump' absval_ref.v
|
||||
mv test1.log_new test1.log
|
||||
|
||||
test2.log: my_cmd.so
|
||||
../../yosys -Ql test2.log_new -m ./my_cmd.so -p 'hierarchy -top test; test2' sigmap_test.v
|
||||
mv test2.log_new test2.log
|
||||
|
3
docs/resources/PRESENTATION_Prog/absval_ref.v
Normal file
3
docs/resources/PRESENTATION_Prog/absval_ref.v
Normal file
|
@ -0,0 +1,3 @@
|
|||
module absval_ref(input signed [3:0] a, output [3:0] y);
|
||||
assign y = a[3] ? -a : a;
|
||||
endmodule
|
76
docs/resources/PRESENTATION_Prog/my_cmd.cc
Normal file
76
docs/resources/PRESENTATION_Prog/my_cmd.cc
Normal file
|
@ -0,0 +1,76 @@
|
|||
#include "kernel/yosys.h"
|
||||
#include "kernel/sigtools.h"
|
||||
|
||||
USING_YOSYS_NAMESPACE
|
||||
PRIVATE_NAMESPACE_BEGIN
|
||||
|
||||
struct MyPass : public Pass {
|
||||
MyPass() : Pass("my_cmd", "just a simple test") { }
|
||||
void execute(std::vector<std::string> args, RTLIL::Design *design) override
|
||||
{
|
||||
log("Arguments to my_cmd:\n");
|
||||
for (auto &arg : args)
|
||||
log(" %s\n", arg.c_str());
|
||||
|
||||
log("Modules in current design:\n");
|
||||
for (auto mod : design->modules())
|
||||
log(" %s (%zd wires, %zd cells)\n", log_id(mod),
|
||||
GetSize(mod->wires()), GetSize(mod->cells()));
|
||||
}
|
||||
} MyPass;
|
||||
|
||||
|
||||
struct Test1Pass : public Pass {
|
||||
Test1Pass() : Pass("test1", "creating the absval module") { }
|
||||
void execute(std::vector<std::string>, RTLIL::Design *design) override
|
||||
{
|
||||
if (design->has("\\absval") != 0)
|
||||
log_error("A module with the name absval already exists!\n");
|
||||
|
||||
RTLIL::Module *module = design->addModule("\\absval");
|
||||
log("Name of this module: %s\n", log_id(module));
|
||||
|
||||
RTLIL::Wire *a = module->addWire("\\a", 4);
|
||||
a->port_input = true;
|
||||
a->port_id = 1;
|
||||
|
||||
RTLIL::Wire *y = module->addWire("\\y", 4);
|
||||
y->port_output = true;
|
||||
y->port_id = 2;
|
||||
|
||||
RTLIL::Wire *a_inv = module->addWire(NEW_ID, 4);
|
||||
module->addNeg(NEW_ID, a, a_inv, true);
|
||||
module->addMux(NEW_ID, a, a_inv, RTLIL::SigSpec(a, 3), y);
|
||||
|
||||
module->fixup_ports();
|
||||
}
|
||||
} Test1Pass;
|
||||
|
||||
|
||||
struct Test2Pass : public Pass {
|
||||
Test2Pass() : Pass("test2", "demonstrating sigmap on test module") { }
|
||||
void execute(std::vector<std::string>, RTLIL::Design *design) override
|
||||
{
|
||||
if (design->selection_stack.back().empty())
|
||||
log_cmd_error("This command can't operator on an empty selection!\n");
|
||||
|
||||
RTLIL::Module *module = design->modules_.at("\\test");
|
||||
|
||||
RTLIL::SigSpec a(module->wire("\\a")), x(module->wire("\\x")), y(module->wire("\\y"));
|
||||
log("%d %d %d\n", a == x, x == y, y == a); // will print "0 0 0"
|
||||
|
||||
SigMap sigmap(module);
|
||||
log("%d %d %d\n", sigmap(a) == sigmap(x), sigmap(x) == sigmap(y),
|
||||
sigmap(y) == sigmap(a)); // will print "1 1 1"
|
||||
|
||||
log("Mapped signal x: %s\n", log_signal(sigmap(x)));
|
||||
|
||||
log_header(design, "Doing important stuff!\n");
|
||||
log_push();
|
||||
for (int i = 0; i < 10; i++)
|
||||
log("Log message #%d.\n", i);
|
||||
log_pop();
|
||||
}
|
||||
} Test2Pass;
|
||||
|
||||
PRIVATE_NAMESPACE_END
|
3
docs/resources/PRESENTATION_Prog/sigmap_test.v
Normal file
3
docs/resources/PRESENTATION_Prog/sigmap_test.v
Normal file
|
@ -0,0 +1,3 @@
|
|||
module test(input a, output x, y);
|
||||
assign x = a, y = a;
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue