Here I posted my code for read write operation and to handle external interrupt through conduit.
the commented part of this code is to solved the error but it is not the permenant solution.
So, can any one have another logic for clear on read register.
module ext_int_ext(clock, resetn, int0_export, int1_export, int0_irq,
int1_irq, read, write, readdata, writedata, byteenable);
input clock, resetn, read, write;
input int0_export, int1_export;
input [1:0] byteenable;
input [15:0] writedata;
output [15:0] readdata;
output reg int0_irq, int1_irq;
wire local_byteenable;
reg [15:0] to_reg, readdata;
wire [15:0] from_reg;
reg [7:0] counter;
parameter time_to_readdata = 2;
reg16 U1 (.clock(clock), .resetn(resetn), .D(to_reg), .byteenable(local_byteenable), .Q(from_reg));
assign local_byteenable = byteenable;
/* Interrupt 0 */
always@ (posedge clock or negedge resetn)
begin
if(!resetn)
int0_irq <= 2'b00;
else if(int0_export == 1)
int0_irq <= 2'b01;
else
int0_irq <= 2'b00;
end
/* Interrupt 1 */
always@ (posedge clock or negedge resetn)
begin
if(!resetn)
int1_irq <= 2'b00;
else if((from_reg[0]) == 1)
begin
if(int1_export == 1)
int1_irq <= 2'b01;
end
else
int1_irq <= 2'b00;
end
always@ (posedge clock or negedge resetn)
begin
if(!resetn)
to_reg <= 16'd0;
else if((from_reg[1]) == 1)
if(write == 1)
to_reg <= writedata;
else
to_reg <= 16'd0;
end
/* Read */
always@ (posedge clock or negedge resetn)
begin
// counter <= counter - 1;
// if(!resetn)
// begin
//// to_reg <= 16'd0;
// counter <= time_to_readdata;
// end
if(read == 1)
begin
readdata <= from_reg;
// if(counter == 0)
// begin
// to_reg <= 16'd0;
// counter <= time_to_readdata;
// end
end
// else
// begin
// //to_reg <= 16'd0;
// counter <= time_to_readdata;
// end
end
endmodule