module RS255239ENC (
clk,
rst_n,
in,
out,
start,//1pulse
end1,
inen,
outen
);
input clk;
input rst_n;
input [7:0] in;
output [7:0] out;
input start;
output end1;
input inen;
output outen;
reg [7:0] in1D,FF0,FF1,FF2,FF3,FF4,FF5,FF6,FF7,FF8,FF9,FF10,FF11,FF12,FF13,FF14,FF15;
//reg LP0,LP1,LP2,LP3,LP4,LP5,LP6,LP7,LP8,LP9,LP10,LP11,LP12,LP13,LP14,LP15;
wire [7:0] MULTIN,MULTOUT0,MULTOUT1,MULTOUT2,MULTOUT3,MULTOUT4,MULTOUT5,MULTOUT6,MULTOUT7,MULTOUT8,MULTOUT9,MULTOUT10,MULTOUT11,MULTOUT12,MULTOUT13,MULTOUT14,MULTOUT15;
reg [7:0] out,DATACNT,SYOU;
reg end1,start1D,inen1D,outen,FF_EN;
// +---------------+
//start | |
// -------+ +---------------+---------------+---------------+---------------+---------------+---------------+---------------+
// +----------------------------------------------------------------------------------------------------------------
//inen |
// -----------------------+
// ---------------------------------------+---------------+---------------+---------------+---------------+---------------+---------------+
//in FIRST | SECOND | THIRD |
// ---------------------------------------+---------------+---------------+---------------+---------------+---------------+---------------+
//
//
//
//
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
outen <= 1'b0;
else
outen <= FF_EN;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
out <= 8'd0;
else
out <= (inen1D) ? in1D : FF15;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
SYOU <= 8'd0;
else
SYOU <= (inen1D) ? FF15 ^ in1D : FF15;
end
assign MULTIN = FF15 ^ in1D;
// DATA COUNTER
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
DATACNT <= 8'd0;
else if(start)
DATACNT <= 8'd1;
else if(DATACNT == 8'd255)
DATACNT <= 8'd0;
else if((inen && DATACNT >= 8'd1 && DATACNT <= 8'd238) || (DATACNT >= 8'd239))
DATACNT <= DATACNT + 1'b1;
end
//assign DATACNTEN = inen & ((DATACNT >= 8'd1 && DATACNT <= 8'd239) ? 1'b1:1'b0);
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF_EN <= 1'b0;
else
FF_EN <= ((inen == 1'b1) || (DATACNT >= 8'd1 && DATACNT <= 8'd255)) ? 1'b1:1'b0;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
end1 <= 1'b0;
else
end1 <= (DATACNT == 8'd255) ? 1'b1:1'b0;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n) begin
in1D <= 8'd0;
inen1D <= 1'b0;
start1D <= 1'b0;
// DATACNTEN1D <= 1'b0;
// FF_EN1D <= 1'b0;
end
else begin
in1D <= in;
inen1D <= inen;
start1D <= start;
// DATACNTEN1D <= DATACNTEN;
// FF_EN1D <= FF_EN;
end
end
//assign outen = FF_EN1D;
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF0 <= 8'd0;
else if(start1D)
FF0 <= 8'd0;
else
FF0 <= (inen1D) ? MULTOUT0 : 8'd0;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF1 <= 8'd0;
else if(start1D)
FF1 <= 8'd0;
else
FF1 <= (inen1D) ? MULTOUT1 ^ FF0 : FF0;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF2 <= 8'd0;
else if(start1D)
FF2 <= 8'd0;
else
FF2 <= (inen1D) ? MULTOUT2 ^ FF1 : FF1;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF3 <= 8'd0;
else if(start1D)
FF3 <= 8'd0;
else
FF3 <= (inen1D) ? MULTOUT3 ^ FF2 : FF2;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF4 <= 8'd0;
else if(start1D)
FF4 <= 8'd0;
else
FF4 <= (inen1D) ? MULTOUT4 ^ FF3 : FF3;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF5 <= 8'd0;
else if(start1D)
FF5 <= 8'd0;
else
FF5 <= (inen1D) ? MULTOUT5 ^ FF4 : FF4;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF6 <= 8'd0;
else if(start1D)
FF6 <= 8'd0;
else
FF6 <= (inen1D) ? MULTOUT6 ^ FF5 : FF5;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF7 <= 8'd0;
else if(start1D)
FF7 <= 8'd0;
else
FF7 <= (inen1D) ? MULTOUT7 ^ FF6 : FF6;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF8 <= 8'd0;
else if(start1D)
FF8 <= 8'd0;
else
FF8 <= (inen1D) ? MULTOUT8 ^ FF7 : FF7;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF9 <= 8'd0;
else if(start1D)
FF9 <= 8'd0;
else
FF9 <= (inen1D) ? MULTOUT9 ^ FF8 : FF8;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF10 <= 8'd0;
else if(start1D)
FF10 <= 8'd0;
else
FF10 <= (inen1D) ? MULTOUT10 ^ FF9 : FF9;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF11 <= 8'd0;
else if(start1D)
FF11 <= 8'd0;
else
FF11 <= (inen1D) ? MULTOUT11 ^ FF10 : FF10;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF12 <= 8'd0;
else if(start1D)
FF12 <= 8'd0;
else
FF12 <= (inen1D) ? MULTOUT12 ^ FF11 : FF11;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF13 <= 8'd0;
else if(start1D)
FF13 <= 8'd0;
else
FF13 <= (inen1D) ? MULTOUT13 ^ FF12 : FF12;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF14 <= 8'd0;
else if(start1D)
FF14 <= 8'd0;
else
FF14 <= (inen1D) ? MULTOUT14 ^ FF13 : FF13;
end
always @ (negedge rst_n or posedge clk) begin
if(!rst_n)
FF15 <= 8'd0;
else if(start1D)
FF15 <= 8'd0;
else
FF15 <= (inen1D) ? MULTOUT15 ^ FF14 : FF14;
end
GF256MULT GF256MULT0(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h3b),//120
.c(MULTOUT0)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT1(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h24),//225
.c(MULTOUT1)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT2(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h32),//194
.c(MULTOUT2)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT3(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h62),//182
.c(MULTOUT3)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT4(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'he5),//169
.c(MULTOUT4)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT5(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h29),//147
.c(MULTOUT5)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT6(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h41),//191
.c(MULTOUT6)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT7(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'ha3),//91
.c(MULTOUT7)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT8(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h08),//3
.c(MULTOUT8)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT9(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h1e),//76
.c(MULTOUT9)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT10(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'hd1),//161
.c(MULTOUT10)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT11(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h44),//102
.c(MULTOUT11)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT12(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'hbd),//109
.c(MULTOUT12)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT13(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h68),//alpha107
.c(MULTOUT13)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT14(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h0d),//alpha104
.c(MULTOUT14)//,
//.inen(),
//.outen()
);
GF256MULT GF256MULT15(
.clk(clk),
.rst_n(rst_n),
.a(MULTIN),
.b(8'h3b),//alpha120
.c(MULTOUT15)//,
//.inen(),
//.outen()
);
endmodule