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

Subversion Repositories rf68000

[/] [rf68000/] [trunk/] [rtl/] [cpu/] [rf68000.sv] - Diff between revs 2 and 3

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

Rev 2 Rev 3
Line 46... Line 46...
`define SUPPORT_DIV     1'b1
`define SUPPORT_DIV     1'b1
`define SUPPORT_BCD     1'b1
`define SUPPORT_BCD     1'b1
//`define SUPPORT_010   1'b1
//`define SUPPORT_010   1'b1
`define SUPPORT_BITPAIRS 1'b1
`define SUPPORT_BITPAIRS 1'b1
 
 
 
//`define HAS_MMU 1'b1
 
 
//`define SUPPORT_TASK  1'b1
//`define SUPPORT_TASK  1'b1
 
 
//`define SUPPORT_B24   1'b1            // To support 23-bit branch displacements
//`define SUPPORT_B24   1'b1            // To support 23-bit branch displacements
 
 
`define TRUE        1'b1
`define TRUE        1'b1
Line 91... Line 93...
`define LDW             16'b0011_xxx0xx_xxxxxx
`define LDW             16'b0011_xxx0xx_xxxxxx
`define STB             16'b0001_xxx1xx_xxxxxx
`define STB             16'b0001_xxx1xx_xxxxxx
`define STH             16'b0010_xxx1xx_xxxxxx
`define STH             16'b0010_xxx1xx_xxxxxx
`define STW             16'b0011_xxx1xx_xxxxxx
`define STW             16'b0011_xxx1xx_xxxxxx
 
 
 
// DBcc also for Scc
`define DBRA    8'h50
`define DBRA    8'h50
`define DBSR    8'h51
`define DBSR    8'h51
`define DBHI    8'h52
`define DBHI    8'h52
`define DBLS    8'h53
`define DBLS    8'h53
`define DBHS    8'h54
`define DBHS    8'h54
Line 470... Line 473...
reg [31:0] a3 = 'd0;
reg [31:0] a3 = 'd0;
reg [31:0] a4 = 'd0;
reg [31:0] a4 = 'd0;
reg [31:0] a5 = 'd0;
reg [31:0] a5 = 'd0;
reg [31:0] a6 = 'd0;
reg [31:0] a6 = 'd0;
reg [31:0] sp = 'd0;
reg [31:0] sp = 'd0;
 
reg [127:0] fp0 = 'd0;
 
reg [127:0] fp1 = 'd0;
 
reg [127:0] fp2 = 'd0;
 
reg [127:0] fp3 = 'd0;
 
reg [127:0] fp4 = 'd0;
 
reg [127:0] fp5 = 'd0;
 
reg [127:0] fp6 = 'd0;
 
reg [127:0] fp7 = 'd0;
reg [31:0] d0i;
reg [31:0] d0i;
reg [31:0] d1i;
reg [31:0] d1i;
reg [31:0] d2i;
reg [31:0] d2i;
reg [31:0] d3i;
reg [31:0] d3i;
reg [31:0] d4i;
reg [31:0] d4i;
Line 637... Line 648...
//wire [31:0] rfob = {mmm[0],rrr}==4'b1111 ? sp : regfile[{mmm[0],rrr}];
//wire [31:0] rfob = {mmm[0],rrr}==4'b1111 ? sp : regfile[{mmm[0],rrr}];
//wire [31:0] rfoDnn = regfile[{1'b0,rrr}];
//wire [31:0] rfoDnn = regfile[{1'b0,rrr}];
//wire [31:0] rfoRnn = rrrr==4'b1111 ? sp : regfile[rrrr];
//wire [31:0] rfoRnn = rrrr==4'b1111 ? sp : regfile[rrrr];
wire clk_g;
wire clk_g;
reg rfwrL,rfwrB,rfwrW;
reg rfwrL,rfwrB,rfwrW;
 
