ENARM
Memory · Կոմպայլերային & IP Օրինակներ

Memory Types & Operating Modes

Մեկ ցիկլի ընթացքում հիշողության օրինակի կարողությունները՝ սա է ամբողջ պատմությունը: Որոշ կոմպայլերային հիշողություններ կարող են մեկ ցիկլում կատարել միայն read կամ write: Ոմանք կարող են կատարել երկուսը միաժամանակ: Ոմանք RTL-ում թվում են երկու պորտ, մինչդեռ ունեն մեկ բիթբջիջի պորտ և մեկ ժամացույց: Այս էջը վերաբերում է սարքաշարին և դրա աշխատանքային ռեժիմներին — անկախ որևէ կոնկրետ EDA գործիքից կամ կոմպայլերից:

1P SRAM True 2-Port Pseudo 2-Port TCAM ROM

Այն Մեկ Հարցը, Որը Որոշում Է Տեսակը

Բջիջի ժամացույց(ներ)ի մեկ ցիկլում կարո՞ղ է զանգվածը կատարել մեկից ավել գործողություն: Ամեն ինչ մյուսը — ինչպես է այն անվանվում, ինչպես է բնութագրվում, ինչպես է օգտագործվում — բխում է այս հարցի պատասխանից:

ՏեսակԺամացույցներRTL պորտերԲիթբջիջի պորտերՆույն ցիկլում՝ readՆույն ցիկլում՝ writeՆույն ցիկլում՝ read & write
1P SRAM 1 — CLK 1 հասցե / 1 տվյալ 1 այո (write-ի փոխարեն) այո (read-ի փոխարեն) ոչ
True 2-Port 2 — CLKA, CLKB 2 անկախ 2 այո մեկ պորտում այո մեկ պորտում այո — ամեն պորտում առանձին, կամ երկուսում միասին
Pseudo 2-Port 1 — CLK 2 (առանձին R և W փին) 1 այո այո ոչ իսկապես — R, ապա W նույն ժամացույցում
TCAM 1 — CLK 1 + համեմատման ավտոբուս 1 (+ match lines) այո (աղյուսակի հասանելիություն) այո (գրառման թարմացում) ոչ — compare կամ R/W, ոչ երկուսը
ROM 1 — CLK 1 հասցե / 1 տվյալի-ելք 1 (mask / via բիթեր) այո ոչ ոչ
RTL պորտերը բիթբջիջի պորտեր չեն Pseudo 2-port-ն ունի երկու հասցեական ավտոբուս netlist-ում (read հասցե և write հասցե), ուստի նախագծողը մտածում է 2-port տերմիններով: Կոմպայլերի ներսում դա դեռ 1-port զանգված է — այն չի կարող միաժամանակ պահել read և write նույն բիթբջիջում նույն պահին: True 2-port-ն ունի երկու ֆիզիկական հասանելիության ուղի և երկու ժամացույց:

Հինգ Տեսակները Մեկ Հայացքով

1P

1-Port SRAM

Մեկ ժամացույց, մեկ հասցե: Ցիկլը կամ read է, կամ write:

Ժամացույցներ 1 (CLK)·Նույն ցիկլում R կամ W·Անուն SAS/SAC/SAD, կամ ցանկացած *1P*
2P

True 2-Port

Երկու ժամացույց, երկու պորտ: Read A-ում և write B-ում նույն ցիկլում՝ օրինական է:

Ժամացույցներ 2 (CLKA, CLKB)·Նույն ցիկլում R և W·Անուն RLS + 2P
P2P

Pseudo 2-Port

RTL-ում նման է 2P-ի: Մեկ ժամացույց: Ներքուստ՝ read-ապա-write (կամ write-ապա-read):

Ժամացույցներ 1 (CLK)·Նույն ցիկլում հաջորդական R ապա W·Անուն ULS + 2P
CAM

TCAM

Թանկարժեք ցիկլը compare-ն է. ամեն գրառում փնտրվում է զուգահեռաբար:

Ժամացույցներ 1 (CLK)·Նույն ցիկլում compare կամ R/W·Անուն TCS, SAHT
ROM

