Estaba leyendo sobre block ram y encontré la siguiente publicación. Observo aquí que quien haya escrito el código está usando negedge en la señal del reloj. Hasta ahora, casi todos los ejemplos que he visto de verilog utilizan el uso de señales en el reloj. De hecho realmente no he visto ningún bloque siempre con negedge especificado. Me pregunto cuándo querrá usar eso y por qué el código siguiente puede contener negedge.
module RAM_param(clk, addr, read_write, clear, data_in, data_out);
parameter n = 4;
parameter w = 8;
input clk, read_write, clear;
input [n-1:0] addr;
input [w-1:0] data_in;
output reg [w-1:0] data_out;
reg [w-1:0] reg_array [2**n-1:0];
integer i;
initial begin
for( i = 0; i < 2**n; i = i + 1 ) begin
reg_array[i] <= 0;
end
end
always @(negedge(clk)) begin
if( read_write == 1 )
reg_array[addr] <= data_in;
if( clear == 1 ) begin
for( i = 0; i < 2**n; i = i + 1 ) begin
reg_array[i] <= 0;
end
end
data_out = reg_array[addr];
end
endmodule