working FIFO and TPSRAM without packet flter
This commit is contained in:
1
component/work/CoreUARTapb_0/CoreUARTapb_0.cxf
Normal file
1
component/work/CoreUARTapb_0/CoreUARTapb_0.cxf
Normal file
File diff suppressed because one or more lines are too long
BIN
component/work/CoreUARTapb_0/CoreUARTapb_0.sdb
Normal file
BIN
component/work/CoreUARTapb_0/CoreUARTapb_0.sdb
Normal file
Binary file not shown.
164
component/work/CoreUARTapb_0/CoreUARTapb_0.v
Normal file
164
component/work/CoreUARTapb_0/CoreUARTapb_0.v
Normal file
@@ -0,0 +1,164 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Created by SmartDesign Mon Apr 13 21:41:13 2026
|
||||
// Version: 2025.1 2025.1.0.14
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
`timescale 1ns / 100ps
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Component Description (Tcl)
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
# Exporting Component Description of CoreUARTapb_0 to TCL
|
||||
# Family: PolarFire
|
||||
# Part Number: MPF300TS-1FCG1152I
|
||||
# Create and Configure the core component CoreUARTapb_0
|
||||
create_and_configure_core -core_vlnv {Actel:DirectCore:CoreUARTapb:5.7.100} -component_name {CoreUARTapb_0} -params {\
|
||||
"BAUD_VAL_FRCTN:0" \
|
||||
"BAUD_VAL_FRCTN_EN:false" \
|
||||
"BAUD_VALUE:1" \
|
||||
"FIXEDMODE:0" \
|
||||
"PRG_BIT8:0" \
|
||||
"PRG_PARITY:0" \
|
||||
"RX_FIFO:0" \
|
||||
"RX_LEGACY_MODE:0" \
|
||||
"TX_FIFO:0" \
|
||||
"USE_SOFT_FIFO:0" }
|
||||
# Exporting Component Description of CoreUARTapb_0 to TCL done
|
||||
*/
|
||||
|
||||
// CoreUARTapb_0
|
||||
module CoreUARTapb_0(
|
||||
// Inputs
|
||||
PADDR,
|
||||
PCLK,
|
||||
PENABLE,
|
||||
PRESETN,
|
||||
PSEL,
|
||||
PWDATA,
|
||||
PWRITE,
|
||||
RX,
|
||||
// Outputs
|
||||
FRAMING_ERR,
|
||||
OVERFLOW,
|
||||
PARITY_ERR,
|
||||
PRDATA,
|
||||
PREADY,
|
||||
PSLVERR,
|
||||
RXRDY,
|
||||
TX,
|
||||
TXRDY
|
||||
);
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Input
|
||||
//--------------------------------------------------------------------
|
||||
input [4:0] PADDR;
|
||||
input PCLK;
|
||||
input PENABLE;
|
||||
input PRESETN;
|
||||
input PSEL;
|
||||
input [7:0] PWDATA;
|
||||
input PWRITE;
|
||||
input RX;
|
||||
//--------------------------------------------------------------------
|
||||
// Output
|
||||
//--------------------------------------------------------------------
|
||||
output FRAMING_ERR;
|
||||
output OVERFLOW;
|
||||
output PARITY_ERR;
|
||||
output [7:0] PRDATA;
|
||||
output PREADY;
|
||||
output PSLVERR;
|
||||
output RXRDY;
|
||||
output TX;
|
||||
output TXRDY;
|
||||
//--------------------------------------------------------------------
|
||||
// Nets
|
||||
//--------------------------------------------------------------------
|
||||
wire [4:0] PADDR;
|
||||
wire PENABLE;
|
||||
wire [7:0] APB_bif_PRDATA;
|
||||
wire APB_bif_PREADY;
|
||||
wire PSEL;
|
||||
wire APB_bif_PSLVERR;
|
||||
wire [7:0] PWDATA;
|
||||
wire PWRITE;
|
||||
wire FRAMING_ERR_net_0;
|
||||
wire OVERFLOW_net_0;
|
||||
wire PARITY_ERR_net_0;
|
||||
wire PCLK;
|
||||
wire PRESETN;
|
||||
wire RX;
|
||||
wire RXRDY_net_0;
|
||||
wire TX_net_0;
|
||||
wire TXRDY_net_0;
|
||||
wire TXRDY_net_1;
|
||||
wire RXRDY_net_1;
|
||||
wire PARITY_ERR_net_1;
|
||||
wire OVERFLOW_net_1;
|
||||
wire TX_net_1;
|
||||
wire FRAMING_ERR_net_1;
|
||||
wire [7:0] APB_bif_PRDATA_net_0;
|
||||
wire APB_bif_PREADY_net_0;
|
||||
wire APB_bif_PSLVERR_net_0;
|
||||
//--------------------------------------------------------------------
|
||||
// Top level output port assignments
|
||||
//--------------------------------------------------------------------
|
||||
assign TXRDY_net_1 = TXRDY_net_0;
|
||||
assign TXRDY = TXRDY_net_1;
|
||||
assign RXRDY_net_1 = RXRDY_net_0;
|
||||
assign RXRDY = RXRDY_net_1;
|
||||
assign PARITY_ERR_net_1 = PARITY_ERR_net_0;
|
||||
assign PARITY_ERR = PARITY_ERR_net_1;
|
||||
assign OVERFLOW_net_1 = OVERFLOW_net_0;
|
||||
assign OVERFLOW = OVERFLOW_net_1;
|
||||
assign TX_net_1 = TX_net_0;
|
||||
assign TX = TX_net_1;
|
||||
assign FRAMING_ERR_net_1 = FRAMING_ERR_net_0;
|
||||
assign FRAMING_ERR = FRAMING_ERR_net_1;
|
||||
assign APB_bif_PRDATA_net_0 = APB_bif_PRDATA;
|
||||
assign PRDATA[7:0] = APB_bif_PRDATA_net_0;
|
||||
assign APB_bif_PREADY_net_0 = APB_bif_PREADY;
|
||||
assign PREADY = APB_bif_PREADY_net_0;
|
||||
assign APB_bif_PSLVERR_net_0 = APB_bif_PSLVERR;
|
||||
assign PSLVERR = APB_bif_PSLVERR_net_0;
|
||||
//--------------------------------------------------------------------
|
||||
// Component instances
|
||||
//--------------------------------------------------------------------
|
||||
//--------CoreUARTapb_0_CoreUARTapb_0_0_CoreUARTapb - Actel:DirectCore:CoreUARTapb:5.7.100
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_CoreUARTapb #(
|
||||
.BAUD_VAL_FRCTN ( 0 ),
|
||||
.BAUD_VAL_FRCTN_EN ( 0 ),
|
||||
.BAUD_VALUE ( 1 ),
|
||||
.FAMILY ( 26 ),
|
||||
.FIXEDMODE ( 0 ),
|
||||
.PRG_BIT8 ( 0 ),
|
||||
.PRG_PARITY ( 0 ),
|
||||
.RX_FIFO ( 0 ),
|
||||
.RX_LEGACY_MODE ( 0 ),
|
||||
.TX_FIFO ( 0 ) )
|
||||
CoreUARTapb_0_0(
|
||||
// Inputs
|
||||
.PCLK ( PCLK ),
|
||||
.PRESETN ( PRESETN ),
|
||||
.PADDR ( PADDR ),
|
||||
.PSEL ( PSEL ),
|
||||
.PENABLE ( PENABLE ),
|
||||
.PWRITE ( PWRITE ),
|
||||
.PWDATA ( PWDATA ),
|
||||
.RX ( RX ),
|
||||
// Outputs
|
||||
.PRDATA ( APB_bif_PRDATA ),
|
||||
.TXRDY ( TXRDY_net_0 ),
|
||||
.RXRDY ( RXRDY_net_0 ),
|
||||
.PARITY_ERR ( PARITY_ERR_net_0 ),
|
||||
.OVERFLOW ( OVERFLOW_net_0 ),
|
||||
.TX ( TX_net_0 ),
|
||||
.PREADY ( APB_bif_PREADY ),
|
||||
.PSLVERR ( APB_bif_PSLVERR ),
|
||||
.FRAMING_ERR ( FRAMING_ERR_net_0 )
|
||||
);
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><Component xmlns="http://actel.com/sweng/afi"><name>CoreUARTapb_0_CoreUARTapb_0_0_CoreUARTapb</name><vendor/><library/><version/><fileSets><fileSet fileSetId="STIMULUS_FILESET"><file fileid="0"><name>coreparameters.v</name><fileType>verilogSource</fileType><vendorExtensions><isIncludeFile/><requireUniquify/></vendorExtensions></file><file fileid="1"><name>rtl\vlog\amba_bfm\bfm_ahbl.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="2"><name>rtl\vlog\amba_bfm\bfm_ahblapb.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="3"><name>rtl\vlog\amba_bfm\bfm_ahbslave.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="4"><name>rtl\vlog\amba_bfm\bfm_ahbslaveext.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="5"><name>rtl\vlog\amba_bfm\bfm_ahbtoapb.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="6"><name>rtl\vlog\amba_bfm\bfm_apb.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="7"><name>rtl\vlog\amba_bfm\bfm_apbslave.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="8"><name>rtl\vlog\amba_bfm\bfm_apbslaveext.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="9"><name>rtl\vlog\amba_bfm\bfm_apbtoapb.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="10"><name>rtl\vlog\amba_bfm\bfm_main.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="11"><name>rtl\vlog\test\user\testbench.v</name><fileType>verilogSource</fileType><vendorExtensions><ModuleUnderTest>testbench</ModuleUnderTest><SimulationTime>-all</SimulationTime><requireUniquify/></vendorExtensions></file></fileSet><fileSet fileSetId="ANY_SIMULATION_FILESET"><file fileid="12"><name>mti\scripts\bfmtovec_compile.do</name><userFileType>DO</userFileType><vendorExtensions><IncludeInRunDo/><requireUniquify/></vendorExtensions></file><file fileid="13"><name>mti\scripts\coreuart_usertb_apb_master.bfm</name><userFileType>BFM</userFileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="14"><name>mti\scripts\coreuart_usertb_include.bfm</name><userFileType>BFM</userFileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="15"><name>mti\scripts\wave_vlog_amba.do</name><userFileType>DO</userFileType><vendorExtensions><IncludeInRunDo/><requireUniquify/></vendorExtensions></file></fileSet><fileSet fileSetId="HDL_FILESET"><file fileid="16"><name>rtl\vlog\core\Clock_gen.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="17"><name>rtl\vlog\core\Rx_async.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="18"><name>rtl\vlog\core\Tx_async.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="19"><name>rtl\vlog\core\CoreUART.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="20"><name>rtl\vlog\core\CoreUARTapb.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file><file fileid="21"><name>rtl\vlog\core\fifo_256x8_g5.v</name><fileType>verilogSource</fileType><vendorExtensions><requireUniquify/></vendorExtensions></file></fileSet></fileSets><hwModel><views><view><fileSetRef>STIMULUS_FILESET</fileSetRef><fileSetRef>ANY_SIMULATION_FILESET</fileSetRef><name>SIMULATION</name></view><view><fileSetRef>HDL_FILESET</fileSetRef><name>HDL</name></view></views></hwModel></Component>
|
||||
@@ -0,0 +1,19 @@
|
||||
//--------------------------------------------------------------------
|
||||
// Created by Microsemi SmartDesign Mon Apr 13 21:41:13 2026
|
||||
// Parameters for CoreUARTapb
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
|
||||
parameter BAUD_VAL_FRCTN = 0;
|
||||
parameter BAUD_VAL_FRCTN_EN = 0;
|
||||
parameter BAUD_VALUE = 1;
|
||||
parameter FAMILY = 26;
|
||||
parameter FIXEDMODE = 0;
|
||||
parameter HDL_license = "U";
|
||||
parameter PRG_BIT8 = 0;
|
||||
parameter PRG_PARITY = 0;
|
||||
parameter RX_FIFO = 0;
|
||||
parameter RX_LEGACY_MODE = 0;
|
||||
parameter testbench = "User";
|
||||
parameter TX_FIFO = 0;
|
||||
parameter USE_SOFT_FIFO = 0;
|
||||
@@ -0,0 +1,23 @@
|
||||
### script to compile Actel AMBA BFM source file into vector file for simulation
|
||||
# 12Jan09 Production Release Version 3.0
|
||||
quietly set linux_exe "./bfmtovec.lin"
|
||||
quietly set windows_exe "./bfmtovec.exe"
|
||||
quietly set bfm_src_in "./coreuart_usertb_apb_master.bfm"
|
||||
quietly set bfm_vec_out "./coreuart_usertb_apb_master.vec"
|
||||
# check OS type and use appropriate executable
|
||||
if {$tcl_platform(os) == "Linux"} {
|
||||
echo "--- Using Linux Actel DirectCore AMBA BFM compiler"
|
||||
quietly set bfmtovec_exe "./bfmtovec.lin"
|
||||
if {![file executable $bfmtovec_exe]} {
|
||||
quietly set cmds "chmod +x $bfmtovec_exe"
|
||||
eval $cmds
|
||||
}
|
||||
} else {
|
||||
echo "--- Using Windows Actel DirectCore AMBA BFM compiler"
|
||||
quietly set bfmtovec_exe "./bfmtovec.exe"
|
||||
}
|
||||
# compile BFM source files into vector outputs
|
||||
echo "--- Compiling Actel DirectCore AMBA BFM source files ..."
|
||||
quietly set cmd1 "exec $bfmtovec_exe -in $bfm_src_in -out $bfm_vec_out"
|
||||
eval $cmd1
|
||||
# echo "--- Done Compiling Actel DirectCore AMBA BFM source files."
|
||||
@@ -0,0 +1,100 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2009 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: Verification testbench APB master BFM script for CoreAI
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
//
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: $
|
||||
// SVN $Date: $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
//
|
||||
// Notes:
|
||||
// 1. best viewed with tabstops set to "4"
|
||||
// 2. Most of the behavior is driven from the BFM script for the APB master.
|
||||
// Consult the Actel AMBA BFM documentation for more information.
|
||||
// 3. All procedures, variables, and constants used by the 'main' procedure
|
||||
// are declared in the include file "coreai_veriftb_include.bfm"
|
||||
//
|
||||
// History: 11/05/08 - TFB created
|
||||
//
|
||||
// *********************************************************************
|
||||
|
||||
// include constants, and miscellaneous procedures used in this main file
|
||||
include "coreuart_usertb_include.bfm"
|
||||
|
||||
procedure main
|
||||
|
||||
header "User Testbench for CoreUART: BFM APB Master Test Harness"
|
||||
print "(c) Copyright 2009 Actel Corporation. All rights reserved."
|
||||
print "AS: 03/23/09"
|
||||
call pr_underscores
|
||||
|
||||
debug 1 // only text strings printed
|
||||
//timeout 2000000 // timeout in cycles, in case BFM stalls
|
||||
//wait 1
|
||||
|
||||
call init_parameter_vars
|
||||
wait 1
|
||||
// framing error test
|
||||
ifnot FIXEDMODE
|
||||
call set_config 0 0 0 5 1
|
||||
call set_config 1 0 0 5 1
|
||||
call framing_err_test
|
||||
endif
|
||||
|
||||
|
||||
// overflow test
|
||||
call overflow_test
|
||||
|
||||
ifnot FIXEDMODE
|
||||
// TEST FOR ALL CONFIGURATIONS (matching b/w DUTs)
|
||||
// configure UART1 and 2 to the same config
|
||||
print "FIXEDMODE=0: testing for all configurations"
|
||||
call pr_underscores
|
||||
loop x 0 1 1 // parity_en
|
||||
loop y 0 1 1 // parity
|
||||
loop z 0 1 1 // bit_num
|
||||
call set_config 0 x y 1 z
|
||||
call set_config 1 x y 1 z
|
||||
call data_stream
|
||||
call set_config 0 x y 3 z
|
||||
call set_config 1 x y 3 z
|
||||
call data_stream
|
||||
endloop
|
||||
endloop
|
||||
endloop
|
||||
endif
|
||||
|
||||
if FIXEDMODE
|
||||
// TEST FOR ONE CONFIGURATION (FIXED)
|
||||
print "FIXEDMODE=1: testing for current configuration only (as follows)"
|
||||
print "BAUD_VALUE:%0d" BAUD_VALUE
|
||||
print "PRG_BIT8:%0d" PRG_BIT8
|
||||
print "PRG_PARITY:%0d" PRG_PARITY
|
||||
call data_stream
|
||||
endif
|
||||
|
||||
|
||||
|
||||
// parity error test
|
||||
ifnot FIXEDMODE
|
||||
call parity_err_test
|
||||
endif
|
||||
|
||||
call pr_underscores
|
||||
|
||||
|
||||
// enable
|
||||
print "End of CoreUART User testbench."
|
||||
return
|
||||
@@ -0,0 +1,468 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2009 Actel Corporation All rights reserved
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING
|
||||
//
|
||||
// Description: User testbench include file for CoreAI - contains
|
||||
// various constants procedures etc used by main BFM script
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// 19Jan09 Production Release Version 3 0
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: $
|
||||
// SVN $Date: $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
//
|
||||
// Notes:
|
||||
// 1 best viewed with tabstops set to "4"
|
||||
//
|
||||
// History:
|
||||
//
|
||||
// *********************************************************************
|
||||
|
||||
|
||||
|
||||
// PSEL[0] HSEL[0] used to access the AHB-to-APB bridge in the BFM_APB mod
|
||||
// (for UART Transmitter)
|
||||
memmap BASE1 0x10000000
|
||||
// PSEL[1] HSEL[1] used to access the AHB-to-APB bridge in the BFM_APB mod
|
||||
// (for UART Receiver)
|
||||
memmap BASE2 0x11000000
|
||||
|
||||
// variables to store passed parameter values
|
||||
int FAMILY
|
||||
int TX_FIFO
|
||||
int RX_FIFO
|
||||
int FIXEDMODE
|
||||
int BAUD_VALUE
|
||||
int PRG_BIT8
|
||||
int PRG_PARITY
|
||||
int RX_LEGACY_MODE
|
||||
int USE_SOFT_FIFO
|
||||
|
||||
// derived parameters
|
||||
int FIFO_DEPTH
|
||||
int TIMEOUT_VAL
|
||||
int BYTE_WAIT_TIME
|
||||
int BYTE_WAIT_256
|
||||
int BYTE_WAIT_16
|
||||
int BYTE_WAIT_8
|
||||
|
||||
// data variables
|
||||
int rdata[256]
|
||||
|
||||
// other variables
|
||||
int PRINT_VARS
|
||||
int BITVAR
|
||||
int data
|
||||
// temp vars
|
||||
int i j k l w x y z tc rc
|
||||
int cmp
|
||||
|
||||
|
||||
// CoreGPIO internal addresses
|
||||
constant TXDATA 0x00
|
||||
constant RXDATA 0x04
|
||||
constant CTRL1 0x08
|
||||
constant CTRL2 0x0C
|
||||
constant STA 0x10
|
||||
constant CRTL3 0x14
|
||||
|
||||
//BFM GPIN bit defs
|
||||
constant RXRDY1 0
|
||||
constant TXRDY1 1
|
||||
constant PARITY_ERR1 2
|
||||
constant OVERFLOW1 3
|
||||
constant RXRDY2 4
|
||||
constant TXRDY2 5
|
||||
constant PARITY_ERR2 6
|
||||
constant OVERFLOW2 7
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// procedures
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// initialize local variables from the ARGVALUE* BFM parameters passed
|
||||
// down from the testbench HDL
|
||||
//---------------------------------------------------------------------------
|
||||
procedure init_parameter_vars
|
||||
|
||||
set FAMILY $ARGVALUE0
|
||||
set TX_FIFO $ARGVALUE1
|
||||
set RX_FIFO $ARGVALUE2
|
||||
set FIXEDMODE $ARGVALUE3
|
||||
set BAUD_VALUE $ARGVALUE4
|
||||
set PRG_BIT8 $ARGVALUE5
|
||||
set PRG_PARITY $ARGVALUE6
|
||||
set RX_LEGACY_MODE $ARGVALUE7
|
||||
set USE_SOFT_FIFO $ARGVALUE8
|
||||
|
||||
// derived parameters
|
||||
if USE_SOFT_FIFO
|
||||
set FIFO_DEPTH 15
|
||||
else
|
||||
set FIFO_DEPTH 255
|
||||
endif
|
||||
|
||||
// check for SX or RTSX or RTAXS
|
||||
// and set FIFO depth accordingly
|
||||
// (these 3 have soft FIFOs)
|
||||
set cmp FAMILY == 8
|
||||
if cmp
|
||||
set FIFO_DEPTH 15
|
||||
endif
|
||||
set cmp FAMILY == 9
|
||||
if cmp
|
||||
set FIFO_DEPTH 15
|
||||
endif
|
||||
|
||||
// set cmp FAMILY == 12
|
||||
// if cmp
|
||||
// set FIFO_DEPTH 15
|
||||
// endif
|
||||
|
||||
//check for SmartFusion2 or Igloo2 or RTG4
|
||||
//and set FIFO depth accordingly
|
||||
set cmp FAMILY == 19
|
||||
if cmp
|
||||
if USE_SOFT_FIFO
|
||||
set FIFO_DEPTH 15
|
||||
else
|
||||
set FIFO_DEPTH 127
|
||||
endif
|
||||
endif
|
||||
set cmp FAMILY == 24
|
||||
if cmp
|
||||
if USE_SOFT_FIFO
|
||||
set FIFO_DEPTH 15
|
||||
else
|
||||
set FIFO_DEPTH 127
|
||||
endif
|
||||
endif
|
||||
set cmp FAMILY == 25
|
||||
if cmp
|
||||
if USE_SOFT_FIFO
|
||||
set FIFO_DEPTH 15
|
||||
else
|
||||
set FIFO_DEPTH 127
|
||||
endif
|
||||
endif
|
||||
|
||||
//check for PolarFire
|
||||
//and set FIFO depth accordingly
|
||||
set cmp FAMILY == 26
|
||||
if cmp
|
||||
if USE_SOFT_FIFO
|
||||
set FIFO_DEPTH 15
|
||||
else
|
||||
set FIFO_DEPTH 255
|
||||
endif
|
||||
endif
|
||||
|
||||
//check for ProASICplus
|
||||
//and set FIFO depth accordingly
|
||||
set cmp FAMILY == 14
|
||||
if cmp
|
||||
if USE_SOFT_FIFO
|
||||
set FIFO_DEPTH 15
|
||||
else
|
||||
set FIFO_DEPTH 254
|
||||
endif
|
||||
endif
|
||||
|
||||
set BYTE_WAIT_TIME BAUD_VALUE * 250
|
||||
set BYTE_WAIT_256 BYTE_WAIT_TIME * 256
|
||||
set BYTE_WAIT_16 BYTE_WAIT_TIME * 16
|
||||
set BYTE_WAIT_8 BYTE_WAIT_TIME * 8
|
||||
|
||||
set TIMEOUT_VAL BYTE_WAIT_256 + 1
|
||||
|
||||
timeout TIMEOUT_VAL
|
||||
|
||||
set PRINT_VARS 1
|
||||
|
||||
if PRINT_VARS
|
||||
header " Begin printing variables from APB Master BFM Script ..."
|
||||
print "FAMILY:%0d" FAMILY
|
||||
print "TX_FIFO:%0d" TX_FIFO
|
||||
print "RX_FIFO:%0d" RX_FIFO
|
||||
print "FIXEDMODE:%0d" FIXEDMODE
|
||||
print "BAUD_VALUE:%0d" BAUD_VALUE
|
||||
print "PRG_BIT8:%0d" PRG_BIT8
|
||||
print "PRG_PARITY:%0d" PRG_PARITY
|
||||
print "RX_LEGACY_MODE:%0d" RX_LEGACY_MODE
|
||||
print "FIFO_DEPTH:%0d" FIFO_DEPTH
|
||||
header " Done printing variables from APB Master BFM Script."
|
||||
header " "
|
||||
endif
|
||||
return
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// get bit number (bnum) from given wval integer
|
||||
//---------------------------------------------------------------------------
|
||||
procedure get_bit wval bnum
|
||||
int d01
|
||||
set d01 wval >> bnum
|
||||
// set global BITVAR variable
|
||||
set BITVAR d01 & 0x1
|
||||
return
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// print line of underscores
|
||||
//---------------------------------------------------------------------------
|
||||
procedure pr_underscores
|
||||
print "____________________________________________________________________"
|
||||
print " "
|
||||
return
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// test procedures
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
procedure set_config dn pe p bv bn
|
||||
int dut_num // 1 = RX(DUT2), 0 = TX(DUT1)
|
||||
int par_en // 1 = enabled, 0 = disabled
|
||||
int par // 1 = odd, 0 = even
|
||||
int baud_val // 13-bit baud-value (split into 2 config registers)
|
||||
int bit_num // 1 = 8 bits, 0 = 7 bits
|
||||
|
||||
// temp vars
|
||||
int baud1
|
||||
int baud2
|
||||
int ctrl2_val
|
||||
|
||||
set dut_num dn
|
||||
set par_en pe
|
||||
set par p
|
||||
set baud_val bv
|
||||
set bit_num bn
|
||||
|
||||
print "Configuring UART:%0d with par_en:%0d parity:%0d baud_val:%0d bit_num:%0d" dut_num par_en par baud_val bit_num
|
||||
|
||||
// Set config regsiter data
|
||||
set baud1 baud_val << 8 >> 8 // CONFIG REG 1
|
||||
set baud2 baud_val >> 8 // CONFIG REG 2
|
||||
set par par << 2
|
||||
set par_en par_en << 1
|
||||
set baud2 baud2 << 3
|
||||
set ctrl2_val par
|
||||
set ctrl2_val ctrl2_val | par_en
|
||||
set ctrl2_val ctrl2_val | baud2
|
||||
set ctrl2_val ctrl2_val | bit_num
|
||||
|
||||
// set base address based on DUT selected
|
||||
if dut_num == 1
|
||||
// write control registers
|
||||
//print "Writing %0d to CTRL1 and %0d to CTRL2" baud1 ctrl2_val
|
||||
write b BASE2 CTRL1 baud1
|
||||
write b BASE2 CTRL2 ctrl2_val
|
||||
else
|
||||
// write control registers
|
||||
//print "Writing %0d to CTRL1 and %0d to CTRL2" baud1 ctrl2_val
|
||||
write b BASE1 CTRL1 baud1
|
||||
write b BASE1 CTRL2 ctrl2_val
|
||||
endif
|
||||
|
||||
return
|
||||
|
||||
procedure data_stream
|
||||
call pr_underscores
|
||||
print "Testing Continuous Data Stream UART1 to UART2"
|
||||
set rc 0
|
||||
|
||||
loop tc 0 FIFO_DEPTH 1
|
||||
//print "Sending byte %0d" tc
|
||||
iowaitbit TXRDY1 1 // wait until TXRDY
|
||||
set data tc & 0x7F // mask byte
|
||||
//print "Got TXRDY %0d times" tc
|
||||
write b BASE1 TXDATA data // transmit a byte
|
||||
ifnot TX_FIFO
|
||||
iowaitbit TXRDY1 0 // wait until TXRDY deasserted
|
||||
endif
|
||||
ifnot RX_FIFO // must read immediately
|
||||
iowaitbit RXRDY2 1 // wait until RXRDY
|
||||
//print "Receiving byte %0d" tc
|
||||
readstore b BASE2 RXDATA rdata[rc] // read received byte
|
||||
set rc rc + 1
|
||||
endif
|
||||
endloop
|
||||
|
||||
if RX_FIFO // test out FIFO operation
|
||||
wait BYTE_WAIT_16 // wait for data to be received
|
||||
loop rc 0 FIFO_DEPTH 1
|
||||
iowaitbit RXRDY2 1 // wait until RXRDY
|
||||
readstore b BASE2 RXDATA rdata[rc] // read received byte
|
||||
endloop
|
||||
endif
|
||||
|
||||
// check data
|
||||
loop i 0 FIFO_DEPTH 1
|
||||
set j i & 0x7F
|
||||
if rdata[i] != j
|
||||
call pr_underscores
|
||||
print "TEST FAILED"
|
||||
print "Expected %0d, got %0d" i rdata[i]
|
||||
setfail
|
||||
endif
|
||||
endloop
|
||||
print "Continuous data stream successfull"
|
||||
call pr_underscores
|
||||
return
|
||||
|
||||
procedure framing_err_test
|
||||
call pr_underscores
|
||||
print "Performing framing error test by setting input to DUT2 low"
|
||||
|
||||
// set the input to UART2 RX line low
|
||||
// (no stop bit)
|
||||
iowrite 0x01
|
||||
wait BYTE_WAIT_16
|
||||
ifnot RX_FIFO
|
||||
// back to normal:
|
||||
iowrite 0x00
|
||||
wait BYTE_WAIT_16
|
||||
readmask b BASE2 STA 0x10 0x10 // check for framing_err bit set
|
||||
read b BASE2 RXDATA // doing a read should clear this
|
||||
readmask b BASE2 STA 0x00 0x10 // check for framing_err bit cleared
|
||||
else
|
||||
readmask b BASE2 STA 0x10 0x10 // check for framing_err bit set
|
||||
iowrite 0x00
|
||||
// transmit a byte to clear the framing error
|
||||
iowaitbit TXRDY1 1 // wait until TXRDY
|
||||
write b BASE1 TXDATA 0xAA
|
||||
wait BYTE_WAIT_16
|
||||
readmask b BASE2 STA 0x00 0x10 // check for framing_err bit cleared
|
||||
//loop i 0 FIFO_DEPTH 1 // probably caused an overflow,
|
||||
readstore b BASE2 STA x // read status
|
||||
set x x & 0x02
|
||||
set cmp x == 2
|
||||
while cmp
|
||||
iowaitbit RXRDY2 1 // wait until RXRDY
|
||||
read b BASE2 RXDATA // need to clear
|
||||
iowaitbit RXRDY2 0 // wait until RXRDY clear
|
||||
wait 4
|
||||
readstore b BASE2 STA x // read status
|
||||
set x x & 0x02
|
||||
set cmp x == 2
|
||||
endwhile
|
||||
|
||||
endif
|
||||
wait 10
|
||||
|
||||
|
||||
print "Framing error test completed"
|
||||
call pr_underscores
|
||||
return
|
||||
|
||||
procedure overflow_test
|
||||
call pr_underscores
|
||||
print "Overflow test"
|
||||
|
||||
if RX_FIFO
|
||||
loop tc 0 FIFO_DEPTH 1
|
||||
iowaitbit TXRDY1 1 // wait until TXRDY
|
||||
set data tc & 0x7F // mask byte
|
||||
write b BASE1 TXDATA data // transmit a byte
|
||||
ifnot TX_FIFO
|
||||
iowaitbit TXRDY1 0 // wait until TXRDY deasserted
|
||||
endif
|
||||
endloop
|
||||
|
||||
iowaitbit TXRDY1 1 // wait until TXRDY
|
||||
wait BYTE_WAIT_256
|
||||
iotstbit OVERFLOW2 0 // check that overflow not set
|
||||
write b BASE1 TXDATA 0xab // transmit a byte (0xab)
|
||||
|
||||
wait BYTE_WAIT_256 // worst case: 3 blocks (BAUD_VAL=1)
|
||||
wait BYTE_WAIT_256
|
||||
wait BYTE_WAIT_256
|
||||
|
||||
iotstbit OVERFLOW2 1 // check that overflow set
|
||||
|
||||
// read RX data
|
||||
loop rc 0 FIFO_DEPTH 1
|
||||
if rc == 1
|
||||
iotstbit OVERFLOW2 0 // check
|
||||
endif
|
||||
iowaitbit RXRDY2 1 // wait until RXRDY
|
||||
readstore b BASE2 RXDATA rdata[rc] // read received byte
|
||||
endloop
|
||||
|
||||
// check data
|
||||
loop i 0 FIFO_DEPTH 1
|
||||
set j i & 0x7F
|
||||
if rdata[i] != j
|
||||
call pr_underscores
|
||||
print "TEST FAILED"
|
||||
print "Expected %0d, got %0d" i rdata[i]
|
||||
setfail
|
||||
endif
|
||||
endloop
|
||||
endif
|
||||
|
||||
call pr_underscores
|
||||
|
||||
return
|
||||
|
||||
procedure parity_err_test
|
||||
call pr_underscores
|
||||
print "Performing Parity Error Test"
|
||||
call set_config 0 1 0 1 1
|
||||
call set_config 1 1 1 1 1
|
||||
|
||||
// -- transmit a byte --
|
||||
iotstbit PARITY_ERR2 0 // check that parity error is 0
|
||||
iowaitbit txrdy1 1 // wait until txrdy
|
||||
write b base1 txdata 0xab // transmit a byte (0xab)
|
||||
iowaitbit PARITY_ERR2 1 // check that parity error asserted
|
||||
|
||||
if RX_FIFO
|
||||
iowaitbit PARITY_ERR2 0 // check that parity error deasserted
|
||||
call set_config 0 1 1 1 1 // match parity
|
||||
iowaitbit txrdy1 1 // wait until txrdy
|
||||
write b base1 txdata 0xac // transmit a new byte (0xab)
|
||||
iowaitbit RXRDY2 1 // read byte
|
||||
iotstbit PARITY_ERR2 0 // check that parity error NOT asserted
|
||||
readstore b BASE2 RXDATA x // store
|
||||
|
||||
if x != 0xac
|
||||
call pr_underscores
|
||||
print "TEST FAILED"
|
||||
print "Expected 0xac, got %0h" x
|
||||
setfail
|
||||
endif
|
||||
else
|
||||
// NO RX_FIFO
|
||||
// clear parity error
|
||||
read b BASE2 RXDATA // read should clear
|
||||
wait 4
|
||||
iotstbit PARITY_ERR2 0 // the parity error
|
||||
call set_config 0 1 1 1 1 // match parity
|
||||
iowaitbit txrdy1 1 // wait until txrdy
|
||||
write b base1 txdata 0xac // transmit a new byte (0xab)
|
||||
iowaitbit RXRDY2 1 // read byte
|
||||
iotstbit PARITY_ERR2 0 // check that parity error NOT asserted
|
||||
readstore b BASE2 RXDATA x // store
|
||||
|
||||
if x != 0xac
|
||||
call pr_underscores
|
||||
print "TEST FAILED"
|
||||
print "Expected 0xac, got %0h" x
|
||||
setfail
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
||||
|
||||
print "Parity Error Test Complete"
|
||||
call pr_underscores
|
||||
return
|
||||
@@ -0,0 +1,46 @@
|
||||
onerror {resume}
|
||||
quietly WaveActivateNextPane {} 0
|
||||
add wave -noupdate -divider APB
|
||||
add wave -noupdate -format Logic /testbench/SYSCLK_apb
|
||||
add wave -noupdate -format Logic /testbench/PCLK
|
||||
add wave -noupdate -format Literal /testbench/PADDR
|
||||
add wave -noupdate -format Logic /testbench/PENABLE
|
||||
add wave -noupdate -format Literal /testbench/PRDATA
|
||||
add wave -noupdate -format Literal /testbench/PRDATA1
|
||||
add wave -noupdate -format Literal /testbench/PRDATA2
|
||||
add wave -noupdate -format Logic /testbench/PRESETN
|
||||
add wave -noupdate -format Logic /testbench/PSEL1
|
||||
add wave -noupdate -format Logic /testbench/PSEL2
|
||||
add wave -noupdate -format Literal /testbench/PWDATA
|
||||
add wave -noupdate -format Logic /testbench/PWRITE
|
||||
add wave -noupdate -divider {UART1 (TX)}
|
||||
add wave -noupdate -format Logic /testbench/DUT1/TXRDY
|
||||
add wave -noupdate -format Logic /testbench/DUT1/TX
|
||||
add wave -noupdate -format Logic /testbench/DUT1/RXRDY
|
||||
add wave -noupdate -format Logic /testbench/DUT1/RX
|
||||
add wave -noupdate -format Logic /testbench/DUT1/PARITY_ERR
|
||||
add wave -noupdate -format Logic /testbench/DUT1/OVERFLOW
|
||||
add wave -noupdate -divider UART2(RX)
|
||||
add wave -noupdate -format Logic /testbench/DUT2/TXRDY
|
||||
add wave -noupdate -format Logic /testbench/DUT2/TX
|
||||
add wave -noupdate -format Logic /testbench/DUT2/RXRDY
|
||||
add wave -noupdate -format Logic /testbench/DUT2/RX
|
||||
add wave -noupdate -format Logic /testbench/DUT2/PARITY_ERR
|
||||
add wave -noupdate -format Logic /testbench/DUT2/OVERFLOW
|
||||
TreeUpdate [SetDefaultTree]
|
||||
WaveRestoreCursors {{Cursor 1} {553305200 ps} 0}
|
||||
configure wave -namecolwidth 365
|
||||
configure wave -valuecolwidth 120
|
||||
configure wave -justifyvalue left
|
||||
configure wave -signalnamewidth 0
|
||||
configure wave -snapdistance 10
|
||||
configure wave -datasetprefix 0
|
||||
configure wave -rowmargin 4
|
||||
configure wave -childrowmargin 2
|
||||
configure wave -gridoffset 0
|
||||
configure wave -gridperiod 1
|
||||
configure wave -griddelta 40
|
||||
configure wave -timeline 0
|
||||
configure wave -timelineunits ns
|
||||
update
|
||||
WaveRestoreZoom {543429100 ps} {546721100 ps}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,399 @@
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2007 Actel Corporation. All rights reserved.
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
// Revision Information:
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 6419 $
|
||||
// SVN $Date: 2009-02-04 04:34:22 -0800 (Wed, 04 Feb 2009) $
|
||||
`timescale 1ns/100ps
|
||||
module
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_BFM_AHBSLAVE
|
||||
(
|
||||
HCLK
|
||||
,
|
||||
HRESETN
|
||||
,
|
||||
HSEL
|
||||
,
|
||||
HWRITE
|
||||
,
|
||||
HADDR
|
||||
,
|
||||
HWDATA
|
||||
,
|
||||
HRDATA
|
||||
,
|
||||
HREADYIN
|
||||
,
|
||||
HREADYOUT
|
||||
,
|
||||
HTRANS
|
||||
,
|
||||
HSIZE
|
||||
,
|
||||
HBURST
|
||||
,
|
||||
HMASTLOCK
|
||||
,
|
||||
HPROT
|
||||
,
|
||||
HRESP
|
||||
)
|
||||
;
|
||||
parameter
|
||||
AWIDTH
|
||||
=
|
||||
10
|
||||
;
|
||||
parameter
|
||||
DEPTH
|
||||
=
|
||||
256
|
||||
;
|
||||
parameter
|
||||
INITFILE
|
||||
=
|
||||
" "
|
||||
;
|
||||
parameter
|
||||
ID
|
||||
=
|
||||
0
|
||||
;
|
||||
parameter
|
||||
ENFUNC
|
||||
=
|
||||
0
|
||||
;
|
||||
parameter
|
||||
TPD
|
||||
=
|
||||
1
|
||||
;
|
||||
parameter
|
||||
DEBUG
|
||||
=
|
||||
-
|
||||
1
|
||||
;
|
||||
localparam
|
||||
ENFIFO
|
||||
=
|
||||
0
|
||||
;
|
||||
localparam
|
||||
EXT_SIZE
|
||||
=
|
||||
2
|
||||
;
|
||||
input
|
||||
HCLK
|
||||
;
|
||||
input
|
||||
HRESETN
|
||||
;
|
||||
input
|
||||
HSEL
|
||||
;
|
||||
input
|
||||
HWRITE
|
||||
;
|
||||
input
|
||||
[
|
||||
AWIDTH
|
||||
-
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
HADDR
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
HWDATA
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
HRDATA
|
||||
;
|
||||
input
|
||||
HREADYIN
|
||||
;
|
||||
output
|
||||
HREADYOUT
|
||||
;
|
||||
input
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
HTRANS
|
||||
;
|
||||
input
|
||||
[
|
||||
2
|
||||
:
|
||||
0
|
||||
]
|
||||
HSIZE
|
||||
;
|
||||
input
|
||||
[
|
||||
2
|
||||
:
|
||||
0
|
||||
]
|
||||
HBURST
|
||||
;
|
||||
input
|
||||
HMASTLOCK
|
||||
;
|
||||
input
|
||||
[
|
||||
3
|
||||
:
|
||||
0
|
||||
]
|
||||
HPROT
|
||||
;
|
||||
output
|
||||
HRESP
|
||||
;
|
||||
wire
|
||||
EXT_EN
|
||||
;
|
||||
wire
|
||||
EXT_WR
|
||||
;
|
||||
wire
|
||||
EXT_RD
|
||||
;
|
||||
wire
|
||||
[
|
||||
AWIDTH
|
||||
-
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
EXT_ADDR
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
EXT_DATA
|
||||
;
|
||||
assign
|
||||
EXT_EN
|
||||
=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
assign
|
||||
EXT_WR
|
||||
=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
assign
|
||||
EXT_RD
|
||||
=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
assign
|
||||
EXT_ADDR
|
||||
=
|
||||
0
|
||||
;
|
||||
assign
|
||||
EXT_DATA
|
||||
=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
z
|
||||
}
|
||||
}
|
||||
;
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_BFM_AHBSLAVEEXT
|
||||
#
|
||||
(
|
||||
.AWIDTH
|
||||
(
|
||||
AWIDTH
|
||||
)
|
||||
,
|
||||
.DEPTH
|
||||
(
|
||||
DEPTH
|
||||
)
|
||||
,
|
||||
.EXT_SIZE
|
||||
(
|
||||
EXT_SIZE
|
||||
)
|
||||
,
|
||||
.INITFILE
|
||||
(
|
||||
INITFILE
|
||||
)
|
||||
,
|
||||
.ID
|
||||
(
|
||||
ID
|
||||
)
|
||||
,
|
||||
.ENFUNC
|
||||
(
|
||||
ENFUNC
|
||||
)
|
||||
,
|
||||
.ENFIFO
|
||||
(
|
||||
ENFIFO
|
||||
)
|
||||
,
|
||||
.TPD
|
||||
(
|
||||
TPD
|
||||
)
|
||||
,
|
||||
.DEBUG
|
||||
(
|
||||
DEBUG
|
||||
)
|
||||
)
|
||||
BFMA1OI1II
|
||||
(
|
||||
.HCLK
|
||||
(
|
||||
HCLK
|
||||
)
|
||||
,
|
||||
.HRESETN
|
||||
(
|
||||
HRESETN
|
||||
)
|
||||
,
|
||||
.HSEL
|
||||
(
|
||||
HSEL
|
||||
)
|
||||
,
|
||||
.HWRITE
|
||||
(
|
||||
HWRITE
|
||||
)
|
||||
,
|
||||
.HADDR
|
||||
(
|
||||
HADDR
|
||||
)
|
||||
,
|
||||
.HWDATA
|
||||
(
|
||||
HWDATA
|
||||
)
|
||||
,
|
||||
.HRDATA
|
||||
(
|
||||
HRDATA
|
||||
)
|
||||
,
|
||||
.HREADYIN
|
||||
(
|
||||
HREADYIN
|
||||
)
|
||||
,
|
||||
.HREADYOUT
|
||||
(
|
||||
HREADYOUT
|
||||
)
|
||||
,
|
||||
.HTRANS
|
||||
(
|
||||
HTRANS
|
||||
)
|
||||
,
|
||||
.HSIZE
|
||||
(
|
||||
HSIZE
|
||||
)
|
||||
,
|
||||
.HBURST
|
||||
(
|
||||
HBURST
|
||||
)
|
||||
,
|
||||
.HMASTLOCK
|
||||
(
|
||||
HMASTLOCK
|
||||
)
|
||||
,
|
||||
.HPROT
|
||||
(
|
||||
HPROT
|
||||
)
|
||||
,
|
||||
.HRESP
|
||||
(
|
||||
HRESP
|
||||
)
|
||||
,
|
||||
.TXREADY
|
||||
(
|
||||
BFMA1II1II
|
||||
)
|
||||
,
|
||||
.RXREADY
|
||||
(
|
||||
BFMA1II1II
|
||||
)
|
||||
,
|
||||
.EXT_EN
|
||||
(
|
||||
EXT_EN
|
||||
)
|
||||
,
|
||||
.EXT_WR
|
||||
(
|
||||
EXT_WR
|
||||
)
|
||||
,
|
||||
.EXT_RD
|
||||
(
|
||||
EXT_RD
|
||||
)
|
||||
,
|
||||
.EXT_ADDR
|
||||
(
|
||||
EXT_ADDR
|
||||
)
|
||||
,
|
||||
.EXT_DATA
|
||||
(
|
||||
EXT_DATA
|
||||
)
|
||||
)
|
||||
;
|
||||
endmodule
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,816 @@
|
||||
`timescale 1ns/100ps
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
// Revision Information:
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 6419 $
|
||||
// SVN $Date: 2009-02-04 04:34:22 -0800 (Wed, 04 Feb 2009) $
|
||||
module
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_BFMA1l1OII
|
||||
(
|
||||
HCLK
|
||||
,
|
||||
HRESETN
|
||||
,
|
||||
HSEL
|
||||
,
|
||||
HWRITE
|
||||
,
|
||||
HADDR
|
||||
,
|
||||
HWDATA
|
||||
,
|
||||
HRDATA
|
||||
,
|
||||
HREADYIN
|
||||
,
|
||||
HREADYOUT
|
||||
,
|
||||
HTRANS
|
||||
,
|
||||
HSIZE
|
||||
,
|
||||
HBURST
|
||||
,
|
||||
HMASTLOCK
|
||||
,
|
||||
HPROT
|
||||
,
|
||||
HRESP
|
||||
,
|
||||
PSEL
|
||||
,
|
||||
PADDR
|
||||
,
|
||||
PWRITE
|
||||
,
|
||||
PENABLE
|
||||
,
|
||||
PWDATA
|
||||
,
|
||||
PRDATA
|
||||
,
|
||||
PREADY
|
||||
,
|
||||
PSLVERR
|
||||
)
|
||||
;
|
||||
parameter
|
||||
TPD
|
||||
=
|
||||
1
|
||||
;
|
||||
input
|
||||
HCLK
|
||||
;
|
||||
input
|
||||
HRESETN
|
||||
;
|
||||
input
|
||||
HSEL
|
||||
;
|
||||
input
|
||||
HWRITE
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
HADDR
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
HWDATA
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
HRDATA
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
HRDATA
|
||||
;
|
||||
input
|
||||
HREADYIN
|
||||
;
|
||||
output
|
||||
HREADYOUT
|
||||
;
|
||||
wire
|
||||
HREADYOUT
|
||||
;
|
||||
input
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
HTRANS
|
||||
;
|
||||
input
|
||||
[
|
||||
2
|
||||
:
|
||||
0
|
||||
]
|
||||
HSIZE
|
||||
;
|
||||
input
|
||||
[
|
||||
2
|
||||
:
|
||||
0
|
||||
]
|
||||
HBURST
|
||||
;
|
||||
input
|
||||
HMASTLOCK
|
||||
;
|
||||
input
|
||||
[
|
||||
3
|
||||
:
|
||||
0
|
||||
]
|
||||
HPROT
|
||||
;
|
||||
output
|
||||
HRESP
|
||||
;
|
||||
wire
|
||||
HRESP
|
||||
;
|
||||
output
|
||||
[
|
||||
15
|
||||
:
|
||||
0
|
||||
]
|
||||
PSEL
|
||||
;
|
||||
wire
|
||||
[
|
||||
15
|
||||
:
|
||||
0
|
||||
]
|
||||
PSEL
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PADDR
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PADDR
|
||||
;
|
||||
output
|
||||
PWRITE
|
||||
;
|
||||
wire
|
||||
PWRITE
|
||||
;
|
||||
output
|
||||
PENABLE
|
||||
;
|
||||
wire
|
||||
PENABLE
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PWDATA
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PWDATA
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PRDATA
|
||||
;
|
||||
input
|
||||
PREADY
|
||||
;
|
||||
input
|
||||
PSLVERR
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1OOIII
|
||||
=
|
||||
0
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IOIII
|
||||
=
|
||||
1
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1lOIII
|
||||
=
|
||||
2
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1OIIII
|
||||
=
|
||||
3
|
||||
;
|
||||
reg
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IIIII
|
||||
;
|
||||
reg
|
||||
BFMA1lIIII
|
||||
;
|
||||
reg
|
||||
BFMA1OlIII
|
||||
;
|
||||
reg
|
||||
[
|
||||
15
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IlIII
|
||||
;
|
||||
reg
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1llIII
|
||||
;
|
||||
reg
|
||||
BFMA1O0III
|
||||
;
|
||||
reg
|
||||
BFMA1I0III
|
||||
;
|
||||
reg
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1l0III
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1O1III
|
||||
;
|
||||
reg
|
||||
BFMA1I1III
|
||||
;
|
||||
reg
|
||||
BFMA1l1III
|
||||
;
|
||||
always
|
||||
@
|
||||
(
|
||||
posedge
|
||||
HCLK
|
||||
or
|
||||
negedge
|
||||
HRESETN
|
||||
)
|
||||
begin
|
||||
if
|
||||
(
|
||||
HRESETN
|
||||
==
|
||||
1
|
||||
'b
|
||||
0
|
||||
)
|
||||
begin
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1OOIII
|
||||
;
|
||||
BFMA1lIIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1llIII
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1l0III
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1O0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1OlIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1I1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
end
|
||||
else
|
||||
begin
|
||||
BFMA1OlIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1lIIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1I1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
case
|
||||
(
|
||||
BFMA1IIIII
|
||||
)
|
||||
BFMA1OOIII
|
||||
:
|
||||
begin
|
||||
if
|
||||
(
|
||||
HSEL
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
&
|
||||
HREADYIN
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
&
|
||||
(
|
||||
HTRANS
|
||||
[
|
||||
1
|
||||
]
|
||||
)
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1IOIII
|
||||
;
|
||||
BFMA1llIII
|
||||
<=
|
||||
HADDR
|
||||
;
|
||||
BFMA1O0III
|
||||
<=
|
||||
HWRITE
|
||||
;
|
||||
BFMA1l0III
|
||||
<=
|
||||
HWDATA
|
||||
;
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1I1III
|
||||
<=
|
||||
HWRITE
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
end
|
||||
else
|
||||
begin
|
||||
BFMA1lIIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
end
|
||||
end
|
||||
BFMA1IOIII
|
||||
:
|
||||
begin
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1lOIII
|
||||
;
|
||||
end
|
||||
BFMA1lOIII
|
||||
:
|
||||
begin
|
||||
if
|
||||
(
|
||||
PREADY
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
if
|
||||
(
|
||||
PSLVERR
|
||||
==
|
||||
1
|
||||
'b
|
||||
0
|
||||
)
|
||||
begin
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1OOIII
|
||||
;
|
||||
if
|
||||
(
|
||||
HSEL
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
&
|
||||
HREADYIN
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
&
|
||||
(
|
||||
HTRANS
|
||||
[
|
||||
1
|
||||
]
|
||||
)
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1IOIII
|
||||
;
|
||||
BFMA1llIII
|
||||
<=
|
||||
HADDR
|
||||
;
|
||||
BFMA1O0III
|
||||
<=
|
||||
HWRITE
|
||||
;
|
||||
BFMA1I1III
|
||||
<=
|
||||
HWRITE
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
BFMA1OlIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1OIIII
|
||||
;
|
||||
end
|
||||
end
|
||||
end
|
||||
BFMA1OIIII
|
||||
:
|
||||
begin
|
||||
BFMA1OlIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1lIIII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1IIIII
|
||||
<=
|
||||
BFMA1OOIII
|
||||
;
|
||||
end
|
||||
endcase
|
||||
if
|
||||
(
|
||||
BFMA1I1III
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1l0III
|
||||
<=
|
||||
HWDATA
|
||||
;
|
||||
end
|
||||
end
|
||||
end
|
||||
always
|
||||
@
|
||||
(
|
||||
BFMA1llIII
|
||||
or
|
||||
BFMA1l1III
|
||||
)
|
||||
begin
|
||||
BFMA1IlIII
|
||||
<=
|
||||
{
|
||||
16
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
if
|
||||
(
|
||||
BFMA1l1III
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
begin
|
||||
:
|
||||
BFMA1IO10
|
||||
integer
|
||||
BFMA1I0I0
|
||||
;
|
||||
for
|
||||
(
|
||||
BFMA1I0I0
|
||||
=
|
||||
0
|
||||
;
|
||||
BFMA1I0I0
|
||||
<=
|
||||
15
|
||||
;
|
||||
BFMA1I0I0
|
||||
=
|
||||
BFMA1I0I0
|
||||
+
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1IlIII
|
||||
[
|
||||
BFMA1I0I0
|
||||
]
|
||||
<=
|
||||
(
|
||||
BFMA1llIII
|
||||
[
|
||||
27
|
||||
:
|
||||
24
|
||||
]
|
||||
==
|
||||
BFMA1I0I0
|
||||
)
|
||||
;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
assign
|
||||
BFMA1O1III
|
||||
=
|
||||
(
|
||||
BFMA1I1III
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
?
|
||||
HWDATA
|
||||
:
|
||||
BFMA1l0III
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
HRDATA
|
||||
=
|
||||
PRDATA
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
HREADYOUT
|
||||
=
|
||||
BFMA1lIIII
|
||||
|
|
||||
(
|
||||
PREADY
|
||||
&
|
||||
BFMA1l1III
|
||||
&
|
||||
BFMA1I0III
|
||||
&
|
||||
~
|
||||
PSLVERR
|
||||
)
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
HRESP
|
||||
=
|
||||
BFMA1OlIII
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
PSEL
|
||||
=
|
||||
BFMA1IlIII
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
PADDR
|
||||
=
|
||||
BFMA1llIII
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
PWRITE
|
||||
=
|
||||
BFMA1O0III
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
PENABLE
|
||||
=
|
||||
BFMA1I0III
|
||||
;
|
||||
assign
|
||||
#
|
||||
TPD
|
||||
PWDATA
|
||||
=
|
||||
BFMA1O1III
|
||||
;
|
||||
endmodule
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,788 @@
|
||||
`timescale 1ns/100ps
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
// Revision Information:
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 6419 $
|
||||
// SVN $Date: 2009-02-04 04:34:22 -0800 (Wed, 04 Feb 2009) $
|
||||
module
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_BFM_APB2APB
|
||||
(
|
||||
PCLK_PM
|
||||
,
|
||||
PRESETN_PM
|
||||
,
|
||||
PADDR_PM
|
||||
,
|
||||
PWRITE_PM
|
||||
,
|
||||
PENABLE_PM
|
||||
,
|
||||
PWDATA_PM
|
||||
,
|
||||
PRDATA_PM
|
||||
,
|
||||
PREADY_PM
|
||||
,
|
||||
PSLVERR_PM
|
||||
,
|
||||
PCLK_SC
|
||||
,
|
||||
PSEL_SC
|
||||
,
|
||||
PADDR_SC
|
||||
,
|
||||
PWRITE_SC
|
||||
,
|
||||
PENABLE_SC
|
||||
,
|
||||
PWDATA_SC
|
||||
,
|
||||
PRDATA_SC
|
||||
,
|
||||
PREADY_SC
|
||||
,
|
||||
PSLVERR_SC
|
||||
)
|
||||
;
|
||||
parameter
|
||||
[
|
||||
9
|
||||
:
|
||||
0
|
||||
]
|
||||
TPD
|
||||
=
|
||||
1
|
||||
;
|
||||
localparam
|
||||
BFMA1Il1
|
||||
=
|
||||
TPD
|
||||
*
|
||||
1
|
||||
;
|
||||
input
|
||||
PCLK_PM
|
||||
;
|
||||
input
|
||||
PRESETN_PM
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PADDR_PM
|
||||
;
|
||||
input
|
||||
PWRITE_PM
|
||||
;
|
||||
input
|
||||
PENABLE_PM
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PWDATA_PM
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PRDATA_PM
|
||||
;
|
||||
reg
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PRDATA_PM
|
||||
;
|
||||
output
|
||||
PREADY_PM
|
||||
;
|
||||
reg
|
||||
PREADY_PM
|
||||
;
|
||||
output
|
||||
PSLVERR_PM
|
||||
;
|
||||
reg
|
||||
PSLVERR_PM
|
||||
;
|
||||
input
|
||||
PCLK_SC
|
||||
;
|
||||
output
|
||||
[
|
||||
15
|
||||
:
|
||||
0
|
||||
]
|
||||
PSEL_SC
|
||||
;
|
||||
wire
|
||||
[
|
||||
15
|
||||
:
|
||||
0
|
||||
]
|
||||
#
|
||||
BFMA1Il1
|
||||
PSEL_SC
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PADDR_SC
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
#
|
||||
BFMA1Il1
|
||||
PADDR_SC
|
||||
;
|
||||
output
|
||||
PWRITE_SC
|
||||
;
|
||||
wire
|
||||
#
|
||||
BFMA1Il1
|
||||
PWRITE_SC
|
||||
;
|
||||
output
|
||||
PENABLE_SC
|
||||
;
|
||||
wire
|
||||
#
|
||||
BFMA1Il1
|
||||
PENABLE_SC
|
||||
;
|
||||
output
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PWDATA_SC
|
||||
;
|
||||
wire
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
#
|
||||
BFMA1Il1
|
||||
PWDATA_SC
|
||||
;
|
||||
input
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
PRDATA_SC
|
||||
;
|
||||
input
|
||||
PREADY_SC
|
||||
;
|
||||
input
|
||||
PSLVERR_SC
|
||||
;
|
||||
parameter
|
||||
[
|
||||
0
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1OOlII
|
||||
=
|
||||
0
|
||||
;
|
||||
parameter
|
||||
[
|
||||
0
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IOlII
|
||||
=
|
||||
1
|
||||
;
|
||||
reg
|
||||
[
|
||||
0
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1lOlII
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1OOIII
|
||||
=
|
||||
0
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1OIlII
|
||||
=
|
||||
1
|
||||
;
|
||||
parameter
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IOIII
|
||||
=
|
||||
2
|
||||
;
|
||||
reg
|
||||
[
|
||||
1
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IIlII
|
||||
;
|
||||
reg
|
||||
[
|
||||
15
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1IlIII
|
||||
;
|
||||
reg
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1llIII
|
||||
;
|
||||
reg
|
||||
BFMA1O0III
|
||||
;
|
||||
reg
|
||||
BFMA1I0III
|
||||
;
|
||||
reg
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1l0III
|
||||
;
|
||||
reg
|
||||
BFMA1l1III
|
||||
;
|
||||
reg
|
||||
[
|
||||
31
|
||||
:
|
||||
0
|
||||
]
|
||||
BFMA1lIlII
|
||||
;
|
||||
reg
|
||||
BFMA1OllII
|
||||
;
|
||||
reg
|
||||
BFMA1IllII
|
||||
;
|
||||
reg
|
||||
BFMA1lllII
|
||||
;
|
||||
reg
|
||||
BFMA1O0lII
|
||||
;
|
||||
always
|
||||
@
|
||||
(
|
||||
posedge
|
||||
PCLK_PM
|
||||
or
|
||||
negedge
|
||||
PRESETN_PM
|
||||
)
|
||||
begin
|
||||
if
|
||||
(
|
||||
PRESETN_PM
|
||||
==
|
||||
1
|
||||
'b
|
||||
0
|
||||
)
|
||||
begin
|
||||
BFMA1lOlII
|
||||
<=
|
||||
BFMA1OOlII
|
||||
;
|
||||
BFMA1lllII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
PREADY_PM
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
PSLVERR_PM
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
PRDATA_PM
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1IllII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
end
|
||||
else
|
||||
begin
|
||||
PREADY_PM
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1IllII
|
||||
<=
|
||||
PENABLE_PM
|
||||
;
|
||||
case
|
||||
(
|
||||
BFMA1lOlII
|
||||
)
|
||||
BFMA1OOlII
|
||||
:
|
||||
begin
|
||||
if
|
||||
(
|
||||
PENABLE_PM
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
&
|
||||
BFMA1IllII
|
||||
==
|
||||
1
|
||||
'b
|
||||
0
|
||||
)
|
||||
begin
|
||||
BFMA1lllII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1lOlII
|
||||
<=
|
||||
BFMA1IOlII
|
||||
;
|
||||
end
|
||||
end
|
||||
BFMA1IOlII
|
||||
:
|
||||
begin
|
||||
if
|
||||
(
|
||||
BFMA1O0lII
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1lOlII
|
||||
<=
|
||||
BFMA1OOlII
|
||||
;
|
||||
BFMA1lllII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
PREADY_PM
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
PSLVERR_PM
|
||||
<=
|
||||
BFMA1OllII
|
||||
;
|
||||
PRDATA_PM
|
||||
<=
|
||||
BFMA1lIlII
|
||||
;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
always
|
||||
@
|
||||
(
|
||||
posedge
|
||||
PCLK_SC
|
||||
or
|
||||
negedge
|
||||
BFMA1lllII
|
||||
)
|
||||
begin
|
||||
if
|
||||
(
|
||||
BFMA1lllII
|
||||
==
|
||||
1
|
||||
'b
|
||||
0
|
||||
)
|
||||
begin
|
||||
BFMA1IIlII
|
||||
<=
|
||||
BFMA1OOIII
|
||||
;
|
||||
BFMA1O0lII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1lIlII
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1OllII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1llIII
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1l0III
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1O0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
end
|
||||
else
|
||||
begin
|
||||
case
|
||||
(
|
||||
BFMA1IIlII
|
||||
)
|
||||
BFMA1OOIII
|
||||
:
|
||||
begin
|
||||
BFMA1IIlII
|
||||
<=
|
||||
BFMA1OIlII
|
||||
;
|
||||
BFMA1llIII
|
||||
<=
|
||||
PADDR_PM
|
||||
;
|
||||
BFMA1l0III
|
||||
<=
|
||||
PWDATA_PM
|
||||
;
|
||||
BFMA1O0III
|
||||
<=
|
||||
PWRITE_PM
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1O0lII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
end
|
||||
BFMA1OIlII
|
||||
:
|
||||
begin
|
||||
BFMA1IIlII
|
||||
<=
|
||||
BFMA1IOIII
|
||||
;
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
end
|
||||
BFMA1IOIII
|
||||
:
|
||||
begin
|
||||
if
|
||||
(
|
||||
PREADY_SC
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1O0lII
|
||||
<=
|
||||
1
|
||||
'b
|
||||
1
|
||||
;
|
||||
BFMA1lIlII
|
||||
<=
|
||||
PRDATA_SC
|
||||
;
|
||||
BFMA1OllII
|
||||
<=
|
||||
PSLVERR_SC
|
||||
;
|
||||
BFMA1l1III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1I0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
BFMA1llIII
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1l0III
|
||||
<=
|
||||
{
|
||||
32
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
BFMA1O0III
|
||||
<=
|
||||
1
|
||||
'b
|
||||
0
|
||||
;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
always
|
||||
@
|
||||
(
|
||||
BFMA1llIII
|
||||
or
|
||||
BFMA1l1III
|
||||
)
|
||||
begin
|
||||
BFMA1IlIII
|
||||
<=
|
||||
{
|
||||
16
|
||||
{
|
||||
1
|
||||
'b
|
||||
0
|
||||
}
|
||||
}
|
||||
;
|
||||
if
|
||||
(
|
||||
BFMA1l1III
|
||||
==
|
||||
1
|
||||
'b
|
||||
1
|
||||
)
|
||||
begin
|
||||
begin
|
||||
:
|
||||
BFMA1I0lII
|
||||
integer
|
||||
BFMA1I0I0
|
||||
;
|
||||
for
|
||||
(
|
||||
BFMA1I0I0
|
||||
=
|
||||
0
|
||||
;
|
||||
BFMA1I0I0
|
||||
<=
|
||||
15
|
||||
;
|
||||
BFMA1I0I0
|
||||
=
|
||||
BFMA1I0I0
|
||||
+
|
||||
1
|
||||
)
|
||||
begin
|
||||
BFMA1IlIII
|
||||
[
|
||||
BFMA1I0I0
|
||||
]
|
||||
<=
|
||||
(
|
||||
BFMA1llIII
|
||||
[
|
||||
27
|
||||
:
|
||||
24
|
||||
]
|
||||
==
|
||||
BFMA1I0I0
|
||||
)
|
||||
;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
assign
|
||||
PSEL_SC
|
||||
=
|
||||
BFMA1IlIII
|
||||
;
|
||||
assign
|
||||
PADDR_SC
|
||||
=
|
||||
BFMA1llIII
|
||||
;
|
||||
assign
|
||||
PWRITE_SC
|
||||
=
|
||||
BFMA1O0III
|
||||
;
|
||||
assign
|
||||
PENABLE_SC
|
||||
=
|
||||
BFMA1I0III
|
||||
;
|
||||
assign
|
||||
PWDATA_SC
|
||||
=
|
||||
BFMA1l0III
|
||||
;
|
||||
endmodule
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,338 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: CoreUART/ CoreUARTapb UART core
|
||||
//
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// Jun09 Revision 4.1
|
||||
// Aug10 Revision 4.2
|
||||
//
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 8508 $
|
||||
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
// 20741 2Sep10 AS Increased baud rate by ensuring fifo ctrl runs off
|
||||
// sys clk (not baud clock). See note below.
|
||||
//
|
||||
// Notes:
|
||||
// best viewed with tabstops set to "4"
|
||||
|
||||
`define false 1'b 0
|
||||
`define FALSE 1'b 0
|
||||
`define true 1'b 1
|
||||
`define TRUE 1'b 1
|
||||
|
||||
|
||||
`timescale 1 ns / 1 ns // timescale for following modules
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_Clock_gen (clk,
|
||||
reset_n,
|
||||
baud_val,
|
||||
baud_clock,
|
||||
xmit_pulse,
|
||||
BAUD_VAL_FRACTION);
|
||||
|
||||
parameter BAUD_VAL_FRCTN_EN = 0;
|
||||
parameter SYNC_RESET = 0;
|
||||
|
||||
input clk; // system clock
|
||||
input reset_n; // active low async reset
|
||||
input [12:0] baud_val; // value loaded into cntr
|
||||
input [2:0] BAUD_VAL_FRACTION; // used to modify baud value when BAUD_VAL_FRCTN_EN = 1
|
||||
output baud_clock; // 16x baud clock pulse
|
||||
output xmit_pulse;
|
||||
// transmit pulse
|
||||
wire baud_clock;
|
||||
wire xmit_pulse;
|
||||
reg [12:0] baud_cntr; // 16x clock division counter reg.
|
||||
reg baud_clock_int; // internal 16x baud clock pulse
|
||||
reg xmit_clock;
|
||||
|
||||
// ------------------------------------------------
|
||||
// generate a x16 baud clock pulse
|
||||
// ------------------------------------------------
|
||||
reg [3:0] xmit_cntr; // baud tx counter reg.
|
||||
|
||||
// ------------------------------------------------
|
||||
// Sync/Async Reset Mode
|
||||
// ------------------------------------------------
|
||||
wire aresetn;
|
||||
wire sresetn;
|
||||
assign aresetn = (SYNC_RESET==1) ? 1'b1 : reset_n;
|
||||
assign sresetn = (SYNC_RESET==1) ? reset_n : 1'b1;
|
||||
|
||||
generate
|
||||
if(BAUD_VAL_FRCTN_EN == 1'b1)
|
||||
begin
|
||||
// Add one cycle 1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8 of the time by freezing
|
||||
// baud_cntr for one cycle when count reaches 0 for certain xmit_cntr values.
|
||||
// xmit_cntr values are identifed by looking for bits of this counter
|
||||
// being certain combinations.
|
||||
reg baud_cntr_one;
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
baud_cntr_one <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_cntr == 13'b0000000000001)
|
||||
begin
|
||||
baud_cntr_one <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr_one <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_baud_cntr
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
baud_cntr <= 13'b0000000000000;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
case(BAUD_VAL_FRACTION)
|
||||
3'b000: begin
|
||||
if (baud_cntr === 13'b0000000000000) //0
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b 1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
3'b001: begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if ((xmit_cntr[2:0] == 3'b111) && (baud_cntr_one == 1'b1)) //0.125
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
3'b010:begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if ((xmit_cntr[1:0] == 2'b11) && (baud_cntr_one == 1'b1)) //0.25
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
3'b011: begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if ((((xmit_cntr[2] == 1'b1) || (xmit_cntr[1] == 1'b1)) && (xmit_cntr[0] == 1'b1)) && (baud_cntr_one == 1'b1)) //0.375
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
3'b100: begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if ((xmit_cntr[0] == 1'b1) && (baud_cntr_one == 1'b1)) //0.5
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
3'b101: begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if ((((xmit_cntr[2] == 1'b1) && (xmit_cntr[1] == 1'b1)) || (xmit_cntr[0] == 1'b1)) && (baud_cntr_one == 1'b1)) //0.625
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
3'b110: begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if (((xmit_cntr[1] == 1'b1) || (xmit_cntr[0] == 1'b1)) && (baud_cntr_one == 1'b1)) //0.75
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
3'b111: begin
|
||||
if (baud_cntr == 13'b0000000000000)
|
||||
begin
|
||||
if ((((xmit_cntr[1] == 1'b1) || (xmit_cntr[0] == 1'b1)) || (xmit_cntr[2:0] == 3'b100)) && (baud_cntr_one == 1'b1)) //0.875
|
||||
begin
|
||||
baud_cntr <= baud_cntr;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
default: begin
|
||||
if (baud_cntr === 13'b0000000000000)
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b 1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
else if(BAUD_VAL_FRCTN_EN == 1'b0)
|
||||
begin
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_baud_cntr
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
baud_cntr <= 13'b0000000000000;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_cntr === 13'b0000000000000)
|
||||
begin
|
||||
baud_cntr <= baud_val;
|
||||
baud_clock_int <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
baud_cntr <= baud_cntr - 1'b 1;
|
||||
baud_clock_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
|
||||
// --------------------------------------------------
|
||||
// generate a transmit clock pulse
|
||||
// --------------------------------------------------
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_xmit_clock
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
xmit_cntr <= 4'b 0000;
|
||||
xmit_clock <= 1'b 0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock_int === 1'b 1)
|
||||
begin
|
||||
xmit_cntr <= xmit_cntr + 1'b 1;
|
||||
if (xmit_cntr === 4'b 1111)
|
||||
begin
|
||||
xmit_clock <= 1'b 1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_clock <= 1'b 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign xmit_pulse = xmit_clock & baud_clock_int;
|
||||
assign baud_clock = baud_clock_int;
|
||||
|
||||
endmodule // module CoreUARTapb_0_CoreUARTapb_0_0_Clock_gen
|
||||
|
||||
@@ -0,0 +1,494 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: COREUART/ CoreUARTapb UART core
|
||||
//
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// Jun09 Revision 4.1
|
||||
// Aug10 Revision 4.2
|
||||
//
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 8508 $
|
||||
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
// 20741 2Sep10 AS Increased baud rate by ensuring fifo ctrl runs off
|
||||
// sys clk (not baud clock). See note below.
|
||||
//
|
||||
// Notes:
|
||||
// best viewed with tabstops set to "4"
|
||||
`timescale 1 ns / 1 ns // timescale for following modules
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_COREUART (RESET_N,
|
||||
CLK,
|
||||
WEN,
|
||||
OEN,
|
||||
CSN,
|
||||
DATA_IN,
|
||||
RX,
|
||||
BAUD_VAL,
|
||||
BIT8,
|
||||
PARITY_EN,
|
||||
ODD_N_EVEN,
|
||||
PARITY_ERR,
|
||||
OVERFLOW,
|
||||
TXRDY,
|
||||
RXRDY,
|
||||
DATA_OUT,
|
||||
TX,
|
||||
FRAMING_ERR,
|
||||
BAUD_VAL_FRACTION
|
||||
);
|
||||
// TX Parameters
|
||||
parameter TX_FIFO = 0; // 0=without tx fifo
|
||||
// 1=with tx fifo
|
||||
// RX Parameters
|
||||
parameter RX_FIFO = 0; // 0=without rx fifo
|
||||
// 1=with rx fifo
|
||||
parameter RX_LEGACY_MODE = 0;
|
||||
|
||||
// DEVICE FAMILY
|
||||
parameter FAMILY = 15;
|
||||
|
||||
//Baud Fraction Enable
|
||||
parameter BAUD_VAL_FRCTN_EN = 0; // 1 = enable baud fraction, 0 = disable baud fraction
|
||||
|
||||
// Sync/Async Parameter
|
||||
parameter SYNC_RESET = (FAMILY == 25) ? 1 : 0; // Sync/Async Resets selected by family parameter
|
||||
|
||||
input RESET_N;
|
||||
input CLK;
|
||||
input WEN;
|
||||
input OEN;
|
||||
input CSN;
|
||||
input [7:0] DATA_IN;
|
||||
input RX;
|
||||
input [12:0] BAUD_VAL;
|
||||
input BIT8; // if set to one 8 data bits otherwise 7 data bits
|
||||
input PARITY_EN; // if set to one parity is enabled otherwise disabled
|
||||
input ODD_N_EVEN; // if set to one odd parity otherwise even parity
|
||||
input [2:0] BAUD_VAL_FRACTION; // used to add extra precision to baud value when BAUD_VAL_FRCTN_EN = 1
|
||||
|
||||
output PARITY_ERR; // parity error indicator on recieved data
|
||||
output OVERFLOW; // receiver overflow
|
||||
output TXRDY; // transmit ready for another byte
|
||||
output RXRDY; // receiver has a byte ready
|
||||
output [7:0] DATA_OUT;
|
||||
output TX;
|
||||
output FRAMING_ERR;
|
||||
|
||||
// State name constant definitions
|
||||
`define S0 2'b00
|
||||
`define S1 2'b01
|
||||
`define S2 2'b10
|
||||
`define S3 2'b11
|
||||
|
||||
// Configuration bits
|
||||
// Status bits
|
||||
wire PARITY_ERR;
|
||||
wire FRAMING_ERR;
|
||||
wire OVERFLOW;
|
||||
wire overflow_legacy;
|
||||
wire TXRDY;
|
||||
reg RXRDY;
|
||||
wire receive_full;
|
||||
wire fifo_write_rx;
|
||||
wire fifo_write;
|
||||
reg [7:0] DATA_OUT;
|
||||
wire TX;
|
||||
wire xmit_pulse; // transmit pulse
|
||||
wire baud_clock; // 8x baud clock pulse
|
||||
wire rst_tx_empty; // reset transmit empty
|
||||
reg [7:0] tx_hold_reg; // transmit byte hold register
|
||||
wire [7:0] tx_dout_reg; // transmit byte hold register
|
||||
wire [7:0] rx_dout; // receive data out
|
||||
wire read_rx_byte; // read rx byte register
|
||||
|
||||
reg [7:0] rx_dout_reg; // receive data out
|
||||
wire [7:0] rx_byte; // receive byte register
|
||||
wire [7:0] rx_byte_in; // receive byte register
|
||||
wire fifo_empty_tx;
|
||||
wire fifo_empty_rx;
|
||||
reg fifo_read_rx;
|
||||
reg fifo_write_tx;
|
||||
wire fifo_read_tx;
|
||||
wire fifo_full_tx;
|
||||
wire fifo_full_rx;
|
||||
wire clear_parity;
|
||||
wire clear_framing_error;
|
||||
wire clear_parity_en;
|
||||
reg clear_parity_reg0;
|
||||
reg clear_parity_reg;
|
||||
// AS, added framing error self-clear mechanism (RX FIFO mode)
|
||||
wire clear_framing_error_en;
|
||||
reg clear_framing_error_reg0;
|
||||
reg clear_framing_error_reg;
|
||||
reg data_en;
|
||||
reg data_ready;
|
||||
|
||||
reg rx_dout_reg_empty;
|
||||
reg rx_dout_reg_empty_q;
|
||||
reg [1:0] rx_state;
|
||||
reg [1:0] next_rx_state;
|
||||
|
||||
// Added by AS, enable signal for sync'ing:
|
||||
wire stop_strobe;
|
||||
wire rx_idle;
|
||||
|
||||
reg overflow_reg;
|
||||
wire clear_overflow;
|
||||
|
||||
// TS, sync/async mode select
|
||||
wire aresetn;
|
||||
wire sresetn;
|
||||
assign aresetn = (SYNC_RESET==1) ? 1'b1 : RESET_N;
|
||||
assign sresetn = (SYNC_RESET==1) ? RESET_N : 1'b1;
|
||||
// ----------------------------------------------------------------------------
|
||||
// Transmit related code
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin : reg_write
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
tx_hold_reg <= {8{1'b0}};
|
||||
fifo_write_tx <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
fifo_write_tx <= 1'b1;
|
||||
if (CSN == 1'b0 & WEN == 1'b0)
|
||||
begin
|
||||
tx_hold_reg <= DATA_IN;
|
||||
fifo_write_tx <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign rst_tx_empty = WEN == 1'b0 & CSN == 1'b0 ? 1'b1 : 1'b0;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Receive related code
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Added by Hari
|
||||
// Modified Sep 2006, ROK
|
||||
always @(rx_byte or rx_dout_reg or PARITY_ERR)
|
||||
begin
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
DATA_OUT = rx_byte;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (PARITY_ERR == 1'b1)
|
||||
begin
|
||||
DATA_OUT = rx_byte;
|
||||
end
|
||||
else
|
||||
begin
|
||||
DATA_OUT = rx_dout_reg;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign read_rx_byte = (RX_FIFO == 1'b0) ? ((CSN == 1'b0 & OEN == 1'b0) ? 1'b1 : 1'b0) : !fifo_full_rx;
|
||||
|
||||
assign clear_parity = (RX_FIFO == 1'b0) ?
|
||||
((CSN == 1'b0 & OEN == 1'b0) ? 1'b1 : 1'b0) : clear_parity_reg;
|
||||
|
||||
//assign clear_framing_error = (RX_FIFO == 1'b0) ? ((CSN == 1'b0 & OEN == 1'b0) ? 1'b1 : 1'b0) : clear_framing_error_reg;
|
||||
assign clear_framing_error = (RX_FIFO == 1'b0) ? ((CSN == 1'b0 & OEN == 1'b0) ? 1'b1 : 1'b0) :((CSN == 1'b0 & OEN == 1'b0) ? 1'b1 : clear_framing_error_reg) ;
|
||||
|
||||
assign clear_overflow = (CSN == 1'b0 & OEN == 1'b0) ? 1'b1 : 1'b0;
|
||||
|
||||
assign rx_byte_in = (PARITY_ERR == 1'b0) ? rx_byte : 8'b0;
|
||||
|
||||
generate
|
||||
if (RX_LEGACY_MODE == 1'b1)
|
||||
begin
|
||||
always @ (receive_full or rx_dout_reg_empty)
|
||||
begin
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
RXRDY = receive_full;
|
||||
end
|
||||
else
|
||||
begin
|
||||
RXRDY = !rx_dout_reg_empty;
|
||||
end
|
||||
end
|
||||
end
|
||||
else // sync to stop_strobe (stop bit and framing error)
|
||||
begin
|
||||
// always @ (receive_full or rx_dout_reg_empty or stop_strobe)
|
||||
always @ (posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn)) begin
|
||||
RXRDY <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
if (stop_strobe == 1'b1 || receive_full == 1'b0)
|
||||
begin
|
||||
RXRDY <= receive_full;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
// AS: filter out single clock cycle empty flag (might just be reading
|
||||
// from fifo, waiting for next data byte
|
||||
|
||||
// if (stop_strobe == 1'b1 || (rx_dout_reg_empty == 1'b1))
|
||||
if (stop_strobe == 1'b1 || (rx_dout_reg_empty == 1'b1) || ((rx_dout_reg_empty == 1'b0) && (rx_idle == 1'b1 || RX_FIFO==1)))
|
||||
begin
|
||||
RXRDY <= !rx_dout_reg_empty;
|
||||
end
|
||||
end
|
||||
end
|
||||
end // end process
|
||||
end // RX_LEGACY_MODE == 0
|
||||
endgenerate
|
||||
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
clear_parity_reg <= 1'b0;
|
||||
clear_parity_reg0 <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
clear_parity_reg0 <= clear_parity_en;
|
||||
clear_parity_reg <= clear_parity_reg0;
|
||||
end
|
||||
end
|
||||
|
||||
// AS: added self-clearing framing error
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
clear_framing_error_reg <= 1'b0;
|
||||
clear_framing_error_reg0 <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
clear_framing_error_reg0 <= clear_framing_error_en;
|
||||
clear_framing_error_reg <= clear_framing_error_reg0;
|
||||
end
|
||||
end
|
||||
|
||||
// state machine to control reading from the rx fifo
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
rx_state <= `S0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
rx_state <= next_rx_state;
|
||||
end
|
||||
end
|
||||
|
||||
always @(rx_state, rx_dout_reg_empty, fifo_empty_rx)
|
||||
begin
|
||||
next_rx_state = rx_state;
|
||||
fifo_read_rx = 1'b1;
|
||||
data_en = 1'b0;
|
||||
|
||||
case (rx_state)
|
||||
`S0 : if (rx_dout_reg_empty == 1'b1 && fifo_empty_rx == 1'b0)
|
||||
begin
|
||||
next_rx_state = `S1;
|
||||
fifo_read_rx = 1'b0; // active low
|
||||
end
|
||||
`S1 : next_rx_state = `S2;
|
||||
`S2 : next_rx_state = `S3;
|
||||
`S3 : begin
|
||||
next_rx_state = `S0;
|
||||
data_en = 1'b1;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
rx_dout_reg <= {8{1'b0}};
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (data_en == 1'b1)
|
||||
begin
|
||||
rx_dout_reg <= rx_dout;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
rx_dout_reg_empty <= 1'b1;
|
||||
rx_dout_reg_empty_q <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (data_en == 1'b1)
|
||||
begin
|
||||
rx_dout_reg_empty <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (CSN == 1'b0 && OEN == 1'b0)
|
||||
begin
|
||||
if(RX_FIFO == 1)
|
||||
begin
|
||||
if(!PARITY_ERR)
|
||||
begin
|
||||
rx_dout_reg_empty <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
rx_dout_reg_empty <= 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
rx_dout_reg_empty_q <= rx_dout_reg_empty;
|
||||
end
|
||||
end
|
||||
|
||||
// AS: Added OVERFLOW logic (see below)
|
||||
always @(posedge CLK or negedge aresetn)
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
overflow_reg <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// Note: received byte will happen before OVERFLOW clear
|
||||
if (fifo_write == 1'b0 && fifo_full_rx == 1'b1)
|
||||
overflow_reg <= 1'b1;
|
||||
else if (clear_overflow == 1'b1)
|
||||
overflow_reg <= 1'b0;
|
||||
else
|
||||
overflow_reg <= overflow_reg;
|
||||
end
|
||||
end
|
||||
|
||||
// AS: Changed OVERFLOW condition
|
||||
// - We should not be assigning OVERFLOW to FIFO_FULL;
|
||||
// instead, we should be asserting OVERFLOW if a write is
|
||||
// requested while fifo_full_rx is high
|
||||
//assign OVERFLOW = (RX_FIFO == 1'b0) ? overflow_legacy : fifo_full_rx;
|
||||
assign OVERFLOW = (RX_FIFO == 1'b0) ? overflow_legacy : overflow_reg;
|
||||
|
||||
// AS: 16Jun09
|
||||
// Added FRAMING_ERR to write condition for RX FIFO (removed)
|
||||
// AS: 24Jun09
|
||||
// Added OVERFLOW error condition: don't write when OVERFLOW is asserted
|
||||
assign fifo_write_rx = ((PARITY_ERR == 1'b1) || fifo_full_rx == 1'b1) ? 1'b1 : fifo_write;
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// COMPONENT DECLARATIONS
|
||||
// ---------------------------------------------------------
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_Clock_gen #(.BAUD_VAL_FRCTN_EN(BAUD_VAL_FRCTN_EN),
|
||||
.SYNC_RESET(SYNC_RESET)
|
||||
) make_CLOCK_GEN ( .clk(CLK),
|
||||
.reset_n(RESET_N),
|
||||
.baud_val(BAUD_VAL),
|
||||
.baud_clock(baud_clock),
|
||||
.xmit_pulse(xmit_pulse),
|
||||
.BAUD_VAL_FRACTION(BAUD_VAL_FRACTION)
|
||||
);
|
||||
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_Tx_async #( .TX_FIFO(TX_FIFO),
|
||||
.SYNC_RESET(SYNC_RESET)
|
||||
) make_TX (.clk(CLK),
|
||||
.xmit_pulse(xmit_pulse),
|
||||
.reset_n(RESET_N),
|
||||
.rst_tx_empty(rst_tx_empty),
|
||||
.tx_hold_reg(tx_hold_reg),
|
||||
.tx_dout_reg(tx_dout_reg),
|
||||
.fifo_empty(fifo_empty_tx),
|
||||
.fifo_full(fifo_full_tx),
|
||||
.bit8(BIT8),
|
||||
.parity_en(PARITY_EN),
|
||||
.odd_n_even(ODD_N_EVEN),
|
||||
.txrdy(TXRDY),
|
||||
.tx(TX),
|
||||
.fifo_read_tx(fifo_read_tx)
|
||||
);
|
||||
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_Rx_async #( .RX_FIFO(RX_FIFO),
|
||||
.SYNC_RESET(SYNC_RESET)
|
||||
) make_RX ( .clk(CLK),
|
||||
.baud_clock(baud_clock),
|
||||
.reset_n(RESET_N),
|
||||
.bit8(BIT8),
|
||||
.parity_en(PARITY_EN),
|
||||
.odd_n_even(ODD_N_EVEN),
|
||||
.read_rx_byte(read_rx_byte),
|
||||
.clear_parity(clear_parity),
|
||||
.framing_error(FRAMING_ERR),
|
||||
.clear_framing_error(clear_framing_error),
|
||||
.stop_strobe(stop_strobe),
|
||||
.rx_idle(rx_idle),
|
||||
.rx(RX),
|
||||
.overflow(overflow_legacy),
|
||||
.parity_err(PARITY_ERR),
|
||||
.clear_parity_en(clear_parity_en),
|
||||
.clear_framing_error_en(clear_framing_error_en),
|
||||
.receive_full(receive_full),
|
||||
.rx_byte(rx_byte),
|
||||
.fifo_write(fifo_write)
|
||||
);
|
||||
|
||||
|
||||
generate
|
||||
if (TX_FIFO == 1'b1)
|
||||
begin
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_fifo_256x8 #(.SYNC_RESET(SYNC_RESET)) tx_fifo (.DO(tx_dout_reg), .RCLOCK(CLK), .WCLOCK(CLK), .DI(tx_hold_reg), .WRB(fifo_write_tx), .RDB(fifo_read_tx),
|
||||
.RESET(RESET_N), .FULL(fifo_full_tx), .EMPTY(fifo_empty_tx));
|
||||
end
|
||||
else
|
||||
begin
|
||||
assign fifo_full_tx = 1'b0;
|
||||
assign fifo_empty_tx = 1'b0;
|
||||
assign tx_dout_reg = 8'b0;
|
||||
end
|
||||
endgenerate
|
||||
|
||||
generate
|
||||
if (RX_FIFO == 1'b1)
|
||||
begin
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_fifo_256x8 #(.SYNC_RESET(SYNC_RESET)) rx_fifo (.DO(rx_dout), .RCLOCK(CLK), .WCLOCK(CLK), .DI(rx_byte_in), .WRB(fifo_write_rx), .RDB(fifo_read_rx),
|
||||
.RESET(RESET_N), .FULL(fifo_full_rx), .EMPTY(fifo_empty_rx));
|
||||
end
|
||||
else
|
||||
begin
|
||||
assign fifo_full_rx = 1'b0;
|
||||
assign fifo_empty_rx = 1'b0;
|
||||
assign rx_dout = 8'b0;
|
||||
end
|
||||
endgenerate
|
||||
|
||||
endmodule // module UART
|
||||
@@ -0,0 +1,360 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: COREUART/ CoreUARTapb UART core
|
||||
//
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// Jun09 Revision 4.1
|
||||
// Aug10 Revision 4.2
|
||||
//
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 8508 $
|
||||
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
// 20741 2Sep10 AS Increased baud rate by ensuring fifo ctrl runs off
|
||||
// sys clk (not baud clock). See note below.
|
||||
// 22093 4Sep10 AS Added PSLVERR and PREADY, missing APB3 signals
|
||||
// (unused)
|
||||
//
|
||||
// Notes:
|
||||
// best viewed with tabstops set to "4"
|
||||
//
|
||||
//
|
||||
//
|
||||
//==============================================================================
|
||||
// AMBA APB wrapped COREUART
|
||||
//
|
||||
// Three control registers and one status register are implemented in this file
|
||||
// i.e. at the wrapper level.
|
||||
// Transmit and receive data registers are located in the UART module which is
|
||||
// instantiated in this file.
|
||||
//
|
||||
// A separate word location is used for each (8-bit) register.
|
||||
//
|
||||
//
|
||||
// Address Map:
|
||||
//
|
||||
// Offset Register Name Read/Write Width
|
||||
// -------------------------------------------------------
|
||||
// 0x00 Transmit data (Write only) 8 bits
|
||||
// 0x04 Receive data (Read only) 8 bits
|
||||
// 0x08 Control Register 1 (R/W) 8 bits
|
||||
// 0x0C Control Register 2 (R/W) 8 bits
|
||||
// 0x10 Status Register (Read Only) 4 bits
|
||||
// 0x14 Control Register 3 (R/W) 3 bits
|
||||
//==============================================================================
|
||||
|
||||
`timescale 1 ns / 1 ns
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_CoreUARTapb (
|
||||
// APB interface
|
||||
PCLK,
|
||||
PRESETN,
|
||||
PADDR,
|
||||
PSEL,
|
||||
PENABLE,
|
||||
PWRITE,
|
||||
PWDATA,
|
||||
PRDATA,
|
||||
// AS: Added PREADY and PSLVERR
|
||||
PREADY,
|
||||
PSLVERR,
|
||||
// transmit-ready and receive-full indicators
|
||||
TXRDY,
|
||||
RXRDY,
|
||||
// Flags
|
||||
PARITY_ERR,
|
||||
FRAMING_ERR,
|
||||
OVERFLOW,
|
||||
// Serial receive and transmit
|
||||
RX,
|
||||
TX
|
||||
);
|
||||
|
||||
// DEVICE FAMILY
|
||||
parameter FAMILY = 15;
|
||||
|
||||
// UART configuration parameters
|
||||
parameter TX_FIFO = 0; // 1 = with tx fifo, 0 = without tx fifo
|
||||
parameter RX_FIFO = 0; // 1 = with rx fifo, 0 = without rx fifo
|
||||
parameter BAUD_VALUE = 0; // Baud value is set only when fixed buad rate is selected
|
||||
parameter FIXEDMODE = 0; // fixed or programmable mode, 0: programmable; 1:fixed
|
||||
|
||||
parameter PRG_BIT8 = 0; // This bit value is selected only when FIXEDMODE is set to 1
|
||||
parameter PRG_PARITY = 0; // This bit value is selected only when FIXEDMODE is set to 1
|
||||
parameter RX_LEGACY_MODE = 0; // legacy mode for RXRDY signal operation
|
||||
parameter BAUD_VAL_FRCTN = 0; // 0 = +0.0, 1 = +0.125, 2 = +0.25, 3 = +0.375, 4 = +0.5, 5 = +0.625, 6 = +0.75, 7 = +0.875,
|
||||
parameter BAUD_VAL_FRCTN_EN = 0; // 1 = enable baudval fraction, 0 = disable baudval fraction
|
||||
parameter SYNC_RESET = (FAMILY == 25) ? 1 : 0; // Sync/Async Resets selected by family parameter
|
||||
|
||||
// Inputs and Outputs
|
||||
// APB signals
|
||||
input PCLK; // APB system clock
|
||||
input PRESETN; // APB system reset
|
||||
input [4:0] PADDR; // Address
|
||||
input PSEL; // Peripheral select signal
|
||||
input PENABLE; // Enable (data valid strobe)
|
||||
input PWRITE; // Write/nRead signal
|
||||
input [7:0] PWDATA; // 8 bit write data
|
||||
output [7:0] PRDATA; // 8 bit read data
|
||||
|
||||
output PREADY;
|
||||
output PSLVERR;
|
||||
// transmit ready and receive full indicators
|
||||
output TXRDY;
|
||||
output RXRDY;
|
||||
// Serial receive and transmit data
|
||||
input RX;
|
||||
output TX;
|
||||
// FLAGS
|
||||
output FRAMING_ERR;
|
||||
output PARITY_ERR;
|
||||
output OVERFLOW;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Constant declarations
|
||||
//----------------------------------------------------------------------
|
||||
`define UARTTXDATAA 3'b000
|
||||
`define UARTRXDATAA 3'b001
|
||||
`define UARTCTRLREG1A 3'b010
|
||||
`define UARTCTRLREG2A 3'b011
|
||||
`define UARTSTATUSREGA 3'b100
|
||||
`define UARTCTRLREG3A 3'b101
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Signal declarations
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// I/O signals
|
||||
wire PCLK;
|
||||
wire PRESETN;
|
||||
wire [4:0] PADDR;
|
||||
wire PSEL;
|
||||
wire PENABLE;
|
||||
wire PWRITE;
|
||||
wire [7:0] PWDATA;
|
||||
wire [7:0] PRDATA;
|
||||
wire TXRDY;
|
||||
wire RXRDY;
|
||||
wire RX;
|
||||
wire TX;
|
||||
|
||||
wire PREADY;
|
||||
wire PSLVERR;
|
||||
|
||||
// Internal signals
|
||||
reg [7:0] controlReg1;
|
||||
reg [7:0] controlReg2;
|
||||
reg [2:0] controlReg3;
|
||||
reg [7:0] NxtPrdata;
|
||||
reg [7:0] iPRDATA;
|
||||
wire NxtPrdataEn; // valid read
|
||||
wire [7:0] data_in;
|
||||
wire [7:0] data_out;
|
||||
wire [12:0] baud_val;
|
||||
wire bit8;
|
||||
wire parity_en;
|
||||
wire odd_n_even;
|
||||
wire WEn;
|
||||
wire OEn;
|
||||
wire csn;
|
||||
wire OVERFLOW;
|
||||
wire PARITY_ERR;
|
||||
wire [1:0] gen_parity_en;
|
||||
wire prg_parity_en;
|
||||
wire prg_odd_even;
|
||||
wire FRAMING_ERR;
|
||||
wire [2:0] fixed_baudval_fraction;
|
||||
wire [2:0] baudval_fraction;
|
||||
wire aresetn;
|
||||
wire sresetn;
|
||||
assign aresetn = (SYNC_RESET==1) ? 1'b1 : PRESETN;
|
||||
assign sresetn = (SYNC_RESET==1) ? PRESETN : 1'b1;
|
||||
// AS: Added APB3 signals, tied off
|
||||
assign PREADY = 1'b1;
|
||||
assign PSLVERR = 1'b0;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Write enable, output enable and select signals for UART
|
||||
//----------------------------------------------------------------------
|
||||
// WEn only asserted (low) when writing transmit data
|
||||
assign WEn = !(PENABLE && PWRITE && (PADDR[4:2] == `UARTTXDATAA));
|
||||
// OEn only asserted (low) when reading received data
|
||||
assign OEn = !(PENABLE && !PWRITE && (PADDR[4:2] == `UARTRXDATAA));
|
||||
assign csn = !PSEL;
|
||||
|
||||
// data_in input to UART is used for transmit data
|
||||
assign data_in = PWDATA;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// APB read data
|
||||
//----------------------------------------------------------------------
|
||||
// NxtPrdataEn is asserted during the first cycle of a valid read
|
||||
assign NxtPrdataEn = (PSEL & !PWRITE & (!PENABLE || PARITY_ERR));
|
||||
|
||||
always @(PADDR or NxtPrdataEn or iPRDATA or data_out or controlReg1
|
||||
or controlReg2 or OVERFLOW or PARITY_ERR or RXRDY
|
||||
or TXRDY or FRAMING_ERR or controlReg3)
|
||||
begin : p_NxtPrdataComb
|
||||
if (NxtPrdataEn)
|
||||
case (PADDR[4:2])
|
||||
`UARTTXDATAA : NxtPrdata = 8'b0; // transmit data location reads as 0x00
|
||||
`UARTRXDATAA : NxtPrdata = data_out; // received data
|
||||
`UARTCTRLREG1A : NxtPrdata = controlReg1; // control reg 1 - baud value
|
||||
`UARTCTRLREG2A : NxtPrdata = controlReg2; // control reg 2 - bit8, parity_en, odd_n_even
|
||||
`UARTSTATUSREGA : NxtPrdata = {3'b0, FRAMING_ERR, OVERFLOW, PARITY_ERR, RXRDY, TXRDY}; // status register
|
||||
`UARTCTRLREG3A : NxtPrdata = {5'b0, controlReg3}; // control reg 3 - fractional part of baud value
|
||||
default : NxtPrdata = iPRDATA;
|
||||
endcase
|
||||
else
|
||||
NxtPrdata = iPRDATA;
|
||||
end // block: p_NxtPrdataComb
|
||||
|
||||
assign gen_parity_en = PRG_PARITY;
|
||||
|
||||
// AS, fixed 01DEC08:
|
||||
//assign prg_parity_en = (gen_parity_en == (2'd1 || 2'd2)) ? 1'b1 : 1'b0;
|
||||
assign prg_parity_en = (gen_parity_en == 2'd1 || gen_parity_en == 2'd2) ? 1'b1 : 1'b0;
|
||||
assign prg_odd_even = (gen_parity_en == 2'd1) ? 1'b1 : 1'b0;
|
||||
|
||||
// PRDATA output register
|
||||
always @ (posedge PCLK or negedge aresetn)
|
||||
begin : p_iPRDATASeq
|
||||
if ((!aresetn) || (!sresetn))
|
||||
iPRDATA <= 8'b0;
|
||||
else
|
||||
iPRDATA <= NxtPrdata;
|
||||
end // block: p_iPRDATASeq
|
||||
|
||||
// Drive output with internal version.
|
||||
assign PRDATA = ((RX_FIFO == 1) && (PARITY_ERR == 1'b1)) ? data_out : iPRDATA;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Control register 1
|
||||
// Holds 8-bit value to set baud rate.
|
||||
//----------------------------------------------------------------------
|
||||
always @(posedge PCLK or negedge aresetn)
|
||||
begin : p_CtrlReg1Seq
|
||||
if((!aresetn) || (!sresetn))
|
||||
controlReg1 <= 8'b0;
|
||||
else
|
||||
if (PSEL && PENABLE && PWRITE && (PADDR[4:2] == `UARTCTRLREG1A))
|
||||
controlReg1 <= PWDATA;
|
||||
else
|
||||
controlReg1 <= controlReg1;
|
||||
end // block: p_CtrlReg1Seq
|
||||
|
||||
assign baud_val = FIXEDMODE ? BAUD_VALUE:{controlReg2[7:3],controlReg1};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Control register 2
|
||||
// Contents as follows:
|
||||
// Bit 0: bit8 Data width is 8 bits when '1', 7 bits otherwise.
|
||||
// Bit 1: parity_en Parity enabled when '1'.
|
||||
// Bit 2: odd_n_even Odd parity when '1', even parity when '0'.
|
||||
// Bits 3 to 7: Unused.
|
||||
//----------------------------------------------------------------------
|
||||
always @(posedge PCLK or negedge aresetn)
|
||||
begin : p_CtrlReg2Seq
|
||||
if ((!aresetn) || (!sresetn))
|
||||
controlReg2 <= 8'b0;
|
||||
else
|
||||
if (PSEL && PENABLE && PWRITE && (PADDR[4:2] == `UARTCTRLREG2A))
|
||||
controlReg2 <= PWDATA[7:0];
|
||||
else
|
||||
controlReg2 <= controlReg2;
|
||||
end // block: p_CtrlReg2Seq
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Control register 3
|
||||
// Controls the fractional baud value as follows:
|
||||
// 000: Baud Value = baud_val + 0.0
|
||||
// 001: Baud Value = baud_val + 0.125
|
||||
// 010: Baud Value = baud_val + 0.25
|
||||
// 011: Baud Value = baud_val + 0.375
|
||||
// 100: Baud Value = baud_val + 0.5
|
||||
// 101: Baud Value = baud_val + 0.625
|
||||
// 110: Baud Value = baud_val + 0.75
|
||||
// 111: Baud Value = baud_val + 0.875
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
generate
|
||||
if(BAUD_VAL_FRCTN_EN == 1)
|
||||
begin
|
||||
always @(posedge PCLK or negedge aresetn)
|
||||
begin : p_CtrlReg3Seq
|
||||
if ((!aresetn) || (!sresetn))
|
||||
controlReg3 <= 3'b0;
|
||||
else
|
||||
if (PSEL && PENABLE && PWRITE && (PADDR[4:2] == `UARTCTRLREG3A))
|
||||
controlReg3 <= PWDATA[2:0];
|
||||
else
|
||||
controlReg3 <= controlReg3;
|
||||
end //block: p_CtrlReg3Seq
|
||||
end
|
||||
endgenerate
|
||||
|
||||
assign fixed_baudval_fraction = (BAUD_VAL_FRCTN == 0) ? 3'b000 :
|
||||
(BAUD_VAL_FRCTN == 1) ? 3'b001 :
|
||||
(BAUD_VAL_FRCTN == 2) ? 3'b010 :
|
||||
(BAUD_VAL_FRCTN == 3) ? 3'b011 :
|
||||
(BAUD_VAL_FRCTN == 4) ? 3'b100 :
|
||||
(BAUD_VAL_FRCTN == 5) ? 3'b101 :
|
||||
(BAUD_VAL_FRCTN == 6) ? 3'b110 :
|
||||
(BAUD_VAL_FRCTN == 7) ? 3'b111 : 3'b000;
|
||||
|
||||
assign bit8 = FIXEDMODE ? PRG_BIT8:controlReg2[0];
|
||||
assign parity_en = FIXEDMODE ? prg_parity_en:controlReg2[1];
|
||||
assign odd_n_even = FIXEDMODE ? prg_odd_even:controlReg2[2];
|
||||
assign baudval_fraction = FIXEDMODE ? fixed_baudval_fraction : BAUD_VAL_FRCTN_EN ? controlReg3 : 3'b000;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Instantiation of UART
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_COREUART
|
||||
#(
|
||||
.TX_FIFO (TX_FIFO),
|
||||
.RX_FIFO (RX_FIFO),
|
||||
.RX_LEGACY_MODE(RX_LEGACY_MODE),
|
||||
.BAUD_VAL_FRCTN_EN(BAUD_VAL_FRCTN_EN),
|
||||
.FAMILY(FAMILY)
|
||||
)
|
||||
|
||||
uUART (
|
||||
.RESET_N (PRESETN),
|
||||
.CLK (PCLK),
|
||||
.WEN (WEn),
|
||||
.OEN (OEn),
|
||||
.CSN (csn),
|
||||
.DATA_IN (data_in),
|
||||
.RX (RX),
|
||||
.BAUD_VAL (baud_val),
|
||||
.BIT8 (bit8),
|
||||
.PARITY_EN (parity_en),
|
||||
.ODD_N_EVEN (odd_n_even),
|
||||
.FRAMING_ERR (FRAMING_ERR),
|
||||
.PARITY_ERR (PARITY_ERR),
|
||||
.OVERFLOW (OVERFLOW),
|
||||
.TXRDY (TXRDY),
|
||||
.RXRDY (RXRDY),
|
||||
.DATA_OUT (data_out),
|
||||
.TX (TX),
|
||||
.BAUD_VAL_FRACTION (baudval_fraction)
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
// ============================== End ==========================================
|
||||
@@ -0,0 +1,588 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: CoreUART/ CoreUARTapb UART core
|
||||
//
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// Jun09 Revision 4.1
|
||||
// Aug10 Revision 4.2
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 8508 $
|
||||
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
// 20741 2Sep10 AS Increased baud rate by ensuring fifo ctrl runs off
|
||||
// sys clk (not baud clock). See note below.
|
||||
//
|
||||
// Notes:
|
||||
// best viewed with tabstops set to "4"
|
||||
`timescale 1 ns / 1 ns // timescale for following modules
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_Rx_async (clk,
|
||||
baud_clock,
|
||||
reset_n,
|
||||
bit8,
|
||||
parity_en,
|
||||
odd_n_even,
|
||||
read_rx_byte,
|
||||
clear_parity,
|
||||
rx,
|
||||
overflow,
|
||||
parity_err,
|
||||
clear_parity_en,
|
||||
receive_full,
|
||||
rx_byte,
|
||||
fifo_write,
|
||||
framing_error,
|
||||
clear_framing_error,
|
||||
clear_framing_error_en,
|
||||
stop_strobe,
|
||||
rx_idle
|
||||
);
|
||||
|
||||
parameter SYNC_RESET = 0;
|
||||
// RX Parameters
|
||||
parameter RX_FIFO = 0; // 0=without rx fifo, 1=with rx fifo
|
||||
|
||||
// TYPE receive_states:
|
||||
parameter receive_states_rx_idle = 0;
|
||||
parameter receive_states_rx_data_bits = 1;
|
||||
parameter receive_states_rx_stop_bit = 2;
|
||||
parameter receive_states_rx_wait_state = 3;
|
||||
|
||||
input clk; // system clock
|
||||
input baud_clock; // 8x baud clock pulse
|
||||
input reset_n; // active low async reset
|
||||
input bit8; // if set to one 8 data bits otherwise 7 data bits
|
||||
input parity_en; // if set to one parity is enabled otherwise disabled
|
||||
input odd_n_even; // if set to one odd parity otherwise even parity
|
||||
input read_rx_byte; // read rx byte register
|
||||
input clear_parity; // clear parity error
|
||||
input clear_framing_error; // clear framing error signal (AS)
|
||||
input rx;
|
||||
output overflow; // receiver overflow
|
||||
output parity_err; // parity error indicator on recieved data
|
||||
output clear_parity_en; // clear parity error enable
|
||||
output receive_full; // receiver has a byte ready
|
||||
output [7:0] rx_byte;
|
||||
output fifo_write;
|
||||
output framing_error; // stop bit not detected flag (AS)
|
||||
output clear_framing_error_en; // clear framing error enable (AS)
|
||||
output stop_strobe; // stop bit strobe (for RX legacy mode) (AS)
|
||||
// AS: added idle wire for framing_err assigmnet using
|
||||
// stop_strobe
|
||||
output rx_idle;
|
||||
reg framing_error; // stop bit not detected flag (AS)
|
||||
reg stop_strobe; // stop bit strobe (for RX legacy mode) (AS)
|
||||
reg overflow;
|
||||
reg parity_err;
|
||||
reg fifo_write;
|
||||
// receive byte register
|
||||
wire receive_full;
|
||||
reg [7:0] rx_byte;
|
||||
reg [1:0] rx_state; // receive state machine
|
||||
reg [3:0] receive_count; // counts bits received
|
||||
reg rx_filtered; // filtered rx data
|
||||
reg [8:0] rx_shift; // receive shift register
|
||||
reg rx_parity_calc; // received parity, calculated
|
||||
reg [3:0] rx_bit_cnt; // count of received bits
|
||||
reg receive_full_int; // receiver has a byte ready
|
||||
reg [2:0] samples;
|
||||
reg overflow_int;
|
||||
reg framing_error_int; // internal framing error bit (AS)
|
||||
reg clear_parity_en;
|
||||
reg clear_framing_error_en; // clear framing error enable (AS)
|
||||
reg [3:0] last_bit;
|
||||
|
||||
wire [1:0] shift_choice;
|
||||
wire [1:0] parity_choice;
|
||||
// ----------------------------------------------------------------------------
|
||||
wire aresetn;
|
||||
wire sresetn;
|
||||
assign aresetn = (SYNC_RESET==1) ? 1'b1 : reset_n;
|
||||
assign sresetn = (SYNC_RESET==1) ? reset_n : 1'b1;
|
||||
|
||||
|
||||
// filter the receive data
|
||||
// ----------------------------------------------------------------------------
|
||||
// The receive data filter is a simple majority voter that accepts three
|
||||
// samples of the "raw" data and reports the most populus result. This
|
||||
// provides a simple single-cycle glitch filter.
|
||||
// This input needs to go to both the state machine start bit detector as
|
||||
// well as the data shift register as this filter introduces a three-clock
|
||||
// delay and we need to keep the phases lined up.
|
||||
//
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : majority
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
samples <= 3'b111;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock == 1'b1)
|
||||
begin
|
||||
samples[1:0] <= samples[2:1];
|
||||
samples[2] <= rx;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// our voter
|
||||
always @(samples)
|
||||
begin
|
||||
case (samples)
|
||||
3'b000:
|
||||
begin
|
||||
rx_filtered <= 1'b0;
|
||||
end
|
||||
3'b001:
|
||||
begin
|
||||
rx_filtered <= 1'b0;
|
||||
end
|
||||
3'b010:
|
||||
begin
|
||||
rx_filtered <= 1'b0;
|
||||
end
|
||||
3'b011:
|
||||
begin
|
||||
rx_filtered <= 1'b1;
|
||||
end
|
||||
3'b100:
|
||||
begin
|
||||
rx_filtered <= 1'b0;
|
||||
end
|
||||
3'b101:
|
||||
begin
|
||||
rx_filtered <= 1'b1;
|
||||
end
|
||||
3'b110:
|
||||
begin
|
||||
rx_filtered <= 1'b1;
|
||||
end
|
||||
default:
|
||||
begin
|
||||
rx_filtered <= 1'b1;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
// ----------------------------------------------------------------------------
|
||||
// receive bit counter
|
||||
// ----------------------------------------------------------------------------
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : rcv_cnt
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
receive_count <= 4'b0000;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// no start bit yet or begin sample period for data
|
||||
if (baud_clock == 1'b1)
|
||||
begin
|
||||
if ((rx_state == receive_states_rx_idle & (rx_filtered == 1'b1 | receive_count == 4'b1000)) || ((rx_state == receive_states_rx_wait_state) && (receive_count == 4'b0110)))
|
||||
begin
|
||||
receive_count <= 4'b0000;
|
||||
end
|
||||
else
|
||||
begin
|
||||
receive_count <= receive_count + 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
// ----------------------------------------------------------------------------
|
||||
// registering of the overflow signal
|
||||
// ----------------------------------------------------------------------------
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_overflow
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
overflow <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock == 1'b1)
|
||||
begin
|
||||
if (overflow_int == 1'b1)
|
||||
begin
|
||||
overflow <= 1'b1;
|
||||
end
|
||||
end
|
||||
if (read_rx_byte == 1'b1)
|
||||
begin
|
||||
overflow <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// registering of the framing_error signal
|
||||
// ----------------------------------------------------------------------------
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_framing_error
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
framing_error <= 1'b0;
|
||||
end
|
||||
else if (baud_clock == 1'b1)
|
||||
begin
|
||||
if (framing_error_int == 1'b1)
|
||||
begin
|
||||
framing_error <= 1'b1;
|
||||
end
|
||||
else if (clear_framing_error == 1'b1)
|
||||
begin
|
||||
framing_error <= 1'b0;
|
||||
end
|
||||
end
|
||||
else if (clear_framing_error == 1'b1)
|
||||
begin
|
||||
framing_error <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
framing_error <= framing_error;
|
||||
end
|
||||
end
|
||||
// ----------------------------------------------------------------------------
|
||||
// receive state machine & byte register
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin
|
||||
if((!aresetn) || (!sresetn))
|
||||
begin
|
||||
last_bit <= 4'b1001;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if((rx_state == receive_states_rx_idle) && (receive_count == 4'b1000))
|
||||
begin
|
||||
case({bit8,parity_en})
|
||||
2'b00 : last_bit <= 4'b0111;
|
||||
2'b01 : last_bit <= 4'b1000;
|
||||
2'b10 : last_bit <= 4'b1000;
|
||||
2'b11 : last_bit <= 4'b1001;
|
||||
endcase
|
||||
end
|
||||
else
|
||||
begin
|
||||
last_bit <= last_bit;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign rx_idle = (rx_state == receive_states_rx_idle);
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : rcv_sm
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
rx_state <= receive_states_rx_idle;
|
||||
rx_byte <= 8'b00000000;
|
||||
overflow_int <= 1'b0;
|
||||
framing_error_int <= 1'b0;
|
||||
stop_strobe <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock == 1'b1)
|
||||
begin
|
||||
overflow_int <= 1'b0;
|
||||
stop_strobe <= 1'b0;
|
||||
framing_error_int <= 1'b0;
|
||||
case (rx_state)
|
||||
receive_states_rx_idle:
|
||||
begin
|
||||
if (receive_count == 4'b1000)
|
||||
begin
|
||||
rx_state <= receive_states_rx_data_bits;
|
||||
end
|
||||
else
|
||||
begin
|
||||
rx_state <= receive_states_rx_idle;
|
||||
end
|
||||
end
|
||||
receive_states_rx_data_bits:
|
||||
begin
|
||||
// last bit has been received
|
||||
if (rx_bit_cnt == last_bit )
|
||||
begin
|
||||
// overflow
|
||||
rx_state <= receive_states_rx_stop_bit ;
|
||||
overflow_int <= receive_full_int;
|
||||
if (receive_full_int == 1'b0)
|
||||
begin
|
||||
rx_byte <= {(bit8 & rx_shift[7]), rx_shift[6:0]};
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
rx_state <= receive_states_rx_data_bits; // still clocking in bits
|
||||
end
|
||||
end
|
||||
receive_states_rx_stop_bit :
|
||||
begin
|
||||
// framing error
|
||||
if (receive_count == 4'b1110)
|
||||
begin
|
||||
if (rx_filtered == 1'b0)
|
||||
begin
|
||||
framing_error_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
else if (receive_count == 4'b1111)
|
||||
begin
|
||||
stop_strobe <= 1'b1;
|
||||
rx_state <= receive_states_rx_wait_state;
|
||||
end
|
||||
else
|
||||
begin
|
||||
rx_state <= receive_states_rx_stop_bit;
|
||||
end
|
||||
end
|
||||
receive_states_rx_wait_state :
|
||||
begin
|
||||
if ((rx_filtered == 1'b1) || (receive_count == 4'b0110))
|
||||
begin
|
||||
rx_state <= receive_states_rx_idle;
|
||||
end
|
||||
else
|
||||
begin
|
||||
rx_state <= receive_states_rx_wait_state;
|
||||
end
|
||||
end
|
||||
default:
|
||||
begin
|
||||
rx_state <= receive_states_rx_idle;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// receive shift register and parity calculation
|
||||
// ----------------------------------------------------------------------------
|
||||
assign shift_choice = {bit8, parity_en};
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : receive_shift
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
rx_shift[8:0] <= 9'b000000000;
|
||||
rx_bit_cnt <= 4'b0000;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock == 1'b1)
|
||||
begin
|
||||
if (rx_state == receive_states_rx_idle)
|
||||
begin
|
||||
rx_shift[8:0] <= 9'b000000000;
|
||||
rx_bit_cnt <= 4'b0000;
|
||||
end
|
||||
else if (receive_count == 4'b1111 )
|
||||
begin
|
||||
// sample new data bit
|
||||
rx_bit_cnt <= rx_bit_cnt + 1'b1;
|
||||
case (shift_choice)
|
||||
2'b00:
|
||||
begin
|
||||
rx_shift[5:0] <= rx_shift[6:1];
|
||||
rx_shift[6] <= rx_filtered;
|
||||
end
|
||||
2'b11:
|
||||
begin
|
||||
rx_shift[7:0] <= rx_shift[8:1];
|
||||
rx_shift[8] <= rx_filtered;
|
||||
end
|
||||
default:
|
||||
begin
|
||||
rx_shift[6:0] <= rx_shift[7:1];
|
||||
rx_shift[7] <= rx_filtered;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
// ----------------------------------------------------------------------------
|
||||
// receiver parity calculation
|
||||
// ----------------------------------------------------------------------------
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : rx_par_calc
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
rx_parity_calc <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock == 1'b1)
|
||||
begin
|
||||
if (receive_count == 4'b1111 & parity_en == 1'b1)
|
||||
begin
|
||||
rx_parity_calc <= rx_parity_calc ^ rx_filtered;
|
||||
end
|
||||
if (rx_state == receive_states_rx_stop_bit)
|
||||
begin
|
||||
rx_parity_calc <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// latch parity error for even or odd parity
|
||||
// ----------------------------------------------------------------------------
|
||||
assign parity_choice = {bit8, odd_n_even};
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_parity_err
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
parity_err <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (baud_clock == 1'b1 & parity_en == 1'b1 & receive_count == 4'b1111)
|
||||
begin
|
||||
case (parity_choice)
|
||||
2'b00:
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b0111)
|
||||
begin
|
||||
parity_err <= rx_parity_calc ^ rx_filtered;
|
||||
end
|
||||
end
|
||||
2'b01:
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b0111)
|
||||
begin
|
||||
parity_err <= ~(rx_parity_calc ^ rx_filtered);
|
||||
end
|
||||
end
|
||||
2'b10:
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b1000)
|
||||
begin
|
||||
parity_err <= rx_parity_calc ^ rx_filtered;
|
||||
end
|
||||
end
|
||||
2'b11:
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b1000)
|
||||
begin
|
||||
parity_err <= ~(rx_parity_calc ^ rx_filtered);
|
||||
end
|
||||
end
|
||||
default:
|
||||
begin
|
||||
parity_err <= 1'b0;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
if (clear_parity == 1'b1)
|
||||
begin
|
||||
parity_err <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
// ----------------------------------------------------------------------------
|
||||
// receive full indicator process
|
||||
// ----------------------------------------------------------------------------
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : receive_full_indicator
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
receive_full_int <= 1'b0;
|
||||
fifo_write <= 1'b1;
|
||||
clear_parity_en <= 1'b0;
|
||||
clear_framing_error_en <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
fifo_write <= 1'b1;
|
||||
clear_parity_en <= 1'b0;
|
||||
clear_framing_error_en <= 1'b0;
|
||||
if (baud_clock == 1'b1)
|
||||
// last bit has been received
|
||||
begin
|
||||
if (bit8 == 1'b1)
|
||||
begin
|
||||
if (parity_en == 1'b1)
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b1001 & rx_state == receive_states_rx_data_bits)
|
||||
begin
|
||||
fifo_write <= 1'b0;
|
||||
clear_parity_en <= 1'b1;
|
||||
clear_framing_error_en <= 1'b1;
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
receive_full_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b1000 & rx_state == receive_states_rx_data_bits)
|
||||
begin
|
||||
fifo_write <= 1'b0;
|
||||
clear_parity_en <= 1'b1;
|
||||
clear_framing_error_en <= 1'b1;
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
receive_full_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (parity_en == 1'b1)
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b1000 & rx_state == receive_states_rx_data_bits)
|
||||
begin
|
||||
fifo_write <= 1'b0;
|
||||
clear_parity_en <= 1'b1;
|
||||
clear_framing_error_en <= 1'b1;
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
receive_full_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (rx_bit_cnt == 4'b0111 & rx_state == receive_states_rx_data_bits)
|
||||
begin
|
||||
fifo_write <= 1'b0;
|
||||
clear_parity_en <= 1'b1;
|
||||
clear_framing_error_en <= 1'b1;
|
||||
if (RX_FIFO == 1'b0)
|
||||
begin
|
||||
receive_full_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if (read_rx_byte == 1'b1)
|
||||
begin
|
||||
receive_full_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign receive_full = receive_full_int;
|
||||
|
||||
endmodule // module CoreUARTapb_0_CoreUARTapb_0_0_Rx_async
|
||||
|
||||
|
||||
@@ -0,0 +1,368 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: CoreUART/ CoreUARTapb UART core
|
||||
//
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// Jun09 Revision 4.1
|
||||
// Aug10 Revision 4.2
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 8508 $
|
||||
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
// 20741 2Sep10 AS Increased baud rate by ensuring fifo ctrl runs off
|
||||
// sys clk (not baud clock). See note below.
|
||||
//
|
||||
// Notes:
|
||||
// best viewed with tabstops set to "4"
|
||||
|
||||
`timescale 1 ns / 1 ns // timescale for following modules
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_Tx_async (clk, xmit_pulse, reset_n, rst_tx_empty, tx_hold_reg, tx_dout_reg, fifo_empty, fifo_full, bit8,
|
||||
parity_en, odd_n_even, txrdy, tx, fifo_read_tx);
|
||||
|
||||
parameter SYNC_RESET = 0;
|
||||
// TX Parameters
|
||||
parameter TX_FIFO = 0; // 0=without tx fifo
|
||||
// 1=with tx fifo
|
||||
|
||||
input clk;
|
||||
input xmit_pulse;
|
||||
input reset_n;
|
||||
input rst_tx_empty;
|
||||
input[7:0] tx_hold_reg;
|
||||
input[7:0] tx_dout_reg;
|
||||
input fifo_empty;
|
||||
input fifo_full;
|
||||
input bit8;
|
||||
input parity_en;
|
||||
input odd_n_even;
|
||||
output txrdy;
|
||||
wire txrdy;
|
||||
output tx;
|
||||
output fifo_read_tx;
|
||||
reg tx;
|
||||
|
||||
parameter tx_idle = 0;
|
||||
parameter tx_load = 1;
|
||||
parameter start_bit = 2;
|
||||
parameter tx_data_bits = 3;
|
||||
parameter parity_bit = 4;
|
||||
parameter tx_stop_bit = 5;
|
||||
parameter delay_state = 6;
|
||||
integer xmit_state; // transmit state machine
|
||||
reg txrdy_int; // transmit ready for another byte
|
||||
reg[7:0] tx_byte; // transmit byte
|
||||
reg[3:0] xmit_bit_sel; // selects transmit bit
|
||||
reg tx_parity; // transmit parity
|
||||
|
||||
// AS: changed to wire
|
||||
// removed unused signals
|
||||
//reg fifo_read_tx;
|
||||
wire fifo_read_tx;
|
||||
reg fifo_read_en0;
|
||||
//reg fifo_read_en1;
|
||||
//wire fifo_read_en;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
wire aresetn;
|
||||
wire sresetn;
|
||||
assign aresetn = (SYNC_RESET==1) ? 1'b1 : reset_n;
|
||||
assign sresetn = (SYNC_RESET==1) ? reset_n : 1'b1;
|
||||
|
||||
// Modified Sep 2006, ROK
|
||||
// ----------------------------------------------------------
|
||||
// AS, Sep10: synchronized to start bit, rather than load bit
|
||||
// since txload now happens on start bit state
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : make_txrdy
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
txrdy_int <= 1'b1 ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (TX_FIFO == 1'b0)
|
||||
begin
|
||||
if (xmit_pulse)
|
||||
begin
|
||||
if (xmit_state == start_bit)
|
||||
begin
|
||||
txrdy_int <= 1'b1;
|
||||
end
|
||||
end
|
||||
if (rst_tx_empty)
|
||||
begin
|
||||
txrdy_int <= 1'b0;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
txrdy_int <= !fifo_full;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// Modified Sep10, AS
|
||||
// FIFO load state transitions and outputs and outputs registered on system
|
||||
// clock (clk):
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : xmit_sm
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
xmit_state <= tx_idle ;
|
||||
tx_byte <= 8'b0 ;
|
||||
fifo_read_en0 <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// AS:
|
||||
// (1) state on sysclk for tx_idle, tx_load, delay_state since these operations run
|
||||
// off the system clock, not the baud clock
|
||||
// (2) perform tx byte load on start bit state to ensure that data is
|
||||
// valid at that point
|
||||
if (xmit_pulse || (xmit_state == tx_idle) || (xmit_state == delay_state) || (xmit_state == tx_load))
|
||||
begin
|
||||
fifo_read_en0 <= 1'b1;
|
||||
case (xmit_state)
|
||||
tx_idle :
|
||||
begin
|
||||
if (TX_FIFO == 1'b0)
|
||||
begin
|
||||
if (!txrdy_int)
|
||||
begin
|
||||
xmit_state <= tx_load ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_state <= tx_idle ;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (fifo_empty == 1'b0)
|
||||
begin
|
||||
fifo_read_en0 <= 1'b0;
|
||||
xmit_state <= delay_state;
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_state <= tx_idle ;
|
||||
fifo_read_en0 <= 1'b1;
|
||||
end
|
||||
end
|
||||
end
|
||||
tx_load :
|
||||
begin
|
||||
xmit_state <= start_bit ;
|
||||
end
|
||||
start_bit :
|
||||
begin
|
||||
xmit_state <= tx_data_bits ;
|
||||
if (TX_FIFO == 1'b0)
|
||||
begin
|
||||
tx_byte <= tx_hold_reg ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
tx_byte <= tx_dout_reg ;
|
||||
end
|
||||
end
|
||||
tx_data_bits :
|
||||
begin
|
||||
if (bit8)
|
||||
begin
|
||||
if (xmit_bit_sel == 4'b0111)
|
||||
begin
|
||||
if (parity_en)
|
||||
begin
|
||||
xmit_state <= parity_bit ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_state <= tx_stop_bit ;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_state <= tx_data_bits ;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (xmit_bit_sel == 4'b0110)
|
||||
begin
|
||||
if (parity_en)
|
||||
begin
|
||||
xmit_state <= parity_bit ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_state <= tx_stop_bit ;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_state <= tx_data_bits ;
|
||||
end
|
||||
end
|
||||
end
|
||||
parity_bit :
|
||||
begin
|
||||
xmit_state <= tx_stop_bit ;
|
||||
end
|
||||
tx_stop_bit :
|
||||
begin
|
||||
xmit_state <= tx_idle ;
|
||||
end
|
||||
delay_state :
|
||||
begin
|
||||
xmit_state <= tx_load ;
|
||||
end
|
||||
default :
|
||||
begin
|
||||
xmit_state <= tx_idle ;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
// AS: Need to remove clock delay of fifo read, since tx_load state is
|
||||
// registered on sys clk now and fifo_read_en needs to be made available
|
||||
// immediately
|
||||
|
||||
// Added by Hari
|
||||
//always @(posedge clk or negedge reset_n)
|
||||
//begin : read_fifo
|
||||
// if (!reset_n)
|
||||
// begin
|
||||
// fifo_read_tx <= 1'b1;
|
||||
// fifo_read_en1 <= 1'b1;
|
||||
// end
|
||||
// else
|
||||
// begin
|
||||
// fifo_read_tx <= 1'b1;
|
||||
// fifo_read_en1 <= fifo_read_en0;
|
||||
// if (fifo_read_en == 1'b0)
|
||||
// begin
|
||||
// fifo_read_tx <= 1'b0;
|
||||
// end
|
||||
// end
|
||||
//end
|
||||
|
||||
//assign fifo_read_en = (!fifo_read_en1 | fifo_read_en0);
|
||||
//assign fifo_read_en = fifo_read_en0;
|
||||
assign fifo_read_tx = fifo_read_en0;
|
||||
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : xmit_cnt
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
xmit_bit_sel <= 4'b0000 ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (xmit_pulse)
|
||||
begin
|
||||
if (xmit_state != tx_data_bits)
|
||||
begin
|
||||
xmit_bit_sel <= 4'b0000 ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
xmit_bit_sel <= xmit_bit_sel + 1'b1 ;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : xmit_sel
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
tx <= 1'b1 ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// AS:
|
||||
// state on sysclk for tx_idle, tx_load, delay_state since these operations run
|
||||
// off the system clock, no the baud clock
|
||||
if (xmit_pulse || (xmit_state == tx_idle) || (xmit_state == delay_state) || (xmit_state == tx_load))
|
||||
begin
|
||||
case (xmit_state)
|
||||
tx_idle :
|
||||
begin
|
||||
tx <= 1'b1 ;
|
||||
end
|
||||
tx_load :
|
||||
begin
|
||||
tx <= 1'b1 ;
|
||||
end
|
||||
start_bit :
|
||||
begin
|
||||
tx <= 1'b0 ;
|
||||
end
|
||||
tx_data_bits :
|
||||
begin
|
||||
//tx <= tx_byte[conv_integer(xmit_bit_sel)] ;
|
||||
tx <= tx_byte[xmit_bit_sel] ;
|
||||
end
|
||||
parity_bit :
|
||||
begin
|
||||
tx <= odd_n_even ^ tx_parity ;
|
||||
end
|
||||
|
||||
tx_stop_bit :
|
||||
begin
|
||||
tx <= 1'b1 ;
|
||||
end
|
||||
default :
|
||||
begin
|
||||
tx <= 1'b1 ;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk or negedge aresetn)
|
||||
begin : xmit_par_calc
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
tx_parity <= 1'b0 ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (xmit_pulse & parity_en)
|
||||
begin
|
||||
if (xmit_state == tx_data_bits)
|
||||
begin
|
||||
//tx_parity <= tx_parity ^ tx_byte[conv_integer(xmit_bit_sel)] ;
|
||||
tx_parity <= tx_parity ^ tx_byte[xmit_bit_sel] ;
|
||||
end
|
||||
else
|
||||
begin
|
||||
tx_parity <= tx_parity ;
|
||||
end
|
||||
end
|
||||
if (xmit_state == tx_stop_bit)
|
||||
begin
|
||||
tx_parity <= 1'b0 ;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign txrdy = txrdy_int ;
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,280 @@
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2008 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: CoreUART/ CoreUARTapb UART core
|
||||
//
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// Jun09 Revision 4.1
|
||||
// Aug10 Revision 4.2
|
||||
//
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: 8508 $
|
||||
// SVN $Date: 2009-06-15 16:49:49 -0700 (Mon, 15 Jun 2009) $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
// 20741 2Sep10 AS Increased baud rate by ensuring fifo ctrl runs off
|
||||
// sys clk (not baud clock). See note below.
|
||||
//
|
||||
// Notes:
|
||||
// best viewed with tabstops set to "4"
|
||||
|
||||
`timescale 1 ns/100 ps
|
||||
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_fifo_256x8(DO, RCLOCK, WCLOCK, DI, WRB, RDB, RESET, FULL, EMPTY);
|
||||
output [7:0] DO;
|
||||
input RCLOCK;
|
||||
input WCLOCK;
|
||||
input [7:0] DI;
|
||||
input WRB;
|
||||
input RDB;
|
||||
input RESET;
|
||||
output FULL;
|
||||
output EMPTY;
|
||||
|
||||
parameter SYNC_RESET = 0;
|
||||
parameter [6:0] LEVEL = 128;
|
||||
|
||||
wire [7:0] DO;
|
||||
wire AEMPTY, AFULL, FULL, EMPTY;
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_fifo_ctrl_256 #(.SYNC_RESET(SYNC_RESET)) fifo_256x8_g5 (.data_in(DI), .data_out(DO), .write_n(WRB), .read_n(RDB), .clock(WCLOCK),
|
||||
.full(FULL), .empty(EMPTY), .half(GEQTH), .reset_n(RESET), .LEVEL(LEVEL) );
|
||||
|
||||
endmodule
|
||||
|
||||
/*********************************************************/
|
||||
// MODULE: Synchronous FIFO
|
||||
//
|
||||
// FILE NAME: fifo_ctl.v
|
||||
//
|
||||
// CODE TYPE: Register Transfer Level
|
||||
//
|
||||
// DESCRIPTION: This module defines a Synchronous FIFO. The
|
||||
// FIFO memory is implemented as a ring buffer. The read
|
||||
// pointer points to the beginning of the buffer, while the
|
||||
// write pointer points to the end of the buffer. Note that
|
||||
// in this RTL version, the memory has one more location than
|
||||
// the FIFO needs in order to calculate the FIFO count
|
||||
// correctly.
|
||||
//
|
||||
/*********************************************************/
|
||||
|
||||
// fifo control logic
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_fifo_ctrl_256(
|
||||
clock,
|
||||
reset_n,
|
||||
data_in,
|
||||
read_n,
|
||||
write_n,
|
||||
LEVEL,
|
||||
data_out,
|
||||
full,
|
||||
empty,
|
||||
half);
|
||||
|
||||
parameter SYNC_RESET = 0;
|
||||
parameter FIFO_DEPTH = 256; // Depth of FIFO (number of bytes)
|
||||
parameter FIFO_BITS = 8; // Number of bits required to
|
||||
parameter FIFO_WIDTH = 8; // Width of FIFO data
|
||||
|
||||
// INPUTS
|
||||
input clock; // Clock input
|
||||
input reset_n; // Active low reset
|
||||
input [FIFO_WIDTH-1:0] data_in; // Data input to FIFO
|
||||
input read_n; // Read FIFO (active low)
|
||||
input write_n; // Write FIFO (active low)
|
||||
input [6:0] LEVEL;
|
||||
// OUTPUTS
|
||||
output [FIFO_WIDTH-1:0] data_out; // FIFO output data
|
||||
output full; // FIFO is full
|
||||
output empty; // FIFO is empty
|
||||
output half; // FIFO is half full
|
||||
// or more
|
||||
|
||||
// INOUTS
|
||||
|
||||
// SIGNAL DECLARATIONS
|
||||
wire clock;
|
||||
wire reset_n;
|
||||
wire [FIFO_WIDTH-1:0] data_in;
|
||||
wire read_n;
|
||||
wire write_n;
|
||||
reg [FIFO_WIDTH-1:0] data_out;
|
||||
wire full;
|
||||
wire empty;
|
||||
wire half;
|
||||
wire [FIFO_WIDTH-1:0] data_out_0;
|
||||
reg read_n_hold;
|
||||
|
||||
// How many locations in the FIFO
|
||||
// are occupied?
|
||||
reg [FIFO_BITS-1:0] counter;
|
||||
// FIFO read pointer points to
|
||||
// the location in the FIFO to
|
||||
// read from next
|
||||
reg [FIFO_BITS-1:0] rd_pointer;
|
||||
// FIFO write pointer points to
|
||||
// the location in the FIFO to
|
||||
// write to next
|
||||
reg [FIFO_BITS-1:0] wr_pointer;
|
||||
|
||||
wire aresetn;
|
||||
wire sresetn;
|
||||
|
||||
// ASSIGN STATEMENTS
|
||||
assign aresetn = (SYNC_RESET==1) ? 1'b1 : reset_n;
|
||||
assign sresetn = (SYNC_RESET==1) ? reset_n : 1'b1;
|
||||
assign full = (counter == FIFO_DEPTH-1) ? 1'b1 : 1'b0;
|
||||
assign empty = (counter == 0) ? 1'b1 : 1'b0;
|
||||
assign half = (counter >= LEVEL) ? 1'b1 : 1'b0;
|
||||
|
||||
// MAIN CODE
|
||||
|
||||
// This block contains all devices affected by the clock
|
||||
// and reset inputs
|
||||
always @(posedge clock or negedge aresetn ) begin
|
||||
if ((!aresetn) || (!sresetn)) begin
|
||||
// Reset the FIFO pointer
|
||||
rd_pointer <= {FIFO_BITS{1'b0}};
|
||||
wr_pointer <= {FIFO_BITS{1'b0}};
|
||||
counter <= {FIFO_BITS{1'b0}};
|
||||
end
|
||||
else begin
|
||||
if (~read_n) begin
|
||||
// If we are doing a simultaneous read and write,
|
||||
// there is no change to the counter
|
||||
if (write_n) begin
|
||||
// Decrement the FIFO counter
|
||||
counter <= counter - 1;
|
||||
end
|
||||
|
||||
// Increment the read pointer
|
||||
// Check if the read pointer has gone beyond the
|
||||
// depth of the FIFO. If so, set it back to the
|
||||
// beginning of the FIFO
|
||||
if (rd_pointer == FIFO_DEPTH-1)
|
||||
rd_pointer <= {FIFO_BITS{1'b0}};
|
||||
else
|
||||
rd_pointer <= rd_pointer + 1;
|
||||
end
|
||||
if (~write_n) begin
|
||||
// Check for FIFO overflow
|
||||
if (counter >= FIFO_DEPTH) begin
|
||||
$display("\nERROR at time %0t:", $time);
|
||||
$display("FIFO Overflow\n");
|
||||
|
||||
// Use $stop for debugging
|
||||
$stop;
|
||||
end
|
||||
|
||||
// If we are doing a simultaneous read and write,
|
||||
// there is no change to the counter
|
||||
if (read_n) begin
|
||||
// Increment the FIFO counter
|
||||
counter <= counter + 1;
|
||||
end
|
||||
|
||||
// Increment the write pointer
|
||||
// Check if the write pointer has gone beyond the
|
||||
// depth of the FIFO. If so, set it back to the
|
||||
// beginning of the FIFO
|
||||
if (wr_pointer == FIFO_DEPTH-1)
|
||||
wr_pointer <= {FIFO_BITS{1'b0}};
|
||||
else
|
||||
wr_pointer <= wr_pointer + 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clock or negedge aresetn )
|
||||
begin
|
||||
if ((!aresetn) || (!sresetn))
|
||||
begin
|
||||
read_n_hold <= 1'b0;
|
||||
data_out <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
read_n_hold <= read_n;
|
||||
if (read_n_hold == 1'b0)
|
||||
begin
|
||||
data_out <= data_out_0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
data_out <= data_out;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_ram256x8_g5 ram256x8_g5(.Data(data_in), .Q(data_out_0), .WAddress(wr_pointer),
|
||||
.RAddress(rd_pointer), .WE(write_n), .RE(read_n), .WClock(clock),
|
||||
.RClock(clock), .reset_n(reset_n) );
|
||||
endmodule
|
||||
|
||||
|
||||
module CoreUARTapb_0_CoreUARTapb_0_0_ram256x8_g5(Data,Q,WAddress,RAddress,WE,RE,WClock,RClock,reset_n);
|
||||
input [7:0] Data;
|
||||
input [7:0] WAddress, RAddress;
|
||||
input WE, RE, WClock, RClock, reset_n;
|
||||
output [7:0] Q;
|
||||
|
||||
wire [19:0] DOUT_RAM_0;
|
||||
wire [13:0] RADDR_int;
|
||||
wire [13:0] WADDR_int;
|
||||
wire INV_0_Y, VCC, GND;
|
||||
|
||||
VCC VCC_1_net(.Y(VCC));
|
||||
GND GND_1_net(.Y(GND));
|
||||
INV INV_0(.A(WE), .Y(INV_0_Y));
|
||||
INV INV_1(.A(RE), .Y(INV_1_Y));
|
||||
|
||||
assign Q = DOUT_RAM_0[7:0];
|
||||
assign RADDR_int = {2'b0, RAddress[7:0], 4'b0};
|
||||
assign WADDR_int = {2'b0, WAddress[7:0], 4'b0};
|
||||
|
||||
RAM1K20
|
||||
RAM_R0C0 ( .A_DOUT (DOUT_RAM_0),
|
||||
.B_DOUT (/*NC*/),
|
||||
.ACCESS_BUSY (/*NC*/),
|
||||
.BUSY_FB (1'b1),
|
||||
.ECC_EN (1'b0),
|
||||
.ECC_BYPASS (1'b0),
|
||||
.DB_DETECT (/*NC*/),
|
||||
.SB_CORRECT (/*NC*/),
|
||||
.A_CLK (RClock),
|
||||
.A_DOUT_EN (1'b1),
|
||||
.A_DOUT_SRST_N (1'b1),
|
||||
.A_DOUT_ARST_N (1'b1),
|
||||
.A_BYPASS (1'b1),
|
||||
.A_BLK_EN ({INV_1_Y, 2'b11}),
|
||||
.A_DIN (20'b0),
|
||||
.A_ADDR (RADDR_int),
|
||||
.A_WEN (2'b00),
|
||||
.A_REN (1'b1),
|
||||
.A_WIDTH (3'b100),
|
||||
.A_WMODE (2'b0),
|
||||
.B_CLK (WClock),
|
||||
.B_DOUT_EN (1'b1),
|
||||
.B_DOUT_SRST_N (1'b1),
|
||||
.B_DOUT_ARST_N (1'b1),
|
||||
.B_BYPASS (1'b1),
|
||||
.B_BLK_EN ({INV_0_Y, 2'b11}),
|
||||
.B_DIN ({12'b0, Data[7:0]}),
|
||||
.B_ADDR (WADDR_int),
|
||||
.B_WEN (2'b11),
|
||||
.B_REN (1'b0),
|
||||
.B_WIDTH (3'b100),
|
||||
.B_WMODE (2'b0)
|
||||
);
|
||||
endmodule
|
||||
@@ -0,0 +1,300 @@
|
||||
`timescale 1 ns / 1 ns
|
||||
|
||||
// ********************************************************************
|
||||
// Actel Corporation Proprietary and Confidential
|
||||
// Copyright 2009 Actel Corporation. All rights reserved.
|
||||
//
|
||||
// ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
|
||||
// ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
|
||||
// IN ADVANCE IN WRITING.
|
||||
//
|
||||
// Description: User testbench for CoreAI (Analog Interface)
|
||||
//
|
||||
// Revision Information:
|
||||
// Date Description
|
||||
// ---- -----------------------------------------
|
||||
// 03Mar09 Initial Version 2.0
|
||||
//
|
||||
// SVN Revision Information:
|
||||
// SVN $Revision: $
|
||||
// SVN $Date: $
|
||||
//
|
||||
// Resolved SARs
|
||||
// SAR Date Who Description
|
||||
//
|
||||
// Notes:
|
||||
// 1. best viewed with tabstops set to "4"
|
||||
// 2. Most of the behavior is driven from the BFM scripts for the APB master.
|
||||
// Consult the Actel AMBA BFM documentation for more information.
|
||||
//
|
||||
// History: 04/22/09 - AS created
|
||||
//
|
||||
// *********************************************************************
|
||||
|
||||
module testbench;
|
||||
//`include "coreparameters.v"
|
||||
//`include "../../../coreparameters.v"
|
||||
`include "../../../../coreparameters.v"
|
||||
|
||||
// vector file for driving the APB master BFM
|
||||
// NOTE: location of the following files can be overridden at run time
|
||||
parameter APB_MASTER_VECTFILE = "coreuart_usertb_apb_master.vec";
|
||||
// propagation delay in ns
|
||||
parameter TPD = 3;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// constants
|
||||
//-----------------------------------------------------------------------------
|
||||
parameter APB_MASTER_CLK_CYCLE = 100;
|
||||
parameter APB_MASTER_CLK_CYCLE_LO_TIME = (APB_MASTER_CLK_CYCLE/2);
|
||||
// add 1 if APB_MASTER_CLK_CYCLE is odd number to compensate for PCLK period
|
||||
parameter APB_MASTER_CLK_CYCLE_HI_TIME = (APB_MASTER_CLK_CYCLE/2);
|
||||
|
||||
parameter [31:0] ADDR_IN = 32'h00000000;
|
||||
parameter [31:0] ADDR_OUT = 32'h00000001;
|
||||
parameter [31:0] ADDR_INT = 32'h00000002;
|
||||
parameter [31:0] ADDR_OE = 32'h00000003;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// signals
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// system
|
||||
reg SYSRSTN_apb;
|
||||
reg SYSCLK_apb;
|
||||
|
||||
// APB
|
||||
wire PCLK;
|
||||
wire PRESETN;
|
||||
wire [31:0] PADDR_apb_bfm_wide;
|
||||
wire [4:0] PADDR;
|
||||
wire [15:0] PSEL_apb_bfm_wide;
|
||||
wire PSEL1; // DUT1 PSEL
|
||||
wire PSEL2; // DUT2 PSEL
|
||||
wire PENABLE;
|
||||
wire PWRITE;
|
||||
wire [31:0] PWDATA_apb_bfm_wide;
|
||||
wire [7:0] PWDATA;
|
||||
|
||||
// BFM
|
||||
wire [31:0] PRDATA_apb_bfm_wide;
|
||||
wire [7:0] PRDATA;
|
||||
wire [7:0] PRDATA1;
|
||||
wire [7:0] PRDATA2;
|
||||
wire PREADY;
|
||||
wire PSLVERR;
|
||||
|
||||
wire [31:0] GP_IN_apb_bfm;
|
||||
wire [31:0] GP_OUT_apb_bfm;
|
||||
wire FINISHED_apb_bfm;
|
||||
wire FAILED_apb_bfm;
|
||||
|
||||
// DUT1
|
||||
wire TXRDY1;
|
||||
wire RXRDY1;
|
||||
wire TX1;
|
||||
wire RX1;
|
||||
wire PARITY_ERR1;
|
||||
wire FRAMING_ERR1;
|
||||
wire OVERFLOW1;
|
||||
|
||||
// DUT2
|
||||
wire TXRDY2;
|
||||
wire RXRDY2;
|
||||
wire TX2;
|
||||
wire RX2;
|
||||
wire PARITY_ERR2;
|
||||
wire FRAMING_ERR2;
|
||||
wire OVERFLOW2;
|
||||
|
||||
wire RX_SEL;
|
||||
|
||||
// BFM memory interface
|
||||
// not used
|
||||
wire [31:0] BFM_ADDR;
|
||||
wire [31:0] BFM_DATA;
|
||||
wire [31:0] BFM_DATA_i;
|
||||
wire BFM_RD;
|
||||
wire BFM_WR;
|
||||
|
||||
// misc. signals
|
||||
wire [255:0] GND256;
|
||||
wire [31:0] GND32;
|
||||
wire [7:0] GND8;
|
||||
wire [4:0] GND5;
|
||||
wire [3:0] GND4;
|
||||
wire GND1;
|
||||
reg [0:0] stopsim;
|
||||
|
||||
// APB ASSIGNS
|
||||
assign PADDR = PADDR_apb_bfm_wide[4:0];
|
||||
assign PSEL1 = PSEL_apb_bfm_wide[0];
|
||||
assign PSEL2 = PSEL_apb_bfm_wide[1];
|
||||
assign PWDATA = PWDATA_apb_bfm_wide[7:0];
|
||||
assign PRDATA = ((PSEL1 == 1'b1)) ? PRDATA1 :
|
||||
((PSEL2 == 1'b1)) ? PRDATA2 :
|
||||
8'h00;
|
||||
assign PRDATA_apb_bfm_wide[31:0] = {24'h000000, PRDATA[7:0]};
|
||||
// PREADY and PSLVERR not used, tie off
|
||||
assign PREADY = 1'b1;
|
||||
assign PSLVERR = 1'b0;
|
||||
|
||||
// DUT
|
||||
// pull-down for Framing Error Test
|
||||
assign RX2 = ((RX_SEL == 1'b0)) ? TX1 :
|
||||
1'b0;
|
||||
|
||||
// monitor flags / select signals in BFM
|
||||
assign GP_IN_apb_bfm = {24'h000000, OVERFLOW2, PARITY_ERR2, TXRDY2, RXRDY2, OVERFLOW1, PARITY_ERR1, TXRDY1, RXRDY1};
|
||||
assign RX_SEL = GP_OUT_apb_bfm[0];
|
||||
|
||||
// System clock
|
||||
|
||||
|
||||
// System clock
|
||||
initial SYSCLK_apb = 1'b0;
|
||||
always
|
||||
begin
|
||||
#APB_MASTER_CLK_CYCLE_LO_TIME SYSCLK_apb = 1'b1;
|
||||
#APB_MASTER_CLK_CYCLE_HI_TIME SYSCLK_apb = 1'b0;
|
||||
end
|
||||
|
||||
// Main simulation
|
||||
initial
|
||||
begin: main_sim
|
||||
SYSRSTN_apb = 0;
|
||||
@ (posedge SYSCLK_apb); #TPD;
|
||||
SYSRSTN_apb = 1;
|
||||
@ (posedge SYSCLK_apb); #TPD;
|
||||
|
||||
// wait until BFM is finished
|
||||
while (!(FINISHED_apb_bfm===1'b1))
|
||||
begin
|
||||
@ (posedge SYSCLK_apb); #TPD;
|
||||
end
|
||||
stopsim=1;
|
||||
#1;
|
||||
$stop;
|
||||
end
|
||||
|
||||
// ------------------------------------------------------
|
||||
// BFM register interface
|
||||
|
||||
// not used for this core
|
||||
|
||||
// End BFM register interface RTL
|
||||
// ------------------------------------------------------
|
||||
|
||||
// BFM instantiation
|
||||
|
||||
// passing testbench parameters to BFM ARGVALUE* parameters
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_BFM_APB #(
|
||||
.VECTFILE(APB_MASTER_VECTFILE),
|
||||
.TPD(TPD),
|
||||
.ARGVALUE0(FAMILY),
|
||||
.ARGVALUE1(TX_FIFO),
|
||||
.ARGVALUE2(RX_FIFO),
|
||||
.ARGVALUE3(FIXEDMODE),
|
||||
.ARGVALUE4(BAUD_VALUE),
|
||||
.ARGVALUE5(PRG_BIT8),
|
||||
.ARGVALUE6(PRG_PARITY),
|
||||
.ARGVALUE7(RX_LEGACY_MODE),
|
||||
.ARGVALUE8(USE_SOFT_FIFO)
|
||||
) U_APB_MASTER(
|
||||
.SYSCLK(SYSCLK_apb),
|
||||
.SYSRSTN(SYSRSTN_apb),
|
||||
.PCLK(PCLK),
|
||||
.PRESETN(PRESETN),
|
||||
.PADDR(PADDR_apb_bfm_wide),
|
||||
.PSEL(PSEL_apb_bfm_wide),
|
||||
.PENABLE(PENABLE),
|
||||
.PWRITE(PWRITE),
|
||||
.PWDATA(PWDATA_apb_bfm_wide),
|
||||
.PRDATA(PRDATA_apb_bfm_wide),
|
||||
.PREADY(PREADY),
|
||||
.PSLVERR(PSLVERR),
|
||||
.INTERRUPT(GND256),
|
||||
// NEED TO ADD GPIN
|
||||
.GP_OUT(GP_OUT_apb_bfm),
|
||||
.GP_IN(GP_IN_apb_bfm),
|
||||
.EXT_WR(BFM_WR),
|
||||
.EXT_RD(BFM_RD),
|
||||
.EXT_ADDR(BFM_ADDR),
|
||||
.EXT_DATA(BFM_DATA),
|
||||
.EXT_WAIT(GND1),
|
||||
.FINISHED(FINISHED_apb_bfm),
|
||||
.FAILED(FAILED_apb_bfm)
|
||||
);
|
||||
|
||||
// DUT1 (TX)
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_CoreUARTapb #(
|
||||
.FAMILY(FAMILY),
|
||||
.TX_FIFO(TX_FIFO),
|
||||
.RX_FIFO(RX_FIFO),
|
||||
.FIXEDMODE(FIXEDMODE),
|
||||
.BAUD_VALUE(BAUD_VALUE),
|
||||
.PRG_BIT8(PRG_BIT8),
|
||||
.PRG_PARITY(PRG_PARITY),
|
||||
.RX_LEGACY_MODE(RX_LEGACY_MODE),
|
||||
.BAUD_VAL_FRCTN(BAUD_VAL_FRCTN),
|
||||
.BAUD_VAL_FRCTN_EN(BAUD_VAL_FRCTN_EN)
|
||||
) DUT1(
|
||||
.PRESETN(PRESETN),
|
||||
.PCLK(PCLK),
|
||||
.PSEL(PSEL1),
|
||||
.PENABLE(PENABLE),
|
||||
.PWRITE(PWRITE),
|
||||
.PADDR(PADDR),
|
||||
.PWDATA(PWDATA),
|
||||
.PRDATA(PRDATA1),
|
||||
.PREADY(),
|
||||
.PSLVERR(),
|
||||
// OTHER SIGNALS
|
||||
.TXRDY(TXRDY1),
|
||||
.RXRDY(RXRDY1),
|
||||
.PARITY_ERR(PARITY_ERR1),
|
||||
.FRAMING_ERR(FRAMING_ERR1),
|
||||
.OVERFLOW(OVERFLOW1),
|
||||
.RX(RX1),
|
||||
.TX(TX1)
|
||||
);
|
||||
|
||||
// DUT2 (RX)
|
||||
|
||||
CoreUARTapb_0_CoreUARTapb_0_0_CoreUARTapb #(
|
||||
.FAMILY(FAMILY),
|
||||
.TX_FIFO(TX_FIFO),
|
||||
.RX_FIFO(RX_FIFO),
|
||||
.FIXEDMODE(FIXEDMODE),
|
||||
.BAUD_VALUE(BAUD_VALUE),
|
||||
.PRG_BIT8(PRG_BIT8),
|
||||
.PRG_PARITY(PRG_PARITY),
|
||||
.RX_LEGACY_MODE(RX_LEGACY_MODE),
|
||||
.BAUD_VAL_FRCTN(BAUD_VAL_FRCTN),
|
||||
.BAUD_VAL_FRCTN_EN(BAUD_VAL_FRCTN_EN)
|
||||
) DUT2(
|
||||
.PRESETN(PRESETN),
|
||||
.PCLK(PCLK),
|
||||
.PSEL(PSEL2),
|
||||
.PENABLE(PENABLE),
|
||||
.PWRITE(PWRITE),
|
||||
.PADDR(PADDR),
|
||||
.PWDATA(PWDATA),
|
||||
.PRDATA(PRDATA2),
|
||||
.PREADY(),
|
||||
.PSLVERR(),
|
||||
// OTHER SIGNALS
|
||||
.TXRDY(TXRDY2),
|
||||
.RXRDY(RXRDY2),
|
||||
.PARITY_ERR(PARITY_ERR2),
|
||||
.FRAMING_ERR(FRAMING_ERR2),
|
||||
.OVERFLOW(OVERFLOW2),
|
||||
.RX(RX2),
|
||||
.TX(TX2)
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
// testbench
|
||||
36
component/work/CoreUARTapb_0/CoreUARTapb_0_manifest.txt
Normal file
36
component/work/CoreUARTapb_0/CoreUARTapb_0_manifest.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
Microchip Technology Inc. - Microchip Libero Software Release 2025.1 (Version 2025.1.0.14)
|
||||
|
||||
Date : Mon Apr 13 21:41:13 2026
|
||||
Project : E:\AbhishekV\rising\ethernet_reference_design\hw\Libero_Project
|
||||
Component : CoreUARTapb_0
|
||||
Family : PolarFire
|
||||
|
||||
|
||||
HDL source files for all Synthesis and Simulation tools:
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/core/Clock_gen.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/core/Rx_async.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/core/Tx_async.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/core/CoreUART.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/core/CoreUARTapb.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/core/fifo_256x8_g5.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0.v
|
||||
|
||||
Stimulus files for all Simulation tools:
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/mti/scripts/bfmtovec_compile.do
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/mti/scripts/coreuart_usertb_apb_master.bfm
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/mti/scripts/coreuart_usertb_include.bfm
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/mti/scripts/wave_vlog_amba.do
|
||||
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/coreparameters.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_ahbl.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_ahblapb.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_ahbslave.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_ahbslaveext.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_ahbtoapb.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_apb.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_apbslave.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_apbslaveext.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_apbtoapb.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/amba_bfm/bfm_main.v
|
||||
E:/AbhishekV/rising/ethernet_reference_design/hw/Libero_Project/component/work/CoreUARTapb_0/CoreUARTapb_0_0/rtl/vlog/test/user/testbench.v
|
||||
|
||||
Reference in New Issue
Block a user