ROM

Բիթերը via- կամ mask-ծրագրավորված են: Ֆունկցիոնալ ցիկլերը միայն read են:

Ժամացույցներ 1 (CLK)·Նույն ցիկլում միայն read·Անուն ASD, ASDVD
⤢ Սեղմեք խոշորացնելու համար 1P SRAM 1 bitcell port CLK true 2-port 2 bitcell ports CLKA CLKB pseudo 2-port 1P array R / W mux CLK TCAM compare rows match lines CLK ROM via / mask bits CLK

Յուրաքանչյուր տեսակ հանգում է նրան, թե քանի ֆիզիկական բիթբջիջի պորտ ունի և քանի ժամացույց է վարում դրանք — միայն սա է որոշում, թե ինչ կարող է տեղի ունենալ մեկ ցիկլում:

1-Port SRAM

1P SRAM-ն ունի մեկ ժամացույց և մեկ հասցեական պորտ: Ցանկացած ցիկլում կառավարիչը ակտիվացնում է կամ read enable, կամ write enable: Բիթբջիջը բացվում է մեկ անգամ. այս պորտում չեք կարող նույն ցիկլում կարդալ հին արժեքը և գրել նոր արժեք նույն (կամ այլ) բառի համար:

Ինչ կարող է լինել ցիկլը.

Խառնուրդը, ինչպիսին "կեսը read ցիկլեր են, կեսը write" — վիճակագրական նկարագրություն է շատ ցիկլերի ընթացքում — ոչ թե երկու գործողություն մեկ ցիկլում:

ցիկլ 1
ցիկլ 2
ցիկլ 3
ցիկլ 4
ցիկլ 5
ցիկլ 6
1P
READ
WRITE
READ
IDLE
WRITE
READ

Մեկ ժամացույց, մեկ բիթբջիջի պորտ — ամեն ցիկլ ուղիղ read է, write է կամ idle, երբեք խառնուրդ:

Կոմպայլերի անուններ. SAS*, SAC*, SAD*, երբ նաև ULS/RLS/TCS 2P չեն. նաև …ULS…1P*, …RLS…1P*, SADULS*, SASSLS*, SADCLS*: ULS + 1P դեռ 1P է: Նույնը՝ RLS + 1P-ի համար:

True 2-Port (Ռեգիստրային Ֆայլ / Dual-Port SRAM)

True 2-port-ն ունի երկու ֆիզիկական հասանելիության ուղի դեպի զանգվածը և սովորաբար երկու ժամացույց. CLKA A պորտի համար և CLKB B պորտի համար: Ժամացույցները կարող են ունենալ նույն հաճախությունը և հավասարեցված լինել, կամ լինել անկախ: Յուրաքանչյուր պորտ ունի իր հասցեն և իր read/write կառավարումը:

Երկու ժամացույցների մեկ ցիկլում (երբ դրանք համընկնում են), բջիջը կարող է.

Այս միաժամանակյա զույգը read_write (dual-port) ռեժիմն է — գործողություն, որը 1P-ն ու pseudo 2-port-ը չեն կարող կատարել: Հոսանքը մոտավորապես «read գումարած write» է նույն պատուհանում, երկու ժամացույցի փինով:

ցիկլ 1
ցիկլ 2
ցիկլ 3
ցիկլ 4
ցիկլ 5
ցիկլ 6
պորտ A
READ
READ
WRITE
READ
WRITE
READ
պորտ B
WRITE
WRITE
READ
WRITE
READ
WRITE

Երկու անկախ բիթբջիջի պորտ, երկու ժամացույց — A և B պորտերը կարող են ամեն ցիկլում կարդալ կամ գրել, անկախաբար:

Կոմպայլերի անուններ. RLS գումարած 2P — SACRLS0G4S2P*, SACRLS0G4L2P*, SACRLS0G4U2P*, SASRLS0G0*2P*: 2P-ից առաջ եկող տառը (S / L / U) արագության / leakage bin է, ոչ թե այլ տեսակ:

