module DW_ecc_inst(allow_correct_n, wr_data_sys, rd_data_mem,
rd_checkbits, rd_error, real_bad_rd_error,
wr_checkbits, rd_data_sys, error_syndrome);
parameter wdth = 64; // 64-bit data busses
parameter cbts = 8; // 8-bit check field
input allow_correct_n;
input [wdth-1:0] wr_data_sys, rd_data_mem;
input [cbts-1:0] rd_checkbits;
output rd_error, real_bad_rd_error;
output [wdth-1:0] rd_data_sys;
output [cbts-1:0] wr_checkbits, error_syndrome;
// instance of DW_ecc for memory reads, uses rd_data_mem
// and rd_checkbits to derive corrected data on rd_data_sys,
// error flags on rd_error & real_bad_rd_error, and error
// syndrome value on error_syndrome
DW_ecc #(wdth,cbts,1)
U1 (.gen( 1'b0 ), // gen tied low for read
.correct_n( allow_correct_n ), // correct_n from system
.datain( rd_data_mem ), // datain from memory
.chkin( rd_checkbits ), // chkin also from memory
.err_detect( rd_error ), // error flag to system
.err_multpl( real_bad_rd_error ), // severe error flag to system
.dataout( rd_data_sys ), // read data (corrected if allowed)
.chkout( error_syndrome ) ); // error syndrome for logging
// instance of DW_ecc fro memory writes, uses wr_data_sys to
// generate wr_checkbits
DW_ecc #(wdth,cbts,0)
U2(1'b1, // gen tied high for write
1'b1, // correct_n not needed (tied high)
wr_data_sys, // datain from system bus
{ cbts{1'b0} }, // chkin bus not needed (tied low)
, // no error flag for writes
, // no multi error flag for writes
, // no data modification for writes
wr_checkbits ); // check bits written to memory
endmodule