Necesito crear un módulo que sea responsable de buscar en la memoria general para encontrar un valor específico y devolver la ubicación de la dirección, pero tengo el siguiente error después de hacer Synthesize en Xilinx.
Loop count limit exceeded. Condition is never false.
el módulo de búsqueda: responsable de tomar el valor ingresado y hacer una búsqueda en la memoria RAM y la dirección de retorno.
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;
wire read_rq;
reg [1:0] nxt_address;
initial
begin nxt_address=0;i=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
while (nxt_address <4) begin
if (read_data_inx == SearchData) begin //master i has priority
FindAddress <= nxt_address;
StopSearch=1;
end
else begin
StopSearch=0;
end
nxt_address <= nxt_address+1;
end
end
endmodule
y el módulo de memoria 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;
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];
// Use positive edge of clock to read the memory
// Implement cyclic shift right
always @(posedge clk or
negedge rst)
begin
if (!rst)
begin
for (i=0;i<3; i=i+1)
memory_ram_q[i] <= 0;
end
else
begin
for (i=0;i<3; i=i+1)
memory_ram_q[i] <= memory_ram_d[i];
end
end
//q=d
always @(*)
begin
for (i=0;i<3; i=i+1)
memory_ram_d[i] = memory_ram_q[i];
if (write_rq && !read_rq)
memory_ram_d[rw_address] = write_data;
if (!write_rq && read_rq)
read_data = memory_ram_q[rw_address];
end
endmodule
la sentencia while que causó el error anterior.