Բախում Եթե երկու պորտերն էլ գրում են նույն հասցեում նույն ցիկլում, կոմպայլերը որոշում է, թե ով է հաղթում (կամ արժեքը անորոշ է): Սա նախագծման կանոն է, ոչ թե հիշողության երրորդ տեսակ:

Pseudo 2-Port

Pseudo 2-port-ը այն տեսակն է, որը մարդիկ շփոթում են true 2-port-ի հետ: RTL wrapper-ը բացում է read հասցե և write հասցե, որպեսզի բլոկը կարողանա տալ երկուսն էլ նույն architectural ցիկլում: Silicon-ը դեռ 1-port բիթբջիջային զանգված է մեկ ժամացույցով (CLK): Չկա CLKA / CLKB:

Ինչ իրականում տեղի է ունենում այդ մեկ ժամացույցում.

  1. Ներքին mux-ը սկզբում բիթբջիջը տալիս է write-ին (կամ read-ին):
  2. Ապա տալիս է մյուս գործողությանը:
  3. Դրսից նայելիս դա երևում է որպես «այս ցիկլում կարդացի և գրեցի»: Ներսում դա երկու կես-գործողություն հաջորդաբար է, ոչ թե երկու պորտ միաժամանակ:

Ահա թե ինչու բնութագրված ռեժիմը հաճախ կոչվում է pwl_read_write (piecewise-linear read-ապա-write մեկ ժամացույցում) կամ mode sequence read → write → read → write: Նույն սարքաշարային գաղափարը. մեկ ժամացույց, երկու քայլ, երբեք իսկական dual-port հոսանքի գագաթնակետ:

ցիկլ 1
ցիկլ 2
ցիկլ 3
ցիկլ 4
ցիկլ 5
ցիկլ 6
RTL տեսք
R+W
R+W
R+W
R+W
R+W
R+W
ներսում
R ապա W
R ապա W
R ապա W
R ապա W
R ապա W
R ապա W

RTL տեսքը (վերևում) ամեն ցիկլում երևում է որպես միաժամանակյա read+write; զանգվածի ներսում (ներքևում) այն միշտ հաջորդական է — մեկ ժամացույց, երկու քայլ:

Կոմպայլերի անուններ. ULS գումարած 2P — SACULS0G4L2P*, SACULS0G4U2P*, SASULS0G4U2P*: SACULS0G4L1P*-ը չէ այս տեսակը — այդ բջիջը 1P SRAM է նույն ULS կոմպայլերից:

TCAM

