⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cubestr.c

📁 主要进行大规模的电路综合
💻 C
字号:
/* * Revision Control Information * * $Source: /projects/mvsis/Repository/mvsis-1.3/src/sis/espresso/cubestr.c,v $ * $Author: wjiang $ * $Revision: 1.1.1.1 $ * $Date: 2003/02/24 22:24:07 $ * *//*    Module: cubestr.c -- routines for managing the global cube structure*/#include "espresso.h"/*    cube_setup -- assume that the fields "num_vars", "num_binary_vars", and    part_size[num_binary_vars .. num_vars-1] are setup, and initialize the    rest of cube and cdata.    If a part_size is < 0, then the field size is abs(part_size) and the    field read from the input is symbolic.*/void cube_setup(){    register int i, var;    register pcube p;    if (cube.num_binary_vars < 0 || cube.num_vars < cube.num_binary_vars)	fatal("cube size is silly, error in .i/.o or .mv");    cube.num_mv_vars = cube.num_vars - cube.num_binary_vars;    cube.output = cube.num_mv_vars > 0 ? cube.num_vars - 1 : -1;    cube.size = 0;    cube.first_part = ALLOC(int, cube.num_vars);    cube.last_part = ALLOC(int, cube.num_vars);    cube.first_word = ALLOC(int, cube.num_vars);    cube.last_word = ALLOC(int, cube.num_vars);    for(var = 0; var < cube.num_vars; var++) {	if (var < cube.num_binary_vars)	    cube.part_size[var] = 2;	cube.first_part[var] = cube.size;	cube.first_word[var] = WHICH_WORD(cube.size);	cube.size += ABS(cube.part_size[var]);	cube.last_part[var] = cube.size - 1;	cube.last_word[var] = WHICH_WORD(cube.size - 1);    }    cube.var_mask = ALLOC(pset, cube.num_vars);    cube.sparse = ALLOC(int, cube.num_vars);    cube.binary_mask = new_cube();    cube.mv_mask = new_cube();    for(var = 0; var < cube.num_vars; var++) {	p = cube.var_mask[var] = new_cube();	for(i = cube.first_part[var]; i <= cube.last_part[var]; i++)	    set_insert(p, i);	if (var < cube.num_binary_vars) {	    INLINEset_or(cube.binary_mask, cube.binary_mask, p);	    cube.sparse[var] = 0;	} else {	    INLINEset_or(cube.mv_mask, cube.mv_mask, p);	    cube.sparse[var] = 1;	}    }    if (cube.num_binary_vars == 0)	cube.inword = -1;    else {	cube.inword = cube.last_word[cube.num_binary_vars - 1];	cube.inmask = cube.binary_mask[cube.inword] & DISJOINT;    }    cube.temp = ALLOC(pset, CUBE_TEMP);    for(i = 0; i < CUBE_TEMP; i++)	cube.temp[i] = new_cube();    cube.fullset = set_fill(new_cube(), cube.size);    cube.emptyset = new_cube();    cdata.part_zeros = ALLOC(int, cube.size);    cdata.var_zeros = ALLOC(int, cube.num_vars);    cdata.parts_active = ALLOC(int, cube.num_vars);    cdata.is_unate = ALLOC(int, cube.num_vars);}/*    setdown_cube -- free memory allocated for the cube/cdata structs    (free's all but the part_size array)    (I wanted to call this cube_setdown, but that violates the 8-character    external routine limit on the IBM !)*/void setdown_cube(){    register int i, var;    FREE(cube.first_part);    FREE(cube.last_part);    FREE(cube.first_word);    FREE(cube.last_word);    FREE(cube.sparse);    free_cube(cube.binary_mask);    free_cube(cube.mv_mask);    free_cube(cube.fullset);    free_cube(cube.emptyset);    for(var = 0; var < cube.num_vars; var++)	free_cube(cube.var_mask[var]);    FREE(cube.var_mask);    for(i = 0; i < CUBE_TEMP; i++)	free_cube(cube.temp[i]);    FREE(cube.temp);    FREE(cdata.part_zeros);    FREE(cdata.var_zeros);    FREE(cdata.parts_active);    FREE(cdata.is_unate);    cube.first_part = cube.last_part = (int *) NULL;    cube.first_word = cube.last_word = (int *) NULL;    cube.sparse = (int *) NULL;    cube.binary_mask = cube.mv_mask = (pcube) NULL;    cube.fullset = cube.emptyset = (pcube) NULL;    cube.var_mask = cube.temp = (pcube *) NULL;    cdata.part_zeros = cdata.var_zeros = cdata.parts_active = (int *) NULL;    cdata.is_unate = (bool *) NULL;}void save_cube_struct(){    temp_cube_save = cube;              /* structure copy ! */    temp_cdata_save = cdata;            /*      ""          */    cube.first_part = cube.last_part = (int *) NULL;    cube.first_word = cube.last_word = (int *) NULL;    cube.part_size = (int *) NULL;    cube.binary_mask = cube.mv_mask = (pcube) NULL;    cube.fullset = cube.emptyset = (pcube) NULL;    cube.var_mask = cube.temp = (pcube *) NULL;    cdata.part_zeros = cdata.var_zeros = cdata.parts_active = (int *) NULL;    cdata.is_unate = (bool *) NULL;}void restore_cube_struct(){    cube = temp_cube_save;              /* structure copy ! */    cdata = temp_cdata_save;            /*      ""          */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -