module lineram ( input [35:0] din, input [8:0] addr_w, output reg [35:0] dout, input [8:0] addr_r, input write_en, input read_clk, input write_clk ); // `ifdef YOSYS // // use the ECP5 primitive. // PDPW16KD #(.REGMODE("OUTREG")) ram ( // .DI0 (din[0]), // .DI1 (din[1]), // .DI2 (din[2]), // .DI3 (din[3]), // .DI4 (din[4]), // .DI5 (din[5]), // .DI6 (din[6]), // .DI7 (din[7]), // .DI8 (din[8]), // .DI9 (din[9]), // .DI10(din[10]), // .DI11(din[11]), // .DI12(din[12]), // .DI13(din[13]), // .DI14(din[14]), // .DI15(din[15]), // .DI16(din[16]), // .DI17(din[17]), // .DI18(din[18]), // .DI19(din[19]), // .DI20(din[20]), // .DI21(din[21]), // .DI22(din[22]), // .DI23(din[23]), // .DI24(din[24]), // .DI25(din[25]), // .DI26(din[26]), // .DI27(din[27]), // .DI28(din[28]), // .DI29(din[29]), // .DI30(din[30]), // .DI31(din[31]), // .DI32(din[32]), // .DI33(din[33]), // .DI34(din[34]), // .DI35(din[35]), // .ADW0(addr_w[0]), // .ADW1(addr_w[1]), // .ADW2(addr_w[2]), // .ADW3(addr_w[3]), // .ADW4(addr_w[4]), // .ADW5(addr_w[5]), // .ADW6(addr_w[6]), // .ADW7(addr_w[7]), // .ADW8(addr_w[8]), // .DO0 (dout[0]), // .DO1 (dout[1]), // .DO2 (dout[2]), // .DO3 (dout[3]), // .DO4 (dout[4]), // .DO5 (dout[5]), // .DO6 (dout[6]), // .DO7 (dout[7]), // .DO8 (dout[8]), // .DO9 (dout[9]), // .DO10(dout[10]), // .DO11(dout[11]), // .DO12(dout[12]), // .DO13(dout[13]), // .DO14(dout[14]), // .DO15(dout[15]), // .DO16(dout[16]), // .DO17(dout[17]), // .DO18(dout[18]), // .DO19(dout[19]), // .DO20(dout[20]), // .DO21(dout[21]), // .DO22(dout[22]), // .DO23(dout[23]), // .DO24(dout[24]), // .DO25(dout[25]), // .DO26(dout[26]), // .DO27(dout[27]), // .DO28(dout[28]), // .DO29(dout[29]), // .DO30(dout[30]), // .DO31(dout[31]), // .DO32(dout[32]), // .DO33(dout[33]), // .DO34(dout[34]), // .DO35(dout[35]), // .ADR0(addr_r[0]), // .ADR1(addr_r[1]), // .ADR2(addr_r[2]), // .ADR3(addr_r[3]), // .ADR4(addr_r[4]), // .ADR5(addr_r[5]), // .ADR6(addr_r[6]), // .ADR7(addr_r[7]), // .ADR8(addr_r[8]), // .CER(1), // .CEW(1), // .CLKR(read_clk), // .CLKW(write_clk), // .CSW1(0), // .CSW2(0), // .CSR1(0), // .CSR2(0), // ); // `else reg [35:0] ram [512]/*verilator public*/; `ifndef YOSYS initial begin for (integer i = 0; i < 512; i = i + 1) begin ram[i] = 0; end end `endif always @(posedge write_clk) begin if (write_en) ram[addr_w] <= din; end always @(posedge read_clk) begin dout <= ram[addr_r]; end // `endif endmodule