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

Subversion Repositories 8051

[/] [8051/] [tags/] [rel_12/] [rtl/] [verilog/] [oc8051_top.v] - Diff between revs 46 and 54

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

Rev 46 Rev 54
Line 42... Line 42...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.13  2002/09/30 17:33:59  simont
 
// prepared header
 
//
//
//
 
 
// synopsys translate_off
// synopsys translate_off
`include "oc8051_timescale.v"
`include "oc8051_timescale.v"
// synopsys translate_on
// synopsys translate_on
 
 
 
 
module oc8051_top (rst, clk, int0, int1, ea, rom_addr, op1, op2, op3, dat_i,
module oc8051_top (rst, clk, int0, int1, ea, iadr_o, idat_i,istb_o, iack_i, dat_i,
                dat_o, adr_o, we_o, ack_i, stb_o, cyc_o, p0_in, p1_in, p2_in, p3_in, p0_out,
                icyc_o, dat_o, adr_o, we_o, ack_i, stb_o, cyc_o, p0_in, p1_in, p2_in, p3_in, p0_out,
                p1_out, p2_out, p3_out, rxd, txd, t0, t1);
                p1_out, p2_out, p3_out, rxd, txd, t0, t1);
//
//
// rst           (in)  reset - pin
// rst           (in)  reset - pin
// clk           (in)  clock - pin
// clk           (in)  clock - pin
// rom_addr      (out) program rom addres (pin + internal)
// iadr_o        (out) program rom addres (pin + internal)
// int0          (in)  external interrupt 0
// int0          (in)  external interrupt 0
// int1          (in)  external interrupt 1
// int1          (in)  external interrupt 1
// dat_i         (in)  exteranal ram input
// dat_i         (in)  exteranal ram input
// dat_o         (out) exteranal ram output
// dat_o         (out) exteranal ram output
// adr_o         (out) external address
// adr_o         (out) external address
// we_o          (out) write to external ram
// we_o          (out) write to external ram
// stb_o
// stb_o
// ack_i
// ack_i
 
// idat_i        (in)  data from external program rom
 
// istb_o        (out) strobe to program rom
 
// iack_i        (in)  acknowlage from external rom
 
// icyc_o        (out)
// p0_in, p1_in, p2_in, p3_in           (in)  port inputs
// p0_in, p1_in, p2_in, p3_in           (in)  port inputs
// p0_out, p1_out, p2_out, p3_out       (out) port outputs
// p0_out, p1_out, p2_out, p3_out       (out) port outputs
// rxd           (in) receive
// rxd           (in) receive
// txd           (out) transmit
// txd           (out) transmit
// t0, t1        (in)  t/c external inputs
// t0, t1        (in)  t/c external inputs
//
//
//
//
 
 
 
 
 
 
input rst, clk, int0, int1, ea, rxd, t0, t1, ack_i;
input rst, clk, int0, int1, ea, rxd, t0, t1, ack_i, iack_i;
input [7:0] dat_i, p0_in, p1_in, p2_in, p3_in, op1, op2, op3;
input [7:0] dat_i, p0_in, p1_in, p2_in, p3_in;
 
input [31:0] idat_i;
 
 
output we_o, txd, stb_o, cyc_o;
output we_o, txd, stb_o, cyc_o, istb_o, icyc_o;
output [7:0] dat_o, p0_out, p1_out, p2_out, p3_out;
output [7:0] dat_o, p0_out, p1_out, p2_out, p3_out;
//output [15:0] rom_addr, ext_addr;
//output [15:0] rom_addr, ext_addr;
output [15:0] adr_o, rom_addr;
output [15:0] adr_o, iadr_o;
 
 
wire [7:0] op1_i, op2_i, op3_i, dptr_hi, dptr_lo, ri, data_out;
wire [7:0] op1_i, op2_i, op3_i, dptr_hi, dptr_lo, ri, data_out;
 
wire [7:0] op1, op2, op3;
wire [7:0] acc, b_reg, p0_out, p1_out, p2_out, p3_out, uart, tc_out, int_out;
wire [7:0] acc, b_reg, p0_out, p1_out, p2_out, p3_out, uart, tc_out, int_out;
 
 
wire [15:0] pc;
wire [15:0] pc;
 
 
//
//
// data output is always from accumulator
// data output is always from accumulator
assign dat_o = acc;
assign dat_o = acc;
 
 
assign cyc_o = stb_o;
assign cyc_o = stb_o;
 
