OpenCores
URL https://opencores.org/ocsvn/8051/8051/trunk

Subversion Repositories 8051

[/] [8051/] [trunk/] [rtl/] [verilog/] [oc8051_top.v] - Diff between revs 82 and 102

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 82 Rev 102
Line 42... Line 42...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.18  2003/01/13 14:14:41  simont
 
// replace some modules
 
//
// Revision 1.17  2002/11/05 17:23:54  simont
// Revision 1.17  2002/11/05 17:23:54  simont
// add module oc8051_sfr, 256 bytes internal ram
// add module oc8051_sfr, 256 bytes internal ram
//
//
// Revision 1.16  2002/10/28 14:55:00  simont
// Revision 1.16  2002/10/28 14:55:00  simont
// fix bug in interface to external data ram
// fix bug in interface to external data ram
Line 64... Line 67...
// synopsys translate_off
// synopsys translate_off
`include "oc8051_timescale.v"
`include "oc8051_timescale.v"
// synopsys translate_on
// synopsys translate_on
 
 
 
 
module oc8051_top (rst_i, clk, int0, int1, ea, iadr_o, idat_i,istb_o, iack_i, ddat_i,
module oc8051_top (wb_rst_i, wb_clk_i,
                icyc_o, ddat_o, dadr_o, dwe_o, dack_i, dstb_o, dcyc_o, p0_in, p1_in, p2_in, p3_in, p0_out,
//interface to instruction rom
                p1_out, p2_out, p3_out, rxd, txd, t0, t1, t2, t2ex);
                wbi_adr_o, wbi_dat_i, wbi_stb_o, wbi_ack_i, wbi_cyc_o, wbi_err_i,
//
//interface to data ram
// rst_i         (in)  reset - pin
                wbd_dat_i, wbd_dat_o,
// clk           (in)  clock - pin
                wbd_adr_o, wbd_we_o, wbd_ack_i, wbd_stb_o, wbd_cyc_o, wbd_err_i,
// iadr_o        (out) program rom addres (pin + internal)
// interrupt interface
// int0          (in)  external interrupt 0
                int0_i, int1_i,
// int1          (in)  external interrupt 1
// external access (active low)
// dat_i         (in)  exteranal ram input
                ea_in,
// dat_o         (out) exteranal ram output
// port interface
// adr_o         (out) external address
                p0_i, p1_i, p2_i, p3_i,
// dwe_o         (out) write to external ram
                p0_o, p1_o, p2_o, p3_o,
// dstb_o
// serial interface
// ack_i
                rxd_i, txd_o,
// idat_i        (in)  data from external program rom
// counter interface
// istb_o        (out) strobe to program rom
                t0_i, t1_i, t2_i, t2ex_i);
// iack_i        (in)  acknowlage from external rom
 
// icyc_o        (out)
 
// p0_in, p1_in, p2_in, p3_in           (in)  port inputs
 
// p0_out, p1_out, p2_out, p3_out       (out) port outputs
 
// rxd           (in) receive
 
// txd           (out) transmit
 
// t0, t1        (in)  t/c external inputs
 
//
 
//
 
 
 
 
 
 
 
input rst_i, clk, int0, int1, ea, rxd, t0, t1, dack_i, iack_i, t2, t2ex;
input         wb_rst_i,         // reset input
input [7:0] ddat_i, p0_in, p1_in, p2_in, p3_in;
              wb_clk_i,         // clock input
input [31:0] idat_i;
              int0_i,           // interrupt 0
 
              int1_i,           // interrupt 1
 
              ea_in,            // external access
 
              rxd_i,            // receive
 
              t0_i,             // counter 0 input
 
              t1_i,             // counter 1 input
 
              wbd_ack_i,        // data acknowalge
 
              wbi_ack_i,        // instruction acknowlage
 
              wbd_err_i,        // data error
 
              wbi_err_i,        // instruction error
 
              t2_i,             // counter 2 input
 
              t2ex_i;           // ???
 
 
 
input [7:0]   wbd_dat_i, // ram data input
 
              p0_i,             // port 0 input
 
              p1_i,             // port 1 input
 
              p2_i,             // port 2 input
 
              p3_i;             // port 3 input
 
input [31:0]  wbi_dat_i; // rom data input
 
 
 
output        wbd_we_o,         // data write enable
 
              txd_o,            // transnmit
 
              wbd_stb_o,        // data strobe
 
              wbd_cyc_o,        // data cycle
 
              wbi_stb_o,        // instruction strobe
 
              wbi_cyc_o;        // instruction cycle
 
 
 
output [7:0]  wbd_dat_o, // data output
 
              p0_o,             // port 0 output
 
              p1_o,             // port 1 output
 
              p2_o,             // port 2 output
 
              p3_o;             // port 3 output
 
 