Ternary CAM-ը պահում է բիթեր, որոնք կարող են լինել 0, 1 կամ X (don't care): Ցիկլը, որը այն դարձնում է CAM, compare / search-ն է. compare ավտոբուսը մղվում է ամեն բառի վրա զուգահեռաբար, match line-երն աշխատում են, հիթը (կամ հիթերի ցանկը) դուրս է գալիս: Դա SRAM read չէ — շատ ավելի շատ wordline / match line են փոխարկվում, ուստի compare-ը ամենաբարձր հոսանքի ռեժիմն է:

TCAM-ն ունի նաև սովորական read և write, որպեսզի ծրագրակազմը կարողանա տեղադրել կամ արտահանել գրառումները: Դրանք 1-port աղյուսակային հասանելիություններ են: Մեկ ժամացույցում կատարվում է մեկը.

Դուք չեք համեմատում և գրում աղյուսակը նույն ցիկլում: Մեկ ժամացույց (CLK):

ցիկլ 1
ցիկլ 2
ցիկլ 3
ցիկլ 4
ցիկլ 5
ցիկլ 6
TCAM
COMPARE
COMPARE
WRITE
COMPARE
READ
COMPARE

Compare-ը գերակշռում է TCAM-ի ցիկլային խառնուրդում; աղյուսակի read/write-ը ընդհատակի, ցածր հոսանքով 1-port հասանելիություններ են, որոնք ընդմիջվում են դրա հետ:

Կոմպայլերի անուններ. TCS (օրինակ՝ SADTCS0G4L1P*) և SAHT* (hash / CAM ընտանիք որոշ node-երում):

ROM

Via-ROM-ը կամ mask-ROM-ը բիթերը ներկառուցված ունի metal-ների / via-ների մեջ: Ֆունկցիոնալ write գոյություն չունի: Մեկ ժամացույց, մեկ հասցե, տվյալի ելք: Միակ իրական աշխատանքային ռեժիմը read-ն է: Standby-ն պարզապես «read չի կատարվում»:

ցիկլ 1
ցիկլ 2
ցիկլ 3
ցիկլ 4
ցիկլ 5
ցիկլ 6
ROM
READ
READ
IDLE
READ
READ
IDLE

Write ռեժիմ ընդհանրապես գոյություն չունի — ROM ցիկլը կամ read է, կամ idle:

Կոմպայլերի անուններ. ASD*, ASDVD*: Դրանք բլոկի բջիջների ցանկերում հանդիպում են շատ ավելի հազվադեպ, քան SRAM-երը:

Աշխատանքային Ռեժիմները՝ Մանրամասն

«Ռեժիմը» մեկ բնութագրված եղանակ է, թե ինչպես է բջիջը հոսանք ծախսում մեկ ցիկլում (կամ հաջորդական մեկ զույգ քայլում): Ստորև ներկայացված անունները սովորական գրադարանային / AVM անուններն են:

ՌեժիմԻնչ է անում silicon-ը այդ քայլումՕրինական էՆույն ցիկլում զուգակցում
read / avm_read Մեկ wordline, sense: Տվյալ դուրս: 1P, 2-port (ըստ պորտի), p2p (որպես մեկ քայլ), TCAM (աղյուսակային read), ROM Մենակ 1P / ROM / TCAM-ում: True 2-port-ում կարող է հարևան լինել մյուս պորտի write-ի հետ:
write / avm_write Մեկ wordline, bitline drivers-ը ուժով մտցնում է նոր տվյալ: 1P, 2-port, p2p (որպես մեկ քայլ), TCAM (թարմացում) Մենակ 1P / TCAM-ում: Երբեք ROM-ում: True 2-port-ում կարող է հարևան լինել մյուս պորտի read-ի հետ:
standby / standby_trig Զանգվածի հասանելիություն չկա: Ժամացույցային / trigger տրամաբանությունը կարող է դեռ փոխարկվել: 1P (երբեմն օգտագործվում է որպես երրորդ հավանականություն) Հասանելիություն չէ: Օգտագործվում է idle ցիկլերը խառնուրդում նկարագրելու համար:
read_write / avm_read_write Երկու պորտն էլ ակտիվ նույն պահին. read-ը և write-ը համընկնում են: Միայն True 2-port Սա հենց նույն ցիկլի R+W-ն է: Անօրինական է ULS 2P-ում կամ 1P-ում — այդ բջիջները նման վիճակ չունեն:
pwl_read_write Մեկ ժամացույց: Piecewise ալիք. read հոսանք, ապա write հոսանք (կամ հակառակը), դեռ մեկ CLK եզր: Միայն Pseudo 2-port RTL-ին երևում է որպես R+W: Ներքուստ՝ երկու քայլ: Ոչ նույն հոսանքի ձևը, ինչ իսկական read_write-ը:
mode_sequence [read, write] Նույն p2p գաղափարը, բացահայտ ցիկլով ասված. ցիկլ N = read, ցիկլ N+1 = write, կրկնել: Կամ երկու փուլ մեկ ժամացույցում, եթե period-ը սահմանված է կես ցիկլի: Pseudo 2-port Մի համատեղեք pwl_read_write-ի հետ նույն բջիջում — ընտրեք մեկ նկարագրություն:
compare / avm_compare Որոնման բանալին ընդդեմ ամեն գրառման: Match line-եր: TCAM-ի ամենաբարձր հոսանքը: Միայն TCAM Չի համատեղվում աղյուսակի write-ի հետ նույն ցիկլում:

Ինչպես Են Ռեժիմները Երևում Ժամանակի Ընթացքում

⤢ Սեղմեք խոշորացնելու համար ժամանակ → ամեն «ատամ» մեկ ժամացույց է (երկու ատամ 2-port տողում, եթե A-ն և B-ն երկուսն էլ աշխատում են) 1P read կամ write 2P երկու պորտն էլ ամեն ցիկլում P2P R ապա W մեկ CLK-ում TCAM compare, ապա հնարավոր write ROM միայն read

Յուրաքանչյուր տողի հոսանքի ձևը ուղիղ բխում է իր պորտ/ժամացույց քանակից — միայն 2P-ն է ցույց տալիս երկու անկախ ատամ ցիկլում; մնացածը՝ մեկ:

Հավանականությունները Ցիկլերի Միջև Են

read = 0.5, write = 0.5 1P-ում նշանակում է. երկար ընթացքում հասանելի ցիկլերի մոտավորապես կեսը նման է read-ի, կեսը՝ write-ի: Դա չի նշանակում, որ բջիջը կարդում ու գրում է մեկ ցիկլում: standby = 0.5 ավելացնելը read 0.3 / write 0.2-ի հետ նշանակում է, որ ցիկլերի կեսը ընդհանրապես չի հասանելիանում զանգվածին:

Sequence / PWL-ը Ցիկլի Ներսում Է (P2P)

Pseudo 2-port-ում գրադարանը կամ հրապարակում է մեկ PWL ձև (read հատված գումարած write հատված մեկ CLK-ի տակ), կամ դուք գրում եք երկու հատվածները որպես sequence: Ցանկացած դեպքում կա միայն մեկ ժամացույցի փին: Հոսանքի գագաթնակետը սովորաբար ավելի ցածր և լայն է, քան true 2-port read_write-ը:

Ինչպես Կարդալ Բջիջի Անունը

Կոմպայլերը փաթեթավորում է տեսակը անվան մեջ: Առաջին 1P / 2P-ը, որը գտնվում է չափից (272X55) առաջ, պորտի դաշտն է: Ավելի ուշ C1P0-ը վերջում mux/bank կոնֆիգուրացիա է, ոչ թե պորտի քանակ:

SA C ULS 0G4 U 2P 272X55…
SA SRAM / RF / CAM ընտանիք C / S / D կոմպայլերի տարբերակ (SAC, SAS, SAD) ULS 1-port ուլտրացածր-leakage կոմպայլեր 0G4 պրոցես / տարբերակ (որոշ node-եր օգտագործում են 0G0) L / S / U leakage / արագության bin 2P փաթեթավորված որպես երկու պորտ (այստեղ՝ pseudo, քանի որ ULS) 272X55 բառեր × բիթեր
Token1P-ով2P-ով
ULS1-port SRAM (մեկ CLK, R կամ W)pseudo 2-port (մեկ CLK, R ապա W)
RLS1-port SRAMtrue 2-port (CLKA + CLKB, R և W)
TCS / SAHTTCAM (compare կամ R/W)— համարեք TCAM, եթե տեսնում եք
ASDROM (միայն read)—
հասարակ SAS / SAC / SAD1-port SRAMնայեք RLS / ULS-ին, նախքան 1P ենթադրելը
Մի դասակարգեք միայն ULS-ից կամ RLS-ից SACULS0G4L1P*-ը 1P է: SACULS0G4L2P*-ը pseudo 2-port է: SACRLS0G4L1P*-ը 1P է: SACRLS0G4U2P*-ը true 2-port է:

Cheatsheet

type              clocks     same-cycle access              typical name
--------------------------------------------------------------------------------
1P SRAM           CLK        READ or WRITE                  SAS* SAC* SAD*  *1P*
true 2-port       CLKA,CLKB  READ and WRITE (two ports)     *RLS*2P*
pseudo 2-port     CLK        READ then WRITE (one port)     *ULS*2P*
TCAM              CLK        COMPARE or READ or WRITE       *TCS*  SAHT*
ROM               CLK        READ                           ASD*  ASDVD*

modes
  read / avm_read              single-port or per-port read
  write / avm_write            single-port or per-port write
  standby / standby_trig       no array access
  read_write / avm_read_write  true 2-port only  -- both ports at once
  pwl_read_write               pseudo 2-port only -- R then W on CLK
  sequence [read, write]       same as p2p, spelled out
  compare / avm_compare        TCAM search