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

Subversion Repositories s6soc

[/] [s6soc/] [trunk/] [rtl/] [toplevel.v] - Diff between revs 46 and 51

Show entire file | Details | Blame | View Log

Rev 46 Rev 51
Line 48... Line 48...
//
//
//
//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//
//
//
//
 
`define LOWLOGIC_FLASH
module toplevel(i_clk_8mhz,
module toplevel(i_clk_8mhz,
                o_qspi_cs_n, o_qspi_sck, io_qspi_dat,
                o_qspi_cs_n, o_qspi_sck, io_qspi_dat,
                i_btn, o_led, o_pwm, o_pwm_shutdown_n, o_pwm_gain,
                i_btn, o_led, o_pwm, o_pwm_shutdown_n, o_pwm_gain,
                        i_uart, o_uart, o_uart_rts_n, i_uart_cts_n,
                        i_uart, o_uart, o_uart_rts_n, i_uart_cts_n,
                i_kp_row, o_kp_col,
                i_kp_row, o_kp_col,
Line 88... Line 89...
        //
        //
        // Clock management
        // Clock management
        //
        //
        //      Generate a usable clock for the rest of the board to run at.
        //      Generate a usable clock for the rest of the board to run at.
        //
        //
        wire    ck_zero_0, clk_s;
        wire    ck_zero_0, clk_s, clk_sn;
 
 
        // Clock frequency = (20 / 2) * 8Mhz = 80 MHz
        // Clock frequency = (20 / 2) * 8Mhz = 80 MHz
        // Clock period = 12.5 ns
        // Clock period = 12.5 ns
        DCM_SP #(
        DCM_SP #(
                .CLKDV_DIVIDE(2.0),
                .CLKDV_DIVIDE(2.0),
Line 109... Line 110...
                .STARTUP_WAIT("TRUE")
                .STARTUP_WAIT("TRUE")
        ) u0(   .CLKIN(i_clk_8mhz),
        ) u0(   .CLKIN(i_clk_8mhz),
                .CLK0(ck_zero_0),
                .CLK0(ck_zero_0),
                .CLKFB(ck_zero_0),
                .CLKFB(ck_zero_0),
                .CLKFX(clk_s),
                .CLKFX(clk_s),
 
                .CLKFX180(clk_sn),
                .PSEN(1'b0),
                .PSEN(1'b0),
                .RST(1'b0));
                .RST(1'b0));
 
 
        // Baud rate is set by clock rate / baud rate desired.  Thus,
        // Baud rate is set by clock rate / baud rate desired.  Thus,
        // 80 MHz / 9600 Baud = 8333, or about 0x208d.  We choose a slow
        // 80 MHz / 9600 Baud = 8333, or about 0x208d.  We choose a slow
Line 127... Line 129...
        //      interconnect that all of the internal devices are hung off of.
        //      interconnect that all of the internal devices are hung off of.
        //      To reconfigure this device for another purpose, usually
        //      To reconfigure this device for another purpose, usually
        //      the busmaster module (i.e. the interconnect) is all that needs
        //      the busmaster module (i.e. the interconnect) is all that needs
        //      to be changed: either to add more devices, or to remove them.
        //      to be changed: either to add more devices, or to remove them.
        //
        //
 
`ifdef  LOWLOGIC_FLASH
 
        wire    [1:0]    qspi_sck;
 