output dwe_o, txd, dstb_o, dcyc_o, istb_o, icyc_o;
output [15:0] wbd_adr_o, // data address
output [7:0] ddat_o, p0_out, p1_out, p2_out, p3_out;
              wbi_adr_o;        // instruction address
 
 
output [15:0] dadr_o, iadr_o;
 
 
 
wire [7:0] op1_i, op2_i, op3_i, dptr_hi, dptr_lo, ri, rn_mem, data_out;
wire [7:0] op1_i, op2_i, op3_i, dptr_hi, dptr_lo, ri, rn_mem, data_out;
wire [7:0] op1, op2, op3;
wire [7:0] op1, op2, op3;
wire [7:0] acc, p0_out, p1_out, p2_out, p3_out;
wire [7:0] acc, p0_out, p1_out, p2_out, p3_out;
wire [7:0] sp, sp_w;
wire [7:0] sp, sp_w;
 
 
wire [15:0] pc;
wire [15:0] pc;
 
 
wire rst;
assign wbd_cyc_o = wbd_stb_o;
assign rst = rst_i;
assign wbi_cyc_o = wbi_stb_o;
 
 
assign dcyc_o = dstb_o;
 
assign icyc_o = istb_o;
 
 
 
//
//
// ram_rd_sel    ram read (internal)
// ram_rd_sel    ram read (internal)
// ram_wr_sel    ram write (internal)
// ram_wr_sel    ram write (internal)
// src_sel1, src_sel2    from decoder to register
// src_sel1, src_sel2    from decoder to register
Line 206... Line 227...
 
 
 
 
 
 
//
//
// decoder
// decoder
oc8051_decoder oc8051_decoder1(.clk(clk), .rst(rst), .op_in(op1_n), .op1_c(op1_cur),
oc8051_decoder oc8051_decoder1(.clk(wb_clk_i), .rst(wb_rst_i), .op_in(op1_n), .op1_c(op1_cur),
     .ram_rd_sel(ram_rd_sel), .ram_wr_sel(ram_wr_sel), .bit_addr(bit_addr),
     .ram_rd_sel(ram_rd_sel), .ram_wr_sel(ram_wr_sel), .bit_addr(bit_addr),
     .src_sel1(src_sel1), .src_sel2(src_sel2),
     .src_sel1(src_sel1), .src_sel2(src_sel2),
     .src_sel3(src_sel3), .alu_op(alu_op), .psw_set(psw_set),
     .src_sel3(src_sel3), .alu_op(alu_op), .psw_set(psw_set),
     .cy_sel(cy_sel), .wr(wr), .pc_wr(pc_wr),
     .cy_sel(cy_sel), .wr(wr), .pc_wr(pc_wr),
     .pc_sel(pc_wr_sel), .comp_sel(comp_sel), .eq(eq),
     .pc_sel(pc_wr_sel), .comp_sel(comp_sel), .eq(eq),
Line 218... Line 239...
     .istb(istb), .mem_act(mem_act), .mem_wait(mem_wait));
     .istb(istb), .mem_act(mem_act), .mem_wait(mem_wait));
 
 
 
 
//
//
//alu
//alu
oc8051_alu oc8051_alu1(.rst(rst), .clk(clk), .op_code(alu_op), .rd(rd),
oc8051_alu oc8051_alu1(.rst(wb_rst_i), .clk(wb_clk_i), .op_code(alu_op), .rd(rd),
     .src1(src1), .src2(src2), .src3(src3), .srcCy(alu_cy), .srcAc(srcAc),
     .src1(src1), .src2(src2), .src3(src3), .srcCy(alu_cy), .srcAc(srcAc),
     .des1(des1), .des2(des2), .des1_r(des1_r), .desCy(desCy),
     .des1(des1), .des2(des2), .des1_r(des1_r), .desCy(desCy),
     .desAc(desAc), .desOv(desOv), .bit_in(bit_out));
     .desAc(desAc), .desOv(desOv), .bit_in(bit_out));
 
 
//
//
//data ram
//data ram
oc8051_ram_top oc8051_ram_top1(.clk(clk), .rst(rst), .rd_addr(rd_addr), .rd_data(ram_data),
oc8051_ram_top oc8051_ram_top1(.clk(wb_clk_i), .rst(wb_rst_i), .rd_addr(rd_addr), .rd_data(ram_data),
          .wr_addr(wr_addr), .bit_addr(bit_addr_o), .wr_data(wr_dat), .wr(wr_o && (!wr_addr[7] || wr_ind)),
          .wr_addr(wr_addr), .bit_addr(bit_addr_o), .wr_data(wr_dat), .wr(wr_o && (!wr_addr[7] || wr_ind)),
          .bit_data_in(desCy), .bit_data_out(bit_data));
          .bit_data_in(desCy), .bit_data_out(bit_data));
 
 