assign icyc_o = istb_o;
 
 
 
 
 
assign op1 = idat_i[31:24];
 
assign op2 = idat_i[23:16];
 
assign op3 = idat_i[15:8];
 
 
//
//
// 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 125... Line 140...
// int_uart     interrupt from uart
// int_uart     interrupt from uart
// tf0          interrupt from t/c 0
// tf0          interrupt from t/c 0
// tf1          interrupt from t/c 1
// tf1          interrupt from t/c 1
// tr0          timer 0 run
// tr0          timer 0 run
// tr1          timer 1 run
// tr1          timer 1 run
wire int_uart, tf0, tf1, tr0, tr1, reti, intr, ack;
wire int_uart, tf0, tf1, tr0, tr1, reti, intr, ack, istb;
wire [7:0] int_src;
wire [7:0] int_src;
 
 
//
//
//alu_op        alu operation (from decoder)
//alu_op        alu operation (from decoder)
//alu_op_r      alu operation (registerd)
//alu_op_r      alu operation (registerd)
Line 218... Line 233...
 
 
//
//
//program counter
//program counter
oc8051_pc oc8051_pc1(.rst(rst), .clk(clk), .pc_out(pc), .alu({des2,des1}),
oc8051_pc oc8051_pc1(.rst(rst), .clk(clk), .pc_out(pc), .alu({des2,des1}),
       .pc_wr_sel(pc_wr_sel), .op1(op1_n), .op2(op2_n), .op3(op3_n), .wr(pc_wr),
       .pc_wr_sel(pc_wr_sel), .op1(op1_n), .op2(op2_n), .op3(op3_n), .wr(pc_wr),
       .rd(rd), .intr(intr));
       .rd((rd && !(istb_o && !iack_i))), .intr(intr));
 
 
//
//
// decoder
// decoder
oc8051_decoder oc8051_decoder1(.clk(clk), .rst(rst), .op_in(op1_n), .ram_rd_sel(ram_rd_sel),
oc8051_decoder oc8051_decoder1(.clk(clk), .rst(rst), .op_in(op1_n), .ram_rd_sel(ram_rd_sel),
                 .ram_wr_sel(ram_wr_sel), .bit_addr(bit_addr), .src_sel1(src_sel1), .wr_xaddr(wr_xaddr),
                 .ram_wr_sel(ram_wr_sel), .bit_addr(bit_addr), .src_sel1(src_sel1), .wr_xaddr(wr_xaddr),
                 .src_sel2(src_sel2), .src_sel3(src_sel3), .alu_op(alu_op), .psw_set(psw_set),
                 .src_sel2(src_sel2), .src_sel3(src_sel3), .alu_op(alu_op), .psw_set(psw_set),
                 .imm_sel(imm_sel), .cy_sel(cy_sel), .wr(wr), .pc_wr(pc_wr), .pc_sel(pc_wr_sel),
                 .imm_sel(imm_sel), .cy_sel(cy_sel), .wr(wr), .pc_wr(pc_wr), .pc_sel(pc_wr_sel),
                 .comp_sel(comp_sel), .eq(eq), .rom_addr_sel(rom_addr_sel), .ext_addr_sel(ext_addr_sel),
                 .comp_sel(comp_sel), .eq(eq), .rom_addr_sel(rom_addr_sel), .ext_addr_sel(ext_addr_sel),
                .wad2(wad2), .rd(rd), .we_o(we_o), .reti(reti), .rmw(rmw), .stb_o(stb_o), .ack_i(ack_i));
                .wad2(wad2), .rd(rd), .we_o(we_o), .reti(reti), .rmw(rmw), .stb_o(stb_o), .ack_i(ack_i),
 
    .istb(istb), .ea(ea && ea_int), .iack(iack_i));
 
 
 
 
 
 
//
//
// ram read and ram write select
// ram read and ram write select
Line 292... Line 308...
                 .wr_addr(wr_addr), .wr(wr_r), .wr_bit(bit_addr_r), .data_in(des1),
                 .wr_addr(wr_addr), .wr(wr_r), .wr_bit(bit_addr_r), .data_in(des1),
                 .data_out(sp), .data_out_r (sp_r));
                 .data_out(sp), .data_out_r (sp_r));
 
 
//
//
//program rom
//program rom
oc8051_rom oc8051_rom1(.rst(rst), .clk(clk), .ea_int(ea_int), .addr(rom_addr),
oc8051_rom oc8051_rom1(.rst(rst), .clk(clk), .ea_int(ea_int), .addr(iadr_o),
                .data1(op1_i), .data2(op2_i), .data3(op3_i));
                .data1(op1_i), .data2(op2_i), .data3(op3_i));
 
 
