3
0
Fork 0
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:
Krystine Sherwin 2026-01-12 10:51:14 +13:00
parent 288f805da4
commit 474df05e8a
No known key found for this signature in database

View file

@ -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));