//
//
 
 
oc8051_alu_src_sel oc8051_alu_src_sel1(.clk(clk), .rst(rst), .rd(rd),
oc8051_alu_src_sel oc8051_alu_src_sel1(.clk(wb_clk_i), .rst(wb_rst_i), .rd(rd),
     .sel1(src_sel1), .sel2(src_sel2), .sel3(src_sel3),
     .sel1(src_sel1), .sel2(src_sel2), .sel3(src_sel3),
     .acc(acc), .ram(ram_out), .pc(pc), .dptr({dptr_hi, dptr_lo}),
     .acc(acc), .ram(ram_out), .pc(pc), .dptr({dptr_hi, dptr_lo}),
     .op1(op1_n), .op2(op2_n), .op3(op3_n),
     .op1(op1_n), .op2(op2_n), .op3(op3_n),
     .src1(src1), .src2(src2), .src3(src3));
     .src1(src1), .src2(src2), .src3(src3));
 
 
Line 245... Line 266...
oc8051_comp oc8051_comp1(.sel(comp_sel), .eq(eq), .b_in(bit_out), .cy(cy), .acc(acc), .des(des1_r));
oc8051_comp oc8051_comp1(.sel(comp_sel), .eq(eq), .b_in(bit_out), .cy(cy), .acc(acc), .des(des1_r));
 
 
 
 
//
//
//program rom
//program rom
oc8051_rom oc8051_rom1(.rst(rst), .clk(clk), .ea_int(ea_int), .addr(iadr_o),
oc8051_rom oc8051_rom1(.rst(wb_rst_i), .clk(wb_clk_i), .ea_int(ea_int), .addr(wbi_adr_o),
                .data1(op1_i), .data2(op2_i), .data3(op3_i));
                .data1(op1_i), .data2(op2_i), .data3(op3_i));
 
 
//
//
//
//
oc8051_cy_select oc8051_cy_select1(.cy_sel(cy_sel), .cy_in(cy), .data_in(bit_out),
oc8051_cy_select oc8051_cy_select1(.cy_sel(cy_sel), .cy_in(cy), .data_in(bit_out),
                 .data_out(alu_cy));
                 .data_out(alu_cy));
//
//
//
//
oc8051_indi_addr oc8051_indi_addr1 (.clk(clk), .rst(rst), .rd_addr(rd_addr), .wr_addr(wr_addr),
oc8051_indi_addr oc8051_indi_addr1 (.clk(wb_clk_i), .rst(wb_rst_i), .rd_addr(rd_addr), .wr_addr(wr_addr),
      .data_in(wr_dat), .wr(wr_o), .wr_bit(bit_addr_o), .rn_out(rn_mem),
      .data_in(wr_dat), .wr(wr_o), .wr_bit(bit_addr_o), .rn_out(rn_mem),
      .ri_out(ri), .sel(op1_cur), .bank(bank_sel));
      .ri_out(ri), .sel(op1_cur), .bank(bank_sel));
 
 
 
 
