2016-03-11 2 views
-1

Je veux écrire un module dans la mémoire RAM puis lire de la même dans un autre module. Comment puis-je faire ceci? Je pense qu'il doit y avoir un moyen de passer les modules RAM en se référant à d'autres modules. Par exemple:Comment puis-je partager et utiliser un seul module RAM dans plusieurs modules?

Dans le module A:

// write in ram and pass to module B 

ram ram_ins(); 
ram_ins.wr_en = 1; 
ram_ins.addr = 1; 
ram_ins.data_in = 1234; 
B b_ins(ram_ins); // pass by reference the ram_ins to the module B 

Dans le module B:

// read from ram 

ram_ins.addr = 1; 
reg [7:0] a; 
assign a = ram_ins.data_out 

registre a dans le module B doit être 1234, car dans le module A 1234 est écrit dans l'adresse 1 de RAM .

+2

Je ne suis pas sûr de ce que vous entendez par "passer des modules de RAM par référence" Voulez-vous une seule RAM qui est écrite par 1 module et lu par un autre? Avez-vous des ports d'adresse d'écriture et de lecture séparés. – Morgan

+2

Verilog est un langage de description matérielle (HDL). Les HDL se comportent complètement différemment des langages de programmation normaux. Habituellement, il n'y a pas de concept de pointeurs et de références. Il n'y a que le concept de fils ou de signaux comme dans les circuits de la vie réelle. Je conseillerais de lire quelques tutoriels sur la façon de construire des modules simples dans Verilog. – Paebbels

Répondre

0

Vous pouvez accéder à la RAM à partir d'autres modules dont vous avez besoin d'un module de contrôle pour ce bus de communication. Par exemple, l'interface Altera UFM I2C. RAM peut être écriture par le module A et lu par le module B avec différentes horloges (dpram):

http://www.asic-world.com/examples/verilog/ram_dp_sr_sw.html

http://www.asic-world.com/examples/verilog/ram_dp_ar_aw.html

À un certain niveau d'adresse de dispositif I2C d'abstraction est votre référence.

Désolé pour mon anglais.

1

Un RAM n'est pas accessible par deux modules différents. Qu'est-ce que vous avez besoin est un module pour arbitrer entre les accès, je vais juste montrer le chemin d'écriture pour la simplicité à savoir:

module ram ( 
    input clk, 
    input wr, 
    input [7:0] data 
); 
///Ram model here 
endmodule 

module arbiter (
input clk, 
input rst_n, 


output ram_wr, 
output [7:0] ram_data, 

output [1:0] write_accepted, 

input m0_wr, 
input [7:0] m0_data, 
input m1_wr, 
input [7:0] m1_data, 
); 
always @(posedge clk or negedge rst_n) 
if (!rst_n) 
    current <= 1'b0; 
else 
    current <= !current; 

assign ram_data = current ? m1_data : m0_data; 
assign write_accepted = {(current & m1_wr),(!current & m1_wr)}; 
assign ram_wr = |write_accepted; 
endmodule 

Autant de raisons pour lesquelles je ne voudrais pas expédier une puce avec ce code, mais nous espérons que vous avoir l'idée.