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

Subversion Repositories rtf65002

[/] [rtf65002/] [trunk/] [rtl/] [verilog/] [store.v] - Diff between revs 30 and 32

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

Rev 30 Rev 32
Line 45... Line 45...
                `STW_X:         dat_o <= x;
                `STW_X:         dat_o <= x;
                `STW_Y:         dat_o <= y;
                `STW_Y:         dat_o <= y;
                `STW_PC:        dat_o <= pc;
                `STW_PC:        dat_o <= pc;
                `STW_PC2:       dat_o <= pc + 32'd2;
                `STW_PC2:       dat_o <= pc + 32'd2;
                `STW_PCHWI:     dat_o <= pc+{30'b0,~hwi,1'b0};
                `STW_PCHWI:     dat_o <= pc+{30'b0,~hwi,1'b0};
 
                `STW_OPC:       dat_o <= opc;
                `STW_SR:        dat_o <= sr;
                `STW_SR:        dat_o <= sr;
                `STW_RFA:       dat_o <= rfoa;
                `STW_RFA:       dat_o <= rfoa;
                `STW_RFA8:      dat_o <= {4{rfoa[7:0]}};
                `STW_RFA8:      dat_o <= {4{rfoa[7:0]}};
                `STW_A:         dat_o <= a;
                `STW_A:         dat_o <= a;
                `STW_B:         dat_o <= b;
                `STW_B:         dat_o <= b;
                `STW_CALC:      dat_o <= calc_res;
                `STW_CALC:      dat_o <= res;
`ifdef SUPPORT_EM8
`ifdef SUPPORT_EM8
                `STW_ACC8:      dat_o <= {4{acc8}};
                `STW_ACC8:      dat_o <= {4{acc8}};
                `STW_X8:        dat_o <= {4{x8}};
                `STW_X8:        dat_o <= {4{x8}};
                `STW_Y8:        dat_o <= {4{y8}};
                `STW_Y8:        dat_o <= {4{y8}};
 
                `STW_Z8:        dat_o <= {4{8'h00}};
                `STW_PC3124:    dat_o <= {4{pc[31:24]}};
                `STW_PC3124:    dat_o <= {4{pc[31:24]}};
                `STW_PC2316:    dat_o <= {4{pc[23:16]}};
                `STW_PC2316:    dat_o <= {4{pc[23:16]}};
                `STW_PC158:             dat_o <= {4{pc[15:8]}};
                `STW_PC158:             dat_o <= {4{pc[15:8]}};
                `STW_PC70:              dat_o <= {4{pc[7:0]}};
                `STW_PC70:              dat_o <= {4{pc[7:0]}};
                `STW_SR70:              dat_o <= {4{sr8}};
                `STW_SR70:              dat_o <= {4{sr8}};
Line 79... Line 81...
                if (isMove|isSts) begin
                if (isMove|isSts) begin
                        state <= MVN3;
                        state <= MVN3;
                        retstate <= MVN3;
                        retstate <= MVN3;
                end
                end
                else begin
                else begin
 
                        if (em) begin
 
                                state <= BYTE_IFETCH;
 
                                retstate <= BYTE_IFETCH;
 
                        end
 
                        else begin
                        state <= IFETCH;
                        state <= IFETCH;
                        retstate <= IFETCH;
                        retstate <= IFETCH;
                end
                end
 
                end
                lock_o <= 1'b0;
                lock_o <= 1'b0;
                cyc_o <= 1'b0;
                cyc_o <= 1'b0;
                stb_o <= 1'b0;
                stb_o <= 1'b0;
                we_o <= 1'b0;
                we_o <= 1'b0;
                sel_o <= 4'h0;
                sel_o <= 4'h0;
                adr_o <= 34'h0;
                adr_o <= 34'h0;
                dat_o <= 32'h0;
                dat_o <= 32'h0;
                case(store_what)
                case(store_what)
                `STW_PC,`STW_PC2,`STW_PCHWI:
                `STW_PC,`STW_PC2,`STW_PCHWI,`STW_OPC:
                        if (isBrk) begin
                        if (isBrk|isBusErr) begin
                                radr <= isp_dec;
                                radr <= isp_dec;
                                wadr <= isp_dec;
                                wadr <= isp_dec;
                                isp <= isp_dec;
                                isp <= isp_dec;
                                store_what <= `STW_SR;
                                store_what <= `STW_SR;
                                state <= STORE1;
                                state <= STORE1;
                                retstate <= STORE1;
                                retstate <= STORE1;
                        end
                        end
                `STW_SR:
                `STW_SR:
                        if (isBrk) begin
                        if (isBrk|isBusErr) begin
                                load_what <= `PC_310;
                                load_what <= `PC_310;
                                state <= LOAD_MAC1;
                                state <= LOAD_MAC1;
                                retstate <= LOAD_MAC1;
                                retstate <= LOAD_MAC1;
                                radr <= vect[31:2];
                                radr <= vect[31:2];
                                if (hwi)
                                ttrig <= 1'b0;
 
                                tf <= 1'b0;                     // turn off trace mode
                                        im <= 1'b1;
                                        im <= 1'b1;
                                em <= 1'b0;                     // make sure we process in native mode; we might have been called up during emulation mode
                                em <= 1'b0;                     // make sure we process in native mode; we might have been called up during emulation mode
                        end
                        end
 
                `STW_RFA:
 
                        if (isPusha) begin
 
                                if (ir[11:8]==4'hF) begin
 
                                        state <= IFETCH;
 
                                        retstate <= IFETCH;
 
                                end
 
                                else begin
 
                                        state <= STORE1;
 
                                        retstate <= STORE1;
 
                                        radr <= isp_dec;
 
                                        wadr <= isp_dec;
 
                                        isp <= isp_dec;
 
                                end
 
                                ir[11:8] <= ir[11:8] + 4'd1;
 
                        end
`ifdef SUPPORT_EM8
`ifdef SUPPORT_EM8
                `STW_PC3124:
                `STW_PC3124:
                        begin
                        begin
 
                                radr <= {spage[31:8],sp[7:2]};
 
                                wadr <= {spage[31:8],sp[7:2]};
 
                                radr2LSB <= sp[1:0];
 
                                wadr2LSB <= sp[1:0];
                                store_what <= `STW_PC2316;
                                store_what <= `STW_PC2316;
 
                                sp <= sp_dec;
                                state <= STORE1;
                                state <= STORE1;
                        end
                        end
                `STW_PC2316:
                `STW_PC2316:
                        begin
                        begin
 
                                radr <= {spage[31:8],sp[7:2]};
 
                                wadr <= {spage[31:8],sp[7:2]};
 
                                radr2LSB <= sp[1:0];
 
                                wadr2LSB <= sp[1:0];
 
                                sp <= sp_dec;
                                store_what <= `STW_PC158;
                                store_what <= `STW_PC158;
                                state <= STORE1;
                                state <= STORE1;
                        end
                        end
                `STW_PC158:
                `STW_PC158:
                        begin
                        begin
 
                                radr <= {spage[31:8],sp[7:2]};
 
                                wadr <= {spage[31:8],sp[7:2]};
 
                                radr2LSB <= sp[1:0];
 
                                wadr2LSB <= sp[1:0];
 
                                sp <= sp_dec;
                                store_what <= `STW_PC70;
                                store_what <= `STW_PC70;
                                state <= STORE1;
                                state <= STORE1;
                        end
                        end
                `STW_PC70:
                `STW_PC70:
                        begin
                        begin
                                if (ir[7:0]==`BRK) begin
                                case({1'b0,ir[7:0]})
 
                                `BRK:   begin
 
                                                radr <= {spage[31:8],sp[7:2]};
 
                                                wadr <= {spage[31:8],sp[7:2]};
 
                                                radr2LSB <= sp[1:0];
 
                                                wadr2LSB <= sp[1:0];
 
                                                sp <= sp_dec;
                                        store_what <= `STW_SR70;
                                        store_what <= `STW_SR70;
                                        state <= STORE1;
                                        state <= STORE1;
                                end
                                end
 
                                `JSR:   begin
 
                                                pc <= ir[23:8];
 
                                                $display("setting pc=%h", ir[23:8]);
 
                                                end
 
                                `JSL:   begin
 
                                                pc <= ir[39:8];
 
                                                end
 
                                `JSR_INDX:
 
                                                begin
 
                                                state <= LOAD_MAC1;
 
                                                retstate <= LOAD_MAC1;
 
                                                load_what <= `PC_70;
 
                                                radr <= absx_address[31:2];
 
                                                radr2LSB <= absx_address[1:0];
 
                                                end
 
                                endcase
 
                        end
 
                `STW_SR70:
 
                        begin
 
                                if (ir[7:0]==`BRK) begin
 
                                        load_what <= `PC_70;
 
                                        state <= LOAD_MAC1;
 
                                        retstate <= LOAD_MAC1;
 
                                        pc[31:16] <= abs8[31:16];
 
                                        radr <= vect[31:2];
 
                                        radr2LSB <= vect[1:0];
 
                                        im <= hwi;
 
                                end
                        end
                        end
`endif
`endif
 
                default:
 
                        if (isJsrIndx) begin
 
                                load_what <= `PC_310;
 
                                state <= LOAD_MAC1;
 
                                retstate <= LOAD_MAC1;
 
                                radr <= ir[39:8] + x;
 
                        end
 
                        else if (isJsrInd) begin
 
                                load_what <= `PC_310;
 
                                state <= LOAD_MAC1;
 
                                retstate <= LOAD_MAC1;
 
                                radr <= ir[39:8];
 
                        end
                endcase
                endcase
`ifdef SUPPORT_DCACHE
`ifdef SUPPORT_DCACHE
                if (dhit) begin
                if (!dhit && write_allocate) begin
                        wrsel <= sel_o;
                        state <= DCACHE1;
                        wr <= 1'b1;
 
                end
 
                else if (write_allocate) begin
 
                        dmiss <= `TRUE;
 
                        state <= WAIT_DHIT;
 
                end
                end
`endif
`endif
        end
        end
`ifdef SUPPORT_BERR
`ifdef SUPPORT_BERR
        else if (err_i) begin
        else if (err_i) begin

powered by: WebSVN 2.1.0

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