//
//
//
//
oc8051_memory_interface oc8051_memory_interface1(.clk(clk), .rst(rst),
oc8051_memory_interface oc8051_memory_interface1(.clk(wb_clk_i), .rst(wb_rst_i),
   .wr_i(wr), .wr_o(wr_o), .wr_bit_i(bit_addr), .wr_bit_o(bit_addr_o), .wr_dat(wr_dat),
   .wr_i(wr), .wr_o(wr_o), .wr_bit_i(bit_addr), .wr_bit_o(bit_addr_o), .wr_dat(wr_dat),
//rom_addr_sel
//rom_addr_sel
   .iack_i(iack_i), .des1(des1), .des2(des2),
   .iack_i(wbi_ack_i), .des1(des1), .des2(des2),
   .iadr_o(iadr_o), .sp_w(sp_w),
   .iadr_o(wbi_adr_o), .sp_w(sp_w),
 
 
//ext_addr_sel
//ext_addr_sel
   .dptr({dptr_hi, dptr_lo}), .ri(ri), .rn_mem(rn_mem), .dadr_o(dadr_o), .ddat_o(ddat_o),
   .dptr({dptr_hi, dptr_lo}), .ri(ri), .rn_mem(rn_mem), .dadr_o(wbd_adr_o), .ddat_o(wbd_dat_o),
   .dwe_o(dwe_o), .dstb_o(dstb_o), .ddat_i(ddat_i), .acc(acc), .dack_i(dack_i),
   .dwe_o(wbd_we_o), .dstb_o(wbd_stb_o), .ddat_i(wbd_dat_i), .acc(acc), .dack_i(wbd_ack_i),
 
 
//ram_addr_sel
//ram_addr_sel
   .rd_sel(ram_rd_sel), .wr_sel(ram_wr_sel), .sp(sp), .rn({bank_sel, op1_n[2:0]}),
   .rd_sel(ram_rd_sel), .wr_sel(ram_wr_sel), .sp(sp), .rn({bank_sel, op1_n[2:0]}),
   .rd_addr(rd_addr), .wr_addr(wr_addr), .rd_ind(rd_ind), .wr_ind(wr_ind),
   .rd_addr(rd_addr), .wr_addr(wr_addr), .rd_ind(rd_ind), .wr_ind(wr_ind),
 
 
//op_select
//op_select
   .ea(ea), .ea_int(ea_int),
   .ea(ea_in), .ea_int(ea_int),
   .op1_i(op1_i), .op2_i(op2_i), .op3_i(op3_i),
   .op1_i(op1_i), .op2_i(op2_i), .op3_i(op3_i),
   .idat_i(idat_i),
   .idat_i(wbi_dat_i),
   .op1_out(op1_n), .op2_out(op2_n), .op3_out(op3_n),
   .op1_out(op1_n), .op2_out(op2_n), .op3_out(op3_n),
   .intr(intr), .int_v(int_src), .rd(rd), .int_ack(int_ack), .istb(istb),
   .intr(intr), .int_v(int_src), .rd(rd), .int_ack(int_ack), .istb(istb),
   .istb_o(istb_o),
   .istb_o(wbi_stb_o),
 
 
//pc
//pc
   .pc_wr_sel(pc_wr_sel), .pc_wr(pc_wr), .pc(pc),
   .pc_wr_sel(pc_wr_sel), .pc_wr(pc_wr), .pc(pc),
   .mem_act(mem_act), .mem_wait(mem_wait),
   .mem_act(mem_act), .mem_wait(mem_wait),
   .bit_in(bit_data), .in_ram(ram_data),
   .bit_in(bit_data), .in_ram(ram_data),
Line 294... Line 315...
 
 
 
 
//
//
//
//
 
 
oc8051_sfr oc8051_sfr1(.rst(rst), .clk(clk), .adr0(rd_addr[7:0]), .adr1(wr_addr[7:0]),
oc8051_sfr oc8051_sfr1(.rst(wb_rst_i), .clk(wb_clk_i), .adr0(rd_addr[7:0]), .adr1(wr_addr[7:0]),
       .dat0(sfr_out), .dat1(wr_dat), .dat2(des2), .we(wr_o && !wr_ind), .bit_in(desCy),
       .dat0(sfr_out), .dat1(wr_dat), .dat2(des2), .we(wr_o && !wr_ind), .bit_in(desCy),
       .bit_out(sfr_bit), .wr_bit(bit_addr_o), .ram_rd_sel(ram_rd_sel), .ram_wr_sel(ram_wr_sel), .wr_sfr(wr_sfr),
       .bit_out(sfr_bit), .wr_bit(bit_addr_o), .ram_rd_sel(ram_rd_sel), .ram_wr_sel(ram_wr_sel), .wr_sfr(wr_sfr),
// acc
// acc
       .acc(acc),
       .acc(acc),
// sp
// sp
       .sp(sp), .sp_w(sp_w),
       .sp(sp), .sp_w(sp_w),
// psw
// psw
       .bank_sel(bank_sel), .desAc(desAc), .desOv(desOv), .psw_set(psw_set),
       .bank_sel(bank_sel), .desAc(desAc), .desOv(desOv), .psw_set(psw_set),
       .srcAc(srcAc), .cy(cy),
       .srcAc(srcAc), .cy(cy),
// ports
// ports
       .rmw(rmw), .p0_out(p0_out), .p1_out(p1_out), .p2_out(p2_out), .p3_out(p3_out),
       .rmw(rmw), .p0_out(p0_o), .p1_out(p1_o), .p2_out(p2_o), .p3_out(p3_o),
       .p0_in(p0_in), .p1_in(p1_in), .p2_in(p2_in), .p3_in(p3_in),
       .p0_in(p0_i), .p1_in(p1_i), .p2_in(p2_i), .p3_in(p3_i),
// uart
// uart
       .rxd(rxd), .txd(txd),
       .rxd(rxd_i), .txd(txd_o),
// int
// int
       .int_ack(int_ack), .intr(intr), .int0(int0), .int1(int1), .reti(reti), .int_src(int_src),
       .int_ack(int_ack), .intr(intr), .int0(int0_i), .int1(int1_i),
 
       .reti(reti), .int_src(int_src),
// t/c
// t/c
       .t0(t0), .t1(t1), .t2(t2), .t2ex(t2ex),
       .t0(t0_i), .t1(t1_i), .t2(t2_i), .t2ex(t2ex_i),
// dptr
// dptr
       .dptr_hi(dptr_hi), .dptr_lo(dptr_lo));
       .dptr_hi(dptr_hi), .dptr_lo(dptr_lo));
 
 
 
 
endmodule
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.