亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? area.c.svn-base

?? 模擬多核狀態下龍芯處理器的功能
?? SVN-BASE
?? 第 1 頁 / 共 5 頁
字號:
/*------------------------------------------------------------
 *                              CACTI 4.0
 *         Copyright 2005 Hewlett-Packard Development Corporation
 *                         All Rights Reserved
 *
 * Permission to use, copy, and modify this software and its documentation is
 * hereby granted only under the following terms and conditions.  Both the
 * above copyright notice and this permission notice must appear in all copies
 * of the software, derivative works or modified versions, and any portions
 * thereof, and both notices must appear in supporting documentation.
 *
 * Users of this software agree to the terms and conditions set forth herein, and
 * hereby grant back to Hewlett-Packard Company and its affiliated companies ("HP")
 * a non-exclusive, unrestricted, royalty-free right and license under any changes, 
 * enhancements or extensions  made to the core functions of the software, including 
 * but not limited to those affording compatibility with other hardware or software
 * environments, but excluding applications which incorporate this software.
 * Users further agree to use their best efforts to return to HP any such changes,
 * enhancements or extensions that they make and inform HP of noteworthy uses of
 * this software.  Correspondence should be provided to HP at:
 *
 *                       Director of Intellectual Property Licensing
 *                       Office of Strategy and Technology
 *                       Hewlett-Packard Company
 *                       1501 Page Mill Road
 *                       Palo Alto, California  94304
 *
 * This software may be distributed (but not offered for sale or transferred
 * for compensation) to third parties, provided such third parties agree to
 * abide by the terms and conditions of this notice.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND HP DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL HP 
 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 * SOFTWARE.
 *------------------------------------------------------------*/

#include <math.h>
#include "def.h"
#include "areadef.h"
#include "stdio.h"
#include "basic_circuit.h"
#include <stdlib.h>

extern int force_tag, force_tag_size;//Added by Shyam 

//v4.1: Earlier all the dimensions (length/width/thickness) of the transistors and wires
//were calculated for the 0.8 micron process and then scaled to the input techology. Now
//all dimensions are calculated directly for the input technology, so area no longer needs to 
//be scaled to the input technology.

double
logtwo_area (double x)
{
  if (x <= 0)
    printf ("%e\n", x);
  return ((double) (log (x) / log (2.0)));
}

//double
//calculate_area (area_type module_area,double techscaling_factor)
//{
  //return (module_area.height * module_area.width * (1 / techscaling_factor) *
	  //(1 / techscaling_factor));
//}

area_type
inverter_area (double Widthp,double Widthn)
{
  double Width_n, Width_p;
  area_type invarea;
  int foldp = 0, foldn = 0;
  if (Widthp > 10.0 / FUDGEFACTOR)
    {
      Widthp = Widthp / 2, foldp = 1;
    }
  if (Widthn > 10.0 / FUDGEFACTOR)
    {
      Widthn = Widthn / 2, foldn = 1;
    }
  invarea.height = Widthp + Widthn + Widthptondiff + 2 * Widthtrack;
  Width_n =
    (foldn) ? (3 * Widthcontact +
	       2 * (Wpoly + 2 * ptocontact)) : (2 * Widthcontact + Wpoly +
						2 * ptocontact);
  Width_p =
    (foldp) ? (3 * Widthcontact +
	       2 * (Wpoly + 2 * ptocontact)) : (2 * Widthcontact + Wpoly +
						2 * ptocontact);
  invarea.width = MAX (Width_n, Width_p);
  return (invarea);
}

