La position actuelle:Accueil du site>RAM / FIFO Learning Review

RAM / FIFO Learning Review

2022-05-14 15:02:26Nall Oui.

RAM/FIFO Examen de l'apprentissage

L'atome du point de référenceFPGAGuide de conception logique

&&githubLe Code de l'un des grands(async_fifo)

sp_ram(Port unique)

StockageramUn modèle de tableau suffit,Sélectionnez en fonction de la profondeur et de la largeur.

reg [7:0] ram [31:0] ; //ram Données

Assigner une valeur basée sur le signal activé

always @(posedge clock ) begin
	if(wen && en)
		ram[address] <= data;
end

always @(posedge clock ) begin
	if(( wen == 1'b0) && en)
		q <= ram[address];
	else
		q <= 8'hx ;
end

Un module de lecture - écriture est nécessaire pour actionner l'adresse de lecture - écriture et le signal d'activation de lecture - écriture,Et c'est là queSp_ramModule.
Les résultats de la simulation sont présentés dans la figure
Insérer la description de l'image ici

tp_ram(Pseudo - Double Port)

L'idée de base est similaire,La différence avec un seul port est qu'il est possible de lire et d'écrire simultanément,Il y a aussi une situation extrême,Lire trop vite,Une technique est nécessaire:Lire, porter, écrire,Assignez la valeur à écrire directement à la lecture.
Insérer la description de l'image ici

sync_fifo(Synchroniserfifo)

Synchroniserfifo La clé de la conception est le pointeur de lecture / écriture
Insérer la description de l'image ici
Insérer la description de l'image ici
fifoCalcul de la quantité de données

always @ (posedge clk or negedge rst) begin
	if (rst == 1'b0)
	 count <= 0;
	else begin 
		case({wr_en,rd_en})
		2'b00:count<= count;
		2'b01:
			if(count!==5'b00000)
			count<=count-1;
		2'b10:
			if(count!== max1_count)
			count<=count+1;
		2'b11:count<=count;
		endcase
		end
end

Jugement du drapeau vide et complet

always @(count) begin
	if(count==5'b00000)
		empty = 1;
	else
		empty = 0;
end

always @(count) begin
	if (count== max_count)
		full = 1;
	else
		full = 0;
end

Synchroniserfifo Généralement utilisé pour la mise en cache des données
La figure suivante est un diagramme de simulation
Insérer la description de l'image ici

async_fifo(Asynchronefifo)

Points saillants: Conversion binaire en Code gris , Nombre de champs de code gris , Comment utiliser le Code gris pour juger de la marque pleine et vide
Synchronisation de l'adresse de lecture au champ write Clock , L'adresse d'écriture doit être synchronisée avec le champ d'horloge de lecture

[email protected](posedge fifo_wr_clk or negedge rst_n)
		if(!rst_n)begin
			sync_r2w_r1 <= 11'd0;
			sync_r2w_r2 <= 11'd0;
		end else begin
			sync_r2w_r1 <= gray_rdaddress;
			sync_r2w_r2 <= sync_r2w_r1;		
		end
[email protected](posedge fifo_rd_clk or negedge rst_n)
		if(!rst_n)begin
			sync_w2r_r1 <= 11'd0;
			sync_w2r_r2 <= 11'd0;
		end else begin
			sync_w2r_r1 <= gray_wraddress ;
			sync_w2r_r2 <= sync_w2r_r1;		
		end	

Le Code gris doit être utilisé pendant la synchronisation , Éviter les changements simultanés de bits binaires , Créer un phénomène concurrentiel

assign gray_rdaddress = (rdaddress >>1) ^ rdaddress;//(({1'b0,rdaddress[9:1]}) ^ rdaddress);	
assign gray_wraddress = (({1'b0,wraddress[10:1]}) ^ wraddress);

Comment le Code Grey juge - t - il le vide? .
Vide: Lire plus vite que écrire , Le pointeur de lecture a rattrapé le pointeur d'écriture
Plein.: Écrire plus vite que lire , Écrire au - delà du pointeur d'écriture

assign fifo_empty = (gray_rdaddress == sync_w2r_r2);
assign fifo_full = (gray_wraddress == {~sync_r2w_r2[10:9],sync_r2w_r2[8:0]});

Méthodes d'essai de performance: Tester deux cas de lecture rapide et d'écriture lente et de lecture lente et d'écriture rapide respectivement fifoRéaction
Insérer la description de l'image ici
Insérer la description de l'image ici
fifo Il y a des limites de performance , Lorsque l'écart réel entre les horloges de lecture et d'écriture est trop grand, la performance doit être améliorée en changeant la profondeur . Le calcul de la profondeur est une autre Science .
En même temps,Asynchronefifo Également disponible pour la conversion bitwidth , Ceci est fait en lisant et en écrivant le rapport d'horloge .

Mentions de copyright
Auteur de cet article [Nall Oui.],Réimpression s’il vous plaît apporter le lien vers l’original, merci
https://fra.chowdera.com/2022/134/202205141500424006.html

Recommandé au hasard