2015-04-14 06:44:43 -05:00
|
|
|
|
|
|
|
// SiliconBlue IO Cells
|
|
|
|
|
|
|
|
module SB_IO (
|
|
|
|
inout PACKAGE_PIN,
|
|
|
|
input LATCH_INPUT_VALUE,
|
|
|
|
input CLOCK_ENABLE,
|
|
|
|
input INPUT_CLK,
|
|
|
|
input OUTPUT_CLK,
|
|
|
|
input OUTPUT_ENABLE,
|
|
|
|
input D_OUT_0,
|
|
|
|
input D_OUT_1,
|
|
|
|
output D_IN_0,
|
|
|
|
output D_IN_1
|
|
|
|
);
|
|
|
|
parameter [5:0] PIN_TYPE = 6'b000000;
|
|
|
|
parameter [0:0] PULLUP = 1'b0;
|
|
|
|
parameter [0:0] NEG_TRIGGER = 1'b0;
|
|
|
|
parameter IO_STANDARD = "SB_LVCMOS";
|
|
|
|
|
|
|
|
/* TBD */
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_GB_IO (
|
|
|
|
inout PACKAGE_PIN,
|
|
|
|
output GLOBAL_BUFFER_OUTPUT,
|
|
|
|
input LATCH_INPUT_VALUE,
|
|
|
|
input CLOCK_ENABLE,
|
|
|
|
input INPUT_CLK,
|
|
|
|
input OUTPUT_CLK,
|
|
|
|
input OUTPUT_ENABLE,
|
|
|
|
input D_OUT_0,
|
|
|
|
input D_OUT_1,
|
|
|
|
output D_IN_0,
|
|
|
|
output D_IN_1
|
|
|
|
);
|
|
|
|
parameter [5:0] PIN_TYPE = 6'b000000;
|
|
|
|
parameter [0:0] PULLUP = 1'b0;
|
|
|
|
parameter [0:0] NEG_TRIGGER = 1'b0;
|
|
|
|
parameter IO_STANDARD = "SB_LVCMOS";
|
|
|
|
|
|
|
|
assign GLOBAL_BUFFER_OUTPUT = PACKAGE_PIN;
|
|
|
|
|
|
|
|
SB_IO #(
|
|
|
|
.PIN_TYPE(PIN_TYPE),
|
|
|
|
.PULLUP(PULLUP),
|
|
|
|
.NEG_TRIGGER(NEG_TRIGGER),
|
|
|
|
.IO_STANDARD(IO_STANDARD)
|
|
|
|
) IO (
|
|
|
|
.PACKAGE_PIN(PACKAGE_PIN),
|
|
|
|
.LATCH_INPUT_VALUE(LATCH_INPUT_VALUE),
|
|
|
|
.CLOCK_ENABLE(CLOCK_ENABLE),
|
|
|
|
.INPUT_CLK(INPUT_CLK),
|
|
|
|
.OUTPUT_CLK(OUTPUT_CLK),
|
|
|
|
.OUTPUT_ENABLE(OUTPUT_ENABLE),
|
|
|
|
.D_OUT_0(D_OUT_0),
|
|
|
|
.D_OUT_1(D_OUT_1),
|
|
|
|
.D_IN_0(D_IN_0),
|
|
|
|
.D_IN_1(D_IN_1)
|
|
|
|
);
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_GB (
|
|
|
|
input USER_SIGNAL_TO_GLOBAL_BUFFER,
|
|
|
|
output GLOBAL_BUFFER_OUTPUT
|
|
|
|
);
|
|
|
|
assign GLOBAL_BUFFER_OUTPUT = USER_SIGNAL_TO_GLOBAL_BUFFER;
|
2015-03-05 13:37:55 -06:00
|
|
|
endmodule
|
|
|
|
|
2015-04-14 06:44:43 -05:00
|
|
|
// SiliconBlue Logic Cells
|
|
|
|
|
|
|
|
module SB_LUT4 (output O, input I0, I1, I2, I3);
|
2015-04-16 04:30:56 -05:00
|
|
|
parameter [15:0] LUT_INIT = 0;
|
|
|
|
wire [7:0] s3 = I3 ? LUT_INIT[15:8] : LUT_INIT[7:0];
|
|
|
|
wire [3:0] s2 = I2 ? s3[ 7:4] : s3[3:0];
|
|
|
|
wire [1:0] s1 = I1 ? s2[ 3:2] : s2[1:0];
|
2015-04-14 06:44:43 -05:00
|
|
|
assign O = I0 ? s1[1] : s1[0];
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_CARRY (output CO, input I0, I1, CI);
|
|
|
|
assign CO = (I0 && I1) || ((I0 || I1) && CI);
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
// Positive Edge SiliconBlue FF Cells
|
|
|
|
|
2015-03-05 13:37:55 -06:00
|
|
|
module SB_DFF (output reg Q, input C, D);
|
2015-04-14 06:44:43 -05:00
|
|
|
always @(posedge C)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFE (output reg Q, input C, E, D);
|
|
|
|
always @(posedge C)
|
|
|
|
if (E)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFSR (output reg Q, input C, R, D);
|
|
|
|
always @(posedge C)
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFR (output reg Q, input C, R, D);
|
|
|
|
always @(posedge C, posedge R)
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFSS (output reg Q, input C, S, D);
|
|
|
|
always @(posedge C)
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFS (output reg Q, input C, S, D);
|
|
|
|
always @(posedge C, posedge S)
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFESR (output reg Q, input C, E, R, D);
|
|
|
|
always @(posedge C)
|
|
|
|
if (E) begin
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
end
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFER (output reg Q, input C, E, R, D);
|
|
|
|
always @(posedge C, posedge R)
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else if (E)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFESS (output reg Q, input C, E, S, D);
|
|
|
|
always @(posedge C)
|
|
|
|
if (E) begin
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
end
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFES (output reg Q, input C, E, S, D);
|
|
|
|
always @(posedge C, posedge S)
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else if (E)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
// Negative Edge SiliconBlue FF Cells
|
|
|
|
|
|
|
|
module SB_DFFN (output reg Q, input C, D);
|
|
|
|
always @(negedge C)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNE (output reg Q, input C, E, D);
|
|
|
|
always @(negedge C)
|
|
|
|
if (E)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNSR (output reg Q, input C, R, D);
|
|
|
|
always @(negedge C)
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNR (output reg Q, input C, R, D);
|
|
|
|
always @(negedge C, posedge R)
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNSS (output reg Q, input C, S, D);
|
|
|
|
always @(negedge C)
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNS (output reg Q, input C, S, D);
|
|
|
|
always @(negedge C, posedge S)
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNESR (output reg Q, input C, E, R, D);
|
|
|
|
always @(negedge C)
|
|
|
|
if (E) begin
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
end
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNER (output reg Q, input C, E, R, D);
|
|
|
|
always @(negedge C, posedge R)
|
|
|
|
if (R)
|
|
|
|
Q <= 0;
|
|
|
|
else if (E)
|
|
|
|
Q <= D;
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNESS (output reg Q, input C, E, S, D);
|
|
|
|
always @(negedge C)
|
|
|
|
if (E) begin
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else
|
|
|
|
Q <= D;
|
|
|
|
end
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_DFFNES (output reg Q, input C, E, S, D);
|
|
|
|
always @(negedge C, posedge S)
|
|
|
|
if (S)
|
|
|
|
Q <= 1;
|
|
|
|
else if (E)
|
|
|
|
Q <= D;
|
2015-03-05 13:37:55 -06:00
|
|
|
endmodule
|
2015-04-14 06:44:43 -05:00
|
|
|
|
2015-04-19 14:37:40 -05:00
|
|
|
// SiliconBlue RAM Cells
|
|
|
|
|
|
|
|
module SB_RAM40_4K (
|
2015-04-25 11:04:57 -05:00
|
|
|
output [15:0] RDATA,
|
|
|
|
input RCLK, RCLKE, RE,
|
|
|
|
input [10:0] RADDR,
|
|
|
|
input WCLK, WCLKE, WE,
|
|
|
|
input [10:0] WADDR,
|
|
|
|
input [15:0] MASK, WDATA
|
2015-04-19 14:37:40 -05:00
|
|
|
);
|
|
|
|
// MODE 0: 256 x 16
|
|
|
|
// MODE 1: 512 x 8
|
|
|
|
// MODE 2: 1024 x 4
|
|
|
|
// MODE 3: 2048 x 2
|
|
|
|
parameter WRITE_MODE = 0;
|
|
|
|
parameter READ_MODE = 0;
|
|
|
|
|
|
|
|
parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
`ifndef BLACKBOX
|
2015-04-25 11:04:57 -05:00
|
|
|
reg [15:0] RDATA_I;
|
|
|
|
wire [15:0] WDATA_I;
|
|
|
|
|
|
|
|
generate
|
|
|
|
case (WRITE_MODE)
|
|
|
|
0: assign WDATA_I = WDATA;
|
|
|
|
1: assign WDATA_I = {WDATA[14], WDATA[12], WDATA[10], WDATA[ 8],
|
|
|
|
WDATA[ 6], WDATA[ 4], WDATA[ 2], WDATA[ 0]};
|
|
|
|
2: assign WDATA_I = {WDATA[13], WDATA[9], WDATA[5], WDATA[1]};
|
|
|
|
3: assign WDATA_I = {WDATA[11], WDATA[3]};
|
|
|
|
endcase
|
|
|
|
case (READ_MODE)
|
|
|
|
0: assign RDATA = RDATA_I;
|
|
|
|
1: assign RDATA = {1'b0, RDATA_I[7], 1'b0, RDATA_I[6], 1'b0, RDATA_I[5], 1'b0, RDATA_I[4],
|
|
|
|
1'b0, RDATA_I[3], 1'b0, RDATA_I[2], 1'b0, RDATA_I[1], 1'b0, RDATA_I[0]};
|
|
|
|
2: assign RDATA = {2'b00, RDATA_I[3], 3'b000, RDATA_I[2], 3'b000, RDATA_I[1], 3'b000, RDATA_I[0], 1'b0};
|
|
|
|
3: assign RDATA = {4'b0000, RDATA_I[1], 7'b0000000, RDATA_I[0], 3'b000};
|
|
|
|
endcase
|
|
|
|
endgenerate
|
|
|
|
|
2015-04-19 14:37:40 -05:00
|
|
|
integer i;
|
|
|
|
reg [15:0] memory [0:255];
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
for (i=0; i<16; i=i+1) begin
|
|
|
|
memory[ 0*16 + i] <= INIT_0[16*i +: 16];
|
|
|
|
memory[ 1*16 + i] <= INIT_1[16*i +: 16];
|
|
|
|
memory[ 2*16 + i] <= INIT_2[16*i +: 16];
|
|
|
|
memory[ 3*16 + i] <= INIT_3[16*i +: 16];
|
|
|
|
memory[ 4*16 + i] <= INIT_4[16*i +: 16];
|
|
|
|
memory[ 5*16 + i] <= INIT_5[16*i +: 16];
|
|
|
|
memory[ 6*16 + i] <= INIT_6[16*i +: 16];
|
|
|
|
memory[ 7*16 + i] <= INIT_7[16*i +: 16];
|
|
|
|
memory[ 8*16 + i] <= INIT_8[16*i +: 16];
|
|
|
|
memory[ 9*16 + i] <= INIT_9[16*i +: 16];
|
|
|
|
memory[10*16 + i] <= INIT_A[16*i +: 16];
|
|
|
|
memory[11*16 + i] <= INIT_B[16*i +: 16];
|
|
|
|
memory[12*16 + i] <= INIT_C[16*i +: 16];
|
|
|
|
memory[13*16 + i] <= INIT_D[16*i +: 16];
|
|
|
|
memory[14*16 + i] <= INIT_E[16*i +: 16];
|
|
|
|
memory[15*16 + i] <= INIT_F[16*i +: 16];
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
always @(posedge WCLK) begin
|
|
|
|
if (WE && WCLKE) begin
|
|
|
|
if (WRITE_MODE == 0) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
if (!MASK[ 0]) memory[WADDR[7:0]][ 0] <= WDATA_I[ 0];
|
|
|
|
if (!MASK[ 1]) memory[WADDR[7:0]][ 1] <= WDATA_I[ 1];
|
|
|
|
if (!MASK[ 2]) memory[WADDR[7:0]][ 2] <= WDATA_I[ 2];
|
|
|
|
if (!MASK[ 3]) memory[WADDR[7:0]][ 3] <= WDATA_I[ 3];
|
|
|
|
if (!MASK[ 4]) memory[WADDR[7:0]][ 4] <= WDATA_I[ 4];
|
|
|
|
if (!MASK[ 5]) memory[WADDR[7:0]][ 5] <= WDATA_I[ 5];
|
|
|
|
if (!MASK[ 6]) memory[WADDR[7:0]][ 6] <= WDATA_I[ 6];
|
|
|
|
if (!MASK[ 7]) memory[WADDR[7:0]][ 7] <= WDATA_I[ 7];
|
|
|
|
if (!MASK[ 8]) memory[WADDR[7:0]][ 8] <= WDATA_I[ 8];
|
|
|
|
if (!MASK[ 9]) memory[WADDR[7:0]][ 9] <= WDATA_I[ 9];
|
|
|
|
if (!MASK[10]) memory[WADDR[7:0]][10] <= WDATA_I[10];
|
|
|
|
if (!MASK[11]) memory[WADDR[7:0]][11] <= WDATA_I[11];
|
|
|
|
if (!MASK[12]) memory[WADDR[7:0]][12] <= WDATA_I[12];
|
|
|
|
if (!MASK[13]) memory[WADDR[7:0]][13] <= WDATA_I[13];
|
|
|
|
if (!MASK[14]) memory[WADDR[7:0]][14] <= WDATA_I[14];
|
|
|
|
if (!MASK[15]) memory[WADDR[7:0]][15] <= WDATA_I[15];
|
|
|
|
if (!MASK[16]) memory[WADDR[7:0]][16] <= WDATA_I[16];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
if (WRITE_MODE == 1) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
if (WADDR[0] == 0) memory[WADDR[8:1]][0*8 +: 8] <= WDATA_I[7:0];
|
|
|
|
if (WADDR[0] == 1) memory[WADDR[8:1]][1*8 +: 8] <= WDATA_I[7:0];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
if (WRITE_MODE == 2) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
if (WADDR[1:0] == 0) memory[WADDR[9:2]][0*4 +: 4] <= WDATA_I[3:0];
|
|
|
|
if (WADDR[1:0] == 1) memory[WADDR[9:2]][1*4 +: 4] <= WDATA_I[3:0];
|
|
|
|
if (WADDR[1:0] == 2) memory[WADDR[9:2]][2*4 +: 4] <= WDATA_I[3:0];
|
|
|
|
if (WADDR[1:0] == 3) memory[WADDR[9:2]][3*4 +: 4] <= WDATA_I[3:0];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
if (WRITE_MODE == 3) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
if (WADDR[2:0] == 0) memory[WADDR[10:3]][0*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 1) memory[WADDR[10:3]][1*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 2) memory[WADDR[10:3]][2*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 3) memory[WADDR[10:3]][3*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 4) memory[WADDR[10:3]][4*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 5) memory[WADDR[10:3]][5*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 6) memory[WADDR[10:3]][6*2 +: 2] <= WDATA_I[1:0];
|
|
|
|
if (WADDR[2:0] == 7) memory[WADDR[10:3]][7*2 +: 2] <= WDATA_I[1:0];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
always @(posedge RCLK) begin
|
|
|
|
if (RE && RCLKE) begin
|
|
|
|
if (READ_MODE == 0) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
RDATA_I <= memory[RADDR[7:0]];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
if (READ_MODE == 1) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
RDATA_I <= memory[RADDR[8:1]][RADDR[0]*8 +: 8];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
if (READ_MODE == 2) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
RDATA_I <= memory[RADDR[9:2]][RADDR[1:0]*4 +: 4];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
if (READ_MODE == 3) begin
|
2015-04-25 11:04:57 -05:00
|
|
|
RDATA_I <= memory[RADDR[10:3]][RADDR[2:0]*2 +: 2];
|
2015-04-19 14:37:40 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
`endif
|
|
|
|
endmodule
|
2015-04-14 06:44:43 -05:00
|
|
|
|
2015-04-19 14:37:40 -05:00
|
|
|
module SB_RAM40_4KNR (
|
|
|
|
output [15:0] RDATA,
|
|
|
|
input RCLK, RCLKE, RE,
|
|
|
|
input [10:0] RADDR,
|
|
|
|
input WCLK, WCLKE, WE,
|
|
|
|
input [10:0] WADDR,
|
|
|
|
input [15:0] MASK, WDATA
|
|
|
|
);
|
|
|
|
parameter WRITE_MODE = 0;
|
|
|
|
parameter READ_MODE = 0;
|
|
|
|
|
|
|
|
parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
SB_RAM40_4K #(
|
|
|
|
.WRITE_MODE(WRITE_MODE),
|
|
|
|
.READ_MODE (READ_MODE ),
|
|
|
|
.INIT_0 (INIT_0 ),
|
|
|
|
.INIT_1 (INIT_1 ),
|
|
|
|
.INIT_2 (INIT_2 ),
|
|
|
|
.INIT_3 (INIT_3 ),
|
|
|
|
.INIT_4 (INIT_4 ),
|
|
|
|
.INIT_5 (INIT_5 ),
|
|
|
|
.INIT_6 (INIT_6 ),
|
|
|
|
.INIT_7 (INIT_7 ),
|
|
|
|
.INIT_8 (INIT_8 ),
|
|
|
|
.INIT_9 (INIT_9 ),
|
|
|
|
.INIT_A (INIT_A ),
|
|
|
|
.INIT_B (INIT_B ),
|
|
|
|
.INIT_C (INIT_C ),
|
|
|
|
.INIT_D (INIT_D ),
|
|
|
|
.INIT_E (INIT_E ),
|
|
|
|
.INIT_F (INIT_F )
|
|
|
|
) RAM (
|
|
|
|
.RDATA(RDATA),
|
|
|
|
.RCLK (~RCLK),
|
|
|
|
.RCLKE(RCLKE),
|
|
|
|
.RE (RE ),
|
|
|
|
.RADDR(RADDR),
|
|
|
|
.WCLK (WCLK ),
|
|
|
|
.WCLKE(WCLKE),
|
|
|
|
.WE (WE ),
|
|
|
|
.WADDR(WADDR),
|
|
|
|
.MASK (MASK ),
|
|
|
|
.WDATA(WDATA)
|
|
|
|
);
|
2015-04-14 06:44:43 -05:00
|
|
|
endmodule
|
|
|
|
|
2015-04-19 14:37:40 -05:00
|
|
|
module SB_RAM40_4KNW (
|
|
|
|
output [15:0] RDATA,
|
|
|
|
input RCLK, RCLKE, RE,
|
|
|
|
input [10:0] RADDR,
|
|
|
|
input WCLK, WCLKE, WE,
|
|
|
|
input [10:0] WADDR,
|
|
|
|
input [15:0] MASK, WDATA
|
|
|
|
);
|
|
|
|
parameter WRITE_MODE = 0;
|
|
|
|
parameter READ_MODE = 0;
|
|
|
|
|
|
|
|
parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
SB_RAM40_4K #(
|
|
|
|
.WRITE_MODE(WRITE_MODE),
|
|
|
|
.READ_MODE (READ_MODE ),
|
|
|
|
.INIT_0 (INIT_0 ),
|
|
|
|
.INIT_1 (INIT_1 ),
|
|
|
|
.INIT_2 (INIT_2 ),
|
|
|
|
.INIT_3 (INIT_3 ),
|
|
|
|
.INIT_4 (INIT_4 ),
|
|
|
|
.INIT_5 (INIT_5 ),
|
|
|
|
.INIT_6 (INIT_6 ),
|
|
|
|
.INIT_7 (INIT_7 ),
|
|
|
|
.INIT_8 (INIT_8 ),
|
|
|
|
.INIT_9 (INIT_9 ),
|
|
|
|
.INIT_A (INIT_A ),
|
|
|
|
.INIT_B (INIT_B ),
|
|
|
|
.INIT_C (INIT_C ),
|
|
|
|
.INIT_D (INIT_D ),
|
|
|
|
.INIT_E (INIT_E ),
|
|
|
|
.INIT_F (INIT_F )
|
|
|
|
) RAM (
|
|
|
|
.RDATA(RDATA),
|
|
|
|
.RCLK (RCLK ),
|
|
|
|
.RCLKE(RCLKE),
|
|
|
|
.RE (RE ),
|
|
|
|
.RADDR(RADDR),
|
|
|
|
.WCLK (~WCLK),
|
|
|
|
.WCLKE(WCLKE),
|
|
|
|
.WE (WE ),
|
|
|
|
.WADDR(WADDR),
|
|
|
|
.MASK (MASK ),
|
|
|
|
.WDATA(WDATA)
|
|
|
|
);
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
module SB_RAM40_4KNRNW (
|
|
|
|
output [15:0] RDATA,
|
|
|
|
input RCLK, RCLKE, RE,
|
|
|
|
input [10:0] RADDR,
|
|
|
|
input WCLK, WCLKE, WE,
|
|
|
|
input [10:0] WADDR,
|
|
|
|
input [15:0] MASK, WDATA
|
|
|
|
);
|
|
|
|
parameter WRITE_MODE = 0;
|
|
|
|
parameter READ_MODE = 0;
|
|
|
|
|
|
|
|
parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
|
|
|
|
|
|
SB_RAM40_4K #(
|
|
|
|
.WRITE_MODE(WRITE_MODE),
|
|
|
|
.READ_MODE (READ_MODE ),
|
|
|
|
.INIT_0 (INIT_0 ),
|
|
|
|
.INIT_1 (INIT_1 ),
|
|
|
|
.INIT_2 (INIT_2 ),
|
|
|
|
.INIT_3 (INIT_3 ),
|
|
|
|
.INIT_4 (INIT_4 ),
|
|
|
|
.INIT_5 (INIT_5 ),
|
|
|
|
.INIT_6 (INIT_6 ),
|
|
|
|
.INIT_7 (INIT_7 ),
|
|
|
|
.INIT_8 (INIT_8 ),
|
|
|
|
.INIT_9 (INIT_9 ),
|
|
|
|
.INIT_A (INIT_A ),
|
|
|
|
.INIT_B (INIT_B ),
|
|
|
|
.INIT_C (INIT_C ),
|
|
|
|
.INIT_D (INIT_D ),
|
|
|
|
.INIT_E (INIT_E ),
|
|
|
|
.INIT_F (INIT_F )
|
|
|
|
) RAM (
|
|
|
|
.RDATA(RDATA),
|
|
|
|
.RCLK (~RCLK),
|
|
|
|
.RCLKE(RCLKE),
|
|
|
|
.RE (RE ),
|
|
|
|
.RADDR(RADDR),
|
|
|
|
.WCLK (~WCLK),
|
|
|
|
.WCLKE(WCLKE),
|
|
|
|
.WE (WE ),
|
|
|
|
.WADDR(WADDR),
|
|
|
|
.MASK (MASK ),
|
|
|
|
.WDATA(WDATA)
|
|
|
|
);
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
// Packed IceStorm Logic Cells
|
|
|
|
|
2015-04-14 06:44:43 -05:00
|
|
|
module ICESTORM_LC (
|
|
|
|
input I0, I1, I2, I3, CIN, CLK, CEN, SR,
|
|
|
|
output O, COUT
|
|
|
|
);
|
|
|
|
parameter [15:0] LUT_INIT = 0;
|
|
|
|
|
|
|
|
parameter [0:0] NEG_CLK = 0;
|
|
|
|
parameter [0:0] CARRY_ENABLE = 0;
|
|
|
|
parameter [0:0] DFF_ENABLE = 0;
|
|
|
|
parameter [0:0] SET_NORESET = 0;
|
|
|
|
parameter [0:0] ASYNC_SR = 0;
|
|
|
|
|
|
|
|
wire COUT = CARRY_ENABLE ? (I1 && I2) || ((I1 || I2) && CIN) : 1'bx;
|
|
|
|
|
|
|
|
wire [7:0] lut_s3 = I3 ? LUT_INIT[15:8] : LUT_INIT[7:0];
|
|
|
|
wire [3:0] lut_s2 = I2 ? lut_s3[ 7:4] : lut_s3[3:0];
|
|
|
|
wire [1:0] lut_s1 = I1 ? lut_s2[ 3:2] : lut_s2[1:0];
|
|
|
|
wire lut_o = I0 ? lut_s1[ 1] : lut_s1[ 0];
|
|
|
|
|
|
|
|
wire polarized_clk;
|
|
|
|
assign polarized_clk = CLK ^ NEG_CLK;
|
|
|
|
|
|
|
|
reg o_reg;
|
|
|
|
always @(posedge polarized_clk)
|
2015-04-19 14:37:40 -05:00
|
|
|
if (CEN)
|
|
|
|
o_reg <= SR ? SET_NORESET : lut_o;
|
2015-04-14 06:44:43 -05:00
|
|
|
|
|
|
|
reg o_reg_async;
|
2015-04-19 14:37:40 -05:00
|
|
|
always @(posedge polarized_clk, posedge SR)
|
|
|
|
if (SR)
|
2015-04-14 06:44:43 -05:00
|
|
|
o_reg <= SET_NORESET;
|
2015-04-19 14:37:40 -05:00
|
|
|
else if (CEN)
|
2015-04-14 06:44:43 -05:00
|
|
|
o_reg <= lut_o;
|
|
|
|
|
|
|
|
assign O = DFF_ENABLE ? ASYNC_SR ? o_reg_async : o_reg : lut_o;
|
|
|
|
endmodule
|
|
|
|
|