area_type
subarraymem_area (int C,int B,int A,int Ndbl,int Ndwl,double Nspd,int RWP,int ERP,int EWP,int NSER,double techscaling_factor)	/* returns area of subarray */
{
  area_type memarea;
  int noof_rows, noof_colns;

  //v4.1: Fixing double->int type conversion problems. EPSILON is added below to make sure
  //the final int value is the correct one 
  //noof_rows = (C / (B * A * Ndbl * Nspd));
  //noof_colns = (8 * B * A * Nspd / Ndwl);
  noof_rows = (int)((C / (B * A * Ndbl * Nspd)) + EPSILON);
  noof_colns = (int)((8 * B * A * Nspd / Ndwl) + EPSILON);

  memarea.height = ceil((double)(noof_rows)/16.0)*stitch_ramv+(BitHeight1x1+Widthtrack*2*(RWP+ERP+EWP-1))*noof_rows;
  memarea.width  = noof_colns*(BitWidth1x1+(Widthtrack*2*(RWP+(ERP-NSER)+EWP-1)+Widthtrack*NSER));
	/* dt
	was : memarea.height = ceil((double)(noof_rows)/16.0)*stitch_ramv+(BitHeight16x2+2*Widthtrack*2*(RWP+ERP+EWP-1))*ceil((double)(noof_rows)/2.0);
		  memarea.width  = ceil((double)(noof_colns)/16.0)*(BitWidth16x2+16*(Widthtrack*2*(RWP+(ERP-NSER)+EWP-1)+Widthtrack*NSER));
	now : use single cell for width and height
	*/

  //area_all_dataramcells =
    //Ndwl * Ndbl * calculate_area (memarea, techscaling_factor) * CONVERT_TO_MMSQUARE;
  area_all_dataramcells = Ndwl * Ndbl * memarea.height * memarea.width * CONVERT_TO_MMSQUARE;
  return (memarea);
}

area_type
decodemem_row (int C,int B,int A,int Ndbl,double Nspd,int Ndwl,int RWP,int ERP,int EWP)	/* returns area of post decode */
{
  int noof_colns, numstack;
  double decodeNORwidth;
  double desiredrisetime, Cline, Rpdrive, psize, nsize;
  area_type decinv, worddriveinv, postdecodearea;

  /*
  How many bit columns do we have in each subarray?
  Since our basic unit is the byte, we have 8 bits to the byte.
  Each Block is made up of B bytes -> 8*B
  If we have associativity A, then all the ways are mapped to one wordline -> 8*B*A
  If we mapped more than one set to each wordline (if Nspd > 1) than the wordline is longer again -> 8*B*A*Nspd
  If we have subdivided the global wordline into segments (if Ndwl > 1) than the local wordline is shorter -> 8*B*A*Nspd/Ndwl
  */
  //v4.1: Fixing double->int type conversion problems. EPSILON is added below to make sure
  //the final int value is the correct one 
  //noof_colns = 8 * B * A * Nspd / Ndwl;
  noof_colns = (int) (8 * B * A * Nspd / Ndwl + EPSILON);
  desiredrisetime = krise * log ((double) (noof_colns)) / 2.0;
  Cline = (2 * Wmemcella * Leff * Cgatepass + Cwordmetal) * noof_colns;
  Rpdrive = desiredrisetime / (Cline * log (VSINV) * -1.0);
  psize = Rpchannelon / Rpdrive;
  if (psize > Wworddrivemax)
    {
      psize = Wworddrivemax;
    }
  numstack =
    (int)ceil ((1.0 / 3.0) * logtwo_area ((double)
		       ((double) C / (double) (B * A * Ndbl * Nspd))));
  if (numstack == 0)
    numstack = 1;
  if (numstack > 5)
    numstack = 5;
  switch (numstack)
    {
    case 1:
      decodeNORwidth = WidthNOR1;
      break;
    case 2:
      decodeNORwidth = WidthNOR2;
      break;
    case 3:
      decodeNORwidth = WidthNOR3;
      break;
    case 4:
      decodeNORwidth = WidthNOR4;
      break;
    case 5:
      decodeNORwidth = WidthNOR4;
      break;
    default:
      printf ("error:numstack=%d\n", numstack);
      printf ("Cacti does not support a series stack of %d transistors !\n",
	      numstack);
      exit(0);
      break;

    }
  nsize = psize * Wdecinvn / Wdecinvp;
  decinv = inverter_area (Wdecinvp, Wdecinvn);
  worddriveinv = inverter_area (psize, nsize);
  /*
	was: postdecodearea.height = (BitHeight16x2+2*Widthtrack*2*(RWP+ERP+EWP-1));
  */
  postdecodearea.height = (2*BitHeight1x1+2*Widthtrack*2*(RWP+ERP+EWP-1));
  postdecodearea.width =
    (decodeNORwidth + decinv.height + worddriveinv.height) * (RWP + ERP +
							      EWP);
  return (postdecodearea);
}

//v4.1: Making noof_rows double since the variable colns_datasubarray is function area
//was made double and is used as an argument corresponding to noof_rows in function calls 
//to predecode_area
//area_type
//predecode_area (int noof_rows,int RWP,int ERP,int EWP)	/*returns the area of predecode */
area_type
predecode_area (double noof_rows,int RWP,int ERP,int EWP)
/* this puts the different predecode blocks for the different ports side by side and does not put them as an array or something */

