module memory(); reg [3:0] mem [0:15]; integer i; initial begin for(i=0;i<16;i = i+1) mem[i] = i; end endmodule module memory_read_c(v,ck); input ck; output v; reg [3:0] index; memory m(); reg [3:0] v; initial index = 0; always @(ck) begin v = m.mem[index]; $display("v [%d] mem = %b\n",index,m.mem[index]); index = index +1; end endmodule module memory_read_s(v,ck); input ck; output v; reg [3:0] local_v, index; reg [1:0] cnt; memory m(); reg v; initial index = 0; initial cnt = 0; always @(ck) begin local_v = m.mem[index]; $display("v = index[%d]= %b\n",index,local_v[cnt]); v = local_v[cnt]; cnt = cnt+1; if(cnt == 0) index = index +1; end endmodule module test_memory_c(same,ck); input ck; output same; reg same; integer cnt_0,cnt_1,k; reg [3:0] index,v; memory m(); initial index = 0; always @(ck) begin cnt_0 = 0; cnt_1 = 0; v = m.mem[index]; for( k = 0; k <4;k = k+1) begin if(v[k] == 0 ) cnt_0 = cnt_0 + 1; if(v[k] == 1 ) cnt_1 = cnt_1 + 1; end same = 0; if(cnt_1 == cnt_0) same = 1; index = index +1; end endmodule