示例#1
0
int main()
{
  ulli number;
  uint new_exponent;

  printf("                             ................\n");
  printf("Enter 16 hexadeximal digits: ");
  scanf("%llx", &number);
  printf("Enter hexadeximal digits for new exponent: ");
  scanf("%x", &new_exponent);
  printf("\n");

  printf("entered number         (hex) %016llx\n", number);
  printf("number of exp bits are (dec) %16u\n", exp_bits(number));
  printf("value of exponent is   (hex) %16x\n", get_exponent(number));
  printf("value of mantissa is   (hex) %16llx\n", get_mantissa(number));

  number = set_exponent(number, new_exponent);
  printf("\n");
  
  printf("modified number        (hex) %016llx\n", number);
  printf("number of exp bits are (dec) %16u\n", exp_bits(number));
  printf("value of exponent is   (hex) %16x\n", get_exponent(number));
  printf("value of mantissa is   (hex) %16llx\n", get_mantissa(number));

  return 0;
}
TEST_F(Test_module_inspector, get_bits) {
  sim::Simulation_engine engine("../lib/test/basic_fsm.cell",
      "test");

  engine.setup();
  auto intro = engine.inspect_module("");

  auto state_bits = intro.get_bits("state");
  ir::Bitset exp_bits(std::string("0000000000000000000000000000000000000000000000000000000000000001"));
  EXPECT_EQ(state_bits, exp_bits);

  exp_bits = ir::Bitset(std::string("0000000000000000000000000000000000000000000000000000000000000000"));
  auto ctr_bits = intro.get_bits("ctr");
  EXPECT_EQ(exp_bits, ctr_bits);

  exp_bits = ir::Bitset(std::string("1"));
  auto reset_bits = intro.get_bits("reset");
  EXPECT_EQ(exp_bits, reset_bits);

  exp_bits = ir::Bitset(std::string("0"));
  auto clk_bits = intro.get_bits("clk");
  EXPECT_EQ(exp_bits, clk_bits);

  engine.teardown();
}
TEST_F(Test_module_inspector, get_element_bits) {
  sim::Simulation_engine engine("../lib/test/demo_fsm.cell",
      "demo::Fsm");

  engine.setup();
  auto intro = engine.inspect_module("");

  //auto ctrl_bits = intro.get_bits("ctrl");
  //ir::Bitset exp_bits(std::string(
        //"0100000000000000000000000000000000000000000000000000000000000000000"
      //));

  //EXPECT_EQ(exp_bits, ctrl_bits);


  auto obj = intro.module()->objects.at("ctrl");
  auto ctrl_elem_bits = intro.get_element_bits("ctrl");
  ir::Bitset exp_bits(std::string("0"));
  auto idx = obj->type->elements.at("clk")->impl.struct_index;
  EXPECT_EQ(exp_bits, ctrl_elem_bits[idx]);

  exp_bits = ir::Bitset(std::string("1"));
  idx = obj->type->elements.at("reset")->impl.struct_index;
  EXPECT_EQ(exp_bits, ctrl_elem_bits[idx]);

  exp_bits = ir::Bitset(std::string(
        "0000000000000000000000000000000000000000000000000000000000000000"
      ));
  idx = obj->type->elements.at("op")->impl.struct_index;
  EXPECT_EQ(exp_bits, ctrl_elem_bits[idx]);

  exp_bits = ir::Bitset(std::string("0"));
  idx = obj->type->elements.at("en")->impl.struct_index;
  EXPECT_EQ(exp_bits, ctrl_elem_bits[idx]);

  auto named_elems = intro.get_named_element_bits("ctrl");
  for(auto const& it : named_elems) {
    LOG4CXX_INFO(m_logger, "" << it.first << ": " << it.second);
  }
  ASSERT_EQ(4, named_elems.size());

  exp_bits = ir::Bitset(std::string("0"));
  EXPECT_EQ(exp_bits, named_elems["clk"]);
  exp_bits = ir::Bitset(std::string("1"));
  EXPECT_EQ(exp_bits, named_elems["reset"]);
  exp_bits = ir::Bitset(std::string("0"));
  EXPECT_EQ(exp_bits, named_elems["en"]);
  exp_bits = ir::Bitset(std::string(
      "0000000000000000000000000000000000000000000000000000000000000000"
    ));
  EXPECT_EQ(exp_bits, named_elems["op"]);

  engine.teardown();
}