blob: 32a2894a9197f4d6ee01bdac2a138b29030cc1bd [file] [log] [blame]
module rvdff (
din,
clk,
rst_l,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire rst_l;
output reg [WIDTH - 1:0] dout;
generate
if (SHORT == 1) begin
wire [WIDTH:1] sv2v_tmp_70387;
assign sv2v_tmp_70387 = din;
always @(*) dout = sv2v_tmp_70387;
end
else always @(posedge clk or negedge rst_l)
if (rst_l == 0)
dout[WIDTH - 1:0] <= 0;
else
dout[WIDTH - 1:0] <= din[WIDTH - 1:0];
endgenerate
endmodule
module rvdffs (
din,
en,
clk,
rst_l,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
input wire [WIDTH - 1:0] din;
input wire en;
input wire clk;
input wire rst_l;
output wire [WIDTH - 1:0] dout;
generate
if (SHORT == 1) begin : genblock
assign dout = din;
end
else begin : genblock
rvdff #(WIDTH) dffs(
.din((en ? din[WIDTH - 1:0] : dout[WIDTH - 1:0])),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdffsc (
din,
en,
clear,
clk,
rst_l,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
input wire [WIDTH - 1:0] din;
input wire en;
input wire clear;
input wire clk;
input wire rst_l;
output wire [WIDTH - 1:0] dout;
wire [WIDTH - 1:0] din_new;
generate
if (SHORT == 1) begin
assign dout = din;
end
else begin
assign din_new = {WIDTH {~clear}} & (en ? din[WIDTH - 1:0] : dout[WIDTH - 1:0]);
rvdff #(WIDTH) dffsc(
.din(din_new[WIDTH - 1:0]),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdff_fpga (
din,
clk,
clken,
rawclk,
rst_l,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire clken;
input wire rawclk;
input wire rst_l;
output wire [WIDTH - 1:0] dout;
generate
if (SHORT == 1) begin
assign dout = din;
end
else rvdffs #(WIDTH) dffs(
.clk(rawclk),
.en(clken),
.din(din),
.rst_l(rst_l),
.dout(dout)
);
endgenerate
endmodule
module rvdffs_fpga (
din,
en,
clk,
clken,
rawclk,
rst_l,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
input wire [WIDTH - 1:0] din;
input wire en;
input wire clk;
input wire clken;
input wire rawclk;
input wire rst_l;
output wire [WIDTH - 1:0] dout;
generate
if (SHORT == 1) begin : genblock
assign dout = din;
end
else begin : genblock
rvdffs #(WIDTH) dffs(
.clk(rawclk),
.en(clken & en),
.din(din),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdffsc_fpga (
din,
en,
clear,
clk,
clken,
rawclk,
rst_l,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
input wire [WIDTH - 1:0] din;
input wire en;
input wire clear;
input wire clk;
input wire clken;
input wire rawclk;
input wire rst_l;
output wire [WIDTH - 1:0] dout;
wire [WIDTH - 1:0] din_new;
generate
if (SHORT == 1) begin
assign dout = din;
end
else rvdffs #(WIDTH) dffs(
.clk(rawclk),
.din(din[WIDTH - 1:0] & {WIDTH {~clear}}),
.en((en | clear) & clken),
.rst_l(rst_l),
.dout(dout)
);
endgenerate
endmodule
module rvdffe (
din,
en,
clk,
rst_l,
scan_mode,
dout
);
parameter WIDTH = 1;
parameter SHORT = 0;
parameter OVERRIDE = 0;
input wire [WIDTH - 1:0] din;
input wire en;
input wire clk;
input wire rst_l;
input wire scan_mode;
output wire [WIDTH - 1:0] dout;
wire l1clk;
generate
if (SHORT == 1) begin
assign dout = din;
end
else begin
if ((WIDTH >= 8) || (OVERRIDE == 1)) begin
rvdffs #(WIDTH) dff(
.din(din),
.en(en),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
end
endgenerate
endmodule
module rvdffpcie (
din,
clk,
rst_l,
en,
scan_mode,
dout
);
parameter WIDTH = 31;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire rst_l;
input wire en;
input wire scan_mode;
output wire [WIDTH - 1:0] dout;
generate
if (WIDTH == 31) begin : genblock
rvdffs #(WIDTH) dff(
.din(din),
.en(en),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdfflie (
din,
clk,
rst_l,
en,
scan_mode,
dout
);
parameter WIDTH = 16;
parameter LEFT = 8;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire rst_l;
input wire en;
input wire scan_mode;
output wire [WIDTH - 1:0] dout;
localparam EXTRA = WIDTH - LEFT;
localparam LMSB = WIDTH - 1;
localparam LLSB = (LMSB - LEFT) + 1;
localparam XMSB = LLSB - 1;
localparam XLSB = LLSB - EXTRA;
generate
if (((WIDTH >= 16) && (LEFT >= 8)) && (EXTRA >= 8)) begin : genblock
rvdffs #(WIDTH) dff(
.din(din),
.en(en),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdffppe (
din,
clk,
rst_l,
en,
scan_mode,
dout
);
parameter WIDTH = 32;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire rst_l;
input wire en;
input wire scan_mode;
output wire [WIDTH - 1:0] dout;
localparam RIGHT = 31;
localparam LEFT = WIDTH - RIGHT;
localparam LMSB = WIDTH - 1;
localparam LLSB = (LMSB - LEFT) + 1;
localparam RMSB = LLSB - 1;
localparam RLSB = LLSB - RIGHT;
generate
if (((WIDTH >= 32) && (LEFT >= 8)) && 1'd1) begin : genblock
rvdffs #(WIDTH) dff(
.din(din),
.en(en),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdffie (
din,
clk,
rst_l,
scan_mode,
dout
);
parameter WIDTH = 1;
parameter OVERRIDE = 0;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire rst_l;
input wire scan_mode;
output wire [WIDTH - 1:0] dout;
wire l1clk;
wire en;
generate
if ((WIDTH >= 8) || (OVERRIDE == 1)) begin : genblock
assign en = |(din ^ dout);
rvdffs #(WIDTH) dff(
.din(din),
.en(en),
.clk(clk),
.rst_l(rst_l),
.dout(dout)
);
end
endgenerate
endmodule
module rvdffiee (
din,
clk,
rst_l,
scan_mode,
en,
dout
);
parameter WIDTH = 1;
parameter OVERRIDE = 0;
input wire [WIDTH - 1:0] din;
input wire clk;
input wire rst_l;
input wire scan_mode;
input wire en;
output wire [WIDTH - 1:0] dout;
wire l1clk;
wire final_en;
generate
if ((WIDTH >= 8) || (OVERRIDE == 1)) begin : genblock
assign final_en = |(din ^ dout) & en;
rvdffs #(WIDTH) dff(
.din(din),
.clk(clk),
.rst_l(rst_l),
.dout(dout),
.en(final_en)
);
end
endgenerate
endmodule
module rvsyncss (
clk,
rst_l,
din,
dout
);
parameter WIDTH = 251;
input wire clk;
input wire rst_l;
input wire [WIDTH - 1:0] din;
output wire [WIDTH - 1:0] dout;
wire [WIDTH - 1:0] din_ff1;
rvdff #(WIDTH) sync_ff1(
.clk(clk),
.rst_l(rst_l),
.din(din[WIDTH - 1:0]),
.dout(din_ff1[WIDTH - 1:0])
);
rvdff #(WIDTH) sync_ff2(
.clk(clk),
.rst_l(rst_l),
.din(din_ff1[WIDTH - 1:0]),
.dout(dout[WIDTH - 1:0])
);
endmodule
module rvsyncss_fpga (
gw_clk,
rawclk,
clken,
rst_l,
din,
dout
);
parameter WIDTH = 251;
input wire gw_clk;
input wire rawclk;
input wire clken;
input wire rst_l;
input wire [WIDTH - 1:0] din;
output wire [WIDTH - 1:0] dout;
wire [WIDTH - 1:0] din_ff1;
rvdff_fpga #(WIDTH) sync_ff1(
.rst_l(rst_l),
.clk(gw_clk),
.rawclk(rawclk),
.clken(clken),
.din(din[WIDTH - 1:0]),
.dout(din_ff1[WIDTH - 1:0])
);
rvdff_fpga #(WIDTH) sync_ff2(
.rst_l(rst_l),
.clk(gw_clk),
.rawclk(rawclk),
.clken(clken),
.din(din_ff1[WIDTH - 1:0]),
.dout(dout[WIDTH - 1:0])
);
endmodule
module rvlsadder (
rs1,
offset,
dout
);
input wire [31:0] rs1;
input wire [11:0] offset;
output wire [31:0] dout;
wire cout;
wire sign;
wire [31:12] rs1_inc;
wire [31:12] rs1_dec;
assign {cout, dout[11:0]} = {1'b0, rs1[11:0]} + {1'b0, offset[11:0]};
assign rs1_inc[31:12] = rs1[31:12] + 1;
assign rs1_dec[31:12] = rs1[31:12] - 1;
assign sign = offset[11];
assign dout[31:12] = (({20 {sign ~^ cout}} & rs1[31:12]) | ({20 {~sign & cout}} & rs1_inc[31:12])) | ({20 {sign & ~cout}} & rs1_dec[31:12]);
endmodule
module rvbradder (
pc,
offset,
dout
);
input [31:1] pc;
input [12:1] offset;
output [31:1] dout;
wire cout;
wire sign;
wire [31:13] pc_inc;
wire [31:13] pc_dec;
assign {cout, dout[12:1]} = {1'b0, pc[12:1]} + {1'b0, offset[12:1]};
assign pc_inc[31:13] = pc[31:13] + 1;
assign pc_dec[31:13] = pc[31:13] - 1;
assign sign = offset[12];
assign dout[31:13] = (({19 {sign ~^ cout}} & pc[31:13]) | ({19 {~sign & cout}} & pc_inc[31:13])) | ({19 {sign & ~cout}} & pc_dec[31:13]);
endmodule
module rvtwoscomp (
din,
dout
);
parameter WIDTH = 32;
input wire [WIDTH - 1:0] din;
output wire [WIDTH - 1:0] dout;
wire [WIDTH - 1:1] dout_temp;
genvar i;
generate
for (i = 1; i < WIDTH; i = i + 1) begin : flip_after_first_one
assign dout_temp[i] = (|din[i - 1:0] ? ~din[i] : din[i]);
end
endgenerate
assign dout[WIDTH - 1:0] = {dout_temp[WIDTH - 1:1], din[0]};
endmodule
module rvfindfirst1 (
din,
dout
);
parameter WIDTH = 32;
parameter SHIFT = $clog2(WIDTH);
input wire [WIDTH - 1:0] din;
output reg [SHIFT - 1:0] dout;
reg done;
always @(*) begin
dout[SHIFT - 1:0] = {SHIFT {1'b0}};
done = 1'b0;
begin : sv2v_autoblock_2
reg signed [31:0] i;
for (i = WIDTH - 1; i > 0; i = i - 1)
begin : find_first_one
done = done | din[i];
dout[SHIFT - 1:0] = dout[SHIFT - 1:0] + (done ? 1'b0 : 1'b1);
end
end
end
endmodule
module rvfindfirst1hot (
din,
dout
);
parameter WIDTH = 32;
input wire [WIDTH - 1:0] din;
output reg [WIDTH - 1:0] dout;
reg done;
always @(*) begin
dout[WIDTH - 1:0] = {WIDTH {1'b0}};
done = 1'b0;
begin : sv2v_autoblock_3
reg signed [31:0] i;
for (i = 0; i < WIDTH; i = i + 1)
begin : find_first_one
dout[i] = ~done & din[i];
done = done | din[i];
end
end
end
endmodule
module rvmaskandmatch (
mask,
data,
masken,
match
);
parameter WIDTH = 32;
input wire [WIDTH - 1:0] mask;
input wire [WIDTH - 1:0] data;
input wire masken;
output wire match;
wire [WIDTH - 1:0] matchvec;
wire masken_or_fullmask;
assign masken_or_fullmask = masken & ~(&mask[WIDTH - 1:0]);
assign matchvec[0] = masken_or_fullmask | (mask[0] == data[0]);
genvar i;
generate
for (i = 1; i < WIDTH; i = i + 1) begin : match_after_first_zero
assign matchvec[i] = (&mask[i - 1:0] & masken_or_fullmask ? 1'b1 : mask[i] == data[i]);
end
endgenerate
assign match = &matchvec[WIDTH - 1:0];
endmodule
module rvrangecheck (
addr,
in_range,
in_region
);
parameter CCM_SADR = 32'h00000000;
parameter CCM_SIZE = 128;
input wire [31:0] addr;
output wire in_range;
output wire in_region;
localparam REGION_BITS = 4;
localparam MASK_BITS = 10 + $clog2(CCM_SIZE);
wire [31:0] start_addr;
wire [3:0] region;
assign start_addr[31:0] = CCM_SADR;
assign region[3:0] = start_addr[31:28];
assign in_region = addr[31:28] == region[3:0];
generate
if (CCM_SIZE == 48) begin
assign in_range = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]) & ~(&addr[MASK_BITS - 1:MASK_BITS - 2]);
end
else assign in_range = addr[31:MASK_BITS] == start_addr[31:MASK_BITS];
endgenerate
endmodule
module rveven_paritygen (
data_in,
parity_out
);
parameter WIDTH = 16;
input wire [WIDTH - 1:0] data_in;
output wire parity_out;
assign parity_out = ^data_in[WIDTH - 1:0];
endmodule
module rveven_paritycheck (
data_in,
parity_in,
parity_err
);
parameter WIDTH = 16;
input wire [WIDTH - 1:0] data_in;
input wire parity_in;
output wire parity_err;
assign parity_err = ^data_in[WIDTH - 1:0] ^ parity_in;
endmodule
module rvecc_encode (
din,
ecc_out
);
input [31:0] din;
output [6:0] ecc_out;
wire [5:0] ecc_out_temp;
assign ecc_out_temp[0] = ((((((((((((((((din[0] ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30];
assign ecc_out_temp[1] = ((((((((((((((((din[0] ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31];
assign ecc_out_temp[2] = ((((((((((((((((din[1] ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31];
assign ecc_out_temp[3] = (((((((((((((din[4] ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
assign ecc_out_temp[4] = (((((((((((((din[11] ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
assign ecc_out_temp[5] = ((((din[26] ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31];
assign ecc_out[6:0] = {^din[31:0] ^ ^ecc_out_temp[5:0], ecc_out_temp[5:0]};
endmodule
module rvecc_decode (
en,
din,
ecc_in,
sed_ded,
dout,
ecc_out,
single_ecc_error,
double_ecc_error
);
input en;
input [31:0] din;
input [6:0] ecc_in;
input sed_ded;
output [31:0] dout;
output [6:0] ecc_out;
output single_ecc_error;
output double_ecc_error;
wire [6:0] ecc_check;
wire [38:0] error_mask;
wire [38:0] din_plus_parity;
wire [38:0] dout_plus_parity;
assign ecc_check[0] = (((((((((((((((((ecc_in[0] ^ din[0]) ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30];
assign ecc_check[1] = (((((((((((((((((ecc_in[1] ^ din[0]) ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31];
assign ecc_check[2] = (((((((((((((((((ecc_in[2] ^ din[1]) ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31];
assign ecc_check[3] = ((((((((((((((ecc_in[3] ^ din[4]) ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
assign ecc_check[4] = ((((((((((((((ecc_in[4] ^ din[11]) ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
assign ecc_check[5] = (((((ecc_in[5] ^ din[26]) ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31];
assign ecc_check[6] = (^din[31:0] ^ ^ecc_in[6:0]) & ~sed_ded;
assign single_ecc_error = (en & (ecc_check[6:0] != 0)) & ecc_check[6];
assign double_ecc_error = (en & (ecc_check[6:0] != 0)) & ~ecc_check[6];
generate
genvar i;
for (i = 1; i < 40; i = i + 1) assign error_mask[i - 1] = ecc_check[5:0] == i;
endgenerate
assign din_plus_parity[38:0] = {ecc_in[6], din[31:26], ecc_in[5], din[25:11], ecc_in[4], din[10:4], ecc_in[3], din[3:1], ecc_in[2], din[0], ecc_in[1:0]};
assign dout_plus_parity[38:0] = (single_ecc_error ? error_mask[38:0] ^ din_plus_parity[38:0] : din_plus_parity[38:0]);
assign dout[31:0] = {dout_plus_parity[37:32], dout_plus_parity[30:16], dout_plus_parity[14:8], dout_plus_parity[6:4], dout_plus_parity[2]};
assign ecc_out[6:0] = {dout_plus_parity[38] ^ (ecc_check[6:0] == 7'b1000000), dout_plus_parity[31], dout_plus_parity[15], dout_plus_parity[7], dout_plus_parity[3], dout_plus_parity[1:0]};
endmodule
module rvecc_encode_64 (
din,
ecc_out
);
input [63:0] din;
output [6:0] ecc_out;
assign ecc_out[0] = (((((((((((((((((((((((((((((((((din[0] ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30]) ^ din[32]) ^ din[34]) ^ din[36]) ^ din[38]) ^ din[40]) ^ din[42]) ^ din[44]) ^ din[46]) ^ din[48]) ^ din[50]) ^ din[52]) ^ din[54]) ^ din[56]) ^ din[57]) ^ din[59]) ^ din[61]) ^ din[63];
assign ecc_out[1] = (((((((((((((((((((((((((((((((((din[0] ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31]) ^ din[32]) ^ din[35]) ^ din[36]) ^ din[39]) ^ din[40]) ^ din[43]) ^ din[44]) ^ din[47]) ^ din[48]) ^ din[51]) ^ din[52]) ^ din[55]) ^ din[56]) ^ din[58]) ^ din[59]) ^ din[62]) ^ din[63];
assign ecc_out[2] = (((((((((((((((((((((((((((((((((din[1] ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
assign ecc_out[3] = (((((((((((((((((((((((((((((din[4] ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
assign ecc_out[4] = (((((((((((((((((((((((((((((din[11] ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
assign ecc_out[5] = (((((((((((((((((((((((((((((din[26] ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
assign ecc_out[6] = (((((din[57] ^ din[58]) ^ din[59]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
endmodule
module rvecc_decode_64 (
en,
din,
ecc_in,
ecc_error
);
input en;
input [63:0] din;
input [6:0] ecc_in;
output ecc_error;
wire [6:0] ecc_check;
assign ecc_check[0] = ((((((((((((((((((((((((((((((((((ecc_in[0] ^ din[0]) ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30]) ^ din[32]) ^ din[34]) ^ din[36]) ^ din[38]) ^ din[40]) ^ din[42]) ^ din[44]) ^ din[46]) ^ din[48]) ^ din[50]) ^ din[52]) ^ din[54]) ^ din[56]) ^ din[57]) ^ din[59]) ^ din[61]) ^ din[63];
assign ecc_check[1] = ((((((((((((((((((((((((((((((((((ecc_in[1] ^ din[0]) ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31]) ^ din[32]) ^ din[35]) ^ din[36]) ^ din[39]) ^ din[40]) ^ din[43]) ^ din[44]) ^ din[47]) ^ din[48]) ^ din[51]) ^ din[52]) ^ din[55]) ^ din[56]) ^ din[58]) ^ din[59]) ^ din[62]) ^ din[63];
assign ecc_check[2] = ((((((((((((((((((((((((((((((((((ecc_in[2] ^ din[1]) ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
assign ecc_check[3] = ((((((((((((((((((((((((((((((ecc_in[3] ^ din[4]) ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
assign ecc_check[4] = ((((((((((((((((((((((((((((((ecc_in[4] ^ din[11]) ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
assign ecc_check[5] = ((((((((((((((((((((((((((((((ecc_in[5] ^ din[26]) ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
assign ecc_check[6] = ((((((ecc_in[6] ^ din[57]) ^ din[58]) ^ din[59]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
assign ecc_error = en & (ecc_check[6:0] != 0);
endmodule
module clockhdr (
SE,
EN,
CK,
Q
);
input wire SE;
input wire EN;
input wire CK;
output Q;
reg en_ff;
wire enable;
assign enable = EN | SE;
always @(CK or enable)
if (!CK)
en_ff = enable;
assign Q = CK & en_ff;
endmodule
module rvoclkhdr (
en,
clk,
scan_mode,
l1clk
);
input wire en;
input wire clk;
input wire scan_mode;
output wire l1clk;
wire SE;
assign SE = 0;
assign l1clk = clk;
endmodule