Line 42... |
Line 42... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.8 2003/04/09 15:49:42 simont
|
|
// Register oc8051_sfr dato output, add signal wait_data.
|
|
//
|
// Revision 1.7 2003/04/07 14:58:02 simont
|
// Revision 1.7 2003/04/07 14:58:02 simont
|
// change sfr's interface.
|
// change sfr's interface.
|
//
|
//
|
// Revision 1.6 2003/04/07 13:29:16 simont
|
// Revision 1.6 2003/04/07 13:29:16 simont
|
// change uart to meet timing.
|
// change uart to meet timing.
|
Line 153... |
Line 156... |
|
|
|
|
|
|
input rst, clk, we, bit_in, desAc, desOv, rmw, rxd, t2, t2ex;
|
input rst, clk, we, bit_in, desAc, desOv, rmw, rxd, t2, t2ex;
|
input int_ack, int0, int1, reti, wr_bit, t0, t1;
|
input int_ack, int0, int1, reti, wr_bit, t0, t1;
|
input [1:0] psw_set;
|
input [1:0] psw_set, wr_sfr;
|
input [2:0] ram_rd_sel, ram_wr_sel, wr_sfr;
|
input [2:0] ram_rd_sel, ram_wr_sel;
|
input [7:0] adr0, adr1, dat1, dat2, p0_in, p1_in, p2_in, p3_in;
|
input [7:0] adr0, adr1, dat1, dat2, p0_in, p1_in, p2_in, p3_in;
|
|
|
output bit_out, txd, intr, srcAc, cy, wait_data;
|
output bit_out, txd, intr, srcAc, cy, wait_data;
|
output [1:0] bank_sel;
|
output [1:0] bank_sel;
|
output [7:0] dat0, p0_out, p1_out, p2_out, p3_out, int_src, dptr_hi, dptr_lo, acc;
|
output [7:0] dat0, p0_out, p1_out, p2_out, p3_out, int_src, dptr_hi, dptr_lo, acc;
|
Line 210... |
Line 213... |
//
|
//
|
// b register
|
// b register
|
// B
|
// B
|
oc8051_b_register oc8051_b_register (.clk(clk), .rst(rst), .bit_in(bit_in),
|
oc8051_b_register oc8051_b_register (.clk(clk), .rst(rst), .bit_in(bit_in),
|
.data_in(dat1), .wr(we), .wr_bit(wr_bit_r), .wr_addr(adr1),
|
.data_in(dat1), .wr(we), .wr_bit(wr_bit_r), .wr_addr(adr1),
|
.data_out(b_reg), .wr_sfr(wr_sfr));
|
.data_out(b_reg));
|
|
|
//
|
//
|
//stack pointer
|
//stack pointer
|
// SP
|
// SP
|
oc8051_sp oc8051_sp1(.clk(clk), .rst(rst), .ram_rd_sel(ram_rd_sel), .ram_wr_sel(ram_wr_sel),
|
oc8051_sp oc8051_sp1(.clk(clk), .rst(rst), .ram_rd_sel(ram_rd_sel), .ram_wr_sel(ram_wr_sel),
|
Line 397... |
Line 400... |
dat0 <= #1 dat1;
|
dat0 <= #1 dat1;
|
wait_data <= #1 1'b0;
|
wait_data <= #1 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
|
((wr_sfr==`OC8051_WRS_BA) & (adr0==`OC8051_SFR_B)) | //write to b
|
// ((wr_sfr==`OC8051_WRS_BA) & (adr0==`OC8051_SFR_B)) | //write to b
|
(adr1[7] & (adr1==adr0) & we & !wr_bit_r)) & !wait_data) begin //write and read same address
|
(adr1[7] & (adr1==adr0) & we & !wr_bit_r)) & !wait_data) begin //write and read same address
|
// dat0 <= #1 dat1;
|
// dat0 <= #1 dat1;
|
wait_data <= #1 1'b1;
|
wait_data <= #1 1'b1;
|
|
|
end else if (
|
end else if (
|
(((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
|
((wr_sfr==`OC8051_WRS_BA) & (adr0==`OC8051_SFR_ACC))) & !wait_data) begin //write to b
|
// ((wr_sfr==`OC8051_WRS_BA) & (adr0==`OC8051_SFR_ACC))
|
|
) & !wait_data) begin //write to b
|
// dat0 <= #1 dat2;
|
// dat0 <= #1 dat2;
|
wait_data <= #1 1'b1;
|
wait_data <= #1 1'b1;
|
|
|
// else if (({adr1[7:3], 3'b000}==adr0_r) & we & wr_bit_r)
|
// else if (({adr1[7:3], 3'b000}==adr0_r) & we & wr_bit_r)
|
// dat0 <= #1 dat1;
|
// dat0 <= #1 dat1;
|
Line 455... |
Line 459... |
begin
|
begin
|
if (rst)
|
if (rst)
|
bit_out <= #1 1'h0;
|
bit_out <= #1 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
|
((wr_sfr==`OC8051_WRS_BA) & (adr0[7:3]==`OC8051_SFR_B_B))) //write to b
|
// ((wr_sfr==`OC8051_WRS_BA) & (adr0[7:3]==`OC8051_SFR_B_B))
|
|
) //write to b
|
|
|
bit_out <= #1 dat1[adr0[2:0]];
|
bit_out <= #1 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 <= #1 bit_in;
|
else
|
else
|