{
  area_type predecode, predecode_temp;
  int N3to8;
  //v4.1: noof_rows can be less than 1 now since because Nspd can be a fraction. When
  //noof_rows is less than 1 making N3to8 1. This is not clean and needs to be fixed later. 
  if(noof_rows < 1) 
	N3to8 = 1;
  else 
	//v4.1: using integer casting below 
	//N3to8 = ceil ((1.0 / 3.0) * logtwo_area ((double) (noof_rows)));
      N3to8 = (int) (ceil ((1.0 / 3.0) * logtwo_area ((double) (noof_rows))));
  if (N3to8 == 0)
    {
      N3to8 = 1;
    }

  switch (N3to8)
    {
    case 1:
      predecode_temp.height = Predec_height1;
      predecode_temp.width = Predec_width1;
      break;
    case 2:
      predecode_temp.height = Predec_height2;
      predecode_temp.width = Predec_width2;
      break;
    case 3:
      predecode_temp.height = Predec_height3;
      predecode_temp.width = Predec_width3;
      break;
    case 4:
      predecode_temp.height = Predec_height4;
      predecode_temp.width = Predec_width4;
      break;
    case 5:
      predecode_temp.height = Predec_height5;
      predecode_temp.width = Predec_width5;
      break;
    case 6:
      predecode_temp.height = Predec_height6;
      predecode_temp.width = Predec_width6;
      break;
    default:
      printf ("error:N3to8=%d\n", N3to8);
      exit (0);

    }

  predecode.height = predecode_temp.height;
  predecode.width = predecode_temp.width * (RWP + ERP + EWP);
  return (predecode);
}

//v4.1: Making noof_rows double since the variable colns_datasubarray is function area
//was made double and is used as an argument corresponding to noof_rows in function calls 
//to postdecode_area
area_type
postdecode_area (int noof_rows,int RWP,int ERP,int EWP)
{
  //v4.1:	Making decodeNORwidth double which is what it should be
  //int numstack, decodeNORwidth;
  int numstack;
  double decodeNORwidth;
  area_type postdecode, decinverter;
  decinverter = inverter_area (Wdecinvp, Wdecinvn);
  //v4.1: noof_rows can be less than 1 now since because Nspd can be a fraction. When
  //noof_rows is less than 1 making N3to8 1. This is not clean and needs to be fixed later. 
  if(noof_rows < 1) 
	numstack = 1;
  else
    //v4.1: using integer casting below 
	//numstack = ceil ((1.0 / 3.0) * logtwo_area ((double) (noof_rows)));
    numstack = (int) (ceil ((1.0 / 3.0) * logtwo_area ((double) (noof_rows))));
  if (numstack == 0)
    numstack = 1;
  if (numstack > 5)
    numstack = 5;
  switch (numstack)
    {
    case 1:
      decodeNORwidth = WidthNOR1;
      break;
    case 2:
      decodeNORwidth = WidthNOR2;
      break;
    case 3:
      decodeNORwidth = WidthNOR3;
      break;
    case 4:
      decodeNORwidth = WidthNOR4;
      break;
    case 5:
      decodeNORwidth = WidthNOR4;
      break;
    default:
      printf ("error:numstack=%d\n", numstack);
      printf ("Cacti does not support a series stack of %d transistors !\n",
	      numstack);
      exit (0);
      break;

    }
  postdecode.height =
    (BitHeight + Widthtrack * 2 * (RWP + ERP + EWP - 1)) * noof_rows;
  postdecode.width =
    (2 * decinverter.height + decodeNORwidth) * (RWP + ERP + EWP);
  return (postdecode);
}

area_type
colmux (int Ndbl,double Nspd,int RWP,int ERP,int EWP,int NSER)	/* gives the height of the colmux */
{
  area_type colmux_area;
  colmux_area.height =
    (2 * Wiso + 3 * (2 * Widthcontact + 1 / FUDGEFACTOR)) * (RWP + ERP + EWP);//Shyam: Need to understand what the +1 is for
  colmux_area.width =
    (BitWidth + Widthtrack * 2 * (RWP + (ERP - NSER) + EWP - 1) +
     Widthtrack * NSER);
  return (colmux_area);
}

