int main(int argc, char** argv) { Verilated::commandArgs(argc, argv); if (argc != 1 && (argc != 3 || strlen(argv[1]) != 4 || strlen(argv[2]) != 6)) { cerr << "usage: " << argv[0] << " [HHMM ddmmyy]" << endl; exit(1); } const char *s_keypad = ""; static char s_gps[128]; const char *s_HHMM = argc == 3 ? argv[1] : NULL; const char *s_ddmmyy = argc == 3 ? argv[2] : NULL; build_gps_str(s_gps, sizeof(s_gps), s_HHMM, s_ddmmyy); create_chip(NULL); uart_input_str(s_keypad, s_gps); wait_processing(); static char regs[reg_num]; reg_snapshot(regs); static char buf[128]; extract_hash_regs(buf, sizeof(buf), regs); cout << buf << endl; finish_chip(); return 0; }
int main(int argc, char** argv) { Verilated::commandArgs(argc, argv); if (argc != 1 && (argc != 3 || strlen(argv[1]) != 4 || strlen(argv[2]) != 6)) { cerr << "usage: " << argv[0] << " [HHMM ddmmyy]" << endl; exit(1); } const char *s_keypad = ""; static char s_gps[128]; const char *s_HHMM = argc == 3 ? argv[1] : NULL; const char *s_ddmmyy = argc == 3 ? argv[2] : NULL; build_gps_str(s_gps, sizeof(s_gps), s_HHMM, s_ddmmyy); create_chip(NULL); uart_input_str(s_keypad, s_gps); wait_processing(); static char regs[reg_num]; reg_snapshot(regs); FILE *fp = fopen("problem.spec", "w"); if (fp == NULL) { perror("can't write to problem.spec"); return 1; } // add constraint fprintf(fp, "=%s\t1\n", lock_reg_input_net); // add incognita set<int> exclude_reg; for (int i = 0; i < 256; i++) { for (int j = 0; keypad_regs[i][j] != -1; j++) { const int kreg = keypad_regs[i][j]; exclude_reg.insert(kreg); if (strcmp(reg_en[kreg], "1'b1")) fprintf(fp, "%s\t?\n", reg_names[kreg]); } } // add register values for (int i = 0; i < reg_num; i++) { if (exclude_reg.find(i) == exclude_reg.end()) fprintf(fp, "%s\t%d\n", reg_names[i], regs[i]); } fclose(fp); const int ret = system("./solve_circuit.py chip.v problem.spec"); finish_chip(); return 0; }
/*ARGSUSED*/ static int create_chips(topo_mod_t *mod, tnode_t *pnode, const char *name, topo_instance_t min, topo_instance_t max, void *arg, nvlist_t *auth, int mc_offchip) { fmd_agent_hdl_t *hdl; nvlist_t **cpus; int nerr = 0; uint_t i, ncpu; if (strcmp(name, CHIP_NODE_NAME) != 0) return (0); if ((hdl = fmd_agent_open(FMD_AGENT_VERSION)) == NULL) return (-1); if (fmd_agent_physcpu_info(hdl, &cpus, &ncpu) != 0) { whinge(mod, NULL, "create_chip: fmd_agent_physcpu_info " "failed: %s\n", fmd_agent_errmsg(hdl)); fmd_agent_close(hdl); return (-1); } fmd_agent_close(hdl); for (i = 0; i < ncpu; i++) { nerr -= create_chip(mod, pnode, min, max, cpus[i], auth, mc_offchip); nvlist_free(cpus[i]); } umem_free(cpus, sizeof (nvlist_t *) * ncpu); if (nerr == 0) { return (0); } else { (void) topo_mod_seterrno(mod, EMOD_PARTIAL_ENUM); return (-1); } }