diff options
| author | Martin Braun <martin.braun@ettus.com> | 2020-01-23 16:10:22 -0800 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2020-01-28 09:35:36 -0800 | 
| commit | bafa9d95453387814ef25e6b6256ba8db2df612f (patch) | |
| tree | 39ba24b5b67072d354775272e687796bb511848d /fpga/usrp2/models/CY7C1356C | |
| parent | 3075b981503002df3115d5f1d0b97d2619ba30f2 (diff) | |
| download | uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.tar.gz uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.tar.bz2 uhd-bafa9d95453387814ef25e6b6256ba8db2df612f.zip | |
Merge FPGA repository back into UHD repository
The FPGA codebase was removed from the UHD repository in 2014 to reduce
the size of the repository. However, over the last half-decade, the
split between the repositories has proven more burdensome than it has
been helpful. By merging the FPGA code back, it will be possible to
create atomic commits that touch both FPGA and UHD codebases. Continuous
integration testing is also simplified by merging the repositories,
because it was previously difficult to automatically derive the correct
UHD branch when testing a feature branch on the FPGA repository.
This commit also updates the license files and paths therein.
We are therefore merging the repositories again. Future development for
FPGA code will happen in the same repository as the UHD host code and
MPM code.
== Original Codebase and Rebasing ==
The original FPGA repository will be hosted for the foreseeable future
at its original local location: https://github.com/EttusResearch/fpga/
It can be used for bisecting, reference, and a more detailed history.
The final commit from said repository to be merged here is
05003794e2da61cabf64dd278c45685a7abad7ec. This commit is tagged as
v4.0.0.0-pre-uhd-merge.
If you have changes in the FPGA repository that you want to rebase onto
the UHD repository, simply run the following commands:
- Create a directory to store patches (this should be an empty
  directory):
    mkdir ~/patches
- Now make sure that your FPGA codebase is based on the same state as
  the code that was merged:
    cd src/fpga # Or wherever your FPGA code is stored
    git rebase v4.0.0.0-pre-uhd-merge
  Note: The rebase command may look slightly different depending on what
  exactly you're trying to rebase.
- Create a patch set for your changes versus v4.0.0.0-pre-uhd-merge:
    git format-patch v4.0.0.0-pre-uhd-merge -o ~/patches
  Note: Make sure that only patches are stored in your output directory.
  It should otherwise be empty. Make sure that you picked the correct
  range of commits, and only commits you wanted to rebase were exported
  as patch files.
