increase speed grade of chip to meet timing for bram

This commit is contained in:
saji 2024-05-10 11:31:51 -05:00
parent bcb463a8d0
commit b248c4d731
2 changed files with 111 additions and 72 deletions

View file

@ -124,7 +124,7 @@ class Groovy1Platform(LatticeECP5Platform):
default_clk_period = 1e9/25e6 default_clk_period = 1e9/25e6
def __init__(self, toolchain='trellis', **kwargs): def __init__(self, toolchain='trellis', **kwargs):
self.device = "LFE5U-25F-6BG256C" self.device = "LFE5U-25F-8BG256C"
LatticeECP5Platform.__init__(self, self.device, _io, connectors=_connectors, toolchain=toolchain, **kwargs) LatticeECP5Platform.__init__(self, self.device, _io, connectors=_connectors, toolchain=toolchain, **kwargs)
def create_programmer(self): def create_programmer(self):

View file

@ -1,80 +1,119 @@
module lineram #( module lineram (
parameter DATA_WIDTH = 36, input [35:0] din,
parameter ADDR_WIDTH = 9 input [8:0] addr_w,
) ( output wire [35:0] dout,
input [DATA_WIDTH - 1:0] din, input [8:0] addr_r,
input [ADDR_WIDTH - 1:0] addr_w,
output reg [DATA_WIDTH - 1:0] dout,
input [ADDR_WIDTH - 1:0] addr_r,
input write_en, input write_en,
input read_clk, input read_clk,
input write_clk input write_clk
); );
// `ifdef YOSYS // `ifdef YOSYS
// // use the ECP5 primitive. // // use the ECP5 primitive.
// defparam ram.PORT_W_WR_EN_WIDTH = 1; // PDPW16KD ram (
// $__ECP5_PDPW16KD_ ram ( // .DI0 (din[0]),
// .PORT_R_CLK(read_clk), // .DI1 (din[1]),
// .PORT_R_ADDR(addr_r), // .DI2 (din[2]),
// .PORT_R_RD_DATA(dout), // .DI3 (din[3]),
// .PORT_W_CLK(write_clk), // .DI4 (din[4]),
// .PORT_W_WRITE_EN(write_en), // .DI5 (din[5]),
// .PORT_W_WR_DATA(din), // .DI6 (din[6]),
// ); // .DI7 (din[7]),
// // PDPW16KD ram ( // .DI8 (din[8]),
// // .DI0 (din[0]), // .DI9 (din[9]),
// // .DI1 (din[1]), // .DI10(din[10]),
// // .DI2 (din[2]), // .DI11(din[11]),
// // .DI3 (din[3]), // .DI12(din[12]),
// // .DI4 (din[4]), // .DI13(din[13]),
// // .DI5 (din[5]), // .DI14(din[14]),
// // .DI6 (din[6]), // .DI15(din[15]),
// // .DI7 (din[7]), // .DI16(din[16]),
// // .DI8 (din[8]), // .DI17(din[17]),
// // .DI9 (din[9]), // .DI18(din[18]),
// // .DI10(din[10]), // .DI19(din[19]),
// // .DI11(din[11]), // .DI20(din[20]),
// // .DI12(din[12]), // .DI21(din[21]),
// // .DI13(din[13]), // .DI22(din[22]),
// // .DI14(din[14]), // .DI23(din[23]),
// // .DI15(din[15]), // .DI24(din[24]),
// // .DI16(din[16]), // .DI25(din[25]),
// // .DI17(din[17]), // .DI26(din[26]),
// // .DI18(din[18]), // .DI27(din[27]),
// // .DI19(din[19]), // .DI28(din[28]),
// // .DI20(din[20]), // .DI29(din[29]),
// // .DI21(din[21]), // .DI30(din[30]),
// // .DI22(din[22]), // .DI31(din[31]),
// // .DI23(din[23]), // .DI32(din[32]),
// // .DI24(din[24]), // .DI33(din[33]),
// // .DI25(din[25]), // .DI34(din[34]),
// // .DI26(din[26]), // .DI35(din[35]),
// // .DI27(din[27]), // .ADW0(addr_w[0]),
// // .DI28(din[28]), // .ADW1(addr_w[1]),
// // .DI29(din[29]), // .ADW2(addr_w[2]),
// // .DI30(din[30]), // .ADW3(addr_w[3]),
// // .DI31(din[31]), // .ADW4(addr_w[4]),
// // .DI32(din[32]), // .ADW5(addr_w[5]),
// // .DI33(din[33]), // .ADW6(addr_w[6]),
// // .DI34(din[34]), // .ADW7(addr_w[7]),
// // .DI35(din[35]), // .ADW8(addr_w[8]),
// // .ADW0(addr_w[0]), // .DO0 (dout[0]),
// // .ADW1(addr_w[1]), // .DO1 (dout[1]),
// // .ADW2(addr_w[2]), // .DO2 (dout[2]),
// // .ADW3(addr_w[3]), // .DO3 (dout[3]),
// // .ADW4(addr_w[4]), // .DO4 (dout[4]),
// // .ADW5(addr_w[5]), // .DO5 (dout[5]),
// // .ADW6(addr_w[6]), // .DO6 (dout[6]),
// // .ADW7(addr_w[7]), // .DO7 (dout[7]),
// // .ADW8(addr_w[8]), // .DO8 (dout[8]),
// // // .DO9 (dout[9]),
// // ); // .DO10(dout[10]),
// `else // .DO11(dout[11]),
reg [DATA_WIDTH - 1:0] ram[2**ADDR_WIDTH]; // .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),
//
//
// );
// `else
reg [35:0] ram [2**9];
`ifndef YOSYS `ifndef YOSYS
initial begin initial begin
for (int i = 0; i < 2 ** ADDR_WIDTH; i = i + 1) begin for (integer i = 0; i < 2 ** 9; i = i + 1) begin
ram[i] = 0; ram[i] = 0;
end end
end end
@ -86,5 +125,5 @@ module lineram #(
always @(posedge read_clk) begin always @(posedge read_clk) begin
dout <= ram[addr_r]; dout <= ram[addr_r];
end end
// `endif // `endif
endmodule endmodule