reg rfwrFp;
reg takb;
reg takb;
reg [8:0] resB;
reg [8:0] resB;
reg [16:0] resW;
reg [16:0] resW;
reg [32:0] resL;
reg [32:0] resL;
(* USE_DSP = "no" *)
(* USE_DSP = "no" *)
Line 678... Line 690...
reg [31:0] apc;
reg [31:0] apc;
reg [7:0] cpl;
reg [7:0] cpl;
reg [31:0] tr;
reg [31:0] tr;
reg [31:0] tcba;
reg [31:0] tcba;
reg [31:0] mmus, ios, iops;
reg [31:0] mmus, ios, iops;
assign mmus_o = adr_o[31:2] >= mmus[31:2] && adr_o[31:2] < mmus[31:2]+10'd512;
assign mmus_o = adr_o[31:20] == mmus[31:20];
assign iops_o = adr_o[31:2] >= iops[31:2] && adr_o[31:2] < iops[31:2]+8'd128;
assign iops_o = adr_o[31:16] == iops[31:16];
assign ios_o  = adr_o[31:2] >= ios [31:2] && adr_o[31:2] < ios [31:2]+24'h100000;
assign ios_o  = adr_o[31:20] == ios [31:20];
 
 
wire [16:0] lfsr_o;
wire [16:0] lfsr_o;
lfsr17 ulfsr1
lfsr17 ulfsr1
(
(
        .rst(rst_i),
        .rst(rst_i),
Line 1553... Line 1565...
                                fc_o <= {sf,2'b10};
                                fc_o <= {sf,2'b10};
                                cyc_o <= 1'b1;
                                cyc_o <= 1'b1;
                                stb_o <= 1'b1;
                                stb_o <= 1'b1;
                                sel_o <= 4'b1111;
                                sel_o <= 4'b1111;
                                adr_o <= pc;
                                adr_o <= pc;
 
                                goto (IFETCH);
                        end
                        end
                end
                end
                else if (ack_i) begin
                else if (ack_i) begin
                        cyc_o <= 1'b0;
                        cyc_o <= 1'b0;
                        stb_o <= 1'b0;
                        stb_o <= 1'b0;
Line 1573... Line 1586...
                fc_o <= {sf,2'b10};
                fc_o <= {sf,2'b10};
                cyc_o <= 1'b1;
                cyc_o <= 1'b1;
                stb_o <= 1'b1;
                stb_o <= 1'b1;
                sel_o <= 4'b1111;
                sel_o <= 4'b1111;
                adr_o <= pc;
                adr_o <= pc;
 
                goto (IFETCH2);
        end
        end
        else if (ack_i) begin
        else if (ack_i) begin
                cyc_o <= 1'b0;
                cyc_o <= 1'b0;
                stb_o <= 1'b0;
                stb_o <= 1'b0;
                sel_o <= 2'b00;
                sel_o <= 2'b00;
Line 1922... Line 1936...
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// ADDQ / SUBQ / DBRA / Scc
// ADDQ / SUBQ / DBRA / Scc
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
        5'h5:
        5'h5:
                begin
                begin
                        casez(ir[7:4])
                        casez(ir[7:3])
                        // When optimizing DBRA for performance, the memory access cycle to fetch
                        // When optimizing DBRA for performance, the memory access cycle to fetch
                        // the displacement constant is not done, instead the PC is incremented by
                        // the displacement constant is not done, instead the PC is incremented by
                        // two if not doing the DBRA. This is an extra PC increment that increases
                        // two if not doing the DBRA. This is an extra PC increment that increases
                        // the code size. It is slower, but more hardware efficient to just always
                        // the code size. It is slower, but more hardware efficient to just always
                        // fetch the displacement.
                        // fetch the displacement.
                        4'b1100:                                        // DBRA
                        5'b11001:                                       // DBRA
`ifdef OPT_PERF
`ifdef OPT_PERF
                                if (~takb) begin
                                if (~takb) begin
                                        call(FETCH_IMM16,DBRA);
                                        call(FETCH_IMM16,DBRA);
                                end
                                end
                                else begin
                                else begin
Line 1940... Line 1954...
                                        ret();
                                        ret();
                                end
                                end
`else
`else
                                call(FETCH_IMM16,DBRA);
                                call(FETCH_IMM16,DBRA);
`endif
`endif
                        4'b11??:                                        // Scc
                        5'b11???:               // Scc
                                begin
                                begin
                                        resL <= {32{takb}};
                                        resL <= {32{takb}};
                                        resW <= {16{takb}};
                                        resW <= {16{takb}};
                                        resB <= {8{takb}};
                                        resB <= {8{takb}};
                                        d <= {32{takb}};
                                        d <= {32{takb}};
Line 5389... Line 5403...
        end
        end
MOVERn2Rc2:
MOVERn2Rc2:
        case(imm[11:0])
        case(imm[11:0])
        12'h000:        begin sfc <= rfoRnn; ret(); end
        12'h000:        begin sfc <= rfoRnn; ret(); end
        12'h001:        begin dfc <= rfoRnn; ret(); end
        12'h001:        begin dfc <= rfoRnn; ret(); end
        12'h003:  begin asid <= rfoDnn[7:0]; ret(); end
        12'h003:  begin asid <= rfoRnn[7:0]; ret(); end
        12'h010:  begin apc <= rfoDnn; ret(); end
        12'h010:  begin apc <= rfoRnn; ret(); end
        12'h011:  begin cpl <= rfoDnn[7:0]; ret(); end
        12'h011:  begin cpl <= rfoRnn[7:0]; ret(); end
        12'h012:  begin tr <= rfoDnn; ret(); end
        12'h012:  begin tr <= rfoRnn; ret(); end
        12'h013:  begin tcba <= rfoDnn; ret(); end
        12'h013:  begin tcba <= rfoRnn; ret(); end
        12'h014:        begin mmus <= rfoDnn; ret(); end
        12'h014:        begin mmus <= rfoRnn; ret(); end
        12'h015:        begin ios <= rfoDnn; ret(); end
        12'h015:        begin ios <= rfoRnn; ret(); end
        12'h016:        begin iops <= rfoDnn; ret(); end
        12'h016:        begin iops <= rfoRnn; ret(); end
        12'h800:        begin usp <= rfoRnn; ret(); end
        12'h800:        begin usp <= rfoRnn; ret(); end
        12'h801:        begin vbr <= rfoRnn; ret(); end
        12'h801:        begin vbr <= rfoRnn; ret(); end
/*
/*
        12'hFE1:
        12'hFE1:
                begin
                begin

powered by: WebSVN 2.1.0

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