`else
 
        wire            qspi_sck;
 
`endif
 
        wire            qspi_cs_n;
        wire    [3:0]    qspi_dat;
        wire    [3:0]    qspi_dat;
        wire    [1:0]    qspi_bmod;
        wire    [1:0]    qspi_bmod;
        wire    [15:0]   w_gpio;
        wire    [15:0]   w_gpio;
 
 
        wire    w_uart_rts_n;
        wire    w_uart_rts_n;
        busmaster       #(.UART_SETUP(UART_SETUP))
        busmaster       #(.UART_SETUP(UART_SETUP))
                masterbus(clk_s, 1'b0,
                masterbus(clk_s, 1'b0,
                // Serial port wires
                // Serial port wires
                i_uart, o_uart_rts_n, o_uart, i_uart_cts_n,
                i_uart, o_uart_rts_n, o_uart, i_uart_cts_n,
                // SPI/SD-card flash
                // SPI/SD-card flash
                o_qspi_cs_n, o_qspi_sck, qspi_dat, io_qspi_dat, qspi_bmod,
                qspi_cs_n, qspi_sck, qspi_dat, io_qspi_dat, qspi_bmod,
                // Board lights and switches
                // Board lights and switches
                i_btn, o_led, o_pwm, { o_pwm_shutdown_n, o_pwm_gain },
                i_btn, o_led, o_pwm, { o_pwm_shutdown_n, o_pwm_gain },
                // Keypad connections
                // Keypad connections
                i_kp_row, o_kp_col,
                i_kp_row, o_kp_col,
                // GPIO lines
                // GPIO lines
Line 155... Line 163...
        //      wires are going at each instant, whether the device is in full
        //      wires are going at each instant, whether the device is in full
        //      Quad mode in, full quad mode out, or simply the normal SPI
        //      Quad mode in, full quad mode out, or simply the normal SPI
        //      port with one wire in and one wire out.  This utilizes our
        //      port with one wire in and one wire out.  This utilizes our
        //      control wires (qspi_bmod) to set the output lines appropriately.
        //      control wires (qspi_bmod) to set the output lines appropriately.
        //
        //
        assign io_qspi_dat = (~qspi_bmod[1])?({2'b11,1'bz,qspi_dat[0]})
        //
 
        //      2'b0?   -- Normal SPI
 
        //      2'b10   -- Quad Output
 
        //      2'b11   -- Quad Input
 
`ifdef  LOWLOGIC_FLASH
 
        reg             r_qspi_cs_n;
 
        reg     [1:0]    r_qspi_bmod;
 
        reg     [3:0]    r_qspi_dat, r_qspi_z;
 
        reg     [1:0]    r_qspi_sck;
 
        always @(posedge clk_s)
 
                r_qspi_sck <= qspi_sck;
 
        xoddr   xqspi_sck({clk_s, clk_sn}, r_qspi_sck, o_qspi_sck);
 
        initial r_qspi_cs_n = 1'b1;
 
        initial r_qspi_z = 4'b1101;
 
        always @(posedge clk_s)
 
        begin
 
                r_qspi_dat  <= (qspi_bmod[1]) ? qspi_dat:{ 3'b111, qspi_dat[0]};
 
                r_qspi_z    <= (!qspi_bmod[1])? 4'b1101
 
                                : ((qspi_bmod[0]) ? 4'h0 : 4'hf);
 
                r_qspi_cs_n <= qspi_cs_n;
 
        end
 
 
 
        assign  o_qspi_cs_n    = r_qspi_cs_n;
 
        assign  io_qspi_dat[0] = (r_qspi_z[0]) ? r_qspi_dat[0] : 1'bz;
 
        assign  io_qspi_dat[1] = (r_qspi_z[1]) ? r_qspi_dat[1] : 1'bz;
 
        assign  io_qspi_dat[2] = (r_qspi_z[2]) ? r_qspi_dat[2] : 1'bz;
 
        assign  io_qspi_dat[3] = (r_qspi_z[3]) ? r_qspi_dat[3] : 1'bz;
 
`else
 
        assign io_qspi_dat = (!qspi_bmod[1])?({2'b11,1'bz,qspi_dat[0]})
                                :((qspi_bmod[0])?(4'bzzzz):(qspi_dat[3:0]));
                                :((qspi_bmod[0])?(4'bzzzz):(qspi_dat[3:0]));
 
 
 
        assign  o_qspi_cs_n = qspi_cs_n;
 
        assign  o_qspi_sck  = qspi_sck;
 
`endif  // LOWLOGIC_FLASH
 
 
        //
        //
        // I2C support
        // I2C support
        //
        //
        //      Supporting I2C requires a couple quick adjustments to our
        //      Supporting I2C requires a couple quick adjustments to our
        //      GPIO lines.  Specifically, we'll allow that when the output
        //      GPIO lines.  Specifically, we'll allow that when the output

powered by: WebSVN 2.1.0

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