area_type
precharge (int Ndbl,double Nspd,int RWP,int ERP,int EWP,int NSER)
{
  area_type precharge_area;
  if (Ndbl * Nspd > 1)
    {
      precharge_area.height =
	(Wbitpreequ + 2 * Wbitdropv + Wwrite + 2 * (2 * Widthcontact + 1 / FUDGEFACTOR) +
	 3 * Widthptondiff) * 0.5 * (RWP + EWP);
      precharge_area.width =
	2 * (BitWidth + Widthtrack * 2 * (RWP + (ERP - NSER) + EWP - 1) +
	     Widthtrack * NSER);
    }
  else
    {
      precharge_area.height =
	(Wbitpreequ + 2 * Wbitdropv + Wwrite + 2 * (2 * Widthcontact + 1 / FUDGEFACTOR) +
	 3 * Widthptondiff) * (RWP + EWP);
      precharge_area.width =
	BitWidth + Widthtrack * 2 * (RWP + (ERP - NSER) + EWP - 1) +
	Widthtrack * NSER;
    }
  return (precharge_area);
}

area_type
senseamp (int Ndbl,double Nspd,int RWP,int ERP,int EWP,int NSER)
{
  area_type senseamp_area;
  if (Ndbl * Nspd > 1)
    {
      senseamp_area.height = 0.5 * SenseampHeight * (RWP + ERP);
      senseamp_area.width =
	2 * (BitWidth + Widthtrack * 2 * (RWP + (ERP - NSER) + EWP - 1) +
	     Widthtrack * NSER);
    }
  else
    {
      senseamp_area.height = SenseampHeight * (RWP + ERP);
      senseamp_area.width =
	BitWidth + Widthtrack * 2 * (RWP + (ERP - NSER) + EWP - 1) +
	Widthtrack * NSER;
    }
  return (senseamp_area);
}

/* define OutdriveHeight OutdriveWidth DatainvHeight DatainvWidth */

