123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- /*
- * Testbench
- * Simulates the entire FPGC
- */
- // Set timescale
- `timescale 1 ns/1 ns
- // tld
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/FPGC6.v"
- // other logic
- `include "/home/bart/Documents/FPGA/FPGC5/Verilog/modules/MultiStabilizer.v"
- `include "/home/bart/Documents/FPGA/FPGC5/Verilog/modules/DtrReset.v"
- // cpu
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/CPU.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/ALU.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/ControlUnit.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/InstructionDecoder.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/Regbank.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/Stack.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/InstrMem.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/DataMem.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/Regr.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/Arbiter.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/CPU/IntController.v"
- // memory
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/VRAM.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/mt48lc16m16a2.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/w25q128jv.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/SDRAMcontroller.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/SPIreader.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/ROM.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/MemoryUnit.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/L2cache.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/L1Icache.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/Memory/L1Dcache.v"
- // io
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/Keyboard.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/OStimer.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/UARTtx.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/UARTrx.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/SimpleSPI.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/LEDvisualizer.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/FPDivider.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/IO/IDivider.v"
- // gpu
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/FSX.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/BGWrenderer.v"
- //`include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/Spriterenderer.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/PixelEngine.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/TimingGenerator.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/HDMI/RGB2HDMI.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/HDMI/TMDSenc.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/HDMI/lvds.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/HDMI/ddr.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/NTSC/NTSC.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/NTSC/PhaseGen.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/NTSC/RGB332toNTSC.v"
- `include "/home/bart/Documents/FPGA/FPGC6/Verilog/modules/GPU/NTSC/RGBtoYPhaseAmpl.v"
- // Define testmodule
- module FPGC_tb;
- //Clock I/O
- reg clk;
- reg clk_SDRAM;
- reg nreset;
- //SPI0 Flash
- wire SPI0_clk;
- wire SPI0_cs;
- wire SPI0_data;
- wire SPI0_wp;
- wire SPI0_q;
- wire SPI0_hold;
- W25Q128JV spiFlash (
- .CLK (SPI0_clk),
- .DIO (SPI0_data),
- .CSn (SPI0_cs),
- .WPn (SPI0_wp),
- .HOLDn (SPI0_hold),
- .DO (SPI0_q)
- );
- //SDRAM
- wire SDRAM_CLK; // SDRAM clock
- wire [31 : 0] SDRAM_DQ; // SDRAM I/O
- wire [12 : 0] SDRAM_A; // SDRAM Address
- wire [1 : 0] SDRAM_BA; // Bank Address
- wire SDRAM_CKE; // Synchronous Clock Enable
- wire SDRAM_CSn; // CS#
- wire SDRAM_RASn; // RAS#
- wire SDRAM_CASn; // CAS#
- wire SDRAM_WEn; // WE#
- wire [3 : 0] SDRAM_DQM; // Mask
- assign SDRAM_CLK = clk_SDRAM;
- mt48lc16m16a2 sdram1 (
- .Dq (SDRAM_DQ[15:0]),
- .Addr (SDRAM_A),
- .Ba (SDRAM_BA),
- .Clk (SDRAM_CLK),
- .Cke (SDRAM_CKE),
- .Cs_n (SDRAM_CSn),
- .Ras_n (SDRAM_RASn),
- .Cas_n (SDRAM_CASn),
- .We_n (SDRAM_WEn),
- .Dqm (SDRAM_DQM[1:0])
- );
- mt48lc16m16a2 sdram2 (
- .Dq (SDRAM_DQ[31:16]),
- .Addr (SDRAM_A),
- .Ba (SDRAM_BA),
- .Clk (SDRAM_CLK),
- .Cke (SDRAM_CKE),
- .Cs_n (SDRAM_CSn),
- .Ras_n (SDRAM_RASn),
- .Cas_n (SDRAM_CASn),
- .We_n (SDRAM_WEn),
- .Dqm (SDRAM_DQM[3:2])
- );
- //HDMI
- wire [3:0] TMDS_p;
- wire [3:0] TMDS_n;
- //SPI1
- wire SPI1_clk;
- wire SPI1_cs;
- wire SPI1_mosi;
- wire SPI1_miso;
- assign SPI1_miso = 1'b1;
- wire SPI1_rst;
- reg SPI1_nint;
- //SPI2
- wire SPI2_clk;
- wire SPI2_cs;
- wire SPI2_mosi;
- wire SPI2_miso;
- wire SPI2_rst;
- reg SPI2_nint;
- //SPI3
- wire SPI3_clk;
- wire SPI3_cs;
- wire SPI3_mosi;
- wire SPI3_miso;
- wire SPI3_nrst;
- reg SPI3_int;
- //SPI4
- wire SPI4_clk;
- wire SPI4_cs;
- wire SPI4_mosi;
- wire SPI4_miso;
- reg SPI4_gp;
- //UART0
- reg UART0_in;
- wire UART0_out;
- reg UART0_dtr;
- //UART1
- //reg UART1_in;
- //wire UART1_out;
- //UART2
- reg UART2_in;
- wire UART2_out;
- //PS/2
- reg PS2_clk;
- reg PS2_data;
- //Led
- wire led;
- //GPIO
- wire [3:0] GPO;
- reg [3:0] GPI;
- //DIP Switch
- reg [3:0] DIPS;
- FPGC6 fpgc (
- .clk(clk),
- .clk_SDRAM(clk_SDRAM),
- .nreset(nreset),
- //HDMI
- .TMDS_p(TMDS_p),
- .TMDS_n(TMDS_n),
- //SDRAM
- .SDRAM_CLK(SDRAM_CLK),
- .SDRAM_CSn(SDRAM_CSn),
- .SDRAM_WEn(SDRAM_WEn),
- .SDRAM_CASn(SDRAM_CASn),
- .SDRAM_RASn(SDRAM_RASn),
- .SDRAM_CKE(SDRAM_CKE),
- .SDRAM_A(SDRAM_A),
- .SDRAM_BA(SDRAM_BA),
- .SDRAM_DQM(SDRAM_DQM),
- .SDRAM_DQ(SDRAM_DQ),
- //SPI0 flash
- .SPI0_clk(SPI0_clk),
- .SPI0_cs(SPI0_cs),
- .SPI0_data(SPI0_data),
- .SPI0_q(SPI0_q),
- .SPI0_wp(SPI0_wp),
- .SPI0_hold(SPI0_hold),
-
- //SPI1 CH376 bottom
- .SPI1_clk(SPI1_clk),
- .SPI1_cs(SPI1_cs),
- .SPI1_mosi(SPI1_mosi),
- .SPI1_miso(SPI1_miso),
- .SPI1_nint(SPI1_nint),
- .SPI1_rst(SPI1_rst),
-
- //SPI2 CH376 top
- .SPI2_clk(SPI2_clk),
- .SPI2_cs(SPI2_cs),
- .SPI2_mosi(SPI2_mosi),
- .SPI2_miso(SPI2_miso),
- .SPI2_nint(SPI2_nint),
- .SPI2_rst(SPI2_rst),
-
- //SPI3 W5500
- .SPI3_clk(SPI3_clk),
- .SPI3_cs(SPI3_cs),
- .SPI3_mosi(SPI3_mosi),
- .SPI3_miso(SPI3_miso),
- .SPI3_int(SPI3_int),
- .SPI3_nrst(SPI3_nrst),
-
- //SPI4 GP
- .SPI4_clk(SPI4_clk),
- .SPI4_cs(SPI4_cs),
- .SPI4_mosi(SPI4_mosi),
- .SPI4_miso(SPI4_miso),
- .SPI4_gp(SPI4_gp),
-
- //UART0
- .UART0_in(UART0_in),
- .UART0_out(UART0_out),
- .UART0_dtr(UART0_dtr),
-
- //UART1
- //.UART1_in(UART1_in),
- //.UART1_out(UART1_out),
-
- //UART2
- .UART2_in(UART2_in),
- .UART2_out(UART2_out),
-
- //PS/2
- .PS2_clk(PS2_clk),
- .PS2_data(PS2_data),
-
- //Led for debugging
- .led(led),
-
- //GPIO
- .GPI(GPI),
- .GPO(GPO),
-
- //DIP switch
- .DIPS(DIPS)
- );
- initial
- begin
- //Dump everything for GTKwave
- $dumpfile("/home/bart/Documents/FPGA/FPGC6/Verilog/output/wave.vcd");
- $dumpvars;
-
- clk = 0;
- clk_SDRAM = 0;
- nreset = 1;
- SPI1_nint = 1;
- SPI2_nint = 1;
- SPI3_int = 0;
- SPI4_gp = 1;
- UART0_in = 1;
- UART0_dtr = 1;
- //UART1_in = 1;
- UART2_in = 1;
- PS2_clk = 1;
- PS2_data = 0;
- GPI = 4'b1111;
- DIPS = 4'b0000;
- DIPS[0] = 0; // spi = 0, uart = 1
- repeat(10)
- begin
- #5 clk_SDRAM = ~clk_SDRAM; clk = ~clk; //50MHz
- #5 clk_SDRAM = ~clk_SDRAM; //100MHz
- end
- nreset = 0;
- repeat(10)
- begin
- #5 clk_SDRAM = ~clk_SDRAM; clk = ~clk; //50MHz
- #5 clk_SDRAM = ~clk_SDRAM; //100MHz
- end
- nreset = 1;
- repeat(30000)
- begin
- #5 clk_SDRAM = ~clk_SDRAM; clk = ~clk; //50MHz
- #5 clk_SDRAM = ~clk_SDRAM; //100MHz
- end
- repeat(20000)
- begin
- #5 clk_SDRAM = ~clk_SDRAM; clk = ~clk; //50MHz
- #5 clk_SDRAM = ~clk_SDRAM; //100MHz
- end
- #1 $finish;
- end
- endmodule
|