- Go to the UHD repository and apply the patches:
    cd src/uhd # Or wherever your UHD repository is stored
    git am --directory fpga ~/patches/*
    rm -rf ~/patches # This is for cleanup
== Contributors ==
The following people have contributed mainly to these files (this list
is not complete):
Co-authored-by: Alex Williams <alex.williams@ni.com>
Co-authored-by: Andrej Rode <andrej.rode@ettus.com>
Co-authored-by: Ashish Chaudhari <ashish@ettus.com>
Co-authored-by: Ben Hilburn <ben.hilburn@ettus.com>
Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
Co-authored-by: Daniel Jepson <daniel.jepson@ni.com>
Co-authored-by: Derek Kozel <derek.kozel@ettus.com>
Co-authored-by: EJ Kreinar <ej@he360.com>
Co-authored-by: Humberto Jimenez <humberto.jimenez@ni.com>
Co-authored-by: Ian Buckley <ian.buckley@gmail.com>
Co-authored-by: Jörg Hofrichter <joerg.hofrichter@ni.com>
Co-authored-by: Jon Kiser <jon.kiser@ni.com>
Co-authored-by: Josh Blum <josh@joshknows.com>
Co-authored-by: Jonathon Pendlum <jonathan.pendlum@ettus.com>
Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Matt Ettus <matt@ettus.com>
Co-authored-by: Michael West <michael.west@ettus.com>
Co-authored-by: Moritz Fischer <moritz.fischer@ettus.com>
Co-authored-by: Nick Foster <nick@ettus.com>
Co-authored-by: Nicolas Cuervo <nicolas.cuervo@ettus.com>
Co-authored-by: Paul Butler <paul.butler@ni.com>
Co-authored-by: Paul David <paul.david@ettus.com>
Co-authored-by: Ryan Marlow <ryan.marlow@ettus.com>
Co-authored-by: Sugandha Gupta <sugandha.gupta@ettus.com>
Co-authored-by: Sylvain Munaut <tnt@246tNt.com>
Co-authored-by: Trung Tran <trung.tran@ettus.com>
Co-authored-by: Vidush Vishwanath <vidush.vishwanath@ettus.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Diffstat (limited to 'fpga/usrp2/models/CY7C1356C')
| -rw-r--r-- | fpga/usrp2/models/CY7C1356C/cy1356.inp | 140 | ||||
| -rw-r--r-- | fpga/usrp2/models/CY7C1356C/cy1356.v | 502 | ||||
| -rw-r--r-- | fpga/usrp2/models/CY7C1356C/readme.txt | 33 | ||||
| -rw-r--r-- | fpga/usrp2/models/CY7C1356C/testbench.v | 206 | 
4 files changed, 881 insertions, 0 deletions
| diff --git a/fpga/usrp2/models/CY7C1356C/cy1356.inp b/fpga/usrp2/models/CY7C1356C/cy1356.inp new file mode 100644 index 000000000..a55ffac39 --- /dev/null +++ b/fpga/usrp2/models/CY7C1356C/cy1356.inp @@ -0,0 +1,140 @@ +/*Address inputs only		0=LOW						 +	"Data is in HEX, four bytes (LSB,MSB)"	1=HIGH						 +	ZZZZZZZZZZZZZZZZ=Tri-state				G-WRITE = Global Write						 +	XXXXXXXXXXXXXXXX= Don't care			B-WRITE = Byte Write						 +	YYYY=unknown				BG-WRITE = BURST GLOBAL WRITE						 +						BB-WRITE = BURST BYTE WRITE						 + +*/						 +//		    				        CE3#  BW2# ADV/LD# +//	     					 CEN# CE2 WE#    +//    Add             IN                  OUT 	    CE1#    BW1#   +0000000000000000_XXXXXXXXXXXXXXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0  +0000000000000001_XXXXXXXXXXXXXXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000010_0000000000000000_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000011_0000000000000001_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000100_0000000000000010_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000101_0000000000000011_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000110_0000000000000100_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000111_0000000000000101_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001000_0000000000000110_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001001_0000000000000111_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001010_0000000000001000_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001011_0000000000001001_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001100_0000000000001010_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001101_0000000000001011_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001110_0000000000001100_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001111_0000000000001101_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000000000_0000000000001110_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000000001_0000000000001111_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000000010_xxxxxxxxxxxxxxxx_0000000000000000_0_0_1_0_1_X_X_0  +0000000000000011_xxxxxxxxxxxxxxxx_0000000000000001_0_0_1_0_1_X_X_0 +0000000000000100_xxxxxxxxxxxxxxxx_0000000000000010_0_0_1_0_1_X_X_0 +0000000000000101_xxxxxxxxxxxxxxxx_0000000000000011_0_0_1_0_1_X_X_0 +0000000000000110_xxxxxxxxxxxxxxxx_0000000000000100_0_0_1_0_1_X_X_0 +0000000000000111_xxxxxxxxxxxxxxxx_0000000000000101_0_0_1_0_1_X_X_0 +0000000000001000_xxxxxxxxxxxxxxxx_0000000000000110_0_0_1_0_1_X_X_0 +0000000000001001_xxxxxxxxxxxxxxxx_0000000000000111_0_0_1_0_1_X_X_0 +0000000000001010_xxxxxxxxxxxxxxxx_0000000000001000_0_0_1_0_1_X_X_0 +0000000000001011_xxxxxxxxxxxxxxxx_0000000000001001_0_0_1_0_1_X_X_0 +0000000000001100_xxxxxxxxxxxxxxxx_0000000000001010_0_0_1_0_1_X_X_0 +0000000000001101_xxxxxxxxxxxxxxxx_0000000000001011_0_0_1_0_1_X_X_0 +0000000000001110_xxxxxxxxxxxxxxxx_0000000000001100_0_0_1_0_1_X_X_0 +0000000000001111_xxxxxxxxxxxxxxxx_0000000000001101_0_0_1_0_1_X_X_0 +0000000000000000_xxxxxxxxxxxxxxxx_0000000000001110_0_0_1_0_0_0_0_0 +0000000000001111_xxxxxxxxxxxxxxxx_0000000000001111_0_0_1_0_1_X_X_0 +0000000000000000_0001000100010001_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_1_0_0 +0000000000000000_xxxxxxxxxxxxxxxx_0000000000001111_0_0_1_0_1_X_X_0 +0000000000001100_XXXX1010XXXX1010_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_0_0 +0000000000001011_xxxxxxxxxxxxxxxx_0001101000011010_0_0_1_0_1_X_X_0 +0000000000000111_0010001000100010_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_1_0 +0000000000000111_xxxxxxxxxxxxxxxx_0000000000001011_0_0_1_0_1_X_X_0 +0000000000001000_001100110011XXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000001001_xxxxxxxxxxxxxxxx_0011001100110111_0_0_1_0_0_0_0_0 +0000000000001001_xxxxxxxxxxxxxxxx_0000000000001000_0_0_1_0_0_0_1_0 +0000000000001001_0100010001000100_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_1_1_0  +0000000000001010_XXXX01010101XXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_1_1_0  +0000000000000000_xxxxxxxxxxxxxxxx_0100010101010100_0_0_1_0_0_0_0_0 +0000000000000001_xxxxxxxxxxxxxxxx_0000000000001010_0_0_1_0_0_0_0_0 +0000000000001001_0110011001100110_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000000000_0111011101110111_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000000101_xxxxxxxxxxxxxxxx_0100010101010100_0_0_1_0_0_0_1_0 +0000000000000100_xxxxxxxxxxxxxxxx_0110011001100110_0_0_1_0_0_1_0_0 +0000000000000001_1000XXXX1000XXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000000010_XXXX1001XXXX1001_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0  +0000000000001100_xxxxxxxxxxxxxxxx_0111011101110111_0_0_1_0_0_1_1_0 +0000000000001101_xxxxxxxxxxxxxxxx_0000000000000010_0_0_1_0_0_0_0_0 +0000000000001010_00010001XXXXXXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000001011_0000111100001111_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +0000000000001100_xxxxxxxxxxxxxxxx_0000000000001010_0_0_1_0_1_X_X_0 +0000000000000011_xxxxxxxxxxxxxxxx_0000000000001011_0_0_1_0_0_0_0_0 +0000000000000100_xxxxxxxxxxxxxxxx_0001000100100010_0_0_1_0_0_0_1_0 +0000000000000101_0011001100110011_xxxxxxxxxxxxxxxx_0_0_1_0_0_0_0_0 +0000000000000011_010001000100XXXX_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000100_0101010101010101_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000101_xxxxxxxxxxxxxxxx_0011001100110011_0_0_1_0_1_X_X_0 +0000000000000110_xxxxxxxxxxxxxxxx_0100010001001001_0_0_1_0_0_0_0_0 +0000000000000111_xxxxxxxxxxxxxxxx_0101010101010101_0_0_1_0_0_0_0_0 +0000000000001000_0110011001100110_xxxxxxxxxxxxxxxx_0_0_1_0_0_0_0_0 +0000000000000110_0111011101110111_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000111_1000100010001000_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000001000_xxxxxxxxxxxxxxxx_0110011001100110_0_0_1_0_1_X_X_0 +0000000000000110_xxxxxxxxxxxxxxxx_0111011101110111_0_0_1_0_0_0_1_0 +0000000000000111_xxxxxxxxxxxxxxxx_1000100010001000_0_0_1_0_0_1_0_0 +0000000000001000_0001XXXX0001XXXX_xxxxxxxxxxxxxxxx_0_0_1_0_0_0_1_0 +0000000000000110_XXXX0001XXXX0001_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000111_0001XXXX0001XXXX_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000001000_xxxxxxxxxxxxxxxx_0001011000010110_0_0_1_0_1_X_X_0 +0000000000001001_xxxxxxxxxxxxxxxx_0111000101110001_0_0_1_0_0_1_1_0  +0000000000001010_xxxxxxxxxxxxxxxx_0001100000011000_0_0_1_0_0_0_0_0 +0000000000001011_00100010XXXXXXXX_xxxxxxxxxxxxxxxx_0_0_1_0_0_1_1_0 +0000000000000001_XXXXXXXX00110011_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0  +0000000000000010_01000100XXXXXXXX_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000011_xxxxxxxxxxxxxxxx_0111011101110111_0_0_1_0_1_X_X_0 +0000000000000100_xxxxxxxxxxxxxxxx_0000000000000010_0_0_1_0_1_X_X_0 +0000000000000001_xxxxxxxxxxxxxxxx_0011001100110011_0_0_1_0_0_0_0_0 +0000000000000010_xxxxxxxxxxxxxxxx_0100010001001001_0_0_1_0_0_0_0_0 +0000000000000011_0001000100010001_xxxxxxxxxxxxxxxx_0_0_1_0_0_0_0_0 +0000000000000100_0010001000100010_xxxxxxxxxxxxxxxx_0_0_1_0_0_0_0_0 +0000000000000001_0011001100110011_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000010_0100010001000100_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000011_xxxxxxxxxxxxxxxx_0001000100010001_0_0_1_0_1_X_X_0 +0000000000000100_xxxxxxxxxxxxxxxx_0010001000100010_0_0_1_0_1_X_X_0 +0000000000000101_xxxxxxxxxxxxxxxx_0011001100110011_0_0_1_0_0_0_0_0 +0000000000000110_xxxxxxxxxxxxxxxx_0100010001000100_0_X_X_X_X_0_0_1  +0000000000000111_0101010101010101_xxxxxxxxxxxxxxxx_0_X_X_X_X_1_1_1  +0000000000001000_0110011001100110_xxxxxxxxxxxxxxxx_0_X_X_X_X_0_0_1  +0000000000000101_01110111XXXXXXXX_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +XXXXXXXXXXXXXXXX_XXXXXXXX10001000_xxxxxxxxxxxxxxxx_0_X_X_X_X_X_X_1  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0101010101010101_0_X_X_X_X_X_X_1  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0110011001100110_0_X_X_X_X_X_X_1  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0111011101110001_0_1_X_X_X_X_X_0  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0100010010001000_1_X_X_X_X_X_X_X  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0100010010001000_0_X_0_X_X_X_X_0  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_ZZZZZZZZZZZZZZZZ_0_X_X_1_X_X_X_0  +0000000000000101_xxxxxxxxxxxxxxxx_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_ZZZZZZZZZZZZZZZZ_1_X_X_X_X_X_X_X  +0000000000001000_xxxxxxxxxxxxxxxx_ZZZZZZZZZZZZZZZZ_0_0_1_0_0_0_1_0  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0101010101010101_1_X_X_X_X_X_X_X  +0000000000000111_xxxxxxxxxxxxxxxx_0101010101010101_0_0_1_0_1_X_X_0 +xxxxxxxxxxxxxxxx_XXXXXXXXXXXXXXXX_ZZZZZZZZZZZZZZZZ_1_X_X_X_X_X_X_X +0000000000001000_0000XXXX0000XXXX_ZZZZZZZZZZZZZZZZ_0_0_1_0_1_X_X_0 +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0111011101110001_1_X_X_X_X_X_X_X +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0111011101110001_1_X_X_X_X_X_X_X +0000000000000000_xxxxxxxxxxxxxxxx_0111011101110001_0_0_1_0_1_X_X_0 +0000000000000001_xxxxxxxxxxxxxxxx_0000100000001000_0_0_1_0_1_X_X_0 +0000000000000001_xxxxxxxxxxxxxxxx_0110011001100110_0_0_1_0_0_1_1_0 +0000000000000001_xxxxxxxxxxxxxxxx_0001000100010001_0_0_1_0_0_1_1_0  +0000000000000001_0001XXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0_0_1_0_0_0_1_0 +0000000000000001_XXXX0010XXXXXXXX_xxxxxxxxxxxxxxxx_0_0_1_0_0_1_0_0 +0000000000000001_XXXXXXXX0011XXXX_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0 +0000000000000000_XXXXXXXXXXXX0100_xxxxxxxxxxxxxxxx_0_0_1_0_1_X_X_0  +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0001001000110100_0_X_X_X_X_X_X_1 +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0110011001100110_0_X_X_X_X_X_X_1 +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0001001000110100_0_X_X_X_X_X_X_1 +XXXXXXXXXXXXXXXX_xxxxxxxxxxxxxxxx_0010001000100010_0_1_X_X_X_X_X_0 +xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxx_0011001100110011_0_1_x_x_x_x_x_x +xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxx_ZZZZZZZZZZZZZZZZ_0_1_x_x_x_x_x_x												 +//Lines =126 + + diff --git a/fpga/usrp2/models/CY7C1356C/cy1356.v b/fpga/usrp2/models/CY7C1356C/cy1356.v new file mode 100644 index 000000000..dd3cd56e8 --- /dev/null +++ b/fpga/usrp2/models/CY7C1356C/cy1356.v @@ -0,0 +1,502 @@ +// +// Copyright 2011 Ettus Research LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program.  If not, see <http://www.gnu.org/licenses/>. +// + +`define sb200   +//************************************************************************ +//************************************************************************ +//** This model is the property of Cypress Semiconductor Corp and is    ** +//** protected by the US copyright laws, any unauthorized copying and   ** +//** distribution is prohibited. Cypress reserves the right to change   **  +//** any of the functional specifications without any prior notice.     **  +//** Cypress is not liable for any damages which may result from the    ** +//** use of this functional model.					** +//**									** +//** File Name	:   CY7C1356						** +//**									** +//** Revision	:   1.0 - 08/03/2004					** +//**									** +//** The timings are to be selected by the user depending upon the 	** +//** frequency of operation from the datasheet.				** +//**									** +//** Model	:   CY7C1356C - NoBL Pipelined SRAM		** +//** Queries	:   MPD Applications					** +//** Website:    www.cypress.com/support              ** 		 +//************************************************************************ +//************************************************************************ + +`timescale  1ns /  10ps + +//	NOTE :	Any setup/hold errors will force input signal to x state +//		or if results indeterminant (write addr) core is reset x + +// define fixed values + +`define wordsize (18 -1)		// +`define no_words (1048576  -1)		// 1M x 18 RAM + +module cy1356 ( d, clk, a, bws, we_b, adv_lb, ce1b, ce2, ce3b, oeb, cenb, mode); + +inout	[`wordsize:0] 	d; +input 			clk, 		// clock input (R) +			we_b, 		// byte write enable(L) +			adv_lb, 	// burst(H)/load(L) address +			ce1b, 		// chip enable(L) +			ce2, 		// chip enable(H) +			ce3b, 		// chip enable(L) +			oeb, 		// async output enable(L)(read) +			cenb,		// clock enable(L) +			mode;		// interleave(H)/linear(L) burst +input 	[1:0] 		bws;		// byte write select(L) +input 	[18:0] 		a;		// address bus + +//	*** 	NOTE DEVICE OPERATES #0.01 AFTER CLOCK   	*** +//	*** THEREFORE DELAYS HAVE TO TAKE THIS INTO ACCOUNT	*** + + +//********************************************************************** +//  Timings for 225MHz +//********************************************************************** +`ifdef sb225 +  `define teohz #2.8 +  `define teolz #0 +  `define tchz #2.8 +  `define tclz #1.25 +   +  `define tco   #2.8 +  `define tdoh  #1.25 +  `define tas 1.4			 +  `define tah 0.4		 +`endif +//*********************************************************************** +//  Timings for 200MHz +//********************************************************************** +`ifdef sb200 +  `define teohz #3.2 +  `define teolz #0 +  `define tchz #3.2 +  `define tclz #1.5 +   +  `define tco   #3.2 +  `define tdoh  #1.5 + +  `define tas 1.5			 +  `define tah 0.5		 +`endif +//*********************************************************************** + +//********************************************************************** +//  This model is configured for 166 MHz Operation (CY7C1356-166).  +//********************************************************************** +`ifdef sb166 +  `define teohz #3.5 +  `define teolz #0 +  `define tchz #3.5 +  `define tclz #1.5 +   +  `define tco   #3.5 +  `define tdoh  #1.5 + +  `define tas 1.5			 +  `define tah 0.5		 +`endif + +reg 		notifier;	// error support reg's +reg 		noti1_0; +reg 		noti1_1; +reg 		noti1_2; +reg 		noti1_3; +reg 		noti1_4; +reg 		noti1_5; +reg 		noti1_6; +reg 	 	noti2; + + +wire chipen;     	// combined chip enable (high for an active chip) + +reg  chipen_d;		// _d = delayed +reg  chipen_o;		// _o = operational = delayed sig or _d sig + +wire writestate;   	// holds 1 if any of writebus is low +reg  writestate_d; +reg  writestate_o; + +wire loadcyc;        	// holds 1 for load cycles (setup and hold checks) +wire writecyc;     	// holds 1 for write cycles (setup and hold checks) +wire [1:0] bws;     	// holds the bws values + +wire [1:0] writebusb; 	// holds the "internal" bws bus based on we_b +reg  [1:0] writebusb_d; +reg  [1:0] writebusb_o; + +wire [2:0] operation;	// holds chipen, adv_ld and writestate +reg  [2:0] operation_d; +reg  [2:0] operation_o; + +wire [18:0] a;       	// address input bus +reg  [18:0] a_d; +reg  [18:0] a_o; + +reg  [`wordsize:0] do;      	// data  output reg +reg  [`wordsize:0] di;      	// data   input bus +reg  [`wordsize:0] dd;      	// data delayed bus + +wire tristate;		// tristate output (on a bytewise basis) when asserted +reg  cetri;       	// register set by chip disable which sets the tristate  +reg  oetri;    		// register set by oe which sets the tristate +reg  enable;         	// register to make the ram enabled when equal to 1 +reg  [18:0] addreg;   	// register to hold the input address +reg  [`wordsize:0] pipereg; 	// register for the output data + +reg  [`wordsize:0] mem [0:`no_words];	// RAM array + +reg  [`wordsize:0] writeword;	// temporary holding register for the write data +reg  burstinit;    	// register to hold a[0] for burst type +reg  [18:0] i;  	// temporary register used to write to all mem locs. +reg  writetri;		// tristate +reg  lw, bw;		// pipelined write functions +reg  we_bl; + + +wire [`wordsize:0]  d =  !tristate ?  do[`wordsize:0] : 18'bz ;	//  data bus + +assign chipen 		= (adv_lb == 1 ) ? chipen_d : +                                ~ce1b & ce2 & ~ce3b ; + +assign writestate 	= ~& writebusb; + +assign operation 	= {chipen, adv_lb, writestate}; + +assign writebusb[1:0] 	= (  we_b  ==0 & adv_lb ==0) ? bws[1:0]: +                          (  we_b  ==1 & adv_lb ==0) ? 2'b11 : +                          (  we_bl ==0 & adv_lb ==1) ? bws[1:0]: +                          (  we_bl ==1 & adv_lb ==1) ? 2'b11 : +                                                       2'bxx ; + +assign loadcyc 		= chipen & !cenb; + +assign writecyc 	= writestate_d & enable & ~cenb & chipen; // check + +assign tristate 	= cetri | writetri | oetri; + +pullup    (mode);  + +// formers for notices/errors etc +// +//$display("NOTICE      : xxx :"); +//$display("WARNING     : xxx :"); +//$display("ERROR   *** : xxx :"); + + +// initialize the output to be tri-state, ram to be disabled + +initial +	begin +// signals + +	  writetri 	= 0; +	  cetri 	= 1; +	  enable 	= 0; +	  lw		= 0; +	  bw		= 0; + +// error signals  + +	  notifier 	= 0; +	  noti1_0	= 0; +	  noti1_1	= 0; +	  noti1_2	= 0; +	  noti1_3	= 0; +	  noti1_4	= 0; +	  noti1_5	= 0; +	  noti1_6	= 0; +	  noti2		= 0;   + +end + + + +// asynchronous OE + +always @(oeb) +begin +  if (oeb == 1) +    oetri <= `teohz 1; +  else +    oetri <= `teolz 0; +end + +//	***	SETUP / HOLD VIOLATIONS		*** + +always @(noti2) +begin +$display("NOTICE      : 020 : Data bus    corruption"); +    force d =18'bx; +    #1; +    release d; +end + +always @(noti1_0) +begin +$display("NOTICE      : 010 : Byte write  corruption"); +    force bws = 2'bx; +    #1; +    release bws; +end + +always @(noti1_1) +begin +$display("NOTICE      : 011 : Byte enable corruption"); +    force we_b = 1'bx; +    #1; +    release we_b; +end + +always @(noti1_2) +begin +$display("NOTICE      : 012 : CE1B       corruption"); +    force ce1b =1'bx; +    #1; +    release ce1b; +end + +always @(noti1_3) +begin +$display("NOTICE      : 013 : CE2       corruption"); +    force ce2 =1'bx; +    #1; +   release ce2; +end + +always @(noti1_4) +begin +$display("NOTICE      : 014 : CE3B      corruption"); +    force ce3b =1'bx; +    #1; +    release ce3b; +end + +always @(noti1_5) +begin +$display("NOTICE      : 015 : CENB      corruption"); +    force cenb =1'bx; +    #1; +    release cenb; +end + +always @(noti1_6) +begin +$display("NOTICE      : 016 : ADV_LB   corruption"); +    force adv_lb = 1'bx; +    #1; +    release adv_lb; +end + +// synchronous functions from clk edge + +always @(posedge clk) +if (!cenb) +begin +#0.01;   +  // latch conditions on adv_lb + +  if (adv_lb)  +   we_bl 		<=	we_bl; +  else +   we_bl 		<=	we_b; + +  chipen_d		<=	chipen; +   + +      chipen_o	 	<=	chipen; +      writestate_o	<= 	writestate; +      writestate_d	<=	writestate_o;   +      writebusb_o	<=	writebusb; +      writebusb_d	<=	writebusb_o; +      operation_o	<=	operation; +      a_o		<=	a; +      a_d		<=	a_o; +      di		 =	d; + +  // execute previously pipelined fns + +  if (lw) begin			 +		loadwrite; +		lw =0; +	  end + +  if (bw) begin +		burstwrite; +		bw =0; +	  end + +  // decode input/piplined state + +    casex (operation_o) +    3'b0??	: turnoff; +    3'b101	: setlw; +    3'b111	: setbw; +    3'b100	: loadread; +    3'b110	: burstread; +    default : unknown; // output unknown values and display an error message +  endcase + +   do <= `tco  pipereg; + +end + +//			***	task section	*** + +task read; +begin +  if (enable) cetri <= `tclz 0; +  writetri <= `tchz 0; +  do <= `tdoh 18'hx; +  pipereg = mem[addreg]; +end +endtask + +task write; +begin +  if (enable) cetri <= `tclz 0; +  writeword = mem[addreg];  // set up a word to hold the data for the current location +  /* overwrite the current word for the bytes being written to */ +  if (!writebusb_d[1]) writeword[17:9]  = di[17:9]; +  if (!writebusb_d[0]) writeword[8:0]   = di[8:0]; +  writeword = writeword &  writeword; //convert z to x states +  mem[addreg] = writeword; // store the new word into the memory location +  //writetri <= `tchz 1;    // tristate the outputs +end +endtask + +task setlw; +begin +    lw =1; +    writetri <= `tchz 1;    // tristate the outputs +end +endtask + +task setbw; +begin +    bw =1; +    writetri <= `tchz 1;    // tristate the outputs +end +endtask + +task loadread; +begin +  burstinit = a_o[0]; +  addreg = a_o; +  enable = 1; +  read; +end +endtask + +task loadwrite; +begin +  burstinit = a_d[0]; +  addreg = a_d; +  enable = 1; +  write; +end +endtask + +task burstread; +begin +  burst; +  read; +end +endtask + +task burstwrite; +begin +  burst; +  write; +end +endtask + +task unknown; +begin +  do = 18'bx; +  // $display ("Unknown function:  Operation = %b\n", operation); +end +endtask + +task turnoff; +begin +  enable = 0; +  cetri <= `tchz 1; +  pipereg = 18'h0; +end +endtask + +task burst; +begin +  if (burstinit == 0 || mode == 0) +  begin +    case (addreg[1:0]) +      2'b00:   addreg[1:0] = 2'b01; +      2'b01:   addreg[1:0] = 2'b10; +      2'b10:   addreg[1:0] = 2'b11; +      2'b11:   addreg[1:0] = 2'b00; +      default: addreg[1:0] = 2'bxx; +    endcase +  end +  else +  begin +    case (addreg[1:0]) +      2'b00:   addreg[1:0] = 2'b11; +      2'b01:   addreg[1:0] = 2'b00; +      2'b10:   addreg[1:0] = 2'b01; +      2'b11:   addreg[1:0] = 2'b10; +      default: addreg[1:0] = 2'bxx; +    endcase +  end +end +endtask + +// IO checks + +specify +// specify the setup and hold checks + +// notifier will wipe memory as result is indeterminent + +$setuphold(posedge clk &&& loadcyc, a, `tas, `tah, notifier); + +// noti1 should make ip = 'bx; + +$setuphold(posedge clk, bws,  `tas, `tah, noti1_0); + +$setuphold(posedge clk, we_b, `tas, `tah, noti1_1); +$setuphold(posedge clk, ce1b, `tas, `tah, noti1_2); +$setuphold(posedge clk,  ce2, `tas, `tah, noti1_3); +$setuphold(posedge clk, ce3b, `tas, `tah, noti1_4); + +// noti2 should make d = 18'hxxxxx; + +$setuphold(posedge clk &&& writecyc, d, `tas, `tah, noti2); + +// add extra tests here. + +$setuphold(posedge clk,   cenb, `tas, `tah, noti1_5); +$setuphold(posedge clk, adv_lb, `tas, `tah, noti1_6); + +endspecify + +endmodule + + diff --git a/fpga/usrp2/models/CY7C1356C/readme.txt b/fpga/usrp2/models/CY7C1356C/readme.txt new file mode 100644 index 000000000..38d0d1c55 --- /dev/null +++ b/fpga/usrp2/models/CY7C1356C/readme.txt @@ -0,0 +1,33 @@ +*************************** +Cypress Semiconductor +MPD Applications +Verilog  model for NoBL SRAM CY7C1356 +Created: August 04, 2004 +Rev: 1.0 +*************************** + +This is the verilog model for the CY7C1356 along with the testbench and test vectors. + +Contact support@cypress.com if you have any questions. + +This directory has 4 files. including this readme. + +1)cy7c1356c.v -> Verilog model for CY7C1356c + +2)cy1356.inp -> Test Vector File used for testing the verilog model   + +3)testbench.v -> Test bench used for testing the verilog model + + +COMPILING METHOD : +------------------ + +        	verilog  +define+<speed_bin>	<Main File>	<Test bench File> + +	Ex: +		verilog  +define+sb133  	CY7C1356c.v 	testbench.v + +VERIFIED WITH: +-------------- + +VERILOG-XL 2.2
\ No newline at end of file diff --git a/fpga/usrp2/models/CY7C1356C/testbench.v b/fpga/usrp2/models/CY7C1356C/testbench.v new file mode 100644 index 000000000..96f771970 --- /dev/null +++ b/fpga/usrp2/models/CY7C1356C/testbench.v @@ -0,0 +1,206 @@ +// +// Copyright 2011 Ettus Research LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program.  If not, see <http://www.gnu.org/licenses/>. +// + +`timescale  1ns /  10ps + + +// +//				CY7C1356  +//			Simulatiom of Verilog model  +// +// + +// +//			test bench for US vector input +// +// + +//	define speed 166MHz + +`define tx10 #6  +`define tx08 #4.8 +`define tx05 #3 +`define tx04 #2.4 +`define tx02 #1.2 + +/* +`define tx10 #4.0		//    period +`define tx08 #3.2		//0.8 period +`define tx05 #2.0		//0.5 period  250MHZ +`define tx04 #1.6		//0.4 period +`define tx02 #0.8		//0.2 period + +`define tx10 #4.4		//    period +`define tx08 #3.52		//0.8 period +`define tx05 #2.2		//0.5 period  225MHZ +`define tx04 #1.76		//0.4 period +`define tx02 #0.88		//0.2 period + +`define tx10 #5			//    period +`define tx08 #4			//0.8 period +`define tx05 #2.5		//0.5 period  200MHZ +`define tx04 #2.0		//0.4 period +`define tx02 #1.0		//0.2 period +*/ + + +module rw_test; + +`define num_vectors    126 +`define	impi {a[15:0],io[15:0],tsti[15:0],cenb,ce1b,ce2,ce3b,bweb,bwb,adv_lb} + + +reg	[57:1]	lsim_vectors	[1:`num_vectors]; + + +reg		clk; +reg		adv_lb; +reg		ce1b;		//cs1b +reg		ce2;		//cs2 +reg		ce3b;		//cs3b +reg	[1:0]	bwb; +reg		bweb; +reg		oeb; +reg		ftb; +reg		mode;		//lbob +reg		cenb;		//zz +reg		tp42;		//sclk +reg		tp39;		//se +reg		tp38;		//tm +reg	[19:0]	a; +reg	[17:0]	io; +reg	[17:0]	tsti; +reg		vddq; +reg		vssqr; +reg		iosel; + + +wire	[17:0]	d = iosel ? io[17:0] : 18'bz; + +reg 		noti3; +reg		strb,j; +integer		vector,i; + + + +cy1356 testram ( d, clk, a, bwb, bweb, adv_lb, ce1b, ce2, ce3b, oeb, cenb, mode); + +initial +begin +  $dumpfile("dumpfile.dump"); +  $dumpvars(0,rw_test); +end + +initial +begin +io	= 18'bz; +ftb 	= 1; +oeb 	= 0; +a[19:16] = 4'h0; +mode	= 0; +strb 	= 0; +tp38	= 0; +tp39	= 0; +tp42	= 0; +`tx02; +forever `tx05 strb = ~strb; +end + +initial +begin +clk	= 0; +forever `tx05 clk =~clk; +end + +initial + begin +  + $readmemb("cy1356.inp", lsim_vectors);     //load input vector file + + `impi = lsim_vectors[1];         //apply 1st test vector + + for (vector = 2; vector <= `num_vectors; vector = vector + 1) +   @(posedge strb) +    begin + + `impi = lsim_vectors[vector]; +  + +       +      io[16:13] = io[07:04]; +      io[12:09] = io[07:04]; +      io[07:04] = io[03:00]; +      io[03:00] = io[03:00]; +       +      io[17] = io[16] ^^ io[15] ^^ io[14] ^^ io[13] ^^ io[11] ^^ io[11] ^^ io[10] ^^ io[9]; +      io[8] = io[7] ^^ io[6] ^^ io[5] ^^ io[4] ^^ io[3] ^^ io[2] ^^ io[1] ^^ io[0]; + +      tsti[16:13] = tsti[07:04]; +      tsti[12:09] = tsti[07:04]; +      tsti[07:04] = tsti[03:00]; +      tsti[03:00] = tsti[03:00]; +       +      tsti[17] = tsti[16] ^^ tsti[15] ^^ tsti[14] ^^ tsti[13] ^^ tsti[11] ^^ tsti[11] ^^ tsti[10] ^^ tsti[9]; +      tsti[8] = tsti[7] ^^ tsti[6] ^^ tsti[5] ^^ tsti[4] ^^ tsti[3] ^^ tsti[2] ^^ tsti[1] ^^ tsti[0]; + +      if (io === 18'hxxxxx) +       iosel = `tx05 0; +      else +       iosel = `tx05 1; + +    end +   #15 $finish; // This prevents simulation beyond end of test patterns + end + +always@(posedge clk) +begin +   +  if (io !== 18'hxxxxx) 	//input cycle +  begin +    $display("NOTICE      : 001 : line = %d OK",vector -1); +  end +  else				//do the test +  begin +    if (d == tsti) +    begin +    $display("NOTICE      : 002 : line = %d OK",vector -1); +    end +    else +    begin +      j =0; +      for (i =0;i< 18; i=i+1) +      begin +        if(tsti[i] !== 1'bx) +          begin +           if (d[i] !== tsti[i]) j = 1; +          end +	else +	  j = 0; +      end +      if (j)  +    $display("ERROR   *** : 003 : line = %d data = %b test = %b",vector -1,d,tsti); +      else +    $display("NOTICE      : 003 : line = %d OK",vector -1); +    end +  end +end + +endmodule + + + + | 
