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

Subversion Repositories yifive

[/] [yifive/] [trunk/] [caravel_yifive/] [verilog/] [dv/] [io_ports/] [io_ports_tb.v] - Diff between revs 2 and 22

Only display areas with differences | Details | Blame | View Log

Rev 2 Rev 22
// SPDX-FileCopyrightText: 2020 Efabless Corporation
// SPDX-FileCopyrightText: 2020 Efabless Corporation
//
//
// Licensed under the Apache License, Version 2.0 (the "License");
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// You may obtain a copy of the License at
//
//
//      http://www.apache.org/licenses/LICENSE-2.0
//      http://www.apache.org/licenses/LICENSE-2.0
//
//
// Unless required by applicable law or agreed to in writing, software
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// See the License for the specific language governing permissions and
// limitations under the License.
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: Apache-2.0
 
 
`default_nettype none
`default_nettype none
 
 
`timescale 1 ns / 1 ps
`timescale 1 ns / 1 ps
 
 
`include "uprj_netlists.v"
`include "uprj_netlists.v"
`include "caravel_netlists.v"
`include "caravel_netlists.v"
`include "spiflash.v"
`include "spiflash.v"
 
 
module io_ports_tb;
module io_ports_tb;
        reg clock;
        reg clock;
        reg RSTB;
        reg RSTB;
        reg CSB;
        reg CSB;
        reg power1, power2;
        reg power1, power2;
        reg power3, power4;
        reg power3, power4;
 
 
        wire gpio;
        wire gpio;
        wire [37:0] mprj_io;
        wire [37:0] mprj_io;
        wire [7:0] mprj_io_0;
        wire [7:0] mprj_io_0;
 
 
        assign mprj_io_0 = mprj_io[7:0];
        assign mprj_io_0 = mprj_io[7:0];
        // assign mprj_io_0 = {mprj_io[8:4],mprj_io[2:0]};
        // assign mprj_io_0 = {mprj_io[8:4],mprj_io[2:0]};
 
 
        assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz;
        assign mprj_io[3] = (CSB == 1'b1) ? 1'b1 : 1'bz;
        // assign mprj_io[3] = 1'b1;
        // assign mprj_io[3] = 1'b1;
 
 
        // External clock is used by default.  Make this artificially fast for the
        // External clock is used by default.  Make this artificially fast for the
        // simulation.  Normally this would be a slow clock and the digital PLL
        // simulation.  Normally this would be a slow clock and the digital PLL
        // would be the fast clock.
        // would be the fast clock.
 
 
        always #12.5 clock <= (clock === 1'b0);
        always #12.5 clock <= (clock === 1'b0);
 
 
        initial begin
        initial begin
                clock = 0;
                clock = 0;
        end
        end
 
 
        initial begin
        initial begin
 
                `ifdef WFDUMP
                $dumpfile("io_ports.vcd");
                $dumpfile("io_ports.vcd");
                $dumpvars(0, io_ports_tb);
                $dumpvars(0, io_ports_tb);
 
                `endif
 
 
                // Repeat cycles of 1000 clock edges as needed to complete testbench
                // Repeat cycles of 1000 clock edges as needed to complete testbench
                repeat (25) begin
                repeat (25) begin
                        repeat (1000) @(posedge clock);
                        repeat (1000) @(posedge clock);
                        // $display("+1000 cycles");
                        // $display("+1000 cycles");
                end
                end
                $display("%c[1;31m",27);
                $display("%c[1;31m",27);
                `ifdef GL
                `ifdef GL
                        $display ("Monitor: Timeout, Test Mega-Project IO Ports (GL) Failed");
                        $display ("Monitor: Timeout, Test Mega-Project IO Ports (GL) Failed");
                `else
                `else
                        $display ("Monitor: Timeout, Test Mega-Project IO Ports (RTL) Failed");
                        $display ("Monitor: Timeout, Test Mega-Project IO Ports (RTL) Failed");
                `endif
                `endif
                $display("%c[0m",27);
                $display("%c[0m",27);
                $finish;
                $finish;
        end
        end
 
 
        initial begin
        initial begin
            // Observe Output pins [7:0]
            // Observe Output pins [7:0]
            wait(mprj_io_0 == 8'h01);
            wait(mprj_io_0 == 8'h01);
            wait(mprj_io_0 == 8'h02);
            wait(mprj_io_0 == 8'h02);
            wait(mprj_io_0 == 8'h03);
            wait(mprj_io_0 == 8'h03);
            wait(mprj_io_0 == 8'h04);
            wait(mprj_io_0 == 8'h04);
            wait(mprj_io_0 == 8'h05);
            wait(mprj_io_0 == 8'h05);
            wait(mprj_io_0 == 8'h06);
            wait(mprj_io_0 == 8'h06);
            wait(mprj_io_0 == 8'h07);
            wait(mprj_io_0 == 8'h07);
            wait(mprj_io_0 == 8'h08);
            wait(mprj_io_0 == 8'h08);
            wait(mprj_io_0 == 8'h09);
            wait(mprj_io_0 == 8'h09);
            wait(mprj_io_0 == 8'h0A);
            wait(mprj_io_0 == 8'h0A);
            wait(mprj_io_0 == 8'hFF);
            wait(mprj_io_0 == 8'hFF);
            wait(mprj_io_0 == 8'h00);
            wait(mprj_io_0 == 8'h00);
 
 
                `ifdef GL
                `ifdef GL
                $display("Monitor: Test 1 Mega-Project IO (GL) Passed");
                $display("Monitor: Test 1 Mega-Project IO (GL) Passed");
                `else
                `else
                    $display("Monitor: Test 1 Mega-Project IO (RTL) Passed");
                    $display("Monitor: Test 1 Mega-Project IO (RTL) Passed");
                `endif
                `endif
            $finish;
            $finish;
        end
        end
 
 
        initial begin
        initial begin
                RSTB <= 1'b0;
                RSTB <= 1'b0;
                CSB  <= 1'b1;           // Force CSB high
                CSB  <= 1'b1;           // Force CSB high
                #2000;
                #2000;
                RSTB <= 1'b1;           // Release reset
                RSTB <= 1'b1;           // Release reset
                #170000;
                #170000;
                CSB = 1'b0;             // CSB can be released
                CSB = 1'b0;             // CSB can be released
        end
        end
 
 
        initial begin           // Power-up sequence
        initial begin           // Power-up sequence
                power1 <= 1'b0;
                power1 <= 1'b0;
                power2 <= 1'b0;
                power2 <= 1'b0;
                power3 <= 1'b0;
                power3 <= 1'b0;
                power4 <= 1'b0;
                power4 <= 1'b0;
                #100;
                #100;
                power1 <= 1'b1;
                power1 <= 1'b1;
                #100;
                #100;
                power2 <= 1'b1;
                power2 <= 1'b1;
                #100;
                #100;
                power3 <= 1'b1;
                power3 <= 1'b1;
                #100;
                #100;
                power4 <= 1'b1;
                power4 <= 1'b1;
        end
        end
 
 
        always @(mprj_io) begin
        always @(mprj_io) begin
                #1 $display("MPRJ-IO state = %b ", mprj_io[7:0]);
                #1 $display("MPRJ-IO state = %b ", mprj_io[7:0]);
        end
        end
 
 
        wire flash_csb;
        wire flash_csb;
        wire flash_clk;
        wire flash_clk;
        wire flash_io0;
        wire flash_io0;
        wire flash_io1;
        wire flash_io1;
 
 
        wire VDD3V3 = power1;
        wire VDD3V3 = power1;
        wire VDD1V8 = power2;
        wire VDD1V8 = power2;
        wire USER_VDD3V3 = power3;
        wire USER_VDD3V3 = power3;
        wire USER_VDD1V8 = power4;
        wire USER_VDD1V8 = power4;
        wire VSS = 1'b0;
        wire VSS = 1'b0;
 
 
        caravel uut (
        caravel uut (
                .vddio    (VDD3V3),
                .vddio    (VDD3V3),
                .vssio    (VSS),
                .vssio    (VSS),
                .vdda     (VDD3V3),
                .vdda     (VDD3V3),
                .vssa     (VSS),
                .vssa     (VSS),
                .vccd     (VDD1V8),
                .vccd     (VDD1V8),
                .vssd     (VSS),
                .vssd     (VSS),
                .vdda1    (USER_VDD3V3),
                .vdda1    (USER_VDD3V3),
                .vdda2    (USER_VDD3V3),
                .vdda2    (USER_VDD3V3),
                .vssa1    (VSS),
                .vssa1    (VSS),
                .vssa2    (VSS),
                .vssa2    (VSS),
                .vccd1    (USER_VDD1V8),
                .vccd1    (USER_VDD1V8),
                .vccd2    (USER_VDD1V8),
                .vccd2    (USER_VDD1V8),
                .vssd1    (VSS),
                .vssd1    (VSS),
                .vssd2    (VSS),
                .vssd2    (VSS),
                .clock    (clock),
                .clock    (clock),
                .gpio     (gpio),
                .gpio     (gpio),
                .mprj_io  (mprj_io),
                .mprj_io  (mprj_io),
                .flash_csb(flash_csb),
                .flash_csb(flash_csb),
                .flash_clk(flash_clk),
                .flash_clk(flash_clk),
                .flash_io0(flash_io0),
                .flash_io0(flash_io0),
                .flash_io1(flash_io1),
                .flash_io1(flash_io1),
                .resetb   (RSTB)
                .resetb   (RSTB)
        );
        );
 
 
        spiflash #(
        spiflash #(
                .FILENAME("io_ports.hex")
                .FILENAME("io_ports.hex")
        ) spiflash (
        ) spiflash (
                .csb(flash_csb),
                .csb(flash_csb),
                .clk(flash_clk),
                .clk(flash_clk),
                .io0(flash_io0),
                .io0(flash_io0),
                .io1(flash_io1),
                .io1(flash_io1),
                .io2(),                 // not used
                .io2(),                 // not used
                .io3()                  // not used
                .io3()                  // not used
        );
        );
 
 
endmodule
endmodule
`default_nettype wire
`default_nettype wire
 
 

powered by: WebSVN 2.1.0

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