Line 29... |
Line 29... |
//
|
//
|
// *Author(s):
|
// *Author(s):
|
// - Olivier Girard, olgirard@gmail.com
|
// - Olivier Girard, olgirard@gmail.com
|
//
|
//
|
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
// $Rev: 151 $
|
// $Rev: 154 $
|
// $LastChangedBy: olivier.girard $
|
// $LastChangedBy: olivier.girard $
|
// $LastChangedDate: 2012-07-23 00:24:11 +0200 (Mon, 23 Jul 2012) $
|
// $LastChangedDate: 2012-10-15 22:44:20 +0200 (Mon, 15 Oct 2012) $
|
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
`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 153... |
Line 153... |
|
|
// Scan (ASIC version only)
|
// Scan (ASIC version only)
|
reg scan_enable;
|
reg scan_enable;
|
reg scan_mode;
|
reg scan_mode;
|
|
|
// Debug interface
|
// Debug interface: UART
|
reg dbg_en;
|
reg dbg_en;
|
wire dbg_freeze;
|
wire dbg_freeze;
|
wire dbg_uart_txd;
|
wire dbg_uart_txd;
|
wire dbg_uart_rxd;
|
wire dbg_uart_rxd;
|
reg dbg_uart_rxd_sel;
|
reg dbg_uart_rxd_sel;
|
Line 166... |
Line 166... |
reg dbg_uart_rxd_meta;
|
reg dbg_uart_rxd_meta;
|
reg [15:0] dbg_uart_buf;
|
reg [15:0] dbg_uart_buf;
|
reg dbg_uart_rx_busy;
|
reg dbg_uart_rx_busy;
|
reg dbg_uart_tx_busy;
|
reg dbg_uart_tx_busy;
|
|
|
|
// Debug interface: I2C
|
|
wire dbg_scl;
|
|
wire dbg_sda;
|
|
wire dbg_scl_slave;
|
|
wire dbg_scl_master;
|
|
reg dbg_scl_master_sel;
|
|
reg dbg_scl_master_dly;
|
|
reg dbg_scl_master_pre;
|
|
reg dbg_scl_master_meta;
|
|
wire dbg_sda_slave_out;
|
|
wire dbg_sda_slave_in;
|
|
wire dbg_sda_master_out;
|
|
reg dbg_sda_master_out_sel;
|
|
reg dbg_sda_master_out_dly;
|
|
reg dbg_sda_master_out_pre;
|
|
reg dbg_sda_master_out_meta;
|
|
wire dbg_sda_master_in;
|
|
reg [15:0] dbg_i2c_buf;
|
|
reg [8*32-1:0] dbg_i2c_string;
|
|
|
// Core testbench debuging signals
|
// Core testbench debuging signals
|
wire [8*32-1:0] i_state;
|
wire [8*32-1:0] i_state;
|
wire [8*32-1:0] e_state;
|
wire [8*32-1:0] e_state;
|
wire [31:0] inst_cycle;
|
wire [31:0] inst_cycle;
|
wire [8*32-1:0] inst_full;
|
wire [8*32-1:0] inst_full;
|
Line 189... |
Line 209... |
// CPU & Memory registers
|
// CPU & Memory registers
|
`include "registers.v"
|
`include "registers.v"
|
|
|
// Debug interface tasks
|
// Debug interface tasks
|
`include "dbg_uart_tasks.v"
|
`include "dbg_uart_tasks.v"
|
|
`include "dbg_i2c_tasks.v"
|
|
|
// Simple uart tasks
|
// Simple uart tasks
|
//`include "uart_tasks.v"
|
//`include "uart_tasks.v"
|
|
|
// Verilog stimulus
|
// Verilog stimulus
|
Line 259... |
Line 280... |
dbg_uart_rxd_pre = 1'b1;
|
dbg_uart_rxd_pre = 1'b1;
|
dbg_uart_rxd_meta= 1'b0;
|
dbg_uart_rxd_meta= 1'b0;
|
dbg_uart_buf = 16'h0000;
|
dbg_uart_buf = 16'h0000;
|
dbg_uart_rx_busy = 1'b0;
|
dbg_uart_rx_busy = 1'b0;
|
dbg_uart_tx_busy = 1'b0;
|
dbg_uart_tx_busy = 1'b0;
|
|
dbg_scl_master_sel = 1'b0;
|
|
dbg_scl_master_dly = 1'b1;
|
|
dbg_scl_master_pre = 1'b1;
|
|
dbg_scl_master_meta = 1'b0;
|
|
dbg_sda_master_out_sel = 1'b0;
|
|
dbg_sda_master_out_dly = 1'b1;
|
|
dbg_sda_master_out_pre = 1'b1;
|
|
dbg_sda_master_out_meta = 1'b0;
|
|
dbg_i2c_string = "";
|
p1_din = 8'h00;
|
p1_din = 8'h00;
|
p2_din = 8'h00;
|
p2_din = 8'h00;
|
p3_din = 8'h00;
|
p3_din = 8'h00;
|
p4_din = 8'h00;
|
p4_din = 8'h00;
|
p5_din = 8'h00;
|
p5_din = 8'h00;
|
Line 325... |
Line 355... |
|
|
// OUTPUTs
|
// OUTPUTs
|
.aclk (aclk), // ASIC ONLY: ACLK
|
.aclk (aclk), // ASIC ONLY: ACLK
|
.aclk_en (aclk_en), // FPGA ONLY: ACLK enable
|
.aclk_en (aclk_en), // FPGA ONLY: ACLK enable
|
.dbg_freeze (dbg_freeze), // Freeze peripherals
|
.dbg_freeze (dbg_freeze), // Freeze peripherals
|
|
.dbg_i2c_sda_out (dbg_sda_slave_out), // Debug interface: I2C SDA OUT
|
.dbg_uart_txd (dbg_uart_txd), // Debug interface: UART TXD
|
.dbg_uart_txd (dbg_uart_txd), // Debug interface: UART TXD
|
.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)
|
Line 351... |
Line 382... |
.smclk_en (smclk_en), // FPGA ONLY: SMCLK enable
|
.smclk_en (smclk_en), // FPGA ONLY: SMCLK enable
|
|
|
// INPUTs
|
// INPUTs
|
.cpu_en (cpu_en), // Enable CPU code execution (asynchronous)
|
.cpu_en (cpu_en), // Enable CPU code execution (asynchronous)
|
.dbg_en (dbg_en), // Debug interface enable (asynchronous)
|
.dbg_en (dbg_en), // Debug interface enable (asynchronous)
|
|
.dbg_i2c_addr (I2C_ADDR), // Debug interface: I2C Address
|
|
.dbg_i2c_broadcast (I2C_BROADCAST), // Debug interface: I2C Broadcast Address (for multicore systems)
|
|
.dbg_i2c_scl (dbg_scl_slave), // Debug interface: I2C SCL
|
|
.dbg_i2c_sda_in (dbg_sda_slave_in), // Debug interface: I2C SDA IN
|
.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)
|
Line 573... |
Line 608... |
1'b0, // Vector 1 (0xFFE2)
|
1'b0, // Vector 1 (0xFFE2)
|
1'b0}; // Vector 0 (0xFFE0)
|
1'b0}; // Vector 0 (0xFFE0)
|
|
|
|
|
//
|
//
|
|
// I2C serial debug interface
|
|
//----------------------------------
|
|
|
|
// I2C Bus
|
|
//.........................
|
|
pullup dbg_scl_inst (dbg_scl);
|
|
pullup dbg_sda_inst (dbg_sda);
|
|
|
|
// I2C Slave (openMSP430)
|
|
//.........................
|
|
io_cell scl_slave_inst (
|
|
.pad (dbg_scl), // I/O pad
|
|
.data_in (dbg_scl_slave), // Input
|
|
.data_out_en (1'b0), // Output enable
|
|
.data_out (1'b0) // Output
|
|
);
|
|
|
|
io_cell sda_slave_inst (
|
|
.pad (dbg_sda), // I/O pad
|
|
.data_in (dbg_sda_slave_in), // Input
|
|
.data_out_en (!dbg_sda_slave_out), // Output enable
|
|
.data_out (1'b0) // Output
|
|
);
|
|
|
|
// I2C Master (Debugger)
|
|
//.........................
|
|
io_cell scl_master_inst (
|
|
.pad (dbg_scl), // I/O pad
|
|
.data_in (), // Input
|
|
.data_out_en (!dbg_scl_master), // Output enable
|
|
.data_out (1'b0) // Output
|
|
);
|
|
|
|
io_cell sda_master_inst (
|
|
.pad (dbg_sda), // I/O pad
|
|
.data_in (dbg_sda_master_in), // Input
|
|
.data_out_en (!dbg_sda_master_out), // Output enable
|
|
.data_out (1'b0) // Output
|
|
);
|
|
|
|
|
|
//
|
// Debug utility signals
|
// Debug utility signals
|
//----------------------------------------
|
//----------------------------------------
|
msp_debug msp_debug_0 (
|
msp_debug msp_debug_0 (
|
|
|
// OUTPUTs
|
// OUTPUTs
|