//
//
//data pointer
//data pointer
oc8051_dptr oc8051_dptr1(.clk(clk), .rst(rst), .addr(wr_addr), .data_in(des1),
oc8051_dptr oc8051_dptr1(.clk(clk), .rst(rst), .addr(wr_addr), .data_in(des1),
Line 314... Line 330...
                .wr_bit(bit_addr_r), .data_out(psw), .data_out_r(psw_r), .bit_out(psw_bit), .p(p), .cy_in(desCy),
                .wr_bit(bit_addr_r), .data_out(psw), .data_out_r(psw_r), .bit_out(psw_bit), .p(p), .cy_in(desCy),
                .ac_in(desAc), .ov_in(desOv), .set(psw_set_r));
                .ac_in(desAc), .ov_in(desOv), .set(psw_set_r));
 
 
//
//
//
//
oc8051_indi_addr oc8051_indi_addr1 (.clk(clk), .rst(rst), .addr(wr_addr), .data_in(des1),
oc8051_indi_addr oc8051_indi_addr1 (.clk(clk), .rst(rst), .addr(wr_addr),
                 .wr(wr_r), .wr_bit(bit_addr_r), .data_out(ri), .sel(op1_n[0]),
      .data_in(des1), .wr(wr_r), .wr_bit(bit_addr_r), .data_out(ri),
                 .bank(psw[4:3]));
      .sel(op1_n[0]), .bank(psw[4:3]));
 
 
//
//
//
//
oc8051_rom_addr_sel oc8051_rom_addr_sel1(.sel(rom_addr_sel),
oc8051_rom_addr_sel oc8051_rom_addr_sel1(.clk(clk), .rst(rst), .iack_i(iack_i),
                .des1(des1), .des2(des2), .pc(pc), .out_addr(rom_addr));
               .ea(ea && ea_int), .sel(rom_addr_sel), .des1(des1), .des2(des2),
 
               .pc(pc), .out_addr(iadr_o));
 
 
//
//
//
//
oc8051_ext_addr_sel oc8051_ext_addr_sel1(.clk(clk), .rst(rst), .sel(ext_addr_sel),
oc8051_ext_addr_sel oc8051_ext_addr_sel1(.clk(clk), .rst(rst), .sel(ext_addr_sel),
                 .dptr_hi(dptr_hi), .dptr_lo(dptr_lo), .ri(ri), .addr_out(adr_o), .wr(wr_xaddr));
                 .dptr_hi(dptr_hi), .dptr_lo(dptr_lo), .ri(ri), .addr_out(adr_o), .wr(wr_xaddr));
Line 348... Line 365...
//
//
//
//
oc8051_op_select oc8051_op_select1(.clk(clk), .rst(rst), .ea(ea), .ea_int(ea_int), .op1_i(op1_i),
oc8051_op_select oc8051_op_select1(.clk(clk), .rst(rst), .ea(ea), .ea_int(ea_int), .op1_i(op1_i),
                .op2_i(op2_i), .op3_i(op3_i), .op1_x(op1), .op2_x(op2), .op3_x(op3),
                .op2_i(op2_i), .op3_i(op3_i), .op1_x(op1), .op2_x(op2), .op3_x(op3),
                .op1_out(op1_n), .op2_out(op2_n), .op2_direct(op2_dr), .op3_out(op3_n),
                .op1_out(op1_n), .op2_out(op2_n), .op2_direct(op2_dr), .op3_out(op3_n),
                .intr(intr), .int_v(int_src), .rd(rd), .ack(ack));
                .intr(intr), .int_v(int_src), .rd(rd), .ack(ack), .istb(istb), .istb_o(istb_o),
 
    .iack_i(iack_i));
 
 
//
//
// serial interface
// serial interface
oc8051_uart oc8051_uatr1 (.clk(clk), .rst(rst), .bit_in(desCy), .rd_addr(rd_addr),
oc8051_uart oc8051_uatr1 (.clk(clk), .rst(rst), .bit_in(desCy), .rd_addr(rd_addr),
                .data_in(des1), .wr(wr_r), .wr_bit(bit_addr_r), .wr_addr(wr_addr),
                .data_in(des1), .wr(wr_r), .wr_bit(bit_addr_r), .wr_addr(wr_addr),

powered by: WebSVN 2.1.0

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