亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
蓝色福利精品导航| 欧美日韩免费一区二区三区视频| 成人福利视频在线| 欧美亚洲综合网| 久久精品亚洲麻豆av一区二区 | 亚洲国产一区二区在线播放| 免费成人美女在线观看.| 99精品偷自拍| 中文子幕无线码一区tr| 美女视频第一区二区三区免费观看网站 | 久久99精品一区二区三区| 97久久精品人人爽人人爽蜜臀| 欧美一级片在线观看| 亚洲女女做受ⅹxx高潮| 成人性生交大片免费看在线播放| 91精品国产综合久久精品app | 欧美成人精精品一区二区频| 亚洲一区二区三区国产| 91一区二区三区在线播放| 国产精品色哟哟| 丁香激情综合国产| 国产亚洲精品精华液| 狠狠色综合日日| 欧美一区午夜视频在线观看| 亚洲18色成人| 欧美绝品在线观看成人午夜影视| 一区二区三区四区亚洲| www.一区二区| 中文字幕中文字幕一区二区| 成人福利视频在线看| 国产精品拍天天在线| 99精品国产一区二区三区不卡| 日本一区二区久久| 91蜜桃免费观看视频| 日韩理论在线观看| 色国产综合视频| 亚洲chinese男男1069| 欧美久久一区二区| 美女视频黄 久久| 久久综合九色综合97婷婷| 国产在线看一区| 欧美国产日本视频| 91在线观看视频| 午夜视频一区在线观看| 日韩午夜在线播放| 国产精品系列在线播放| 亚洲特黄一级片| 欧美亚洲综合久久| 免费观看久久久4p| 国产亚洲欧美激情| 一本一道综合狠狠老| 亚洲国产精品视频| 久久先锋资源网| 不卡的av网站| 午夜电影网一区| 精品国产99国产精品| 懂色中文一区二区在线播放| 亚洲精品中文字幕在线观看| 制服丝袜中文字幕亚洲| 国产成人精品免费视频网站| 亚洲手机成人高清视频| 欧美老年两性高潮| 成人精品国产免费网站| 亚洲国产欧美在线| 久久精品欧美一区二区三区不卡 | 欧美三级一区二区| 国内精品在线播放| 悠悠色在线精品| 精品国产成人系列| 欧美中文字幕亚洲一区二区va在线| 日韩影院精彩在线| 国产精品免费av| 日韩情涩欧美日韩视频| 91在线观看地址| 精品一区二区国语对白| 一区二区三区日韩| 国产日韩精品一区二区三区在线| 在线视频一区二区三| 国产成人在线看| 日韩精品欧美精品| 亚洲图片另类小说| 日韩精品一区二区三区视频在线观看| av电影在线观看完整版一区二区| 婷婷综合五月天| 综合色中文字幕| 久久青草欧美一区二区三区| 欧美三级乱人伦电影| 不卡高清视频专区| 国产精品影视在线| 免费在线观看一区二区三区| 亚洲精品日韩专区silk| 久久久亚洲欧洲日产国码αv| 欧美日韩一区视频| 色88888久久久久久影院野外| 成人亚洲一区二区一| 国产麻豆欧美日韩一区| 免费在线观看成人| 午夜欧美电影在线观看| 亚洲免费观看在线视频| 欧美韩国日本综合| 国产午夜精品一区二区三区四区| 日韩午夜在线影院| 日韩视频在线你懂得| 欧美人妖巨大在线| 欧美日韩国产欧美日美国产精品| 91色在线porny| av电影在线不卡| 成人精品视频一区二区三区尤物| 国产精一区二区三区| 精品一区二区综合| 国产一区二区三区电影在线观看| 麻豆91在线播放| 蜜臀久久99精品久久久久宅男| 日韩高清不卡一区二区| 午夜精品123| 天天综合网天天综合色| 日韩va欧美va亚洲va久久| 天涯成人国产亚洲精品一区av| 天堂资源在线中文精品| 日韩福利视频导航| 九一九一国产精品| 国产成人在线视频播放| av亚洲精华国产精华精华| 99re免费视频精品全部| 在线观看亚洲精品视频| 欧美三级乱人伦电影| 欧美一区二区二区| 久久久久高清精品| 亚洲欧美视频在线观看视频| 亚洲小少妇裸体bbw| 日本在线不卡一区| 国产高清成人在线| 99re66热这里只有精品3直播 | 成人黄色小视频在线观看| 99国内精品久久| 在线一区二区三区四区五区| 欧美日韩亚洲国产综合| 日韩精品中文字幕在线不卡尤物| 久久网这里都是精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 中文字幕不卡在线观看| 亚洲另类在线一区| 日本aⅴ免费视频一区二区三区| 久久 天天综合| 成人毛片在线观看| 337p亚洲精品色噜噜狠狠| 久久精品亚洲麻豆av一区二区 | 色菇凉天天综合网| 日韩欧美国产精品| 国产欧美一区在线| 亚洲一卡二卡三卡四卡无卡久久 | 国产不卡高清在线观看视频| 色诱视频网站一区| 26uuu另类欧美亚洲曰本| 亚洲伦理在线精品| 国模冰冰炮一区二区| 91黄视频在线观看| 欧美精品一区二| 亚洲国产精品影院| 成人激情开心网| 欧美成人女星排行榜| 亚洲黄色小说网站| 国产盗摄一区二区三区| 欧美日韩www| 中文字幕一区不卡| 极品少妇xxxx偷拍精品少妇| 91首页免费视频| 久久综合色播五月| 亚洲成人1区2区| 99久久精品免费精品国产| 欧美电影免费观看高清完整版在| 日韩理论片在线| 成人免费福利片| 欧美一二三区在线| 亚洲小说欧美激情另类| 99久久99久久综合| 国产女人18毛片水真多成人如厕| 日韩国产精品久久| av不卡在线播放| 国产亚洲欧美色| 久久国产免费看| 日韩午夜精品电影| 亚洲国产日产av| 色av一区二区| 国产精品高潮久久久久无| 国产麻豆午夜三级精品| 日韩一区二区电影网| 亚洲地区一二三色| 91免费小视频| 亚洲色图欧美在线| 不卡电影一区二区三区| 国产精品色呦呦| 懂色av一区二区三区免费看| 精品国产露脸精彩对白| 热久久免费视频| 日韩精品一区二区三区中文不卡| 亚洲va中文字幕| 欧美日韩国产首页| 五月天网站亚洲| 91精品国产麻豆国产自产在线 |