area_type
subarraytag_area (int baddr,int C,int B,int A,int Ntdbl,int Ntdwl,int Ntspd,double NSubbanks,int RWP,int ERP,
		  int EWP,int NSER,double techscaling_factor)	/* returns area of subarray */
{
  area_type tagarea;
  int noof_rows, noof_colns, Tagbits;
  int conservative_NSER;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人永久aaa| 国产毛片精品视频| 最新国产の精品合集bt伙计| 日韩久久精品一区| 欧美一级黄色大片| 日韩视频永久免费| 日韩欧美国产精品| 精品国产亚洲在线| 精品国产乱码91久久久久久网站| 日韩欧美综合在线| 精品国产1区二区| 国产亚洲一区二区三区在线观看 | 国产成人av影院| 美女免费视频一区二区| 六月丁香综合在线视频| 国产精品一二三四区| 成人在线视频一区| 欧美伊人久久久久久久久影院 | 日韩女优制服丝袜电影| 这里只有精品视频在线观看| 欧美一区二区二区| 久久―日本道色综合久久| 国产欧美一区二区三区鸳鸯浴| 国产欧美精品一区aⅴ影院| 亚洲欧洲日产国码二区| 一区二区三区丝袜| 日本欧美加勒比视频| 久久99九九99精品| 色综合天天狠狠| 在线播放欧美女士性生活| 26uuu另类欧美| 国产精品不卡在线观看| 亚洲国产综合91精品麻豆| 精品一区二区国语对白| 91在线高清观看| 这里只有精品免费| 国产精品久久久久影院| 午夜国产精品影院在线观看| 国产在线一区二区综合免费视频| 成人少妇影院yyyy| 欧美色综合天天久久综合精品| 亚洲精品一区二区三区在线观看 | 色欧美88888久久久久久影院| 欧美视频一区二区三区在线观看| 4438成人网| 亚洲天堂网中文字| 国产美女视频一区| 精品视频一区二区不卡| 中文字幕第一区| 天堂精品中文字幕在线| 丁香啪啪综合成人亚洲小说 | 成人av手机在线观看| 欧美系列一区二区| 中文字幕中文乱码欧美一区二区| 天堂成人免费av电影一区| jvid福利写真一区二区三区| 日韩免费电影一区| 日韩国产一二三区| 色婷婷久久久久swag精品 | 欧美日韩国产精选| 亚洲日本护士毛茸茸| 国产成人av网站| 日韩免费一区二区| 日韩精品每日更新| 91福利国产精品| 综合电影一区二区三区 | 亚洲色图在线看| 懂色av中文一区二区三区| 欧美精品一区二区三| 日本成人中文字幕| 7777精品伊人久久久大香线蕉| 亚洲免费观看在线视频| av网站一区二区三区| 中文字幕免费在线观看视频一区| 国精产品一区一区三区mba视频| 在线91免费看| 日韩精品免费专区| 日韩一区二区电影在线| 麻豆国产91在线播放| 日韩丝袜情趣美女图片| 美女一区二区久久| 久久久久国产精品厨房| 国产一区二区三区香蕉| 国产欧美日韩久久| a级精品国产片在线观看| 国产精品国产自产拍高清av| 99久久婷婷国产精品综合| 亚洲色图视频网站| 欧美日韩一区二区三区四区五区 | 精品国产一区二区三区av性色| 黄色资源网久久资源365| 精品电影一区二区| 成人亚洲精品久久久久软件| 日韩毛片精品高清免费| 欧美日韩1区2区| 国产一区二区看久久| 亚洲私人影院在线观看| 欧美日韩三级一区二区| 免费在线观看精品| 国产精品国产自产拍高清av王其 | 精品影视av免费| 国产丝袜美腿一区二区三区| 99re热视频这里只精品| 五月综合激情日本mⅴ| 久久综合九色综合97婷婷女人| www.66久久| 奇米在线7777在线精品| 中文字幕一区视频| 7777精品伊人久久久大香线蕉完整版| 韩国欧美国产1区| 18欧美亚洲精品| 欧美一区二区三区婷婷月色| 国产99精品国产| 爽爽淫人综合网网站| 国产日韩综合av| 欧美精品久久久久久久多人混战| 国内久久婷婷综合| 亚洲一区日韩精品中文字幕| 久久中文娱乐网| 欧美久久久影院| 北岛玲一区二区三区四区| 日韩在线卡一卡二| 亚洲视频香蕉人妖| 国产日韩欧美麻豆| 91精品国产综合久久婷婷香蕉| 风流少妇一区二区| 免费成人av资源网| 亚洲va韩国va欧美va精品| 中文字幕一区二区三区不卡| 日韩视频一区在线观看| 欧美午夜一区二区三区免费大片| 国产成a人亚洲| 久久se精品一区二区| 午夜伦欧美伦电影理论片| 亚洲乱码国产乱码精品精小说| 久久久精品tv| www激情久久| 欧美一区二区性放荡片| 欧美视频在线一区二区三区| 97se亚洲国产综合自在线不卡 | 成人av综合在线| 国内精品不卡在线| 久久97超碰色| 蜜桃av一区二区在线观看| 亚洲va欧美va天堂v国产综合| 亚洲精品欧美综合四区| 亚洲欧美日韩在线不卡| 中文字幕一区二区三区蜜月| 国产精品人人做人人爽人人添| 久久综合国产精品| 久久精品网站免费观看| 久久在线免费观看| 久久久久久久久久久久久女国产乱| 欧美一激情一区二区三区| 欧美一区二区免费视频| 欧美一区二区三区播放老司机| 欧美日韩成人一区二区| 91精品视频网| 日韩欧美国产一区二区在线播放| 日韩一区二区高清| 欧美精品一区二区蜜臀亚洲| 国产喂奶挤奶一区二区三区| 国产欧美一区二区在线| 自拍偷拍欧美精品| 亚洲午夜久久久久久久久电影院| 一区二区高清视频在线观看| 亚洲成a人在线观看| 日韩在线观看一区二区| 精品亚洲国产成人av制服丝袜| 韩国理伦片一区二区三区在线播放| 久久99精品国产麻豆不卡| 国产精品一二三| 一本久久精品一区二区| 欧美欧美午夜aⅴ在线观看| 日韩精品中文字幕一区二区三区 | 日本电影亚洲天堂一区| 91精品国产欧美一区二区18| 日韩欧美一区二区免费| 2022国产精品视频| 《视频一区视频二区| 午夜私人影院久久久久| 精品一区二区三区av| 99久久免费精品| 日韩午夜精品视频| 国产精品久久久久国产精品日日| 亚洲国产精品麻豆| 激情文学综合丁香| 欧美在线播放高清精品| 欧美大片国产精品| 国产精品亲子伦对白| 亚洲午夜在线电影| 国产伦精品一区二区三区免费| 欧美在线观看一二区| 久久久五月婷婷| 亚洲高清不卡在线| 粉嫩aⅴ一区二区三区四区五区| 欧美精品高清视频| 中文字幕一区二区三区在线播放| 男女激情视频一区| 色呦呦网站一区|