mirror of
https://github.com/YosysHQ/yosys
synced 2026-05-31 06:07:47 +00:00
symfpu: Configurable eb and sb
This commit is contained in:
parent
288f805da4
commit
474df05e8a
1 changed files with 22 additions and 15 deletions
|
|
@ -364,38 +364,45 @@ struct SymFpuPass : public Pass {
|
||||||
{
|
{
|
||||||
auto *help = PrettyHelp::get_current();
|
auto *help = PrettyHelp::get_current();
|
||||||
help->set_group("formal");
|
help->set_group("formal");
|
||||||
return false;
|
|
||||||
}
|
auto content_root = help->get_root();
|
||||||
void help() override
|
|
||||||
{
|
content_root->usage("symfpu [options]");
|
||||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
content_root->paragraph("TODO");
|
||||||
log("\n");
|
|
||||||
log(" symfpu [options] [selection]\n");
|
content_root->option("-eb <N>", "use <N> bits for exponent; default=8");
|
||||||
log("\n");
|
content_root->option("-sb <N>", "use <N> bits for significand, including hidden bit; default=24");
|
||||||
log("TODO\n");
|
|
||||||
log("\n");
|
return true;
|
||||||
}
|
}
|
||||||
void execute(std::vector<std::string> args, RTLIL::Design *design) override
|
void execute(std::vector<std::string> args, RTLIL::Design *design) override
|
||||||
{
|
{
|
||||||
|
int eb = 8, sb = 24;
|
||||||
log_header(design, "Executing SYMFPU pass.\n");
|
log_header(design, "Executing SYMFPU pass.\n");
|
||||||
|
|
||||||
size_t argidx;
|
size_t argidx;
|
||||||
for (argidx = 1; argidx < args.size(); argidx++) {
|
for (argidx = 1; argidx < args.size(); argidx++) {
|
||||||
|
if (args[argidx] == "-eb" && argidx+1 < args.size()) {
|
||||||
|
eb = atoi(args[++argidx].c_str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[argidx] == "-sb" && argidx+1 < args.size()) {
|
||||||
|
sb = atoi(args[++argidx].c_str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
extra_args(args, argidx, design);
|
extra_args(args, argidx, design);
|
||||||
|
|
||||||
fpt format(8, 24);
|
fpt format(eb, sb);
|
||||||
|
|
||||||
auto mod = design->addModule(ID(symfpu));
|
auto mod = design->addModule(ID(symfpu));
|
||||||
|
|
||||||
symfpu_mod = mod;
|
symfpu_mod = mod;
|
||||||
|
|
||||||
uf a = symfpu::unpack<rtlil_traits>(format, input_ubv(ID(a), 32));
|
uf a = symfpu::unpack<rtlil_traits>(format, input_ubv(ID(a), eb+sb));
|
||||||
uf b = symfpu::unpack<rtlil_traits>(format, input_ubv(ID(b), 32));
|
uf b = symfpu::unpack<rtlil_traits>(format, input_ubv(ID(b), eb+sb));
|
||||||
|
|
||||||
uf added(symfpu::add<rtlil_traits>(format, rtlil_traits::RNE(), a, b, prop(true)));
|
uf added(symfpu::add<rtlil_traits>(format, rtlil_traits::RNE(), a, b, prop(true)));
|
||||||
uf multiplied(symfpu::multiply<rtlil_traits>(format, rtlil_traits::RNE(), a, b));
|
uf multiplied(symfpu::multiply<rtlil_traits>(format, rtlil_traits::RNE(), a, b));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue