Kāpēc FPGA patērē tik daudz bloku RAM.

H

hallovipin

Guest
Draugi,
Man ir būvētas viena 12 bitu 8K RAM iekšpusē FPGA (Spartan 3A).Šī FPGA ir 20K bloķēt ram iekšā.Bet ko es atrast ir IN-neskatoties uz, izmantojot tikai 8 k visa mana 20 k BLOCK RAM tagad izsmelta.

ir jāizskatās manā kodēšanas stilā.
vienmēr @ (posedge clk_adc) sākas /////////////////// Rakstīt izlīdzinošo //////////////////////
ja (write_enable)
ja (address_w == 13'b1111111111111)
sākt
address_w <= 13'b0000000000000;
beigas
cits sākas
int_ram [address_w] <= adc_data_in;
address_w <= address_w 13'b0000000000001;
beigas
beigasvienmēr @ (posedge CLK) sākas
if (! write_enable) sākas
address_curr <= address_r;
ja (address_r == 13'b1111111111111) sākas
address_r <= 13'0000000000000;
address_next <= 13'b0000000000000;
beigas
cits sākas
temp_sum <= temp_sum neg_check;
address_r <= address_r 13' b0000000000001;
address_next <= address_r 13' b0000000000001;
beigas

piešķirt neg_check = (int_ram [address_next]> int_ram [address_r]) address_next? (int_ram []-int_ram [address_r]): 12'd0;

attiecībā uz šo kodu ISE lieto 18K RAM.Vai tas ir tāpēc, ka es esmu lasījumā PTO dati norāda grēks vienu pulksteni (int_ram [address_next]-int_ram [address_r]) vai ir tur kaut kas cits.

ja tā, tad kā es varu atrisināt šo isse.Bet man ir divas datu punkti, lai padarītu calcultaions.

thanx

 
nav pilnīgi pārliecināts.lai pārliecinātos, nav tri-portu grupveida ram primitīvas ar Spartan.bet var būt par 1 rakstīt, 2 lasīt gadījums, izmantojot divreiz vairāk bloku ram.rakstīt ir vienāds abiem ram komplekti bloku, bet skan ir neatkarīgas.

Nākamais, Spartas doens't ir primitīvas, ar 12.b izejvielas, bet gan ir 9b/18b/36b/72b ieguldījumiem.Tādējādi daži telpa summa tiek izšķiesti.coregen varētu darīt labāku darbu, nekā sintēzes rīku, un samazināt summu izšķērdēta RAM.

Man ir aizdomas, dizains izmanto 20k.16k no nepieciešamības diviem skan, un pārējie zaudēja dēļ sliktas kartēšanas uz faktisko bloķēt auniem.

kā iepriekš, apskatīt pārveidojot šo dizainu uz FIFOs vai vienkārša divu portu bloķēt auniem.Viens veids, kā to izdarīt, ir izmantot lasīt rakstu:
(0 1) (1 2) (2 3) (3 4) ...
var pārvērst "lasīt" 0 "nolasīt 1 un veikals" lasīt 2 un izmantot uzglabā 1 "" lasīt 3 un izmantot uzglabā 2 "...

ja tas nav iespējams, tas varētu būt iespējams palaist lasīt pulksteni pie 2x (vai ātrāk).tad jūs varat nolasīt no divām adresēm divos pulksteni cikli - 1 vienā ciklā.

Turklāt, jūs izmantojat "write_enable" gan adc_clk un CLK procesus.ISE nedos jums brīdinājumus par to, bet tas dizains praktiski gandrīz vienmēr neizdoties beidzot.

visbeidzot, temp_sum lieto bez acīmredzamas inicializācijas vai atiestatīta.

 
@ Apmainīt

thanx daudz atbildes.

Kāpēc tur ir problēma, ja es izmantot write_enable gan CLK un adc_clk.Es amwriting datiem maza ātruma (adc_clk) un lasīšana ir ātri (CLK), tāpēc man ir pietiekami daudz laika pārstrāde arī.

write_enable ir tikai karogs, kas kontrolē lasīt rakstīt operācijas.blakus ir mans post tulkot simulācija ir perfekta.bet pat tad, ja u domāju, ka tā problēma, kas ir risinājums.

Tāpat kā sākotnējā kodu esmu reseting temp_sum kādreiz 5 pulksteni cikliem.

Es to izmēģināju, izmantojot divējādu ostas RAM caur coregen bet tas dod problēma, jo es neesmu pārliecināts, kurā veidu DP ram tiks izmantoti iepriekšminētajā nolūkā.Pievienots pēc 10 minūtēm:mad: Apmainīt
Ja u ir laiks var u PLZ Parādiet man ceļu, izmantojot FIFO par iepriekšminēto pieteikumu, kā u teica.

 
hallovipin:
domāt par to, kā FPGA tiek būvēti - daudz mazu elementu savienoti kopā ar dažiem konfigurējamas maršrutu.Jūsu "write_enable" signālu ieradīsies pie katra elementa nedaudz atšķirīgos laikos.Pat bez šī, loģiku kavēšanos no "write_enable" uz katru no ietekmētajiem reģistrēties būs savādāk.(Tas pats efekts uz nedaudz atšķirīgu pulkstenim kavēšanās).

Ja abi pulksteņi nav NO-TO ierobežojums, tad rezultāti būs nenoteikts, bet būs liela varbūtība nav laika gaitā (piemēram, 0,0001% / ciklu 1MHz sistēma ir nepilnības ļoti īsā laika periodā ).

Tas nozīmē, ka pulksteņi ir jābūt zināms, racionāla attiecības, kā arī noteikts posms atšķirība.Pretējā NO-TO ierobežojums nebūtu nekādas jēgas.

Es aicinu jūs aplūkot to, ko jūsu sistēma mēģina darīt.Mēģina pārvērst to par sistēmu, lasītu 1 unikāli jaunu vērtību ciklā, un izmanto iepriekš izlasīt vērtībām, lai veiktu dažus aprēķinus.

 
Bloķēt RAM vienmēr aizņemts pilnīgs atmiņas, vai jūs mēģināt, vai ne, lai mēģinātu izmantot visu bloku, ti, jūs aprunāt instantiate 2 10k brīvpieejas ar 20k bloks ......Izmantot izplata auni, lai īstenotu maza izmēra brīvpieejas ....Tas ir viss, ko es zinu ....Var būt mans apgalvojums ir nepareizs

 
@ UMAir

Tās nav, piemēram, ka bloķēt ram var izmantot daļēji.Ja es samazināt manu bufera izmēru uz 4k no 8k es esmu tikai patērē 65% no kopējā bloka ram.

Kā grupa izplata RAM kopā tā, lai tā darbotos kā bloķēt RAM.

 
Es piekrītu jums ....bet mans punkts bija jums aprunāt implanta 2 atsevišķas buferiem vai brīvpieejas tajā pašā ēkā ..īstenot divus 2k bloku brīvpieejas un redzēt, vai tie izmanto 1 8k bloku vai divi 8k bloki

 
@ UMAir ..

Oh My ---.Jums ir pilnīga taisnība.
Tagad Man velns.

Tā doesn't jautājums, kāda izmēra RAM jums veidot ....tā patērē visu bloku, lai vēl 3 mazliet RAM.
Thanx daudz ...tas patiešām palīdzēja man.
Tagad man būs jāpārdomā savas stratēģijas.Pievienots pēc 13 minūtēm:Grunts līnija ir:

U var izmantot 2 blokiem vienā RAM, bet u aprunāt izmantot vienotā grupālā par 2 aunus.

 

Welcome to EDABoard.com

Sponsor

Back
Top