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

Subversion Repositories darkriscv

[/] [darkriscv/] [trunk/] [rtl/] [darksocv.v] - Diff between revs 2 and 4

Show entire file | Details | Blame | View Log

Rev 2 Rev 4
Line 508... Line 508...
    // for single phase clock: 1 wait state in read op always required!
    // for single phase clock: 1 wait state in read op always required!
 
 
    reg [1:0] DACK = 0;
    reg [1:0] DACK = 0;
 
 
    wire WHIT = 1;
    wire WHIT = 1;
    wire DHIT = !((RD||WR) && DACK!=1); // the WR operatio does not need ws. in this config.
    wire DHIT = !((RD
 
            `ifdef __RMW_CYCLE__
 
                    ||WR                // worst code ever! but it is 3:12am...
 
            `endif
 
                    ) && DACK!=1); // the WR operatio does not need ws. in this config.
 
 
    always@(posedge CLK) // stage #1.0
    always@(posedge CLK) // stage #1.0
    begin
    begin
        DACK <= RES ? 0 : DACK ? DACK-1 : (RD||WR) ? 1 : 0; // wait-states
        DACK <= RES ? 0 : DACK ? DACK-1 : (RD
 
            `ifdef __RMW_CYCLE__
 
                    ||WR                // 2nd worst code ever!
 
            `endif
 
                    ) ? 1 : 0; // wait-states
    end
    end
 
 
`else
`else
 
 
    // for dual phase clock: 0 wait state
    // for dual phase clock: 0 wait state
Line 542... Line 550...
    //individual byte/word/long selection, thanks to HYF!
    //individual byte/word/long selection, thanks to HYF!
 
 
    always@(posedge CLK)
    always@(posedge CLK)
    begin
    begin
 
 
`ifdef __3STAGE__
`ifdef __RMW_CYCLE__
 
 
        // read-modify-write operation w/ 1 wait-state:
        // read-modify-write operation w/ 1 wait-state:
 
 
        if(!HLT&&WR&&DADDR[31]==0/*&&DADDR[12]==1*/)
        if(!HLT&&WR&&DADDR[31]==0/*&&DADDR[12]==1*/)
        begin
        begin
Line 564... Line 572...
        end
        end
 
 
`else
`else
        // write-only operation w/ 0 wait-states:
        // write-only operation w/ 0 wait-states:
    `ifdef __HARVARD__
    `ifdef __HARVARD__
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) RAM[DADDR[11:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) RAM[DADDR[11:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) RAM[DADDR[11:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) RAM[DADDR[11:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) RAM[DADDR[11:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) RAM[DADDR[11:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) RAM[DADDR[11:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) RAM[DADDR[11:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
    `else
    `else
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) MEM[DADDR[12:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) MEM[DADDR[12:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) MEM[DADDR[12:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) MEM[DADDR[12:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) MEM[DADDR[12:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) MEM[DADDR[12:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
        if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) MEM[DADDR[12:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
        if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) MEM[DADDR[12:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
    `endif
    `endif
`endif
`endif
 
 
        IOMUXFF <= IOMUX[DADDR[3:2]]; // read w/ 2 wait-states
        IOMUXFF <= IOMUX[DADDR[3:2]]; // read w/ 2 wait-states
    end
    end
Line 685... Line 693...
      .DATAI(DATAO),
      .DATAI(DATAO),
      .DATAO(IOMUX[1]),
      .DATAO(IOMUX[1]),
      //.IRQ(BOARD_IRQ[1]),
      //.IRQ(BOARD_IRQ[1]),
      .RXD(UART_RXD),
      .RXD(UART_RXD),
      .TXD(UART_TXD),
      .TXD(UART_TXD),
 
`ifdef SIMULATION
 
      .FINISH_REQ(FINISH_REQ),
 
`endif
      .DEBUG(UDEBUG)
      .DEBUG(UDEBUG)
    );
    );
 
 
    // darkriscv
    // darkriscv
 
 
Line 706... Line 717...
`else
`else
        .CLK(!CLK),
        .CLK(!CLK),
`endif
`endif
        .RES(RES),
        .RES(RES),
        .HLT(HLT),
        .HLT(HLT),
`ifdef __THREADING__
//`ifdef __THREADING__        
        .IREQ(|(IREQ^IACK)),
//        .IREQ(|(IREQ^IACK)),
`endif
//`endif        
        .IDATA(IDATA),
        .IDATA(IDATA),
        .IADDR(IADDR),
        .IADDR(IADDR),
        .DADDR(DADDR),
        .DADDR(DADDR),
 
 
`ifdef __FLEXBUZZ__
`ifdef __FLEXBUZZ__
Line 726... Line 737...
        .BE(BE),
        .BE(BE),
        .WR(WR),
        .WR(WR),
        .RD(RD),
        .RD(RD),
`endif
`endif
 
 
 
`ifdef SIMULATION
 
        .FINISH_REQ(FINISH_REQ),
 
`endif
        .DEBUG(KDEBUG)
        .DEBUG(KDEBUG)
    );
    );
 
 
`ifdef __ICARUS__
`ifdef __ICARUS__
  initial
  initial

powered by: WebSVN 2.1.0

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