No se puede buscar un valor específico en la RAM - verilog

0

Mi módulo ha buscado un valor específico en la RAM y luego devuelve su dirección de ubicación. Cuando escribí un banco de pruebas, ¡veo que el módulo no funcionó correctamente! siempre el valor de salida es "no importa". Aunque he inicializado la memoria.

Módulo de búsqueda > > >

module Search ( 
    clk, 
    rst, 
    SearchData, 
    FindAddress, 
         StopSearch 
); 
input           clk; 
input           rst; 
input[7:0]      SearchData; 
output reg [1:0]   FindAddress; 
output reg StopSearch; 
integer i,x; 

wire read_rq; 
reg [1:0] nxt_address; 
reg [2:0] ii; 
initial 
begin nxt_address=0;i=0; ii=0; end 

wire[7:0] read_data_inx; 

D0_RAM1 D0( 
    .clk(clk), 
    .rst(rst), 
    .read_rq(read_rq), 
    .write_rq(0), 
    .rw_address(nxt_address), 
    .write_data(0), 
    .read_data(read_data_inx) 
); 
always @(posedge clk ) 
begin 
        for ( x =0 ;x <4;x=x+1) begin 
                if (read_data_inx == SearchData)  begin //master i has priority 
                        FindAddress <= nxt_address; 
                        StopSearch <=1; 
      end 

                nxt_address <= nxt_address+1; 
        end 

end 

el módulo RAM:

module D0_RAM1( 
    clk, 
    rst, 
    read_rq, 
    write_rq, 
    rw_address, 
    write_data, 
    read_data 
); 
input           clk; 
input           rst; 
input           read_rq; 
input           write_rq; 
input[1:0]      rw_address; //2 bit 
input[7:0]      write_data; 
output[7:0]     read_data; 

reg[7:0]     read_data; 
reg[3:0] count_; 
integer out, i; 

// Declare memory 2^2 x8 bits 
// 2^2 = 4 
reg [7:0] memory_ram_d [3:0]; 
reg [7:0] memory_ram_q [3:0]; 
initial 
begin 
count_=0; 
        for (i=0;i<4; i=i+1) begin 
        memory_ram_q[i] <= i; 
                  memory_ram_d[i] <=i; 
                  count_=count_+1; 
                  end 
end 

--- > ¿Algunas ideas?

Gracias.

    
pregunta H.H

1 respuesta

1

Una memoria física tiene un número fijo de puertos de lectura (y escritura). Si desea buscar un valor dentro de la RAM, deberá leer cada entrada. Por lo tanto, si tiene suficientes puertos para leerlos todos en paralelo o necesita iterar usando los puertos de lectura que tiene durante varios ciclos.

Realmente, necesitas google CAM (memoria direccionable por contenido), eso es lo que estás tratando de construir, y no están construidos a partir de bloques de memoria estándar.

Entre otras cuestiones en su código: su memoria no parece responder realmente a las solicitudes de lectura (no hay nada que conduzca a read_data), por lo que no es de extrañar que no obtenga resultados.

    
respondido por el Alain

Lea otras preguntas en las etiquetas