Line 16... |
Line 16... |
//// - Dinesh Annayya, dinesha@opencores.org ////
|
//// - Dinesh Annayya, dinesha@opencores.org ////
|
//// ////
|
//// ////
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//// v0.0 - Dinesh A, 5th Jan 2017
|
//// v0.0 - Dinesh A, 5th Jan 2017
|
//// 1. Active edge of reset changed from High to Low
|
//// 1. Active edge of reset changed from High to Low
|
|
//// v0.1 - Dinesh A, 19th Jan 2017
|
|
//// 1. Lint Warning fixes
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//// ////
|
//// ////
|
//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
|
//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
|
//// ////
|
//// ////
|
//// This source file may be used and distributed without ////
|
//// This source file may be used and distributed without ////
|
Line 536... |
Line 538... |
|
|
|
|
|
|
always @(posedge clk or negedge resetn)
|
always @(posedge clk or negedge resetn)
|
if (resetn == 1'b0) begin
|
if (resetn == 1'b0) begin
|
adr0_r <= #1 8'h00;
|
adr0_r <= 8'h00;
|
ram_wr_sel_r <= #1 3'b000;
|
ram_wr_sel_r <= 3'b000;
|
wr_bit_r <= #1 1'b0;
|
wr_bit_r <= 1'b0;
|
// wait_data <= #1 1'b0;
|
// wait_data <= 1'b0;
|
end else begin
|
end else begin
|
adr0_r <= #1 adr0;
|
adr0_r <= adr0;
|
ram_wr_sel_r <= #1 ram_wr_sel;
|
ram_wr_sel_r <= ram_wr_sel;
|
wr_bit_r <= #1 wr_bit;
|
wr_bit_r <= wr_bit;
|
end
|
end
|
|
|
assign comp_wait = !(
|
assign comp_wait = !(
|
((comp_sel==`OC8051_CSS_AZ) &
|
((comp_sel==`OC8051_CSS_AZ) &
|
((wr_sfr==`OC8051_WRS_ACC1) |
|
((wr_sfr==`OC8051_WRS_ACC1) |
|
Line 567... |
Line 569... |
//
|
//
|
//set output in case of address (byte)
|
//set output in case of address (byte)
|
always @(posedge clk or negedge resetn)
|
always @(posedge clk or negedge resetn)
|
begin
|
begin
|
if (resetn == 1'b0) begin
|
if (resetn == 1'b0) begin
|
dat0 <= #1 8'h00;
|
dat0 <= 8'h00;
|
wait_data <= #1 1'b0;
|
wait_data <= 1'b0;
|
end else if ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) begin //write and read same address
|
end else if ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) begin //write and read same address
|
dat0 <= #1 des_acc;
|
dat0 <= des_acc;
|
wait_data <= #1 1'b0;
|
wait_data <= 1'b0;
|
end else if (
|
end else if (
|
(
|
(
|
((wr_sfr==`OC8051_WRS_ACC1) & (adr0==`OC8051_SFR_ACC)) | //write to acc
|
((wr_sfr==`OC8051_WRS_ACC1) & (adr0==`OC8051_SFR_ACC)) | //write to acc
|
// ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) | //write to dpl
|
// ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) | //write to dpl
|
(adr1[7] & (adr1==adr0) & we & !wr_bit_r) | //write and read same address
|
(adr1[7] & (adr1==adr0) & we & !wr_bit_r) | //write and read same address
|
(adr1[7] & (adr1[7:3]==adr0[7:3]) & (~&adr0[2:0]) & we & wr_bit_r) //write bit addressable to read address
|
(adr1[7] & (adr1[7:3]==adr0[7:3]) & (~&adr0[2:0]) & we & wr_bit_r) //write bit addressable to read address
|
) & !wait_data) begin
|
) & !wait_data) begin
|
wait_data <= #1 1'b1;
|
wait_data <= 1'b1;
|
|
|
end else if ((
|
end else if ((
|
((|psw_set) & (adr0==`OC8051_SFR_PSW)) |
|
((|psw_set) & (adr0==`OC8051_SFR_PSW)) |
|
((wr_sfr==`OC8051_WRS_ACC2) & (adr0==`OC8051_SFR_ACC)) | //write to acc
|
((wr_sfr==`OC8051_WRS_ACC2) & (adr0==`OC8051_SFR_ACC)) | //write to acc
|
((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_HI)) //write to dph
|
((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_HI)) //write to dph
|
) & !wait_data) begin
|
) & !wait_data) begin
|
wait_data <= #1 1'b1;
|
wait_data <= 1'b1;
|
|
|
end else begin
|
end else begin
|
case (adr0) /* synopsys full_case parallel_case */
|
case (adr0) /* synopsys full_case parallel_case */
|
`OC8051_SFR_ACC: dat0 <= #1 acc;
|
`OC8051_SFR_ACC: dat0 <= acc;
|
`OC8051_SFR_PSW: dat0 <= #1 psw;
|
`OC8051_SFR_PSW: dat0 <= psw;
|
|
|
`ifdef OC8051_PORTS
|
`ifdef OC8051_PORTS
|
`ifdef OC8051_PORT0
|
`ifdef OC8051_PORT0
|
`OC8051_SFR_P0: dat0 <= #1 p0_data;
|
`OC8051_SFR_P0: dat0 <= p0_data;
|
`endif
|
`endif
|
|
|
`ifdef OC8051_PORT1
|
`ifdef OC8051_PORT1
|
`OC8051_SFR_P1: dat0 <= #1 p1_data;
|
`OC8051_SFR_P1: dat0 <= p1_data;
|
`endif
|
`endif
|
|
|
`ifdef OC8051_PORT2
|
`ifdef OC8051_PORT2
|
`OC8051_SFR_P2: dat0 <= #1 p2_data;
|
`OC8051_SFR_P2: dat0 <= p2_data;
|
`endif
|
`endif
|
|
|
`ifdef OC8051_PORT3
|
`ifdef OC8051_PORT3
|
`OC8051_SFR_P3: dat0 <= #1 p3_data;
|
`OC8051_SFR_P3: dat0 <= p3_data;
|
`endif
|
`endif
|
`endif
|
`endif
|
|
|
`OC8051_SFR_SP: dat0 <= #1 sp;
|
`OC8051_SFR_SP: dat0 <= sp;
|
`OC8051_SFR_B: dat0 <= #1 b_reg;
|
`OC8051_SFR_B: dat0 <= b_reg;
|
`OC8051_SFR_DPTR_HI: dat0 <= #1 dptr_hi;
|
`OC8051_SFR_DPTR_HI: dat0 <= dptr_hi;
|
`OC8051_SFR_DPTR_LO: dat0 <= #1 dptr_lo;
|
`OC8051_SFR_DPTR_LO: dat0 <= dptr_lo;
|
|
|
`ifdef OC8051_UART
|
`ifdef OC8051_UART
|
`OC8051_SFR_SCON: dat0 <= #1 scon;
|
`OC8051_SFR_SCON: dat0 <= scon;
|
`OC8051_SFR_SBUF: dat0 <= #1 sbuf;
|
`OC8051_SFR_SBUF: dat0 <= sbuf;
|
`OC8051_SFR_PCON: dat0 <= #1 pcon;
|
`OC8051_SFR_PCON: dat0 <= pcon;
|
`endif
|
`endif
|
|
|
`ifdef OC8051_TC01
|
`ifdef OC8051_TC01
|
`OC8051_SFR_TH0: dat0 <= #1 th0;
|
`OC8051_SFR_TH0: dat0 <= th0;
|
`OC8051_SFR_TH1: dat0 <= #1 th1;
|
`OC8051_SFR_TH1: dat0 <= th1;
|
`OC8051_SFR_TL0: dat0 <= #1 tl0;
|
`OC8051_SFR_TL0: dat0 <= tl0;
|
`OC8051_SFR_TL1: dat0 <= #1 tl1;
|
`OC8051_SFR_TL1: dat0 <= tl1;
|
`OC8051_SFR_TMOD: dat0 <= #1 tmod;
|
`OC8051_SFR_TMOD: dat0 <= tmod;
|
`endif
|
`endif
|
|
|
`OC8051_SFR_IP: dat0 <= #1 ip;
|
`OC8051_SFR_IP: dat0 <= ip;
|
`OC8051_SFR_IE: dat0 <= #1 ie;
|
`OC8051_SFR_IE: dat0 <= ie;
|
`OC8051_SFR_TCON: dat0 <= #1 tcon;
|
`OC8051_SFR_TCON: dat0 <= tcon;
|
|
|
`ifdef OC8051_TC2
|
`ifdef OC8051_TC2
|
`OC8051_SFR_RCAP2H: dat0 <= #1 rcap2h;
|
`OC8051_SFR_RCAP2H: dat0 <= rcap2h;
|
`OC8051_SFR_RCAP2L: dat0 <= #1 rcap2l;
|
`OC8051_SFR_RCAP2L: dat0 <= rcap2l;
|
`OC8051_SFR_TH2: dat0 <= #1 th2;
|
`OC8051_SFR_TH2: dat0 <= th2;
|
`OC8051_SFR_TL2: dat0 <= #1 tl2;
|
`OC8051_SFR_TL2: dat0 <= tl2;
|
`OC8051_SFR_T2CON: dat0 <= #1 t2con;
|
`OC8051_SFR_T2CON: dat0 <= t2con;
|
`endif
|
`endif
|
|
|
// default: dat0 <= #1 8'h00;
|
default: dat0 <= 8'h00;
|
endcase
|
endcase
|
wait_data <= #1 1'b0;
|
wait_data <= 1'b0;
|
end
|
end
|
end
|
end
|
|
|
|
|
//
|
//
|
//set output in case of address (bit)
|
//set output in case of address (bit)
|
|
|
always @(posedge clk or negedge resetn)
|
always @(posedge clk or negedge resetn)
|
begin
|
begin
|
if (resetn == 1'b0)
|
if (resetn == 1'b0)
|
bit_out <= #1 1'h0;
|
bit_out <= 1'h0;
|
else if (
|
else if (
|
((adr1[7:3]==adr0[7:3]) & (~&adr1[2:0]) & we & !wr_bit_r) |
|
((adr1[7:3]==adr0[7:3]) & (~&adr1[2:0]) & we & !wr_bit_r) |
|
((wr_sfr==`OC8051_WRS_ACC1) & (adr0[7:3]==`OC8051_SFR_B_ACC)) //write to acc
|
((wr_sfr==`OC8051_WRS_ACC1) & (adr0[7:3]==`OC8051_SFR_B_ACC)) //write to acc
|
)
|
)
|
|
|
bit_out <= #1 dat1[adr0[2:0]];
|
bit_out <= dat1[adr0[2:0]];
|
else if ((adr1==adr0) & we & wr_bit_r)
|
else if ((adr1==adr0) & we & wr_bit_r)
|
bit_out <= #1 bit_in;
|
bit_out <= bit_in;
|
else
|
else
|
case (adr0[7:3]) /* synopsys full_case parallel_case */
|
case (adr0[7:3]) /* synopsys full_case parallel_case */
|
`OC8051_SFR_B_ACC: bit_out <= #1 acc[adr0[2:0]];
|
`OC8051_SFR_B_ACC: bit_out <= acc[adr0[2:0]];
|
`OC8051_SFR_B_PSW: bit_out <= #1 psw[adr0[2:0]];
|
`OC8051_SFR_B_PSW: bit_out <= psw[adr0[2:0]];
|
|
|
`ifdef OC8051_PORTS
|
`ifdef OC8051_PORTS
|
`ifdef OC8051_PORT0
|
`ifdef OC8051_PORT0
|
`OC8051_SFR_B_P0: bit_out <= #1 p0_data[adr0[2:0]];
|
`OC8051_SFR_B_P0: bit_out <= p0_data[adr0[2:0]];
|
`endif
|
`endif
|
|
|
`ifdef OC8051_PORT1
|
`ifdef OC8051_PORT1
|
`OC8051_SFR_B_P1: bit_out <= #1 p1_data[adr0[2:0]];
|
`OC8051_SFR_B_P1: bit_out <= p1_data[adr0[2:0]];
|
`endif
|
`endif
|
|
|
`ifdef OC8051_PORT2
|
`ifdef OC8051_PORT2
|
`OC8051_SFR_B_P2: bit_out <= #1 p2_data[adr0[2:0]];
|
`OC8051_SFR_B_P2: bit_out <= p2_data[adr0[2:0]];
|
`endif
|
`endif
|
|
|
`ifdef OC8051_PORT3
|
`ifdef OC8051_PORT3
|
`OC8051_SFR_B_P3: bit_out <= #1 p3_data[adr0[2:0]];
|
`OC8051_SFR_B_P3: bit_out <= p3_data[adr0[2:0]];
|
`endif
|
`endif
|
`endif
|
`endif
|
|
|
`OC8051_SFR_B_B: bit_out <= #1 b_reg[adr0[2:0]];
|
`OC8051_SFR_B_B: bit_out <= b_reg[adr0[2:0]];
|
`OC8051_SFR_B_IP: bit_out <= #1 ip[adr0[2:0]];
|
`OC8051_SFR_B_IP: bit_out <= ip[adr0[2:0]];
|
`OC8051_SFR_B_IE: bit_out <= #1 ie[adr0[2:0]];
|
`OC8051_SFR_B_IE: bit_out <= ie[adr0[2:0]];
|
`OC8051_SFR_B_TCON: bit_out <= #1 tcon[adr0[2:0]];
|
`OC8051_SFR_B_TCON: bit_out <= tcon[adr0[2:0]];
|
|
|
`ifdef OC8051_UART
|
`ifdef OC8051_UART
|
`OC8051_SFR_B_SCON: bit_out <= #1 scon[adr0[2:0]];
|
`OC8051_SFR_B_SCON: bit_out <= scon[adr0[2:0]];
|
`endif
|
`endif
|
|
|
`ifdef OC8051_TC2
|
`ifdef OC8051_TC2
|
`OC8051_SFR_B_T2CON: bit_out <= #1 t2con[adr0[2:0]];
|
`OC8051_SFR_B_T2CON: bit_out <= t2con[adr0[2:0]];
|
`endif
|
`endif
|
|
|
// default: bit_out <= #1 1'b0;
|
default: bit_out <= 1'b0;
|
endcase
|
endcase
|
end
|
end
|
|
|
always @(posedge clk or negedge resetn)
|
always @(posedge clk or negedge resetn)
|
begin
|
begin
|
if (resetn == 1'b0) begin
|
if (resetn == 1'b0) begin
|
prescaler <= #1 4'h0;
|
prescaler <= 4'h0;
|
pres_ow <= #1 1'b0;
|
pres_ow <= 1'b0;
|
end else if (prescaler==4'b1011) begin
|
end else if (prescaler==4'b1011) begin
|
prescaler <= #1 4'h0;
|
prescaler <= 4'h0;
|
pres_ow <= #1 1'b1;
|
pres_ow <= 1'b1;
|
end else begin
|
end else begin
|
prescaler <= #1 prescaler + 4'h1;
|
prescaler <= prescaler + 4'h1;
|
pres_ow <= #1 1'b0;
|
pres_ow <= 1'b0;
|
end
|
end
|
end
|
end
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|