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

Subversion Repositories openmsp430

[/] [openmsp430/] [trunk/] [core/] [bench/] [verilog/] [tb_openMSP430.v] - Diff between revs 200 and 202

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 200 Rev 202
Line 29... Line 29...
//
//
// *Author(s):
// *Author(s):
//              - Olivier Girard,    olgirard@gmail.com
//              - Olivier Girard,    olgirard@gmail.com
//
//
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// $Rev: 200 $
// $Rev: 202 $
// $LastChangedBy: olivier.girard $
// $LastChangedBy: olivier.girard $
// $LastChangedDate: 2015-01-21 23:01:31 +0100 (Wed, 21 Jan 2015) $
// $LastChangedDate: 2015-07-01 23:13:32 +0200 (Wed, 01 Jul 2015) $
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
`include "timescale.v"
`include "timescale.v"
`ifdef OMSP_NO_INCLUDE
`ifdef OMSP_NO_INCLUDE
`else
`else
`include "openMSP430_defines.v"
`include "openMSP430_defines.v"
Line 66... Line 66...
wire        [15:0] per_din;
wire        [15:0] per_din;
wire        [15:0] per_dout;
wire        [15:0] per_dout;
wire         [1:0] per_we;
wire         [1:0] per_we;
wire               per_en;
wire               per_en;
 
 
 
// Direct Memory Access interface
 
wire        [15:0] dma_dout;
 
wire               dma_ready;
 
wire               dma_resp;
 
reg         [15:1] dma_addr;
 
reg         [15:0] dma_din;
 
reg                dma_en;
 
reg                dma_priority;
 
reg          [1:0] dma_we;
 
reg                dma_wkup;
 
 
// Digital I/O
// Digital I/O
wire               irq_port1;
wire               irq_port1;
wire               irq_port2;
wire               irq_port2;
wire        [15:0] per_dout_dio;
wire        [15:0] per_dout_dio;
wire         [7:0] p1_dout;
wire         [7:0] p1_dout;
Line 190... Line 201...
wire        [15:0] inst_pc;
wire        [15:0] inst_pc;
wire    [8*32-1:0] inst_short;
wire    [8*32-1:0] inst_short;
 
 
// Testbench variables
// Testbench variables
integer            tb_idx;
integer            tb_idx;
 
integer            tmp_seed;
integer            error;
integer            error;
reg                stimulus_done;
reg                stimulus_done;
 
 
 
 
//
//
Line 205... Line 217...
 
 
// Debug interface tasks
// Debug interface tasks
`include "dbg_uart_tasks.v"
`include "dbg_uart_tasks.v"
`include "dbg_i2c_tasks.v"
`include "dbg_i2c_tasks.v"
 
 
 
// Direct Memory Access interface tasks
 
