1 / 26

專題製作

專題製作. CAD 競賽 Using Multi-Bit Flip-Flops for Clock Power Saving 學生 : 黃士庭 指導教授 : 曾奕倫 教授. Abstract. Multi-bit flip-flop 是一種有效節省電的實施方法,透過合併 flip-flops 可以有效地減少 clock dynamic power 和 flip-flop 的總面積。. 下圖顯示 2 個 single-bit flip-flops 合併成 1 個 2-bits flip-flops 。

art
Télécharger la présentation

專題製作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 專題製作 CAD競賽 Using Multi-Bit Flip-Flops for Clock Power Saving 學生:黃士庭 指導教授:曾奕倫 教授

  2. Abstract Multi-bit flip-flop是一種有效節省電的實施方法,透過合併 flip-flops可以有效地減少clock dynamic power和flip-flop的總面積。

  3. 下圖顯示2個single-bit flip-flops合併成1個2-bits flip-flops。 Single-bit flip-flops包含2個inverters, master-latch和slave-latch。

  4. 結合多個single-bit flip-flops成Multi-bit flip-flop可以減少2個inverters,使flip-flop的total clock dynamic power consumption和面積可以大幅減少。

  5. Introduction1. Problem Description Multi-bit flip-flops可以降低能源消耗,是因為flip-flop可以用分享inverter來減少inverter的數量,同時使總面積能夠最小。要能夠獲得這些優勢,我們必須確保我們的設計能夠符合某些限制。

  6. timing slack的限制:當使用Multi-bit flip-flops來取代1-bit flip-flops或者以上的時候,multi-bit flip-flop會制定新的routing length。 b.placement密度的限制,multi-bit flip-flop的面積會大於1-bit flip-flop,我們必須將它放置在一個新的地點。

  7. Implementation Data Structures struct info { long chip_size_w,chip_size_h; long grid_size_x,grid_size_y; long bin_size_w,bin_size_h; long density; }; 儲存chip的size ,grid的size,bin的size,和一個bin可 容納的density

  8. structchip_info { long bit_num; long power; long area; }; 儲存可以合併的flip flop的資料 bit_num是可合併的個數 power 為此形態的flip flop power是多少 area 為所佔的面積

  9. struct chip { long style; string name; long loca_x,loca_y; vector<long> connect; }; 儲存 input 檔所給的flip flop資料 style 為此flip flop型態 name 為此flip flop名稱 loca_xloca_y為此flip lfop位置 connet為此flip flop跟誰結合了

  10. struct pin { long style; long loca_x,loca_y; long slack; string name; string which_flip_flop; }; 儲存 pin 的資料 style 為此pin的型態 是input 或output loca_xloca_y為此pin的位置 slack 為此pin的slack neme為此pin的名稱 which_flip_flop為此pin 連到哪個flip flop

  11. struct block { string name; long loca_x,loca_y; long density; }; 儲存block 的資料 name 為此block的名稱 loca_xloca_y為此block的位置 density 為此block所佔的面積

  12. struct net { string name; string which_flip_flop; long slack; }; 儲存net 的資料 name 是pin的名稱 which_flip_flop是此pin連到哪個flip flop slack 是此pin的slack

  13. Algorithms Algorithm: Input: input_data 此input為所給的file,裡面包含了:library,flip_flop list,pin list,net list, 和block list。 Output: output_data output file包含了:flip flop list,net list,max placement density,和execution time。

  14. Begin  1. 將資料讀取進我們所規劃的資料結構裡 2. 計算我們所要合併的次數N Total flip flop<1000 N=5000 Total flip flop>1000 <5000 N=10000 Total flip flop>10000 <15000 N=15000 Total flip flop>15000 <20000 N=20000 Total flip flop>20000 N=25000

  15. 3. 選取資料裡最長的 slack然後除以bin_size 計算出等等要使用的boundary 4. For 0->N a. 隨機產生我們要合併多少個bit的flip flop 的數字。之後隨機挑選要合併的flip flop 並檢查是否超過要合併的數字。 b. 檢查之後選取到得flip flop是否坐落在第 一個選取到的flip flop周圍的bin。若沒 則重新選取。

  16. c. 利用所選取的flip flop的最左下角和最右 上角的座標形成一個四邊形,此四邊形 的範圍裡隨機選取要放置新合併的flip flop的位置。 d. 比對slack是否符合限制,再比對放置 新的flip flop在此位置是否符合density 的限制。 若不符合,gotostep.a N++

  17. 6. 更新資料結構裡的資料 7. 產生output檔

  18. 軟體特色 1.會依照使用者所給檔案的flip flop 數來控制要合併的次數 2.會依照使用者所給檔案的slack來計 算boundary 3.合併過後的flip flop可以再重複的合 併。

  19. 報告完畢 以下為附件:SOURCECODE

  20. Source Code 隨機產生BIT 數 do //rand how many bit we will combine { move_check = 1; //reset m=0; if(m == 0) // rand_bit = (rand() % max_bit) + 1; for(i=0; i<library.size(); i++) { if(rand_bit == library[i].bit_num && rand_bit != 1) { rand_bit_style = library[i].name; m=1; } } }while(m != 1);

  21. 確認邊界條件和重複選取,或已經結合了 do { bin_check = 0; rand_temp = rand() % flip_flop.size(); bin_num_x = flip_flop[rand_temp].loca_x/para[0].bin_size_w; bin_num_y = flip_flop[rand_temp].loca_y/para[0].bin_size_h; if(bin_num_x - bin_boundary < 0) boundary_lx = 0; else boundary_lx = bin_num_x - bin_boundary; if(bin_num_x + bin_boundary > para[0].chip_size_w/para[0].bin_size_w) boundary_rx = para[0].chip_size_w/para[0].bin_size_w; else boundary_rx = bin_num_x + bin_boundary; ……. if(bin_check == 1) { for(j=0, rt = flip_flop[rand_temp].connect.begin(); rt < flip_flop[rand_temp].connect.end(); j++, rt++) { if(rand_temp == flip_flop[rand_temp].connect[j]) { bin_check = 0; break; } }

  22. for(m=0, rt2 = rand_ff.begin(); rt2 < rand_ff.end(); m++, rt2 { if(rand_temp == rand_ff[m]) { bin_check = 0; break; } } } if(rand_ff_times++ > 99) break; }

  23. 擺放新的位置 do { n++; move_check = 1; posi_add_x = rand() % (max_x - min_x); //compute move value posi_add_y = rand() % (max_y - min_y); while(posi_add_x % para[0].grid_size_x !=0) { posi_add_x = rand() % (max_x - min_x); } while(posi_add_y % para[0].grid_size_y !=0) { posi_add_y = rand() % (max_y - min_y); } temp_posi_x = min_x + posi_add_x; temp_posi_y = min_y + posi_add_y; for(i=0, ft = flip_flop.begin(); ft < flip_flop.end(); i++, ft++) { check_all = 0; if(temp_posi_x == flip_flop[i].loca_x && temp_posi_y == flip_flop[i].loca_y { posi_add_x = rand() % (max_x - min_x); posi_add_y = rand() % (max_y - min_y); while(posi_add_x % para[0].grid_size_x !=0) { posi_add_x = rand() % (max_x - min_x); } }

  24. while(posi_add_y % para[0].grid_size_y !=0) { posi_add_y = rand() % (max_y - min_y); } temp_posi_x = min_x + posi_add_x; temp_posi_y = min_y + posi_add_y; i = 0; //reset ft = flip_flop.begin(); //reset }

  25. 比對SLACK for(rt=rand_ff.begin(),i=0;rt<rand_ff.end();rt++,i++) { for(nt=net_info.begin(),j=0;nt<net_info.end();nt++,j++) { if(net_info[j].which_flip_flop == flip_flop[rand_ff[i]].name) { for(pt=pin_info.begin(),m=0;pt<pin_info.end();pt++,m++) { if(pin_info[m].name == net_info[j].name) { final_slack = pin_info[m].slack + abs(flip_flop[rand_ff[i]].loca_x - pin_info[m].loca_x) + abs(flip_flop[rand_ff[i]].loca_y - pin_info[m].loca_y) - abs(pin_info[m].loca_x - temp_posi_x) - abs(pin_info[m].loca_y - temp_posi_y); if(final_slack < 0) { move_check = 0; break; } } } } if(move_check == 0) break; } if(move_check == 0) break; } }

  26. 比對density是否合乎規定 if(move_check == 1) //if slack OK { bin_num_x = (min_x + posi_add_x)/para[0].bin_size_w; bin_num_y = (min_y + posi_add_y)/para[0].bin_size_h; last_density = bin_array[bin_num_x][bin_num_y]; for(rt=rand_ff.begin(),i=0;rt<rand_ff.end();rt++,i++) { for(lt=library.begin(),j=0;lt<library.end();lt++,j++) { if(library[j].name == flip_flop[rand_ff[i]].style) { bin_array[bin_num_x][bin_num_y] = bin_array[bin_num_x][bin_num_y] - library[j].area; } } } for(lt=library.begin(),j=0;lt<library.end();lt++,j++) { if(library[j].bit_num == rand_bit) { bin_array[bin_num_x][bin_num_y] = bin_array[bin_num_x][bin_num_y] + library[j].area; break; } } if(bin_array[bin_num_x][bin_num_y] > para[0].density { bin_array[bin_num_x][bin_num_y] = last_density; move_check = 0; } }

More Related