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

Subversion Repositories openarty

[/] [openarty/] [trunk/] [rtl/] [fastmaster.v] - Diff between revs 24 and 30

Show entire file | Details | Blame | View Log

Rev 24 Rev 30
Line 217... Line 217...
                // Fast interrupts
                // Fast interrupts
                sdcard_int, auxtx_int, auxrx_int, enet_tx_int, enet_rx_int,
                sdcard_int, auxtx_int, auxrx_int, enet_tx_int, enet_rx_int,
                        gpsrx_int, rtc_pps
                        gpsrx_int, rtc_pps
                };
                };
 
 
        zipsystem #(    .RESET_ADDRESS(24'h08000),
        zipsystem #(    .RESET_ADDRESS(24'h0480000),
                        .ADDRESS_WIDTH(ZA),
                        .ADDRESS_WIDTH(ZA),
                        .LGICACHE(10),
                        .LGICACHE(10),
                        .START_HALTED(1),
                        .START_HALTED(0),
                        .EXTERNAL_INTERRUPTS(ZIPINTS),
                        .EXTERNAL_INTERRUPTS(ZIPINTS),
                        .HIGHSPEED_CPU(1))
                        .HIGHSPEED_CPU(0))
                zippy(i_clk, i_rst,
                zippy(i_clk, i_rst,
                        // Zippys wishbone interface
                        // Zippys wishbone interface
                        zip_cyc, zip_stb, zip_we, w_zip_addr, zip_data,
                        zip_cyc, zip_stb, zip_we, w_zip_addr, zip_data,
                                zip_ack, zip_stall, dwb_idata, zip_err,
                                zip_ack, zip_stall, dwb_idata, zip_err,
                        zip_interrupt_vec, zip_cpu_int,
                        zip_interrupt_vec, zip_cpu_int,
Line 347... Line 347...
        assign  ram_sel   = (skipaddr[4]);
        assign  ram_sel   = (skipaddr[4]);
        assign  flash_sel = (skipaddr[4:3]==2'b01);
        assign  flash_sel = (skipaddr[4:3]==2'b01);
        assign  mem_sel   = (skipaddr[4:2]==3'b001);
        assign  mem_sel   = (skipaddr[4:2]==3'b001);
        assign  netb_sel  = (skipaddr[4:1]==4'b0001);
        assign  netb_sel  = (skipaddr[4:1]==4'b0001);
        assign  io_sel    = (~|skipaddr)&&(wb_addr[7:5]==3'b000);
        assign  io_sel    = (~|skipaddr)&&(wb_addr[7:5]==3'b000);
        assign  scop_sel  = (~|skipaddr)&&(wb_addr[7:3]==5'b00100);
        assign  scop_sel  = (~|skipaddr)&&(wb_addr[7:3]==5'b0010_0);
        assign  rtc_sel   = (~|skipaddr)&&(wb_addr[7:2]==6'b001010);
        assign  rtc_sel   = (~|skipaddr)&&(wb_addr[7:2]==6'b0010_10);
        assign  sdcard_sel= (~|skipaddr)&&(wb_addr[7:2]==6'b001011);
        assign  sdcard_sel= (~|skipaddr)&&(wb_addr[7:2]==6'b0010_11);
        assign  netp_sel  = (~|skipaddr)&&(wb_addr[7:2]==6'b001101);
        //assign gps_sel  = (~|skipaddr)&&(wb_addr[7:2]==6'b0011_00);
        assign  oled_sel  = (~|skipaddr)&&(wb_addr[7:2]==6'b001110);
        assign  oled_sel  = (~|skipaddr)&&(wb_addr[7:2]==6'b0011_01);
        assign  gps_sel   = (~|skipaddr)&&(     (wb_addr[7:2]==6'b001100)
        assign  netp_sel  = (~|skipaddr)&&(wb_addr[7:3]==5'b0011_1);
                                            ||  (wb_addr[7:3]==5'b01000));
        assign  gps_sel   = (~|skipaddr)&&(     (wb_addr[7:2]==6'b0011_00)
 
                                            ||  (wb_addr[7:3]==5'b0100_0));
        assign  mio_sel   = (~|skipaddr)&&(wb_addr[7:5]==3'b101);
        assign  mio_sel   = (~|skipaddr)&&(wb_addr[7:5]==3'b101);
        assign  flctl_sel = (~|skipaddr)&&(wb_addr[7:5]==3'b110);
        assign  flctl_sel = (~|skipaddr)&&(wb_addr[7:5]==3'b110);
        assign  cfg_sel   = (~|skipaddr)&&(wb_addr[7:5]==3'b111);
        assign  cfg_sel   = (~|skipaddr)&&(wb_addr[7:5]==3'b111);
 
 
        wire    skiperr;
        wire    skiperr;
Line 545... Line 546...
        wire    sel_err; // 5 inputs
        wire    sel_err; // 5 inputs
        assign  sel_err = ( (last_stb)&&(~single_sel_a)&&(~single_sel_b))
        assign  sel_err = ( (last_stb)&&(~single_sel_a)&&(~single_sel_b))
                                ||((single_sel_a)&&(single_sel_b))
                                ||((single_sel_a)&&(single_sel_b))
                                ||((single_sel_a)&&(many_sel_a))
                                ||((single_sel_a)&&(many_sel_a))
                                ||((single_sel_b)&&(many_sel_b));
                                ||((single_sel_b)&&(many_sel_b));
        assign  wb_err = (wb_cyc)&&(sel_err || many_ack || slow_many_ack);
        assign  wb_err = (wb_cyc)&&(sel_err || many_ack || slow_many_ack||ram_err);
 
 
 
 
        // Finally, if we ever encounter a bus error, knowing the address of
        // Finally, if we ever encounter a bus error, knowing the address of
        // the error will be important to figuring out how to fix it.  Hence,
        // the error will be important to figuring out how to fix it.  Hence,
        // we grab it here.  Be aware, however, that this might not truly be
        // we grab it here.  Be aware, however, that this might not truly be
Line 621... Line 622...
                (!dbg_counter_many[25])|w_led[3],
                (!dbg_counter_many[25])|w_led[3],
                (!dbg_counter_sel[25])|w_led[2],
                (!dbg_counter_sel[25])|w_led[2],
                (!dbg_counter_cyc[25])|w_led[1],
                (!dbg_counter_cyc[25])|w_led[1],
                (!dbg_counter_err[25])|w_led[0] };
                (!dbg_counter_err[25])|w_led[0] };
        */
        */
 
        assign  o_led = w_led;
        reg     [25:0]   dbg_counter_sdram;
 
        always @(posedge i_clk)
 
                if ((ram_sel)&&(wb_stb))
 
                        dbg_counter_sdram <= 0;
 
                else if (wb_stb)
 
                        dbg_counter_sdram[25] <= 1'b1;
 
                else if (!dbg_counter_sdram[25])
 
                        dbg_counter_sdram <= dbg_counter_sdram+26'h1;
 
        assign  o_led = { w_led[3:1], w_led[0] | (!dbg_counter_sdram[25]) };
 
 
 
 
 
        //
        //
        //
        //
        //      Real Time Clock (RTC) device level access
        //      Real Time Clock (RTC) device level access
        //
        //
        //
        //
        wire    gps_tracking, ck_pps;
        wire    gps_tracking, ck_pps;
        wire    [63:0]   gps_step;
        wire    [63:0]   gps_step;
`ifdef  RTC_ACCESS
`ifdef  RTC_ACCESS
        rtcgps  #(32'h15798f)   // 2^48 / 200MHz
        rtcgps
 
                // #(32'h15798f)        // 2^48 / 200MHz
 
                #(32'h1a6e3a)   // 2^48 / 162.5 MHz
                thertc(i_clk,
                thertc(i_clk,
                        wb_cyc, (wb_stb)&&(rtc_sel), wb_we,
                        wb_cyc, (wb_stb)&&(rtc_sel), wb_we,
                                wb_addr[1:0], wb_data,
                                wb_addr[1:0], wb_data,
                                rtc_data, rtc_int, rtc_ppd,
                                rtc_data, rtc_int, rtc_ppd,
                        gps_tracking, ck_pps, gps_step[47:16], rtc_pps);
                        gps_tracking, ck_pps, gps_step[47:16], rtc_pps);
Line 696... Line 690...
        //
        //
        //      OLEDrgb device control
        //      OLEDrgb device control
        //
        //
        //
        //
`ifdef  OLEDRGB_ACCESS
`ifdef  OLEDRGB_ACCESS
        wboled  rgbctrl(i_clk,
        wboled
 
                .#( .CBITS(5))// Div ck by 2^5=32, words take 200ns@162.5MHz
 
                rgbctrl(i_clk,
                        wb_cyc, (wb_stb)&&(oled_sel), wb_we,
                        wb_cyc, (wb_stb)&&(oled_sel), wb_we,
                                wb_addr[1:0], wb_data,
                                wb_addr[1:0], wb_data,
                                oled_ack, oled_stall, oled_data,
                                oled_ack, oled_stall, oled_data,
                        o_oled_sck, o_oled_cs_n, o_oled_mosi, o_oled_dcn,
                        o_oled_sck, o_oled_cs_n, o_oled_mosi, o_oled_dcn,
                        { o_oled_reset_n, o_oled_vccen, o_oled_pmoden },
                        { o_oled_reset_n, o_oled_vccen, o_oled_pmoden },
Line 752... Line 748...
        wire    gps_led;
        wire    gps_led;
 
 
        //
        //
        //      GPS CLOCK CONTROL
        //      GPS CLOCK CONTROL
        //
        //
        gpsclock ppsck(i_clk, 1'b0, gps_pps, ck_pps, gps_led,
        gpsclock #(
 
                .DEFAULT_STEP(32'h81a6e39b) // 162.5 MHz
 
                ) ppsck(i_clk, 1'b0, gps_pps, ck_pps, gps_led,
                        (wb_stb)&&(gps_sel)&&(~wb_addr[3]),
                        (wb_stb)&&(gps_sel)&&(~wb_addr[3]),
                                wb_we, wb_addr[1:0],
                                wb_we, wb_addr[1:0],
                                wb_data, gck_ack, gck_stall, gck_data,
                                wb_data, gck_ack, gck_stall, gck_data,
                        gps_tracking, gps_now, gps_step, gps_err, gps_locked,
                        gps_tracking, gps_now, gps_step, gps_err, gps_locked,
                        gps_dbg_tick);
                        gps_dbg_tick);
Line 863... Line 861...
        //
        //
        //      RAM MEMORY ACCESS
        //      RAM MEMORY ACCESS
        //
        //
        // There is no option to turn this off--this RAM must always be
        // There is no option to turn this off--this RAM must always be
        // present in the design.
        // present in the design.
        memdev  #(15) // 32kW, or 128kB, 15 address lines
        memdev  #(.AW(15),
 
                .EXTRACLOCK(1)) // 32kW, or 128kB, 15 address lines
                blkram(i_clk, wb_cyc, (wb_stb)&&(mem_sel), wb_we, wb_addr[14:0],
                blkram(i_clk, wb_cyc, (wb_stb)&&(mem_sel), wb_we, wb_addr[14:0],
                                wb_data, mem_ack, mem_stall, mem_data);
                                wb_data, mem_ack, mem_stall, mem_data);
 
 
        //
        //
        //      FLASH MEMORY ACCESS
        //      FLASH MEMORY ACCESS
Line 960... Line 959...
        // assign       scop_cpu_trigger = zip_scope_data[30];
        // assign       scop_cpu_trigger = zip_scope_data[30];
        assign  scop_cpu_trigger = (wb_stb)&&(mem_sel)&&(~wb_we)
        assign  scop_cpu_trigger = (wb_stb)&&(mem_sel)&&(~wb_we)
                        &&(wb_err)||(zip_scope_data[31]);
                        &&(wb_err)||(zip_scope_data[31]);
        wbscope #(5'd13) cpuscope(i_clk, 1'b1,(scop_cpu_trigger), zip_scope_data,
        wbscope #(5'd13) cpuscope(i_clk, 1'b1,(scop_cpu_trigger), zip_scope_data,
                // Wishbone interface
                // Wishbone interface
                i_clk, wb_cyc, ((wb_stb)&&(scop_sel)&&(wb_addr[2:1]==2'b00)), wb_we, wb_addr[0],
                i_clk, wb_cyc, ((wb_stb)&&(scop_sel)&&(wb_addr[2:1]==2'b00)),
                        wb_data,
                        wb_we, wb_addr[0], wb_data,
                        scop_cpu_ack, scop_cpu_stall, scop_cpu_data,
                        scop_cpu_ack, scop_cpu_stall, scop_cpu_data,
                scop_cpu_interrupt);
                scop_cpu_interrupt);
 
 
        assign  scop_a_data = scop_cpu_data;
        assign  scop_a_data = scop_cpu_data;
        assign  scop_a_ack = scop_cpu_ack;
        assign  scop_a_ack = scop_cpu_ack;
Line 979... Line 978...
        // assign       scop_cpu_trigger = zip_scope_data[30];
        // assign       scop_cpu_trigger = zip_scope_data[30];
        assign  scop_flash_trigger = (wb_stb)&&((flash_sel)||(flctl_sel));
        assign  scop_flash_trigger = (wb_stb)&&((flash_sel)||(flctl_sel));
        wbscope #(5'd13) flashscope(i_clk, 1'b1,
        wbscope #(5'd13) flashscope(i_clk, 1'b1,
                        (scop_flash_trigger), flash_debug,
                        (scop_flash_trigger), flash_debug,
                // Wishbone interface
                // Wishbone interface
                i_clk, wb_cyc, ((wb_stb)&&(scop_sel)&&(wb_addr[2:1]==2'b00)), wb_we, wb_addr[0],
                i_clk, wb_cyc, ((wb_stb)&&(scop_sel)&&(wb_addr[2:1]==2'b00)),
                        wb_data,
                        wb_we, wb_addr[0], wb_data,
                        scop_flash_ack, scop_flash_stall, scop_flash_data,
                        scop_flash_ack, scop_flash_stall, scop_flash_data,
                scop_flash_interrupt);
                scop_flash_interrupt);
 
 
        assign  scop_a_data = scop_flash_data;
        assign  scop_a_data = scop_flash_data;
        assign  scop_a_ack = scop_flash_ack;
        assign  scop_a_ack = scop_flash_ack;
Line 1129... Line 1128...
 
 
        // Scopes don't stall, so this line is more formality than anything
        // Scopes don't stall, so this line is more formality than anything
        // else.
        // else.
        assign  scop_stall = ((wb_addr[2:1]==2'b0)?scop_a_stall
        assign  scop_stall = ((wb_addr[2:1]==2'b0)?scop_a_stall
                                : ((wb_addr[2:1]==2'b01)?scop_b_stall
                                : ((wb_addr[2:1]==2'b01)?scop_b_stall
                                : ((wb_addr[2:1]==2'b11)?scop_c_stall
                                : ((wb_addr[2:1]==2'b10)?scop_c_stall
                                : scop_d_stall))); // Will always be 1'b0;
                                : scop_d_stall))); // Will always be 1'b0;
        initial scop_ack = 1'b0;
        initial scop_ack = 1'b0;
        always @(posedge i_clk)
        always @(posedge i_clk)
                scop_ack  <= scop_a_ack | scop_b_ack | scop_c_ack | scop_d_ack;
                scop_ack  <= scop_a_ack | scop_b_ack | scop_c_ack | scop_d_ack;
        always @(posedge i_clk)
        always @(posedge i_clk)

powered by: WebSVN 2.1.0

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