`include "dma_tasks.v"
 
 
// Verilog stimulus
// Verilog stimulus
`include "stimulus.v"
`include "stimulus.v"
 
 
 
 
//
//
Line 263... Line 278...
     reset_n       = 1'b1;
     reset_n       = 1'b1;
  end
  end
 
 
initial
initial
  begin
  begin
 
     tmp_seed                = `SEED;
 
     tmp_seed                = $urandom(tmp_seed);
     error                   = 0;
     error                   = 0;
     stimulus_done           = 1;
     stimulus_done           = 1;
     irq                     = {`IRQ_NR-2{1'b0}};
     irq                     = {`IRQ_NR-2{1'b0}};
     nmi                     = 1'b0;
     nmi                     = 1'b0;
     wkup                    = 14'h0000;
     wkup                    = 14'h0000;
 
     dma_addr                = 15'h0000;
 
     dma_din                 = 16'h0000;
 
     dma_en                  = 1'b0;
 
     dma_priority            = 1'b0;
 
     dma_we                  = 2'b00;
 
     dma_wkup                = 1'b0;
 
     dma_tfx_cancel          = 1'b0;
     cpu_en                  = 1'b1;
     cpu_en                  = 1'b1;
     dbg_en                  = 1'b0;
     dbg_en                  = 1'b0;
     dbg_uart_rxd_sel        = 1'b0;
     dbg_uart_rxd_sel        = 1'b0;
     dbg_uart_rxd_dly        = 1'b1;
     dbg_uart_rxd_dly        = 1'b1;
     dbg_uart_rxd_pre        = 1'b1;
     dbg_uart_rxd_pre        = 1'b1;
Line 358... Line 382...
    .dco_enable        (dco_enable),        // ASIC ONLY: Fast oscillator enable
    .dco_enable        (dco_enable),        // ASIC ONLY: Fast oscillator enable
    .dco_wkup          (dco_wkup),          // ASIC ONLY: Fast oscillator wake-up (asynchronous)
    .dco_wkup          (dco_wkup),          // ASIC ONLY: Fast oscillator wake-up (asynchronous)
    .dmem_addr         (dmem_addr),         // Data Memory address
    .dmem_addr         (dmem_addr),         // Data Memory address
    .dmem_cen          (dmem_cen),          // Data Memory chip enable (low active)
    .dmem_cen          (dmem_cen),          // Data Memory chip enable (low active)
    .dmem_din          (dmem_din),          // Data Memory data input
    .dmem_din          (dmem_din),          // Data Memory data input
    .dmem_wen          (dmem_wen),          // Data Memory write enable (low active)
    .dmem_wen          (dmem_wen),             // Data Memory write byte enable (low active)
    .irq_acc           (irq_acc),           // Interrupt request accepted (one-hot signal)
    .irq_acc           (irq_acc),           // Interrupt request accepted (one-hot signal)
    .lfxt_enable       (lfxt_enable),       // ASIC ONLY: Low frequency oscillator enable
    .lfxt_enable       (lfxt_enable),       // ASIC ONLY: Low frequency oscillator enable
    .lfxt_wkup         (lfxt_wkup),         // ASIC ONLY: Low frequency oscillator wake-up (asynchronous)
    .lfxt_wkup         (lfxt_wkup),         // ASIC ONLY: Low frequency oscillator wake-up (asynchronous)
    .mclk              (mclk),              // Main system clock
    .mclk              (mclk),              // Main system clock
 
    .dma_dout          (dma_dout),             // Direct Memory Access data output
 
    .dma_ready         (dma_ready),            // Direct Memory Access is complete
 
    .dma_resp          (dma_resp),             // Direct Memory Access response (0:Okay / 1:Error)
    .per_addr          (per_addr),          // Peripheral address
    .per_addr          (per_addr),          // Peripheral address
    .per_din           (per_din),           // Peripheral data input
    .per_din           (per_din),           // Peripheral data input
    .per_we            (per_we),            // Peripheral write enable (high active)
 
    .per_en            (per_en),            // Peripheral enable (high active)
    .per_en            (per_en),            // Peripheral enable (high active)
 
    .per_we            (per_we),               // Peripheral write byte enable (high active)
    .pmem_addr         (pmem_addr),         // Program Memory address
    .pmem_addr         (pmem_addr),         // Program Memory address
    .pmem_cen          (pmem_cen),          // Program Memory chip enable (low active)
    .pmem_cen          (pmem_cen),          // Program Memory chip enable (low active)
    .pmem_din          (pmem_din),          // Program Memory data input (optional)
    .pmem_din          (pmem_din),          // Program Memory data input (optional)
    .pmem_wen          (pmem_wen),          // Program Memory write enable (low active) (optional)
    .pmem_wen          (pmem_wen),             // Program Memory write byte enable (low active) (optional)
    .puc_rst           (puc_rst),           // Main system reset
    .puc_rst           (puc_rst),           // Main system reset
    .smclk             (smclk),             // ASIC ONLY: SMCLK
    .smclk             (smclk),             // ASIC ONLY: SMCLK
    .smclk_en          (smclk_en),          // FPGA ONLY: SMCLK enable
    .smclk_en          (smclk_en),          // FPGA ONLY: SMCLK enable
 
 
// INPUTs
// INPUTs
Line 387... Line 414...
    .dbg_uart_rxd      (dbg_uart_rxd),      // Debug interface: UART RXD (asynchronous)
    .dbg_uart_rxd      (dbg_uart_rxd),      // Debug interface: UART RXD (asynchronous)
    .dco_clk           (dco_clk),           // Fast oscillator (fast clock)
    .dco_clk           (dco_clk),           // Fast oscillator (fast clock)
    .dmem_dout         (dmem_dout),         // Data Memory data output
    .dmem_dout         (dmem_dout),         // Data Memory data output
    .irq               (irq_in),            // Maskable interrupts
    .irq               (irq_in),            // Maskable interrupts
    .lfxt_clk          (lfxt_clk),          // Low frequency oscillator (typ 32kHz)
    .lfxt_clk          (lfxt_clk),          // Low frequency oscillator (typ 32kHz)
 
    .dma_addr          (dma_addr),             // Direct Memory Access address
 
    .dma_din           (dma_din),              // Direct Memory Access data input
 
    .dma_en            (dma_en),               // Direct Memory Access enable (high active)
 
    .dma_priority      (dma_priority),         // Direct Memory Access priority (0:low / 1:high)
 
    .dma_we            (dma_we),               // Direct Memory Access write byte enable (high active)
 
    .dma_wkup          (dma_wkup),             // ASIC ONLY: DMA Sub-System Wake-up (asynchronous and non-glitchy)
    .nmi               (nmi),               // Non-maskable interrupt (asynchronous)
    .nmi               (nmi),               // Non-maskable interrupt (asynchronous)
    .per_dout          (per_dout),          // Peripheral data output
    .per_dout          (per_dout),          // Peripheral data output
    .pmem_dout         (pmem_dout),         // Program Memory data output
    .pmem_dout         (pmem_dout),         // Program Memory data output
    .reset_n           (reset_n),           // Reset Pin (low active, asynchronous)
    .reset_n           (reset_n),           // Reset Pin (low active, asynchronous)
    .scan_enable       (scan_enable),       // ASIC ONLY: Scan enable (active during scan shifting)
    .scan_enable       (scan_enable),       // ASIC ONLY: Scan enable (active during scan shifting)
Line 492... Line 525...
    .ta_cci2a     (ta_cci2a),          // Timer A compare 2 input A
    .ta_cci2a     (ta_cci2a),          // Timer A compare 2 input A
    .ta_cci2b     (ta_cci2b),          // Timer A compare 2 input B
    .ta_cci2b     (ta_cci2b),          // Timer A compare 2 input B
    .taclk        (taclk)              // TACLK external timer clock (SLOW)
    .taclk        (taclk)              // TACLK external timer clock (SLOW)
);
);
 
 
 
 
//
//
// Peripheral templates
// Peripheral templates
//----------------------------------
//----------------------------------
 
 
template_periph_8b template_periph_8b_0 (
template_periph_8b template_periph_8b_0 (
Line 679... Line 711...
     `endif
     `endif
       $display(" ===============================================");
       $display(" ===============================================");
       $display("|               SIMULATION FAILED               |");
       $display("|               SIMULATION FAILED               |");
       $display("|              (simulation Timeout)             |");
       $display("|              (simulation Timeout)             |");
       $display(" ===============================================");
       $display(" ===============================================");
 
       $display("");
 
       tb_extra_report;
       $finish;
       $finish;
   `endif
   `endif
  end
  end
 
 
initial // Normal end of test
initial // Normal end of test
  begin
  begin
     @(negedge stimulus_done);
     @(negedge stimulus_done);
     wait(inst_pc=='hffff);
     wait(inst_pc=='hffff);
 
 
     $display(" ===============================================");
     $display(" ===============================================");
     if (error!=0)
     if ((dma_rd_error!=0) || (dma_wr_error!=0))
 
       begin
 
          $display("|               SIMULATION FAILED               |");
 
          $display("|           (some DMA transfer failed)          |");
 
       end
 
     else if (error!=0)
       begin
       begin
          $display("|               SIMULATION FAILED               |");
          $display("|               SIMULATION FAILED               |");
          $display("|     (some verilog stimulus checks failed)     |");
          $display("|     (some verilog stimulus checks failed)     |");
       end
       end
     else if (~stimulus_done)
     else if (~stimulus_done)
Line 704... Line 743...
     else
     else
       begin
       begin
          $display("|               SIMULATION PASSED               |");
          $display("|               SIMULATION PASSED               |");
       end
       end
     $display(" ===============================================");
     $display(" ===============================================");
 
     $display("");
 
     tb_extra_report;
     $finish;
     $finish;
  end
  end
 
 
 
 
//
//
Line 720... Line 761...
         $display("ERROR: %s %t", error_string, $time);
         $display("ERROR: %s %t", error_string, $time);
         error = error+1;
         error = error+1;
      end
      end
   endtask
   endtask
 
 
 
   task tb_extra_report;
 
      begin
 
         $display("DMA REPORT: Total Accesses: %-d Total RD: %-d Total WR: %-d", dma_cnt_rd+dma_cnt_wr,     dma_cnt_rd,   dma_cnt_wr);
 
         $display("            Total Errors:   %-d Error RD: %-d Error WR: %-d", dma_rd_error+dma_wr_error, dma_rd_error, dma_wr_error);
 
         if (!((`PMEM_SIZE>=4092) && (`DMEM_SIZE>=1024)))
 
           begin
 
              $display("");
 
              $display("Note: DMA if verification disabled (PMEM must be 4kB or bigger, DMEM must be 1kB or bigger)");
 
           end
 
         $display("");
 
         $display("SIMULATION SEED: %d", `SEED);
 
         $display("");
 
      end
 
   endtask
 
 
 
   task tb_skip_finish;
 
      input [65*8-1:0] skip_string;
 
      begin
 
         $display(" ===============================================");
 
         $display("|               SIMULATION SKIPPED              |");
 
         $display("%s", skip_string);
 
         $display(" ===============================================");
 
         $display("");
 
         tb_extra_report;
 
         $finish;
 
      end
 
   endtask
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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