<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikis.ece.iastate.edu/cpre584/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cnel711</id>
	<title>Cpre584 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wikis.ece.iastate.edu/cpre584/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cnel711"/>
	<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Special:Contributions/Cnel711"/>
	<updated>2026-09-04T22:52:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=901</id>
		<title>Analyze the Simpleton Basic App</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=901"/>
		<updated>2013-02-20T01:22:50Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Simpleton is a minimalist Convey personality that has two custom instructions.  The first increments a value in an AEG register.  The second uses a single memory controller to increment a value in coprocessor memory.&lt;br /&gt;
&lt;br /&gt;
Advantages of using Simpleton as the start of your project include:&lt;br /&gt;
* It&#039;s minimalist&lt;br /&gt;
* It&#039;s well commented&lt;br /&gt;
* The top level module, personality.v, replaces cae_pers.v with awesomeness:&lt;br /&gt;
** The port declaration is only 50 lines and no longer scary (cae_pers.v is &amp;gt;150 lines)&lt;br /&gt;
** It wraps the memory controller interfaces in to unpacked arrays so you can easily use generate loops&lt;br /&gt;
** It hides unnecessary instruction decode and clock logic&lt;br /&gt;
** It gets rid of the CSR interface (because, honestly, you weren&#039;t going to use it anyway)&lt;br /&gt;
** Adds a console bell at the end of the run and runcp scripts&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
All of Chad&#039;s Convey projects are located on the RCL SVN.  To checkout all projects, or just a tar.gz of simpleton:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/cae_simpleton/simpleton.tar.gz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open and analyze the following files, learn the directory structure, etc:&lt;br /&gt;
&lt;br /&gt;
* /README&lt;br /&gt;
* /cae_simpleton/src/run&lt;br /&gt;
* /cae_simpleton/src/runcp&lt;br /&gt;
* /cae_simpleton/src/UserApp.c&lt;br /&gt;
* /cae_simpleton/src/cp.s&lt;br /&gt;
* /cae_simpleton/sim/CaeIsa.cpp&lt;br /&gt;
* /cae_simpleton/verilog/personality.v&lt;br /&gt;
* /cae_simpleton/coregen/README&lt;br /&gt;
* /cae_simpleton/phys&lt;br /&gt;
* /cae_simpleton/makefile.include&lt;br /&gt;
* /personalities/customdb&lt;br /&gt;
* /personalities/65100.1.1.0/&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Test_Benches&amp;diff=900</id>
		<title>Test Benches</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Test_Benches&amp;diff=900"/>
		<updated>2013-02-20T00:56:05Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: New page: == Overview == Nobody likes waiting 6 minutes for Convey&amp;#039;s hardware simulator to finish in order to see the result of a small change of code.  By writing a test bench, you can be looking a...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Nobody likes waiting 6 minutes for Convey&#039;s hardware simulator to finish in order to see the result of a small change of code.  By writing a test bench, you can be looking at waveforms in a few seconds.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
&lt;br /&gt;
# Open Xilinx&#039;s ISE from the terminal (make sure your [[Convey environment setup | environmental variables]] are set):&lt;br /&gt;
 ise &amp;amp;&lt;br /&gt;
# Create or open a project.  The devices on the HC-1 and HC-2 are Virtex 5 FPGAs (xc5vlx330, -2, ff1760).&lt;br /&gt;
# Add the DUT (DUT = device under test; i.e. the verilog file)&lt;br /&gt;
# Create a new testbench file (example below)&lt;br /&gt;
# Simulate&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Basics of any testbench:&lt;br /&gt;
 - create reg&#039;s for all inputs to the DUT (device under test)&lt;br /&gt;
 - create wires for all the outputs of the DUT&lt;br /&gt;
 - use an initial block to send the DUT stimulus&lt;br /&gt;
 &lt;br /&gt;
According to software, correct output of simulation &lt;br /&gt;
should be (seed=0, size=32, exact=1):&lt;br /&gt;
hash(0)  = 2;&lt;br /&gt;
hash(10) = 12;&lt;br /&gt;
hash(20) = 4;&lt;br /&gt;
hash(30) = 19;&lt;br /&gt;
*/&lt;br /&gt;
`timescale 1ns / 1ps&lt;br /&gt;
module hash_tb();&lt;br /&gt;
&lt;br /&gt;
reg clock, reset;&lt;br /&gt;
reg stall, exact_match;&lt;br /&gt;
reg [199:0] key;&lt;br /&gt;
reg [31:0]  seed, table_size;&lt;br /&gt;
reg [1:0]   control;&lt;br /&gt;
&lt;br /&gt;
wire [199:0] key_out;&lt;br /&gt;
wire [31:0]  index;&lt;br /&gt;
wire [1:0]   control_out;&lt;br /&gt;
&lt;br /&gt;
always&lt;br /&gt;
begin&lt;br /&gt;
	#1 clock &amp;lt;= 0;&lt;br /&gt;
	#1 clock &amp;lt;= 1;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
hash dut(&lt;br /&gt;
    // Inputs&lt;br /&gt;
    .rst(reset),&lt;br /&gt;
    .clk(clock),&lt;br /&gt;
    .stall(stall),&lt;br /&gt;
    .key(key),&lt;br /&gt;
    .seed(seed),&lt;br /&gt;
    .table_size(table_size),&lt;br /&gt;
    .ctr_in(control),&lt;br /&gt;
    .exact_match(exact_match),&lt;br /&gt;
    // Outputs&lt;br /&gt;
    .key_out(key_out),&lt;br /&gt;
    .table_index(index),&lt;br /&gt;
    .ctr_out(control_out)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
initial&lt;br /&gt;
begin&lt;br /&gt;
	reset &amp;lt;= 1;&lt;br /&gt;
	stall &amp;lt;= 1;&lt;br /&gt;
	key   &amp;lt;= 0;&lt;br /&gt;
	seed  &amp;lt;= 0;&lt;br /&gt;
	table_size &amp;lt;= 32;&lt;br /&gt;
	control &amp;lt;= 3;&lt;br /&gt;
	exact_match &amp;lt;= 1;&lt;br /&gt;
	&lt;br /&gt;
	#50&lt;br /&gt;
	&lt;br /&gt;
	reset &amp;lt;= 0;&lt;br /&gt;
	stall &amp;lt;= 1;&lt;br /&gt;
	key   &amp;lt;= 0;&lt;br /&gt;
	&lt;br /&gt;
	#100&lt;br /&gt;
	&lt;br /&gt;
	stall &amp;lt;= 0;&lt;br /&gt;
	key   &amp;lt;= 200&#039;h0123456789ABCDEF0123456789ABCDEF;&lt;br /&gt;
&lt;br /&gt;
	#100&lt;br /&gt;
	&lt;br /&gt;
	key &amp;lt;= 0;&lt;br /&gt;
	&lt;br /&gt;
	#100&lt;br /&gt;
	&lt;br /&gt;
	key &amp;lt;= 10;&lt;br /&gt;
	control &amp;lt;= 0;&lt;br /&gt;
	&lt;br /&gt;
	#100&lt;br /&gt;
	&lt;br /&gt;
	key &amp;lt;= 20;&lt;br /&gt;
	&lt;br /&gt;
	#100&lt;br /&gt;
	&lt;br /&gt;
	key &amp;lt;= 30;&lt;br /&gt;
	control &amp;lt;= 0;&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
endmodule&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=899</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=899"/>
		<updated>2013-02-20T00:49:25Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Convey HC-1 Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Convey PDK Tutorial]]&lt;br /&gt;
* [[Test Benches | Use Test Benches to test components of your Personality]]&lt;br /&gt;
* [[Using the Memory Controller Interface]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
&amp;lt;!-- * Convey pdk tutorial: [[image:ConveyTutorial1.pdf]] (uses newCnyProject script) --&amp;gt;&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using the Timing Analyzer]]&lt;br /&gt;
&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
* &#039;&#039;&#039;[[Frequently Asked Questions]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.asic-world.com www.asic-world.com] - Great Tutorials for those Learning HDLs&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.c7t-hdl.com/Docs/C7T_AN05_Customized_WaveView_ModelSim_ISE.pdf Modelsim and ISE]&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://www.ece.msstate.edu/~reese/EE4743/lectures/verilog_intro_2002/verilog_intro_2002.pdf Verilog vs. VHDL]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
* [[Media:Modelsim_pe_user_10.0d.pdf | Modelsim Users Guide]]&lt;br /&gt;
* [[Useful Modelsim Commands]]&lt;br /&gt;
* [http://sn0v.wordpress.com/2012/12/07/installing-cuda-5-on-ubuntu-12-04/ Installing CUDA on Ubuntu]&lt;br /&gt;
* [http://graphics.stanford.edu/~mhouston/public_talks/R520-mhouston.pdf General Purpose Computation on GPUs (GPGPU)]&lt;br /&gt;
*  Convey vector personalities offer OpenMP-like programming approach with FPGA accelerating. [http://www.fpl2012.org/Presentations/W4B2.pdf]&lt;br /&gt;
* [[Media:Connect_Remotely_Via_VPN.pdf | Guide to Remote Connecting]]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2013 Teams ==&lt;br /&gt;
* [[Team Cyc05]]&lt;br /&gt;
* [[Team Challenger]]&lt;br /&gt;
* [[Team Blitz]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=898</id>
		<title>Analyze the Simpleton Basic App</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=898"/>
		<updated>2013-02-20T00:42:00Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Simpleton is a minimalist Convey personality that has two custom instructions.  The first increments a value in an AEG register.  The second uses a single memory controller to increment a value in coprocessor memory.&lt;br /&gt;
&lt;br /&gt;
Advantages of using Simpleton as the start of your project include:&lt;br /&gt;
* It&#039;s minimalist&lt;br /&gt;
* It&#039;s well commented&lt;br /&gt;
* The top level module, personality.v is awesome:&lt;br /&gt;
** The port declaration is only 50 lines and no longer scary (cae_pers.v is &amp;gt;150 lines)&lt;br /&gt;
** It wraps the memory controller interfaces in to unpacked arrays so you can easily use generate loops&lt;br /&gt;
** It hides unnecessary instruction decode and clock logic&lt;br /&gt;
** It gets rid of the CSR interface (because, honestly, you weren&#039;t going to use it anyway)&lt;br /&gt;
** Adds a console bell at the end of the run and runcp scripts&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
All of Chad&#039;s Convey projects are located on the RCL SVN.  To checkout all projects, or just a tar.gz of simpleton:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/cae_simpleton/simpleton.tar.gz&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open and analyze the following files, learn the directory structure, etc:&lt;br /&gt;
&lt;br /&gt;
* /README&lt;br /&gt;
* /cae_simpleton/src/run&lt;br /&gt;
* /cae_simpleton/src/runcp&lt;br /&gt;
* /cae_simpleton/src/UserApp.c&lt;br /&gt;
* /cae_simpleton/src/cp.s&lt;br /&gt;
* /cae_simpleton/sim/CaeIsa.cpp&lt;br /&gt;
* /cae_simpleton/verilog/personality.v&lt;br /&gt;
* /cae_simpleton/coregen/README&lt;br /&gt;
* /cae_simpleton/phys&lt;br /&gt;
* /cae_simpleton/makefile.include&lt;br /&gt;
* /personalities/customdb&lt;br /&gt;
* /personalities/65100.1.1.0/&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=897</id>
		<title>Analyze the Simpleton Basic App</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=897"/>
		<updated>2013-02-20T00:33:50Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Simpleton is a minimalist Convey personality that has two custom instructions.  The first increments a value in an AEG register.  The second uses a single memory controller to increment a value in coprocessor memory.&lt;br /&gt;
&lt;br /&gt;
Advantages of using Simpleton as the start of your project include:&lt;br /&gt;
* It&#039;s minimalist&lt;br /&gt;
* It&#039;s well commented&lt;br /&gt;
* The top level module, personality.v is awesome:&lt;br /&gt;
** The port declaration is only 50 lines and no longer scary (cae_pers.v is &amp;gt;150 lines)&lt;br /&gt;
** It wraps the memory controller interfaces in to unpacked arrays so you can easily use generate loops&lt;br /&gt;
** It hides unnecessary instruction decode and clock logic&lt;br /&gt;
** It gets rid of the CSR interface (because, honestly, you weren&#039;t going to use it anyway)&lt;br /&gt;
** Adds a console bell at the end of the run and runcp scripts&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
All of Chad&#039;s Convey projects are located on the RCL SVN.  To checkout:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open and analyze the following files, learn the directory structure, etc:&lt;br /&gt;
&lt;br /&gt;
* /README&lt;br /&gt;
* /cae_simpleton/src/run&lt;br /&gt;
* /cae_simpleton/src/runcp&lt;br /&gt;
* /cae_simpleton/src/UserApp.c&lt;br /&gt;
* /cae_simpleton/src/cp.s&lt;br /&gt;
* /cae_simpleton/sim/CaeIsa.cpp&lt;br /&gt;
* /cae_simpleton/verilog/personality.v&lt;br /&gt;
* /cae_simpleton/coregen/README&lt;br /&gt;
* /cae_simpleton/phys&lt;br /&gt;
* /cae_simpleton/makefile.include&lt;br /&gt;
* /personalities/customdb&lt;br /&gt;
* /personalities/65100.1.1.0/&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=896</id>
		<title>Analyze the Simpleton Basic App</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=896"/>
		<updated>2013-02-20T00:28:31Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Simpleton is a minimalist Convey personality that has two custom instructions.  The first increments a value in an AEG register.  The second uses a single memory controller to increment a value in coprocessor memory.&lt;br /&gt;
&lt;br /&gt;
Advantages of using Simpleton as the start of your project include:&lt;br /&gt;
* It&#039;s minimalist&lt;br /&gt;
* It&#039;s well commented&lt;br /&gt;
* The top level module, personality.v is awesome:&lt;br /&gt;
** The port declaration is only 50 lines and no longer scary (cae_pers.v is &amp;gt;150 lines)&lt;br /&gt;
** It wraps the memory controller interfaces in to unpacked arrays so you can easily use generate loops&lt;br /&gt;
** It hides unnecessary instruction decode and clock logic&lt;br /&gt;
** It gets rid of the CSR interface (because, honestly, you weren&#039;t going to use it anyway)&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
All of Chad&#039;s Convey projects are located on the RCL SVN.  To checkout:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open and analyze the following files, learn the directory structure, etc:&lt;br /&gt;
&lt;br /&gt;
* /README&lt;br /&gt;
* /cae_simpleton/src/run&lt;br /&gt;
* /cae_simpleton/src/runcp&lt;br /&gt;
* /cae_simpleton/src/UserApp.c&lt;br /&gt;
* /cae_simpleton/src/cp.s&lt;br /&gt;
* /cae_simpleton/sim/CaeIsa.cpp&lt;br /&gt;
* /cae_simpleton/verilog/personality.v&lt;br /&gt;
* /cae_simpleton/coregen/README&lt;br /&gt;
* /cae_simpleton/phys&lt;br /&gt;
* /cae_simpleton/makefile.include&lt;br /&gt;
* /personalities/customdb&lt;br /&gt;
* /personalities/65100.1.1.0/&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=895</id>
		<title>Analyze the Simpleton Basic App</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=895"/>
		<updated>2013-02-20T00:14:20Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download the simpleton app:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 svn co svn://rcl-1.ece.iastate.edu/projects/convey/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the [[Running the Vector Adder Example Application | vector adder example]] for how to make and run the project.&lt;br /&gt;
&lt;br /&gt;
Open and analyze the following files, learn the directory structure, etc:&lt;br /&gt;
&lt;br /&gt;
* /cae_simpleton/src/run&lt;br /&gt;
* /cae_simpleton/src/runcp&lt;br /&gt;
* /cae_simpleton/src/Userapp.c&lt;br /&gt;
* /cae_simpleton/src/cp.s&lt;br /&gt;
* /cae_simpleton/sim/CaeIsa.cpp&lt;br /&gt;
* /cae_simpleton/verilog/personality.v&lt;br /&gt;
* /cae_simpleton/coregen/README&lt;br /&gt;
* /cae_simpleton/phys&lt;br /&gt;
* /cae_simpleton/makefile.include&lt;br /&gt;
* /personalities/customdb&lt;br /&gt;
* /personalities/65100.1.1.0/&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Adding_VHDL_Files_to_a_Project&amp;diff=889</id>
		<title>Adding VHDL Files to a Project</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Adding_VHDL_Files_to_a_Project&amp;diff=889"/>
		<updated>2013-02-18T18:11:51Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Instantiation in Verilog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using Your VHDL Module In The Top Level cae_pers.v File==&lt;br /&gt;
=== Entity Definition ===&lt;br /&gt;
&lt;br /&gt;
 entity test is&lt;br /&gt;
 port(&lt;br /&gt;
      in1 : in std_logic;&lt;br /&gt;
      in2 : in std_logic;&lt;br /&gt;
      out1: out std_logic);&lt;br /&gt;
 end entity;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Instantiation in Verilog ===&lt;br /&gt;
&lt;br /&gt;
*It will look exactly like any other module instantiation in Verilog.&lt;br /&gt;
 &amp;lt;code&amp;gt;test t1(&lt;br /&gt;
      .in1(myInput),&lt;br /&gt;
      .in2(myOtherInput),&lt;br /&gt;
      .out(myOutput)&lt;br /&gt;
      );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Another easier way is to use this [[Media:Vhd2v isnt.txt|Python script to generate instantiation code in Verilog]]. Use the following command:&lt;br /&gt;
 &amp;lt;code&amp;gt;$ source cnyEnv&lt;br /&gt;
 $ mv ./vhd2v_inst.txt /.vhd2v_isnt.py&lt;br /&gt;
 $ ./vhd2v_inst.py &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module With Vectors ===&lt;br /&gt;
*If we change the earlier definition to look like the following&lt;br /&gt;
 entity testWithVector is&lt;br /&gt;
 port(&lt;br /&gt;
      in1 : in std_logic_vector(63 downto 0);&lt;br /&gt;
      in2 : in std_logic_vector(63 downto 0);&lt;br /&gt;
      out1: out std_logic);&lt;br /&gt;
 end entity;&lt;br /&gt;
*Notice that the expected input is a 64 bit wide signal path&lt;br /&gt;
*Assume that you have a Verilog reg as follows&lt;br /&gt;
 reg [63:0] myReg;&lt;br /&gt;
 reg [63:0] myOtherReg;&lt;br /&gt;
*Modlesim will let you directly map myReg to in1 or in2 (see below), however ISE will generally fail to compile this code, with an error about the expected size being incorrect&lt;br /&gt;
 test t1(&lt;br /&gt;
      .in1(myReg),&lt;br /&gt;
      .in2(myOtherReg),&lt;br /&gt;
      .out(myOutput)&lt;br /&gt;
      );&lt;br /&gt;
*The easiest way around this is to map myReg to a wire, and use that in the instantiation of your VHDL module&lt;br /&gt;
 wire [63:0] wire_myReg;&lt;br /&gt;
 wire [63:0] wire_myOtherReg;&lt;br /&gt;
 assign wire_myReg = myReg;&lt;br /&gt;
 assign wire_myOtherReg = myOtherReg;&lt;br /&gt;
 &lt;br /&gt;
 test t1(&lt;br /&gt;
      .in1(wire_myReg),&lt;br /&gt;
      .in2(wire_myOtherReg),&lt;br /&gt;
      .out(myOutput)&lt;br /&gt;
      );&lt;br /&gt;
&lt;br /&gt;
== Include Option 1 ==&lt;br /&gt;
Use the USER_VHDL_FILES variable in the project makefile:&lt;br /&gt;
 &lt;br /&gt;
 USER_VHDL_FILES += file1.vhd file2.vhd&lt;br /&gt;
 &lt;br /&gt;
The PDK makefile automatically compiles your VHDL files for simulation and includes them in the Xilinx project file for synthesis.  Note that compile order is important with VHDL, so you should list the files in the appropriate order you want them compiled.&lt;br /&gt;
&lt;br /&gt;
== Include Option 1.1 ==&lt;br /&gt;
Use the USER_VHDL_FILES variable in the project&#039;s top level Makefile.include:&lt;br /&gt;
 USER_VHDL_FILES += ../vhdl/file.vhd&lt;br /&gt;
*Still use the ../ because this path will get included in the lower level directories, and the makefile there will still expect a relative path.&lt;br /&gt;
&lt;br /&gt;
== Include Option 2 == &lt;br /&gt;
Create site and/or user directories that include your own makefile.  The PDK automatically searches these directories for a file called &amp;quot;Makefile.cnypdk&amp;quot; and includes that in the default makefile:&lt;br /&gt;
 &lt;br /&gt;
CNY_PDK_USER_DIRECTORY&lt;br /&gt;
CNY_PDK_SITE_DIRECTORY&lt;br /&gt;
 &lt;br /&gt;
This is a good place to set which simulator you use, set up signal tracing, etc.&lt;br /&gt;
 &lt;br /&gt;
== Other information == &lt;br /&gt;
There are also several variables in the makefile that allow you to create dependencies for your own make flow.  For example, the variable USER_SIM_DEPENDENCIES is listed as a dependency for the simulation, so if you want to run your own compile step before running the simulation, you can set that variable and the dependency will cause it to run that step at the right time.  Others are USER_COMPILE_DEPENDENCIES and USER_PHYS_DEPENDENCIES, which is a dependency of the synthesis target.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Frequently_Asked_Questions&amp;diff=800</id>
		<title>Frequently Asked Questions</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Frequently_Asked_Questions&amp;diff=800"/>
		<updated>2013-02-04T21:35:35Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* How to run Modelsim GUI while simulating? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== How to add new verilog files or directories to a PDK project? ===&lt;br /&gt;
&lt;br /&gt;
By default, the PDK looks like the project/verilog directory and compiles all .v files found there.  To add other Verilog directories, use this makefile variable:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;USER_VERILOG_DIRS  += ../../verilog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to run Modelsim GUI while simulating? ===&lt;br /&gt;
You may run the simulation in interactive mode by adding the following line to the makefile in the sim directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;USER_SIM_OPTIONS = -gui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is to edit the test bench (sim/tb_user.v shown below) to dump the waveforms to a file, then run the hardware simulator via command line, and finally open up the waveform file (vsim -v ./sim/vsim.wlf).  This has the benefit of dumping all the signals (if your wave.do file was missing something, you&#039;d have to rerun the simulation).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;`timescale 1 ns / 1 ps&lt;br /&gt;
&lt;br /&gt;
module tb_user();&lt;br /&gt;
&lt;br /&gt;
  initial begin&lt;br /&gt;
    // Insert user code here, such as signal dumping&lt;br /&gt;
    // set CNY_PDK_TB_USER_VLOG variable in sim/makefile&lt;br /&gt;
`include &amp;quot;PDK_SIM_CONFIG.vh&amp;quot;&lt;br /&gt;
`ifdef AE0_PRESENT&lt;br /&gt;
    $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
`endif&lt;br /&gt;
`ifdef AE1_PRESENT&lt;br /&gt;
    $wlfdumpvars(5,testbench.cae_fpga1.ae_top.core.cae_pers);&lt;br /&gt;
`endif&lt;br /&gt;
`ifdef AE2_PRESENT&lt;br /&gt;
    $wlfdumpvars(5,testbench.cae_fpga2.ae_top.core.cae_pers);&lt;br /&gt;
`endif&lt;br /&gt;
`ifdef AE3_PRESENT&lt;br /&gt;
    $wlfdumpvars(5,testbench.cae_fpga3.ae_top.core.cae_pers);&lt;br /&gt;
`endif&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emulator Related ==&lt;br /&gt;
&lt;br /&gt;
=== How to read AEG registers in the emulator? ===&lt;br /&gt;
You can use the following function:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
uint64 AegRead(int aeId, int aegIdx);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to read/write the memory in the emulator? ===&lt;br /&gt;
You can use the functions AeMemLoad and AeMemStore to read and write from/to the memory as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
bool AeMemLoad (int aeId, int mcId, unint64 addr, int size, bool bSigned, uint64 &amp;amp;data); &amp;lt;br /&amp;gt;&lt;br /&gt;
bool AeMemStore (int aeId, int mcId, unint64 addr, int size, bool bSigned, uint64 &amp;amp;data);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=684</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=684"/>
		<updated>2012-12-05T14:58:25Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;br /&gt;
&lt;br /&gt;
== Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? ==&lt;br /&gt;
&lt;br /&gt;
Start a new project in ISE with your module.  The Timing Analyzer is available in the Tools file menu. You should add a .ucf file containing the period constraint of 150 MHz:&lt;br /&gt;
&lt;br /&gt;
 NET &amp;quot;clk&amp;quot; TNM_NET = &amp;quot;TN_CLK&amp;quot;;&lt;br /&gt;
 TIMESPEC &amp;quot;TS_CLK&amp;quot; = PERIOD &amp;quot;TN_CLK&amp;quot; 6.667 ns HIGH 50 %;&lt;br /&gt;
&lt;br /&gt;
In this example, clk is the name of the net used as your clock signal.&lt;br /&gt;
&lt;br /&gt;
== Other Advice ==&lt;br /&gt;
=== Reset, Set, Enable for Flip Flops ===&lt;br /&gt;
A world about flip-flops... the distributed flip-flops contain their own Reset, Set, and Enable signals, but have priority in that order (Reset &amp;gt; Set &amp;gt; Enable).  If assigning data to flip-flops, try using this priority in your statements in order to use less logic.  If your logic is not in this order, you may end up using extra LUTs.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
always @ (posedge clk) begin&lt;br /&gt;
if (reset)&lt;br /&gt;
  d &amp;lt;= 0;&lt;br /&gt;
else if (set)&lt;br /&gt;
  d &amp;lt;= 1;&lt;br /&gt;
else if (enable)&lt;br /&gt;
  d &amp;lt;= YOUR COMBO LOGIC;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Register Rebalancing ===&lt;br /&gt;
In synchronous designs, Xilinx XST can move logic forward or backward a register stage in order to balance the amount of work done in each register stage (thus improving timing).  The side affects include radical changes to the structure of the design and an increase the synthesis run time.  Modules with the Keep Heirarchy constraint will not rebalance registers.&lt;br /&gt;
&lt;br /&gt;
To enable register rebalancing, you need to edit the template.xst file (/opt/convey/pdk/latest/phys/template.xst).  If you don&#039;t have access, you can edit your project&#039;s copy of the template: phys/cae_fpga.xst by changing register_rebalancing to YES.  Warning: After running &#039;&#039;&#039;make clean&#039;&#039;&#039; and &#039;&#039;&#039;make&#039;&#039;&#039;, the original template will replace any user edits to the cae_fpga.xst file.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=683</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=683"/>
		<updated>2012-12-04T19:11:25Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;br /&gt;
&lt;br /&gt;
== Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? ==&lt;br /&gt;
&lt;br /&gt;
Start a new project in ISE with your module.  The Timing Analyzer is available in the Tools file menu, or you can just synthesize your module; the console gives a rough idea about the module&#039;s timing and max frequency (should be 150 MHz or more).&lt;br /&gt;
&lt;br /&gt;
== Other Advice ==&lt;br /&gt;
=== Reset, Set, Enable for Flip Flops ===&lt;br /&gt;
A world about flip-flops... the distributed flip-flops contain their own Reset, Set, and Enable signals, but have priority in that order (Reset &amp;gt; Set &amp;gt; Enable).  If assigning data to flip-flops, try using this priority in your statements in order to use less logic.  If your logic is not in this order, you may end up using extra LUTs.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
always @ (posedge clk) begin&lt;br /&gt;
if (reset)&lt;br /&gt;
  d &amp;lt;= 0;&lt;br /&gt;
else if (set)&lt;br /&gt;
  d &amp;lt;= 1;&lt;br /&gt;
else if (enable)&lt;br /&gt;
  d &amp;lt;= YOUR COMBO LOGIC;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Register Rebalancing ===&lt;br /&gt;
In synchronous designs, Xilinx XST can move logic forward or backward a register stage in order to balance the amount of work done in each register stage (thus improving timing).  The side affects include radical changes to the structure of the design and an increase the synthesis run time.  Modules with the Keep Heirarchy constraint will not rebalance registers.&lt;br /&gt;
&lt;br /&gt;
To enable register rebalancing, you need to edit the template.xst file (/opt/convey/pdk/latest/phys/template.xst).  If you don&#039;t have access, you can edit your project&#039;s copy of the template: phys/cae_fpga.xst by changing register_rebalancing to YES.  Warning: After running &#039;&#039;&#039;make clean&#039;&#039;&#039; and &#039;&#039;&#039;make&#039;&#039;&#039;, the original template will replace any user edits to the cae_fpga.xst file.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=682</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=682"/>
		<updated>2012-11-29T20:04:26Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Other Advice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;br /&gt;
&lt;br /&gt;
== Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? ==&lt;br /&gt;
&lt;br /&gt;
Start a new project in ISE with your module.  The Timing Analyzer is available in the Tools file menu, or you can just synthesize your module; the console gives a rough idea about the module&#039;s timing and max frequency (should be 150 MHz or more).&lt;br /&gt;
&lt;br /&gt;
== Other Advice ==&lt;br /&gt;
A world about flip-flops... the distributed flip-flops contain their own Reset, Set, and Enable signals, but have priority in that order (Reset &amp;gt; Set &amp;gt; Enable).  If assigning data to flip-flops, try using this priority in your statements in order to use less logic.  If your logic is not in this order, you may end up using extra LUTs.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
always @ (posedge clk) begin&lt;br /&gt;
if (reset)&lt;br /&gt;
  d &amp;lt;= 0;&lt;br /&gt;
else if (set)&lt;br /&gt;
  d &amp;lt;= 1;&lt;br /&gt;
else if (enable)&lt;br /&gt;
  d &amp;lt;= YOUR COMBO LOGIC;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=681</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=681"/>
		<updated>2012-11-29T20:03:03Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;br /&gt;
&lt;br /&gt;
== Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? ==&lt;br /&gt;
&lt;br /&gt;
Start a new project in ISE with your module.  The Timing Analyzer is available in the Tools file menu, or you can just synthesize your module; the console gives a rough idea about the module&#039;s timing and max frequency (should be 150 MHz or more).&lt;br /&gt;
&lt;br /&gt;
== Other Advice ==&lt;br /&gt;
A world about flip-flops... the distributed flip-flops contain their own Reset, Set, and Enable signals, but have that priority.  If assigning data to flip-flops, try using this priority in your statements in order to use less logic.  If your logic is not in this order, you may end up using extra LUTs.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
always @ (posedge clk) begin&lt;br /&gt;
if (reset)&lt;br /&gt;
  d &amp;lt;= 0;&lt;br /&gt;
else if (set)&lt;br /&gt;
  d &amp;lt;= 1;&lt;br /&gt;
else if (enable)&lt;br /&gt;
  d &amp;lt;= YOUR COMBO LOGIC;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=680</id>
		<title>Running the Vector Adder Example Application</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=680"/>
		<updated>2012-11-29T20:01:21Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Interactive Mode for ModelSim Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section 10.5 of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] explains how to run the sample software application.  It has been reproduced below in brief.&lt;br /&gt;
&lt;br /&gt;
== Compiling the Project ==&lt;br /&gt;
The rev version installed on the Convey machine is from 2012-03-19; to copy the sample app&#039;s source code run:&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir pdk_sample&lt;br /&gt;
 cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample&lt;br /&gt;
&lt;br /&gt;
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  &lt;br /&gt;
&lt;br /&gt;
== Run the Project ==&lt;br /&gt;
There are three ways to run your project:&lt;br /&gt;
# A software simulation of the FPGA design&lt;br /&gt;
# A hardware simulation (ModelSim) of the FPGA design&lt;br /&gt;
# The actual implementation (C code, Verilog code).  The bitfile was previously compiled, nicknamed, and added to a known file location (/opt/convey/personalties/...).&lt;br /&gt;
&lt;br /&gt;
There are some scripts that can be used to run the various projects.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;runcp&#039;&#039;&#039; (i.e. run coprocessor) script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe:&lt;br /&gt;
&lt;br /&gt;
   ./runcp&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;run&#039;&#039;&#039; script located in the SampleAppVadd can be used to run the application using the software simulation of the FPGA design.&lt;br /&gt;
&lt;br /&gt;
   ./run&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;-vsim&amp;quot; option, either script can be used to run the application using the hardware simulation (ModelSim).  The &amp;quot;-vsim&amp;quot; option sets the environment variable CNY_CAE_EMULATOR to ./run_simulation:&lt;br /&gt;
&lt;br /&gt;
   ./runcp -vsim&lt;br /&gt;
       or&lt;br /&gt;
   ./run -vsim&lt;br /&gt;
&lt;br /&gt;
To summarize the important environment variables:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Environment Variables&#039;&#039;&#039; || &#039;&#039;&#039;Software&#039;&#039;&#039; || &#039;&#039;&#039;ModelSim&#039;&#039;&#039; || &#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_SIM_THREAD || libcpSimLib2.so || libcpSimLib2.so || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_CAE_EMULATOR || &amp;lt;location for CaeSimPers&amp;gt; || ./run_simulation || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interactive Mode for ModelSim Simulation ===&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=215&lt;br /&gt;
&lt;br /&gt;
You can save the waveforms every time you run the hardware simulator to make debugging easier.&lt;br /&gt;
&lt;br /&gt;
Add the $wlfdumpvars line to the sim/tb_user.v file:&lt;br /&gt;
 // To trace everything (slow)&lt;br /&gt;
 $wlfdumpvars(0, testbench);&lt;br /&gt;
 // To trace cae_pers module and 5 levels below&lt;br /&gt;
 `ifdef AE0_PRESENT&lt;br /&gt;
   $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
&lt;br /&gt;
Then include that file in the sim/Makefile by adding this line this line:&lt;br /&gt;
CNY_PDK_TB_USER_VLOG += ./tb_user.v&lt;br /&gt;
&lt;br /&gt;
This will create a vsim.wlf file in the sim directory.  You can view the waveform using any of the following terminal commands:&lt;br /&gt;
 vsim ../sim/vsim.wlf&lt;br /&gt;
 vsim -view ../sim/vsim.wlf&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may instead run the simulation in interactive mode by adding the following line to the makefile:&lt;br /&gt;
 USER_SIM_OPTIONS = -gui&lt;br /&gt;
Then run the app (./run -vsim) to start the simulation.  When the Modelsim GUI opens and the design is loaded, type “run -all” at the Modelsim command line.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Tutorial:_Creating_a_Custom_Bitfile&amp;diff=679</id>
		<title>Tutorial: Creating a Custom Bitfile</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Tutorial:_Creating_a_Custom_Bitfile&amp;diff=679"/>
		<updated>2012-11-29T19:59:59Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Choose a New Signature */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers the creation and installation of a custom personality/bitfile (a modification of the vector adder sample project).&lt;br /&gt;
&lt;br /&gt;
== Building a Bitfile ==&lt;br /&gt;
Copy the newest version of the [[Running the Vector Adder Example Application#Compiling the Project|example project]] and set your [[Convey environment setup|environment variables]] if you have not done so already.  You can make a small modification to the verilog code if you wish, such as making it a vector subtractor instead of a vector adder.&lt;br /&gt;
&lt;br /&gt;
Next, compile your bitfile:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_vadd/phys&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The bitfile will take a long time to create (while the Reference Manual states 2 to 4 hours, it may take much longer).  Be patient.&lt;br /&gt;
&lt;br /&gt;
Next, package your bitfile using the command:&lt;br /&gt;
&lt;br /&gt;
 make release&lt;br /&gt;
&lt;br /&gt;
=== FPGA Usage Statistics ===&lt;br /&gt;
&lt;br /&gt;
The device usage statistics are displayed on the terminal while building the bitfile.  The log is saved to disk at:&lt;br /&gt;
&lt;br /&gt;
 {project directory}/phys/cae_fpga.map&lt;br /&gt;
 OR&lt;br /&gt;
 {project directory}/phys/cae_fpga.par&lt;br /&gt;
&lt;br /&gt;
Search the end of the log file for &amp;quot;Design Summay&amp;quot; for a percentage break down in LUT, Flip flop, and BRAM usage.&lt;br /&gt;
&lt;br /&gt;
== Choose a New Signature == &lt;br /&gt;
Custom personalities should not use the default PDK signature (4.1.1.1.0).  Choose a new signature between 65000 and 65535.  In this example, we will use 65123.1.1.1.0.&lt;br /&gt;
&lt;br /&gt;
You will need to create a new directory and copy the pertinent files to this directory:&lt;br /&gt;
&lt;br /&gt;
 cd /opt/convey/personalities&lt;br /&gt;
 mkdir 65123.1.1.1.0&lt;br /&gt;
 cd 65123.1.1.1.0&lt;br /&gt;
 &lt;br /&gt;
 cp /home/PROJECT_RELEASE/DATE/cae_fpga.tgz ./ae_fpga.tgz&lt;br /&gt;
&lt;br /&gt;
This is the only required file, but you may copy PersDesc.dat from the default PDK folder to your new folder and uncomment additional custom instructions you have used.&lt;br /&gt;
&lt;br /&gt;
 cp /opt/convey/personalities/4.1.1.1.0/PersDesc.dat ./&lt;br /&gt;
&lt;br /&gt;
Instead of adding a new directory to Convey&#039;s personality folder as done above, you may set the CNY_PERSONALITY_PATH environment variable to any directory, i.e.&lt;br /&gt;
&lt;br /&gt;
 export CNY_PERSONALITY_PATH=/home/PROJECT_PATH/&lt;br /&gt;
   or&lt;br /&gt;
 setenv CNY_PERSONALITY_PATH /home/PROJECT_PATH/&lt;br /&gt;
&lt;br /&gt;
The default when the CNY_PERSONALITY_PATH is not set is to use the /opt/convey/personalities folder.&lt;br /&gt;
&lt;br /&gt;
You will also need to update the &#039;&#039;customdb&#039;&#039; file in /opt/convey/personalities (or create your own customdb file in your user defined personalities folder).  This file is used by the cny_get_signature function and converts strings to a signature number.  Our customdb file contains the following text:  &lt;br /&gt;
&lt;br /&gt;
 65123.1.1.1.0,subtractor&lt;br /&gt;
&lt;br /&gt;
Finally, there are certain places in the code where you should ensure that the signature has been updated.&lt;br /&gt;
&lt;br /&gt;
* In the simulator (/sim/CaeIsaVadd.cpp), update: &#039;&#039;&#039;#define PERS_SIGN_CAE 0xfe63001000101000LL&#039;&#039;&#039;, where 0xfe63 is the hex value for your signature (65123).&lt;br /&gt;
* In the C code, (SampleAppVadd/UserApp.c) update: &#039;&#039;&#039;cny_get_signature(&amp;quot;subtractor&amp;quot;, &amp;amp;sig, &amp;amp;sig2, &amp;amp;stat);&#039;&#039;&#039;, where &amp;quot;subtractor&amp;quot; is the pseudo name of your CAE given in the customdb file.&lt;br /&gt;
* In the assembly code, (SampleAppVadd/cpVadd.s) update the signature directive: &#039;&#039;&#039;.signature pdk=65123&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
When you change the personalities directory, flush the MP cache.  This will erase the cache, which is necessary if you&#039;ve updated your custom bitfile:&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mpcache -f&lt;br /&gt;
&lt;br /&gt;
You can also add a signature, and preload a given bitfile by using the commands:&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mpcache -add  -S&amp;lt;personality&amp;gt;&lt;br /&gt;
 /opt/convey/sbin/mpcache -load -S&amp;lt;personality&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional details are available in Appendix D of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] - Sections 9.4.6, 9.4.7, 10, Appendix D&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Tutorial:_Creating_a_Custom_Bitfile&amp;diff=678</id>
		<title>Tutorial: Creating a Custom Bitfile</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Tutorial:_Creating_a_Custom_Bitfile&amp;diff=678"/>
		<updated>2012-11-29T19:58:17Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* FPGA Usage Statistics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers the creation and installation of a custom personality/bitfile (a modification of the vector adder sample project).&lt;br /&gt;
&lt;br /&gt;
== Building a Bitfile ==&lt;br /&gt;
Copy the newest version of the [[Running the Vector Adder Example Application#Compiling the Project|example project]] and set your [[Convey environment setup|environment variables]] if you have not done so already.  You can make a small modification to the verilog code if you wish, such as making it a vector subtractor instead of a vector adder.&lt;br /&gt;
&lt;br /&gt;
Next, compile your bitfile:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_vadd/phys&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The bitfile will take a long time to create (while the Reference Manual states 2 to 4 hours, it may take much longer).  Be patient.&lt;br /&gt;
&lt;br /&gt;
Next, package your bitfile using the command:&lt;br /&gt;
&lt;br /&gt;
 make release&lt;br /&gt;
&lt;br /&gt;
=== FPGA Usage Statistics ===&lt;br /&gt;
&lt;br /&gt;
The device usage statistics are displayed on the terminal while building the bitfile.  The log is saved to disk at:&lt;br /&gt;
&lt;br /&gt;
 {project directory}/phys/cae_fpga.map&lt;br /&gt;
 OR&lt;br /&gt;
 {project directory}/phys/cae_fpga.par&lt;br /&gt;
&lt;br /&gt;
Search the end of the log file for &amp;quot;Design Summay&amp;quot; for a percentage break down in LUT, Flip flop, and BRAM usage.&lt;br /&gt;
&lt;br /&gt;
== Choose a New Signature == &lt;br /&gt;
Custom personalities should not use the default PDK signature (4.1.1.1.0).  Choose a new signature between 65000 and 65535.  In this example, we will use 65123.1.1.1.0.&lt;br /&gt;
&lt;br /&gt;
You will need to create a new directory and copy the pertinent files to this directory:&lt;br /&gt;
&lt;br /&gt;
 cd /opt/convey/personalities&lt;br /&gt;
 mkdir 65123.1.1.1.0&lt;br /&gt;
 cd 65123.1.1.1.0&lt;br /&gt;
 &lt;br /&gt;
 cp /home/PROJECT_RELEASE/DATE/cae_fpga.tgz ./ae_fpga.tgz&lt;br /&gt;
&lt;br /&gt;
This is the only required file, but you may copy PersDesc.dat from the default PDK folder to your new folder and uncomment additional custom instructions you have used.&lt;br /&gt;
&lt;br /&gt;
 cp /opt/convey/personalities/4.1.1.1.0/PersDesc.dat ./&lt;br /&gt;
&lt;br /&gt;
Instead of adding a new directory to Convey&#039;s personality folder as done above, you may set the CNY_PERSONALITY_PATH environment variable to any directory, i.e.&lt;br /&gt;
&lt;br /&gt;
 export CNY_PERSONALITY_PATH=/home/PROJECT_PATH/&lt;br /&gt;
   or&lt;br /&gt;
 setenv CNY_PERSONALITY_PATH /home/PROJECT_PATH/&lt;br /&gt;
&lt;br /&gt;
The default when the CNY_PERSONALITY_PATH is not set is to use the /opt/convey/personalities folder.&lt;br /&gt;
&lt;br /&gt;
You will also need to update the &#039;&#039;customdb&#039;&#039; file in /opt/convey/personalities (or create your own customdb file in your user defined personalities folder).  This file is used by the cny_get_signature function and converts strings to a signature number.  Our customdb file contains the following text:  &lt;br /&gt;
&lt;br /&gt;
 65123.1.1.1.0,subtractor&lt;br /&gt;
&lt;br /&gt;
Finally, there are certain places in the code where you should ensure that the signature has been updated.&lt;br /&gt;
&lt;br /&gt;
* In the simulator (/sim/CaeIsaVadd.cpp), update: &#039;&#039;&#039;#define PERS_SIGN_CAE 0xfe63001000101000LL&#039;&#039;&#039;, where 0xfe63 is the hex value for your signature (65123).&lt;br /&gt;
* In the C code, (SampleAppVadd/UserApp.c) update: &#039;&#039;&#039;cny_get_signature(&amp;quot;subtractor&amp;quot;, &amp;amp;sig, &amp;amp;sig2, &amp;amp;stat);&#039;&#039;&#039;, where &amp;quot;subtractor&amp;quot; is the pseudo name of your CAE given in the customdb file.&lt;br /&gt;
* In the assembly code, (SampleAppVadd/cpVadd.s) update the signature directive: &#039;&#039;&#039;.signature pdk=65123&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
When you change the personalities directory, flush the MP cache.  This will unload the current bitfile:&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mpcache -f&lt;br /&gt;
&lt;br /&gt;
You can also add a signature, and preload a given bitfile by using the commands:&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mpcache -add  -S&amp;lt;personality&amp;gt;&lt;br /&gt;
 /opt/convey/sbin/mpcache -load -S&amp;lt;personality&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional details are available in Appendix D of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] - Sections 9.4.6, 9.4.7, 10, Appendix D&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=677</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=677"/>
		<updated>2012-11-08T18:15:18Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Convey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using the Timing Analyzer]]&lt;br /&gt;
&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.asic-world.com www.asic-world.com] - Great Tutorials for those Learning HDLs&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.c7t-hdl.com/Docs/C7T_AN05_Customized_WaveView_ModelSim_ISE.pdf Modelsim and ISE]&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=676</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=676"/>
		<updated>2012-11-08T00:32:23Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Helpful Guides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using the Timing Analyzer]]&lt;br /&gt;
&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.asic-world.com www.asic-world.com] - Great Tutorials for those Learning HDLs&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.c7t-hdl.com/Docs/C7T_AN05_Customized_WaveView_ModelSim_ISE.pdf Modelsim and ISE]&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=675</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=675"/>
		<updated>2012-11-06T16:01:20Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;br /&gt;
&lt;br /&gt;
== Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? ==&lt;br /&gt;
&lt;br /&gt;
Start a new project in ISE with your module.  The Timing Analyzer is available in the Tools file menu, or you can just synthesize your module to get a rough idea about it&#039;s timing.&lt;br /&gt;
&lt;br /&gt;
== Other Advice ==&lt;br /&gt;
A world about flip-flops... the distributed flip-flops contain their own Reset, Set, and Enable signals, but have that priority.  If assigning data to flip-flops, try using this priority in your statements in order to use less logic.  If your logic is not in this order, you may end up using extra LUTs.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
always @ (posedge clk) begin&lt;br /&gt;
if (reset)&lt;br /&gt;
  d &amp;lt;= 0;&lt;br /&gt;
else if (set)&lt;br /&gt;
  d &amp;lt;= 1;&lt;br /&gt;
else if (enable)&lt;br /&gt;
  d &amp;lt;= YOUR COMBO LOGIC;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=674</id>
		<title>Using ISE&#039;s Core Generator to build FIFOs and other IP cores</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=674"/>
		<updated>2012-11-06T02:08:54Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Why Use Dedicated Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why Use Dedicated Logic ==&lt;br /&gt;
If you don&#039;t use it, you lose it!  Don&#039;t let the dedicated logic (BRAMs, DSP slices) go unused... you&#039;ll hurt their feelings.&lt;br /&gt;
&lt;br /&gt;
Dedicated logic improves compile times and reduces the amount of Slice Logic used.  It&#039;s also FAST, and can help reduce the chance of timing errors.  For example, the DSP slices can operate at 550 MHz.&lt;br /&gt;
&lt;br /&gt;
== How-to ==&lt;br /&gt;
# Open Xilinx&#039;s ISE from the terminal (make sure your [[Convey environment setup | environmental variables]] are set):&lt;br /&gt;
 ise &amp;amp;&lt;br /&gt;
# Create or open a project.  The devices on the HC-1 and HC-2 are Virtex 5 FPGAs (xc5vlx330, -2, ff1760).&lt;br /&gt;
# Open the Core Generator (Tools -&amp;gt; Core Generator...)&lt;br /&gt;
# Create a new Core Generator project.&lt;br /&gt;
## Part&lt;br /&gt;
### Family: Virtex5&lt;br /&gt;
### Device: xc5vlx330&lt;br /&gt;
### Package: ff1760&lt;br /&gt;
### Speed: -2&lt;br /&gt;
## Generation&lt;br /&gt;
### Simulation Model: Structural&lt;br /&gt;
# Generate you IP Cores!&lt;br /&gt;
# Copy the .ngc, .v, and .xco to the coregen folder in your PDK project&lt;br /&gt;
&lt;br /&gt;
== Common IP Cores ==&lt;br /&gt;
Most IP cores can be implemented using either BRAM (Block RAM), DSP cores, or Slice logic.  To give you an idea about the number of components available, there are:&lt;br /&gt;
* 288 36-Kilobit BRAMs available&lt;br /&gt;
** BRAMs are dual port, allowing multiple small FIFOs per BRAM&lt;br /&gt;
* 28x15 DSP slices&lt;br /&gt;
* 51,840 Slices (each slice contains 4 LUTS &amp;amp; 4 Flip-flops)&lt;br /&gt;
&lt;br /&gt;
Here are some common components you could use:&lt;br /&gt;
* Memories &amp;amp; Storage Elements -&amp;gt; (use Block RAM)&lt;br /&gt;
** FIFOs (any port width)&lt;br /&gt;
** Dual port RAM (port widths: 2, 4, 8... up to 128 bits)&lt;br /&gt;
* Math Functions -&amp;gt; (use DSP slices)&lt;br /&gt;
** Adder/Subtracts (up to 48 bit)&lt;br /&gt;
** Multipliers (up to 64 bit, 128 bit output)&lt;br /&gt;
** Dividers (up to 32 bit)&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=673</id>
		<title>Using ISE&#039;s Core Generator to build FIFOs and other IP cores</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=673"/>
		<updated>2012-11-06T02:01:58Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why Use Dedicated Logic ==&lt;br /&gt;
If you don&#039;t use it, you lose it!  Don&#039;t let the dedicated logic (BRAMs, DSP cores) go unused... you&#039;ll hurt their feelings.&lt;br /&gt;
&lt;br /&gt;
Dedicated logic improves compile times and reduces the amount of Slice Logic used.  It&#039;s also FAST, and can help reduce the chance of timing errors.&lt;br /&gt;
&lt;br /&gt;
== How-to ==&lt;br /&gt;
# Open Xilinx&#039;s ISE from the terminal (make sure your [[Convey environment setup | environmental variables]] are set):&lt;br /&gt;
 ise &amp;amp;&lt;br /&gt;
# Create or open a project.  The devices on the HC-1 and HC-2 are Virtex 5 FPGAs (xc5vlx330, -2, ff1760).&lt;br /&gt;
# Open the Core Generator (Tools -&amp;gt; Core Generator...)&lt;br /&gt;
# Create a new Core Generator project.&lt;br /&gt;
## Part&lt;br /&gt;
### Family: Virtex5&lt;br /&gt;
### Device: xc5vlx330&lt;br /&gt;
### Package: ff1760&lt;br /&gt;
### Speed: -2&lt;br /&gt;
## Generation&lt;br /&gt;
### Simulation Model: Structural&lt;br /&gt;
# Generate you IP Cores!&lt;br /&gt;
# Copy the .ngc, .v, and .xco to the coregen folder in your PDK project&lt;br /&gt;
&lt;br /&gt;
== Common IP Cores ==&lt;br /&gt;
Most IP cores can be implemented using either BRAM (Block RAM), DSP cores, or Slice logic.  To give you an idea about the number of components available, there are:&lt;br /&gt;
* 288 36-Kilobit BRAMs available&lt;br /&gt;
** BRAMs are dual port, allowing multiple small FIFOs per BRAM&lt;br /&gt;
* 28x15 DSP slices&lt;br /&gt;
* 51,840 Slices (each slice contains 4 LUTS &amp;amp; 4 Flip-flops)&lt;br /&gt;
&lt;br /&gt;
Here are some common components you could use:&lt;br /&gt;
* Memories &amp;amp; Storage Elements -&amp;gt; (use Block RAM)&lt;br /&gt;
** FIFOs (any port width)&lt;br /&gt;
** Dual port RAM (port widths: 2, 4, 8... up to 128 bits)&lt;br /&gt;
* Math Functions -&amp;gt; (use DSP slices)&lt;br /&gt;
** Adder/Subtracts (up to 48 bit)&lt;br /&gt;
** Multipliers (up to 64 bit, 128 bit output)&lt;br /&gt;
** Dividers (up to 32 bit)&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=672</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=672"/>
		<updated>2012-11-04T04:20:33Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using the Timing Analyzer]]&lt;br /&gt;
&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.asic-world.com www.asic-world.com] - Great Tutorials for those Learning HDLs&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=671</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=671"/>
		<updated>2012-11-04T04:20:14Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using the Timing Analyzer]]&lt;br /&gt;
&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.asic-world.com] Great Tutorials for those Learning HDLs&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=670</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=670"/>
		<updated>2012-11-02T18:46:07Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;br /&gt;
&lt;br /&gt;
== Q. I know what module is causing timing issues... how can I just get timing data on 1 module instead of building the entire bitfile? ==&lt;br /&gt;
&lt;br /&gt;
Start a new project in ISE with your module.  The Timing Analyzer is available in the Tools file menu.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=669</id>
		<title>Running the Vector Adder Example Application</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=669"/>
		<updated>2012-11-01T22:06:44Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Interactive Mode for ModelSim Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section 10.5 of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] explains how to run the sample software application.  It has been reproduced below in brief.&lt;br /&gt;
&lt;br /&gt;
== Compiling the Project ==&lt;br /&gt;
The rev version installed on the Convey machine is from 2012-03-19; to copy the sample app&#039;s source code run:&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir pdk_sample&lt;br /&gt;
 cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample&lt;br /&gt;
&lt;br /&gt;
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  &lt;br /&gt;
&lt;br /&gt;
== Run the Project ==&lt;br /&gt;
There are three ways to run your project:&lt;br /&gt;
# A software simulation of the FPGA design&lt;br /&gt;
# A hardware simulation (ModelSim) of the FPGA design&lt;br /&gt;
# The actual implementation (C code, Verilog code).  The bitfile was previously compiled, nicknamed, and added to a known file location (/opt/convey/personalties/...).&lt;br /&gt;
&lt;br /&gt;
There are some scripts that can be used to run the various projects.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;runcp&#039;&#039;&#039; (i.e. run coprocessor) script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe:&lt;br /&gt;
&lt;br /&gt;
   ./runcp&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;run&#039;&#039;&#039; script located in the SampleAppVadd can be used to run the application using the software simulation of the FPGA design.&lt;br /&gt;
&lt;br /&gt;
   ./run&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;-vsim&amp;quot; option, either script can be used to run the application using the hardware simulation (ModelSim).  The &amp;quot;-vsim&amp;quot; option sets the environment variable CNY_CAE_EMULATOR to ./run_simulation:&lt;br /&gt;
&lt;br /&gt;
   ./runcp -vsim&lt;br /&gt;
       or&lt;br /&gt;
   ./run -vsim&lt;br /&gt;
&lt;br /&gt;
To summarize the important environment variables:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Environment Variables&#039;&#039;&#039; || &#039;&#039;&#039;Software&#039;&#039;&#039; || &#039;&#039;&#039;ModelSim&#039;&#039;&#039; || &#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_SIM_THREAD || libcpSimLib2.so || libcpSimLib2.so || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_CAE_EMULATOR || &amp;lt;location for CaeSimPers&amp;gt; || ./run_simulation || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interactive Mode for ModelSim Simulation ===&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=215&lt;br /&gt;
&lt;br /&gt;
You can save the waveforms every time you run the hardware simulator to make debugging easier.&lt;br /&gt;
&lt;br /&gt;
Add the $wlfdumpvars line to the sim/tb_user.v file:&lt;br /&gt;
 // To trace everything (slow)&lt;br /&gt;
 $wlfdumpvars(0, testbench);&lt;br /&gt;
 // To trace cae_pers module and 5 levels below&lt;br /&gt;
 `ifdef AE0_PRESENT&lt;br /&gt;
   $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
&lt;br /&gt;
Then include that file in the sim/Makefile by adding this line this line:&lt;br /&gt;
CNY_PDK_TB_USER_VLOG += ./tb_user.v&lt;br /&gt;
&lt;br /&gt;
This will create a vsim.wlf file in the sim directory.  You can view the waveform using any of the following terminal commands:&lt;br /&gt;
 vsim ../sim/vsim.wlf&lt;br /&gt;
 vsim -view ../sim/vsim.wlf&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=668</id>
		<title>Running the Vector Adder Example Application</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=668"/>
		<updated>2012-11-01T22:00:58Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Interactive Mode for ModelSim Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section 10.5 of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] explains how to run the sample software application.  It has been reproduced below in brief.&lt;br /&gt;
&lt;br /&gt;
== Compiling the Project ==&lt;br /&gt;
The rev version installed on the Convey machine is from 2012-03-19; to copy the sample app&#039;s source code run:&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir pdk_sample&lt;br /&gt;
 cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample&lt;br /&gt;
&lt;br /&gt;
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  &lt;br /&gt;
&lt;br /&gt;
== Run the Project ==&lt;br /&gt;
There are three ways to run your project:&lt;br /&gt;
# A software simulation of the FPGA design&lt;br /&gt;
# A hardware simulation (ModelSim) of the FPGA design&lt;br /&gt;
# The actual implementation (C code, Verilog code).  The bitfile was previously compiled, nicknamed, and added to a known file location (/opt/convey/personalties/...).&lt;br /&gt;
&lt;br /&gt;
There are some scripts that can be used to run the various projects.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;runcp&#039;&#039;&#039; (i.e. run coprocessor) script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe:&lt;br /&gt;
&lt;br /&gt;
   ./runcp&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;run&#039;&#039;&#039; script located in the SampleAppVadd can be used to run the application using the software simulation of the FPGA design.&lt;br /&gt;
&lt;br /&gt;
   ./run&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;-vsim&amp;quot; option, either script can be used to run the application using the hardware simulation (ModelSim).  The &amp;quot;-vsim&amp;quot; option sets the environment variable CNY_CAE_EMULATOR to ./run_simulation:&lt;br /&gt;
&lt;br /&gt;
   ./runcp -vsim&lt;br /&gt;
       or&lt;br /&gt;
   ./run -vsim&lt;br /&gt;
&lt;br /&gt;
To summarize the important environment variables:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Environment Variables&#039;&#039;&#039; || &#039;&#039;&#039;Software&#039;&#039;&#039; || &#039;&#039;&#039;ModelSim&#039;&#039;&#039; || &#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_SIM_THREAD || libcpSimLib2.so || libcpSimLib2.so || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_CAE_EMULATOR || &amp;lt;location for CaeSimPers&amp;gt; || ./run_simulation || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interactive Mode for ModelSim Simulation ===&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=215&lt;br /&gt;
&lt;br /&gt;
You can save the waveforms every time you run the hardware simulator to make debugging easier.&lt;br /&gt;
&lt;br /&gt;
Add the $wlfdumpvars line to the sim/tb_user.v file:&lt;br /&gt;
 // To trace everything (slow)&lt;br /&gt;
 $wlfdumpvars(0, testbench);&lt;br /&gt;
 // To trace cae_pers module and 5 levels below&lt;br /&gt;
 `ifdef AE0_PRESENT&lt;br /&gt;
   $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
&lt;br /&gt;
Then include that file in the sim/Makefile by adding this line this line:&lt;br /&gt;
CNY_PDK_TB_USER_VLOG += ./tb_user.v&lt;br /&gt;
&lt;br /&gt;
This will create a vsim.wlf file in the sim directory.  You can view the waveform using any of the following terminal commands:&lt;br /&gt;
 vsim ../sim/vsim.wlf&lt;br /&gt;
 vsim -view ../sim/vsim.wlf&lt;br /&gt;
 vsim -wlf (if in /sim directory)&lt;br /&gt;
 vsim -wlf -do wave.do&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=667</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=667"/>
		<updated>2012-11-01T21:03:02Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Q. How do I know what&amp;#039;s Causing the Timing Issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 6.67 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).  If a route has high fanout, you can register the signal to reduce the fanout into a tree.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=666</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=666"/>
		<updated>2012-11-01T05:25:19Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Q. How do I know what&amp;#039;s Causing the Timing Issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis, Timing -&amp;gt; Report -&amp;gt; Net Delays, or (my favorite) Timing -&amp;gt; Query.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 5 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=665</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=665"/>
		<updated>2012-11-01T05:11:59Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re failing one of the Convey timing constraints, you need to rework your design.  Sometimes you need to run the timing analyzer to find timing issues.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis or Timing -&amp;gt; Report -&amp;gt; Net Delays.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 5 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=664</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=664"/>
		<updated>2012-11-01T01:52:37Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* How do I know what&amp;#039;s Causing the Timing Issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis.  I usually just click Ok (Design timing constraints) and wait a few minutes for the report to appear, but there are more features you can explore.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 5 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=663</id>
		<title>Using the Timing Analyzer</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Timing_Analyzer&amp;diff=663"/>
		<updated>2012-11-01T01:52:22Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: New page: Xilinx&amp;#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xilinx&#039;s Timing Analyzer can be used to find fixed timing errors with your design.  If you design &amp;quot;works perfectly in simulation, but not in hardware&amp;quot;, and when you build a bitfile and the timing constraints are not met, you have a timing error that needs fixed.&lt;br /&gt;
&lt;br /&gt;
Good designs won&#039;t have timing errors, and there are tricks to writing good HDL code that results in good timing.&lt;br /&gt;
&lt;br /&gt;
== Q. How do I know if my bitfile doesn&#039;t meet timing? ==&lt;br /&gt;
&lt;br /&gt;
Check the Place and Route (phys/cae_fpga_routed.par) report in the phys folder or view the last few lines of the console output when building a bitfile.  The timing results look something like this if you&#039;re failing to meet the timing constraints:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Asterisk (*) preceding a constraint indicates it was not met.&lt;br /&gt;
   This may be due to a setup or hold violation.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   &lt;br /&gt;
                                            |             |    Slack   | Achievable | Errors |    Score   &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
* TS_ae_top_io_pll_clkout1 = PERIOD TIMEGRP | SETUP       |    -2.893ns|     9.560ns|     743|      498468&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout1&amp;quot; TS_CLK HIGH      | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
      50%                                   |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
  TS_ae_top_io_pll_clkout0 = PERIOD TIMEGRP | SETUP       |     0.023ns|     3.310ns|       0|           0&lt;br /&gt;
   &amp;quot;ae_top_io_pll_clkout0&amp;quot; TS_CLK / 2       | HOLD        |     0.000ns|            |       0|           0&lt;br /&gt;
     HIGH 50%                               |             |            |            |        |            &lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
1 constraint not met.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How do I know what&#039;s Causing the Timing Issue ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re unsure of where the timing issue is, it makes sense to spend 10 minutes using the timing analyzer to find the longest critical paths in your design.  Open the timing analyzer:&lt;br /&gt;
&lt;br /&gt;
  $ timingan &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Open your project: File -&amp;gt; Open Design.  Select the final routed design and constraint files from the phys directory (.ncd, .pcf, .ngd, .ucf) from the most recent bitfile you created (yes... you have to build the bitfile first).&lt;br /&gt;
&lt;br /&gt;
Run the analysis.  Timing -&amp;gt; Run Analysis.  I usually just click Ok (Design timing constraints) and wait a few minutes for the report to appear, but there are more features you can explore.&lt;br /&gt;
&lt;br /&gt;
The report should list the critical path and it&#039;s setup/routing time.  If it&#039;s near 5 ns, you just barely missed timing; perhaps registering the output of one of your modules is all you need.  Another way to meet timing is to break up the steps into pipeline stages (i.e. if some logic block takes 20 ns, breaking it up into a few pipeline stages should help).&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=662</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=662"/>
		<updated>2012-11-01T01:34:48Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Convey HC-1 Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using the Timing Analyzer]]&lt;br /&gt;
&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=661</id>
		<title>Analyze the Simpleton Basic App</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Analyze_the_Simpleton_Basic_App&amp;diff=661"/>
		<updated>2012-10-29T04:06:36Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download the simpleton app:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 svn co http://svn.chaddington.com/simpleton&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the [[Running the Vector Adder Example Application | vector adder example]] for how to make and run the project.&lt;br /&gt;
&lt;br /&gt;
Open and analyze the following files, learn the directory structure, etc:&lt;br /&gt;
&lt;br /&gt;
* /cae_simpleton/src/run&lt;br /&gt;
* /cae_simpleton/src/runcp&lt;br /&gt;
* /cae_simpleton/src/Userapp.c&lt;br /&gt;
* /cae_simpleton/src/cp.s&lt;br /&gt;
* /cae_simpleton/sim/CaeIsa.cpp&lt;br /&gt;
* /cae_simpleton/verilog/personality.v&lt;br /&gt;
* /cae_simpleton/coregen/README&lt;br /&gt;
* /cae_simpleton/phys&lt;br /&gt;
* /cae_simpleton/makefile.include&lt;br /&gt;
* /personalities/customdb&lt;br /&gt;
* /personalities/65100.1.1.0/&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Write-Complete_Interface&amp;diff=660</id>
		<title>Using the Write-Complete Interface</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_the_Write-Complete_Interface&amp;diff=660"/>
		<updated>2012-10-29T04:05:04Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: New page: There&amp;#039;s an optional (advanced) interface for indicating when a write completes (along with the ability to send 17 bits of write-complete control data with the write request in order to ID ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There&#039;s an optional (advanced) interface for indicating when a write completes (along with the ability to send 17 bits of write-complete control data with the write request in order to ID the requests).  Use of the interface means the write flush interface is not available.&lt;br /&gt;
&lt;br /&gt;
To enable, edit the main project makefile to set the appropriate environment variable: &lt;br /&gt;
export MC_WR_CMP_IF = 1&lt;br /&gt;
&lt;br /&gt;
The ports to the cae_pers module must be modified; the scripts that compile verilog for both the hardware simulator and for building a bitfile will define &amp;quot;MC_WR_CMP_IF&amp;quot; inside of &amp;quot;pdk_fpga_defines.vh&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// Top of file (already included)&lt;br /&gt;
`include &amp;quot;pdk_fpga_defines.vh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
// Part of the cae_pers module port declaration&lt;br /&gt;
`ifdef MC_WR_CMP_IF&lt;br /&gt;
   output [16:0] mc0_req_wrctl_e, mc0_req_wrctl_o,&lt;br /&gt;
   output mc0_wr_rsp_stall_e, mc0_wr_rsp_stall_o,&lt;br /&gt;
   input mc0_rsp_wrcmp_e, mc0_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc0_rsp_wrctl_e, mc0_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc1_req_wrctl_e, mc1_req_wrctl_o,&lt;br /&gt;
   output mc1_wr_rsp_stall_e, mc1_wr_rsp_stall_o,&lt;br /&gt;
   input mc1_rsp_wrcmp_e, mc1_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc1_rsp_wrctl_e, mc1_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc2_req_wrctl_e, mc2_req_wrctl_o,&lt;br /&gt;
   output mc2_wr_rsp_stall_e, mc2_wr_rsp_stall_o,&lt;br /&gt;
   input mc2_rsp_wrcmp_e, mc2_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc2_rsp_wrctl_e, mc2_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc3_req_wrctl_e, mc3_req_wrctl_o,&lt;br /&gt;
   output mc3_wr_rsp_stall_e, mc3_wr_rsp_stall_o,&lt;br /&gt;
   input mc3_rsp_wrcmp_e, mc3_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc3_rsp_wrctl_e, mc3_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc4_req_wrctl_e, mc4_req_wrctl_o,&lt;br /&gt;
   output mc4_wr_rsp_stall_e, mc4_wr_rsp_stall_o,&lt;br /&gt;
   input mc4_rsp_wrcmp_e, mc4_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc4_rsp_wrctl_e, mc4_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc5_req_wrctl_e, mc5_req_wrctl_o,&lt;br /&gt;
   output mc5_wr_rsp_stall_e, mc5_wr_rsp_stall_o,&lt;br /&gt;
   input mc5_rsp_wrcmp_e, mc5_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc5_rsp_wrctl_e, mc5_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc6_req_wrctl_e, mc6_req_wrctl_o,&lt;br /&gt;
   output mc6_wr_rsp_stall_e, mc6_wr_rsp_stall_o,&lt;br /&gt;
   input mc6_rsp_wrcmp_e, mc6_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc6_rsp_wrctl_e, mc6_rsp_wrctl_o,&lt;br /&gt;
   output [16:0] mc7_req_wrctl_e, mc7_req_wrctl_o,&lt;br /&gt;
   output mc7_wr_rsp_stall_e, mc7_wr_rsp_stall_o,&lt;br /&gt;
   input mc7_rsp_wrcmp_e, mc7_rsp_wrcmp_o,&lt;br /&gt;
   input [16:0] mc7_rsp_wrctl_e, mc7_rsp_wrctl_o,&lt;br /&gt;
`else&lt;br /&gt;
   output		mc0_req_flush_e, mc0_req_flush_o,&lt;br /&gt;
   input		mc0_rsp_flush_cmplt_e, mc0_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc1_req_flush_e, mc1_req_flush_o,&lt;br /&gt;
   input		mc1_rsp_flush_cmplt_e, mc1_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc2_req_flush_e, mc2_req_flush_o,&lt;br /&gt;
   input		mc2_rsp_flush_cmplt_e, mc2_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc3_req_flush_e, mc3_req_flush_o,&lt;br /&gt;
   input		mc3_rsp_flush_cmplt_e, mc3_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc4_req_flush_e, mc4_req_flush_o,&lt;br /&gt;
   input		mc4_rsp_flush_cmplt_e, mc4_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc5_req_flush_e, mc5_req_flush_o,&lt;br /&gt;
   input		mc5_rsp_flush_cmplt_e, mc5_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc6_req_flush_e, mc6_req_flush_o,&lt;br /&gt;
   input		mc6_rsp_flush_cmplt_e, mc6_rsp_flush_cmplt_o,&lt;br /&gt;
   output		mc7_req_flush_e, mc7_req_flush_o,&lt;br /&gt;
   input		mc7_rsp_flush_cmplt_e, mc7_rsp_flush_cmplt_o,&lt;br /&gt;
`endif&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=659</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=659"/>
		<updated>2012-10-29T03:58:27Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using the Write-Complete Interface]]&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=658</id>
		<title>Running Different Bitfiles on each AE</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=658"/>
		<updated>2012-10-29T03:57:29Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PDK is setup to help you rapidly test and develop a single bitfile.  Thus, projects requiring multiple bitfiles should have multiple PDK sub-projects.&lt;br /&gt;
&lt;br /&gt;
== Running different bitfiles on each AE ==&lt;br /&gt;
Source: http://www.ccm.ece.vt.edu/twiki/bin/view/Main/Convey&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=178&lt;br /&gt;
&lt;br /&gt;
The runtime environment supports multiple bitfiles making up a single personality (i.e. different ).  There is a script called &amp;quot;mkaetgz&amp;quot; that is installed on the HC-1 system. To use it, you need to create a project for each bitfile. Then run the script to package them into one personality.&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mkaetgz -h&lt;br /&gt;
 mkaetgz [-i &amp;lt;initFile&amp;gt;] [-f &amp;lt;file0,file1,...,fileN&amp;gt;] [-F] [-h]&lt;br /&gt;
         [-o &amp;lt;tgz name&amp;gt;] [-t &amp;lt;tmpDir&amp;gt;] [-v]&lt;br /&gt;
         -0 &amp;lt;aeImage0&amp;gt; [-1 &amp;lt;aeImage1&amp;gt; -2 &amp;lt;aeImage2&amp;gt; -3 &amp;lt;aeImage3&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 mkaetgz -i /opt/convey/pdk/2010_08_09/doc/cae_init.txt -0 cae_fpga0.bit -1 cae_fpga1.bit -2 cae_fpga2.bit -3 cae_fpga3.bit&lt;br /&gt;
&lt;br /&gt;
Note: If mkaetgz does not exist, you can download a copy of the bash script here: [[Media:Mkaetgz.txt | mkaetgz]]&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a CNY_LOAD_IMAGE environment variable you can set with the first image you want loaded on the coprocessor (export CNY_LOAD_IMAGE=65200.1.1.1).&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=657</id>
		<title>Running the Vector Adder Example Application</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=657"/>
		<updated>2012-10-22T04:51:23Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Interactive Mode for ModelSim Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section 10.5 of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] explains how to run the sample software application.  It has been reproduced below in brief.&lt;br /&gt;
&lt;br /&gt;
== Compiling the Project ==&lt;br /&gt;
The rev version installed on the Convey machine is from 2012-03-19; to copy the sample app&#039;s source code run:&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir pdk_sample&lt;br /&gt;
 cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample&lt;br /&gt;
&lt;br /&gt;
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  &lt;br /&gt;
&lt;br /&gt;
== Run the Project ==&lt;br /&gt;
There are three ways to run your project:&lt;br /&gt;
# A software simulation of the FPGA design&lt;br /&gt;
# A hardware simulation (ModelSim) of the FPGA design&lt;br /&gt;
# The actual implementation (C code, Verilog code).  The bitfile was previously compiled, nicknamed, and added to a known file location (/opt/convey/personalties/...).&lt;br /&gt;
&lt;br /&gt;
There are some scripts that can be used to run the various projects.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;runcp&#039;&#039;&#039; (i.e. run coprocessor) script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe:&lt;br /&gt;
&lt;br /&gt;
   ./runcp&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;run&#039;&#039;&#039; script located in the SampleAppVadd can be used to run the application using the software simulation of the FPGA design.&lt;br /&gt;
&lt;br /&gt;
   ./run&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;-vsim&amp;quot; option, either script can be used to run the application using the hardware simulation (ModelSim).  The &amp;quot;-vsim&amp;quot; option sets the environment variable CNY_CAE_EMULATOR to ./run_simulation:&lt;br /&gt;
&lt;br /&gt;
   ./runcp -vsim&lt;br /&gt;
       or&lt;br /&gt;
   ./run -vsim&lt;br /&gt;
&lt;br /&gt;
To summarize the important environment variables:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Environment Variables&#039;&#039;&#039; || &#039;&#039;&#039;Software&#039;&#039;&#039; || &#039;&#039;&#039;ModelSim&#039;&#039;&#039; || &#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_SIM_THREAD || libcpSimLib2.so || libcpSimLib2.so || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_CAE_EMULATOR || &amp;lt;location for CaeSimPers&amp;gt; || ./run_simulation || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interactive Mode for ModelSim Simulation ===&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=215&lt;br /&gt;
&lt;br /&gt;
You can save the waveforms every time you run the hardware simulator to make debugging easier.&lt;br /&gt;
&lt;br /&gt;
Add the $wlfdumpvars line to the sim/tb_user.v file:&lt;br /&gt;
 // To trace everything&lt;br /&gt;
 $wlfdumpvars(0, testbench);&lt;br /&gt;
 // To trace cae_pers module and 5 levels below&lt;br /&gt;
 $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
&lt;br /&gt;
Then include that file in the sim/Makefile by adding this line this line:&lt;br /&gt;
CNY_PDK_TB_USER_VLOG += ./tb_user.v&lt;br /&gt;
&lt;br /&gt;
This will create a vsim.wlf file in the sim directory.  You can view the waveform using the terminal command&lt;br /&gt;
 vsim -view ../sim/vsim.wlf&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=656</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=656"/>
		<updated>2012-10-22T00:31:38Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Helpful Guides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://www.fpga.com.cn/hdl/training/verilog%20reference%20guide.pdf The Verilog Golden Reference]&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=655</id>
		<title>Running Different Bitfiles on each AE</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=655"/>
		<updated>2012-09-25T23:50:30Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PDK is setup to help you rapidly test and develop a single bitfile.  Thus, projects requiring multiple bitfiles should have multiple PDK sub-projects.&lt;br /&gt;
&lt;br /&gt;
== Running different bitfiles on each AE ==&lt;br /&gt;
Source: http://www.ccm.ece.vt.edu/twiki/bin/view/Main/Convey&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=178&lt;br /&gt;
&lt;br /&gt;
The runtime environment supports multiple bitfiles making up a single personality (i.e. different ).  There is a script called &amp;quot;mkaetgz&amp;quot; that is installed on the HC-1 system. To use it, you need to create a project for each bitfile. Then run the script to package them into one personality.&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mkaetgz -h&lt;br /&gt;
 mkaetgz [-i &amp;lt;initFile&amp;gt;] [-f &amp;lt;file0,file1,...,fileN&amp;gt;] [-F] [-h]&lt;br /&gt;
         [-o &amp;lt;tgz name&amp;gt;] [-t &amp;lt;tmpDir&amp;gt;] [-v]&lt;br /&gt;
         -0 &amp;lt;aeImage0&amp;gt; [-1 &amp;lt;aeImage1&amp;gt; -2 &amp;lt;aeImage2&amp;gt; -3 &amp;lt;aeImage3&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 mkaetgz -i /opt/convey/pdk/2010_08_09/doc/cae_init.txt -0 cae_fpga0.bit -1 cae_fpga1.bit -2 cae_fpga2.bit -3 cae_fpga3.bit&lt;br /&gt;
&lt;br /&gt;
Note: If mkaetgz does not exist, you can download a copy of the bash script here: [[Media:Mkaetgz.txt | mkaetgz]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=File:Mkaetgz.txt&amp;diff=654</id>
		<title>File:Mkaetgz.txt</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=File:Mkaetgz.txt&amp;diff=654"/>
		<updated>2012-09-25T23:48:17Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=653</id>
		<title>Running the Vector Adder Example Application</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=653"/>
		<updated>2012-09-25T23:39:12Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Interactive Mode for ModelSim Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section 10.5 of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] explains how to run the sample software application.  It has been reproduced below in brief.&lt;br /&gt;
&lt;br /&gt;
== Compiling the Project ==&lt;br /&gt;
The rev version installed on the Convey machine is from 2012-03-19; to copy the sample app&#039;s source code run:&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir pdk_sample&lt;br /&gt;
 cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample&lt;br /&gt;
&lt;br /&gt;
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  &lt;br /&gt;
&lt;br /&gt;
== Run the Project ==&lt;br /&gt;
There are three ways to run your project:&lt;br /&gt;
# A software simulation of the FPGA design&lt;br /&gt;
# A hardware simulation (ModelSim) of the FPGA design&lt;br /&gt;
# The actual implementation (C code, Verilog code).  The bitfile was previously compiled, nicknamed, and added to a known file location (/opt/convey/personalties/...).&lt;br /&gt;
&lt;br /&gt;
There are some scripts that can be used to run the various projects.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;runcp&#039;&#039;&#039; (i.e. run coprocessor) script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe:&lt;br /&gt;
&lt;br /&gt;
   ./runcp&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;run&#039;&#039;&#039; script located in the SampleAppVadd can be used to run the application using the software simulation of the FPGA design.&lt;br /&gt;
&lt;br /&gt;
   ./run&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;-vsim&amp;quot; option, either script can be used to run the application using the hardware simulation (ModelSim).  The &amp;quot;-vsim&amp;quot; option sets the environment variable CNY_CAE_EMULATOR to ./run_simulation:&lt;br /&gt;
&lt;br /&gt;
   ./runcp -vsim&lt;br /&gt;
       or&lt;br /&gt;
   ./run -vsim&lt;br /&gt;
&lt;br /&gt;
To summarize the important environment variables:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Environment Variables&#039;&#039;&#039; || &#039;&#039;&#039;Software&#039;&#039;&#039; || &#039;&#039;&#039;ModelSim&#039;&#039;&#039; || &#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_SIM_THREAD || libcpSimLib2.so || libcpSimLib2.so || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_CAE_EMULATOR || &amp;lt;location for CaeSimPers&amp;gt; || ./run_simulation || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interactive Mode for ModelSim Simulation ===&lt;br /&gt;
Source: http://www.conveysupport.com/help/?p=215&lt;br /&gt;
&lt;br /&gt;
The sample project will default to command line mode when using the -vsim flag.  Add the following line in the ./sim/Makefile to have it start in interactive mode:&lt;br /&gt;
 &lt;br /&gt;
 USER_SIM_OPTIONS = -i&lt;br /&gt;
&lt;br /&gt;
You can find the custom personality under testbench-&amp;gt;cae_fpga-&amp;gt;ae_top-&amp;gt;core-&amp;gt;cae_pers.  Once you have a wave format that you want to automatically load, save it (File-&amp;gt;Save Format).&lt;br /&gt;
&lt;br /&gt;
Alternatively, add the $wlfdumpvars line to the sim/tb_user.v file:&lt;br /&gt;
 // To trace everything&lt;br /&gt;
 $wlfdumpvars(0, testbench);&lt;br /&gt;
 // To trace cae_pers module and 5 levels below&lt;br /&gt;
 $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
&lt;br /&gt;
Then include that file in the sim/Makefile by adding this line this line:&lt;br /&gt;
CNY_PDK_TB_USER_VLOG += ./tb_user.v&lt;br /&gt;
&lt;br /&gt;
This will create a vsim.wlf file in the sim directory.  You can view the waveform using the terminal command&lt;br /&gt;
 vsim -view vsim.wlf&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=652</id>
		<title>Running the Vector Adder Example Application</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_the_Vector_Adder_Example_Application&amp;diff=652"/>
		<updated>2012-09-25T23:38:52Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Interactive Mode for ModelSim Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Section 10.5 of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] explains how to run the sample software application.  It has been reproduced below in brief.&lt;br /&gt;
&lt;br /&gt;
== Compiling the Project ==&lt;br /&gt;
The rev version installed on the Convey machine is from 2012-03-19; to copy the sample app&#039;s source code run:&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir pdk_sample&lt;br /&gt;
 cp -r /opt/convey/pdk/latest/hc-1/examples/* pdk_sample&lt;br /&gt;
&lt;br /&gt;
To make the sample project, first make sure you have [[Convey environment setup|setup your environment variables]], then run:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_pers_vadd/SampleAppVadd/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
This compiles both an emulator (CaeSimPers) and a C program that makes a coprocessor call to use the vector adder (UserApp.exe).  &lt;br /&gt;
&lt;br /&gt;
== Run the Project ==&lt;br /&gt;
There are three ways to run your project:&lt;br /&gt;
# A software simulation of the FPGA design&lt;br /&gt;
# A hardware simulation (ModelSim) of the FPGA design&lt;br /&gt;
# The actual implementation (C code, Verilog code).  The bitfile was previously compiled, nicknamed, and added to a known file location (/opt/convey/personalties/...).&lt;br /&gt;
&lt;br /&gt;
There are some scripts that can be used to run the various projects.  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;runcp&#039;&#039;&#039; (i.e. run coprocessor) script located in the SampleAppVadd can be used to run the application in HW which sets the appropriate environment variables and runs the UserApp.exe:&lt;br /&gt;
&lt;br /&gt;
   ./runcp&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;run&#039;&#039;&#039; script located in the SampleAppVadd can be used to run the application using the software simulation of the FPGA design.&lt;br /&gt;
&lt;br /&gt;
   ./run&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;-vsim&amp;quot; option, either script can be used to run the application using the hardware simulation (ModelSim).  The &amp;quot;-vsim&amp;quot; option sets the environment variable CNY_CAE_EMULATOR to ./run_simulation:&lt;br /&gt;
&lt;br /&gt;
   ./runcp -vsim&lt;br /&gt;
       or&lt;br /&gt;
   ./run -vsim&lt;br /&gt;
&lt;br /&gt;
To summarize the important environment variables:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Environment Variables&#039;&#039;&#039; || &#039;&#039;&#039;Software&#039;&#039;&#039; || &#039;&#039;&#039;ModelSim&#039;&#039;&#039; || &#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_SIM_THREAD || libcpSimLib2.so || libcpSimLib2.so || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|CNY_CAE_EMULATOR || &amp;lt;location for CaeSimPers&amp;gt; || ./run_simulation || &#039;&#039;unset&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interactive Mode for ModelSim Simulation ===&lt;br /&gt;
The sample project will default to command line mode when using the -vsim flag.  Add the following line in the ./sim/Makefile to have it start in interactive mode:&lt;br /&gt;
 &lt;br /&gt;
 USER_SIM_OPTIONS = -i&lt;br /&gt;
&lt;br /&gt;
You can find the custom personality under testbench-&amp;gt;cae_fpga-&amp;gt;ae_top-&amp;gt;core-&amp;gt;cae_pers.  Once you have a wave format that you want to automatically load, save it (File-&amp;gt;Save Format).&lt;br /&gt;
&lt;br /&gt;
Alternatively, add the $wlfdumpvars line to the sim/tb_user.v file:&lt;br /&gt;
 // To trace everything&lt;br /&gt;
 $wlfdumpvars(0, testbench);&lt;br /&gt;
 // To trace cae_pers module and 5 levels below&lt;br /&gt;
 $wlfdumpvars(5,testbench.cae_fpga0.ae_top.core.cae_pers);&lt;br /&gt;
&lt;br /&gt;
Then include that file in the sim/Makefile by adding this line this line:&lt;br /&gt;
CNY_PDK_TB_USER_VLOG += ./tb_user.v&lt;br /&gt;
&lt;br /&gt;
This will create a vsim.wlf file in the sim directory.  You can view the waveform using the terminal command&lt;br /&gt;
 vsim -view vsim.wlf&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=651</id>
		<title>Running Different Bitfiles on each AE</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=651"/>
		<updated>2012-09-25T23:34:57Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PDK is setup to help you rapidly test and develop a single bitfile.  Thus, projects requiring multiple bitfiles should have multiple PDK sub-projects.&lt;br /&gt;
&lt;br /&gt;
== Running different bitfiles on each AE ==&lt;br /&gt;
Source: http://www.ccm.ece.vt.edu/twiki/bin/view/Main/Convey&lt;br /&gt;
&lt;br /&gt;
The runtime environment supports multiple bitfiles making up a single personality (i.e. different ).  There is a script called &amp;quot;mkaetgz&amp;quot; that is installed on the HC-1 system. To use it, you need to create a project for each bitfile. Then run the script to package them into one personality.&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mkaetgz -h&lt;br /&gt;
 mkaetgz [-i &amp;lt;initFile&amp;gt;] [-f &amp;lt;file0,file1,...,fileN&amp;gt;] [-F] [-h]&lt;br /&gt;
         [-o &amp;lt;tgz name&amp;gt;] [-t &amp;lt;tmpDir&amp;gt;] [-v]&lt;br /&gt;
         -0 &amp;lt;aeImage0&amp;gt; [-1 &amp;lt;aeImage1&amp;gt; -2 &amp;lt;aeImage2&amp;gt; -3 &amp;lt;aeImage3&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 mkaetgz -i /opt/convey/pdk/2010_08_09/doc/cae_init.txt -0 cae_fpga0.bit -1 cae_fpga1.bit -2 cae_fpga2.bit -3 cae_fpga3.bit&lt;br /&gt;
&lt;br /&gt;
Note: mkaetgz does not exist on our machine.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=650</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=650"/>
		<updated>2012-09-25T23:32:14Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Convey HC-1 Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE | Projects with Multiple Bitfiles]]&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=649</id>
		<title>Using ISE&#039;s Core Generator to build FIFOs and other IP cores</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=649"/>
		<updated>2012-09-25T23:28:40Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Open Xilinx&#039;s ISE from the terminal (make sure your [[Convey environment setup | environmental variables]] are set):&lt;br /&gt;
 ise &amp;amp;&lt;br /&gt;
# Create or open a project.  The devices on the HC-1 and HC-2 are Virtex 5 FPGAs (xc5vlx330, -2, ff1760).&lt;br /&gt;
# Open the Core Generator (Tools -&amp;gt; Core Generator...)&lt;br /&gt;
# Create a new Core Generator project.&lt;br /&gt;
## Part&lt;br /&gt;
### Family: Virtex5&lt;br /&gt;
### Device: xc5vlx330&lt;br /&gt;
### Package: ff1760&lt;br /&gt;
### Speed: -2&lt;br /&gt;
## Generation&lt;br /&gt;
### Simulation Model: Structural&lt;br /&gt;
# Generate you IP Cores!&lt;br /&gt;
# Copy the .ngc, .v, and .xco to the coregen folder in your PDK project&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Convey_environment_setup&amp;diff=648</id>
		<title>Convey environment setup</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Convey_environment_setup&amp;diff=648"/>
		<updated>2012-09-25T23:23:06Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please update this document if you think you have a better login setup.  Also update this document if the software changes.&lt;br /&gt;
&lt;br /&gt;
You&#039;ll want to copy the two files below into to your home directory: &#039;&#039;&#039;Xilinx_Env&#039;&#039;&#039; and &#039;&#039;&#039;cny_Env&#039;&#039;&#039;.  In addition, edit your .bash_profile to source the files.  You can always check to see if your environment is correctly setup by running:&lt;br /&gt;
&lt;br /&gt;
 env | grep &amp;quot;CNY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== cny_Env ===&lt;br /&gt;
 #General envs to setup&lt;br /&gt;
 export CNY_PDK=/opt/convey/pdk&lt;br /&gt;
 export CNY_PDK_REV=2011_11_22&lt;br /&gt;
 export CNY_PDK_HDLSIM=Mentor&lt;br /&gt;
 export CNY_PDK_SIMMODE=64&lt;br /&gt;
 &lt;br /&gt;
 # For running SW model or Modelsim&lt;br /&gt;
 # export CNY_SIM_THREAD=libcpSimLib2.so&lt;br /&gt;
 &lt;br /&gt;
 # For running on HW&lt;br /&gt;
 export CNY_SIM_THREAD=&lt;br /&gt;
 &lt;br /&gt;
 # for software emulation&lt;br /&gt;
 # export CNY_CAE_EMULATOR=&amp;lt;loction of CaeSimPers&amp;gt;&lt;br /&gt;
 # Example location ~/temp_sample_app/cae_pers_vadd/CaeSimPers/CaeSimPers&lt;br /&gt;
 &lt;br /&gt;
 # for Modelsim simulation&lt;br /&gt;
 #export CNY_CAE_EMULATOR=./run_simulation&lt;br /&gt;
 &lt;br /&gt;
 #for running on HW&lt;br /&gt;
 export CNY_CAE_EMULATOR=&lt;br /&gt;
 &lt;br /&gt;
 #see Chap 12 of Convey Programmers Guide v1.8 for more environment variables&lt;br /&gt;
&lt;br /&gt;
=== Xilinx_Env ===&lt;br /&gt;
 source /remote/Xilinx/13.4/settings64.sh&lt;br /&gt;
 export PATH=$PATH:/remote/Modelsim/10.1c/modeltech/linux_x86_64/&lt;br /&gt;
 export LM_LICENSE_FILE=1717@io.ece.iastate.edu:27006@io.ece.iastate.edu&lt;br /&gt;
&lt;br /&gt;
== Editing .bash_profile ==&lt;br /&gt;
Adding the following lines to your &#039;&#039;&#039;.bash_profile&#039;&#039;&#039; file will prevent you from having to source these files every time you login.  The file is located in your home directory (use &#039;&#039;&#039;ls -a&#039;&#039;&#039; to view hidden files that start with &#039;.&#039;).  It is assumed that you have copied the two scripts above to your home directory.&lt;br /&gt;
&lt;br /&gt;
=== .bash_profile ===&lt;br /&gt;
 # .bash_profile&lt;br /&gt;
 &lt;br /&gt;
 # Get the aliases and functions&lt;br /&gt;
 if [ -f ~/.bashrc ]; then&lt;br /&gt;
         . ~/.bashrc&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 # User specific environment and startup programs&lt;br /&gt;
 &lt;br /&gt;
 PATH=$PATH:$HOME/bin:.&lt;br /&gt;
 &lt;br /&gt;
 export PATH&lt;br /&gt;
 &lt;br /&gt;
 # setup convey aliases&lt;br /&gt;
 source cny_Env&lt;br /&gt;
 source Xilinx_Env&lt;br /&gt;
&lt;br /&gt;
=== Ensure You&#039;re Using Bash ===&lt;br /&gt;
  echo $SHELL&lt;br /&gt;
&lt;br /&gt;
If you are not using bash, you can set your default shell to bash at [https://weblogin.iastate.edu/cgi-bin/index.cgi] by going to Manage User -&amp;gt; &lt;br /&gt;
View/Edit your  Linux login shell -&amp;gt; Select /bin/bash&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=647</id>
		<title>Using ISE&#039;s Core Generator to build FIFOs and other IP cores</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Using_ISE%27s_Core_Generator_to_build_FIFOs_and_other_IP_cores&amp;diff=647"/>
		<updated>2012-09-25T23:22:02Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: New page: # Open Xilinx&amp;#039;s ISE from the terminal (make sure your environmental variables are set):  ise &amp;amp;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Open Xilinx&#039;s ISE from the terminal (make sure your environmental variables are set):&lt;br /&gt;
 ise &amp;amp;&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=646</id>
		<title>Running Different Bitfiles on each AE</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Running_Different_Bitfiles_on_each_AE&amp;diff=646"/>
		<updated>2012-09-25T23:21:12Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: New page: == Running different bitfiles on each AE == Source: http://www.ccm.ece.vt.edu/twiki/bin/view/Main/Convey  The runtime environment supports multiple bitfiles making up a single personality ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Running different bitfiles on each AE ==&lt;br /&gt;
Source: http://www.ccm.ece.vt.edu/twiki/bin/view/Main/Convey&lt;br /&gt;
&lt;br /&gt;
The runtime environment supports multiple bitfiles making up a single personality (i.e. different ).  There is a script called &amp;quot;mkaetgz&amp;quot; that is installed on the HC-1 system. To use it, you need to create a project for each bitfile. Then run the script to package them into one personality.&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mkaetgz -h&lt;br /&gt;
 mkaetgz [-i &amp;lt;initFile&amp;gt;] [-f &amp;lt;file0,file1,...,fileN&amp;gt;] [-F] [-h]&lt;br /&gt;
         [-o &amp;lt;tgz name&amp;gt;] [-t &amp;lt;tmpDir&amp;gt;] [-v]&lt;br /&gt;
         -0 &amp;lt;aeImage0&amp;gt; [-1 &amp;lt;aeImage1&amp;gt; -2 &amp;lt;aeImage2&amp;gt; -3 &amp;lt;aeImage3&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 mkaetgz -i /opt/convey/pdk/2010_08_09/doc/cae_init.txt -0 cae_fpga0.bit -1 cae_fpga1.bit -2 cae_fpga2.bit -3 cae_fpga3.bit&lt;br /&gt;
&lt;br /&gt;
Note: mkaetgz does not exist on our machine.&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=645</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Main_Page&amp;diff=645"/>
		<updated>2012-09-25T22:59:17Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Convey HC-1 Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Articles ==&lt;br /&gt;
=== Convey HC-1 Tutorials ===&lt;br /&gt;
* [[Connecting to convey-1.ece.iastate.edu]]&lt;br /&gt;
* [[Convey environment setup|Setting Up Environment Variables on Convey&#039;s HC-1]]&lt;br /&gt;
* [[Running the Vector Adder Example Application]]&lt;br /&gt;
* [[Analyze the Simpleton Basic App]]&lt;br /&gt;
* [[Tutorial: Creating a Custom Bitfile | Create a Custom Bitfile]]&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
* [[Adding VHDL Files to a Project]]&lt;br /&gt;
* [[The Verilog Hardware Interface for CAE]]&lt;br /&gt;
* [[Using ISE&#039;s Core Generator to build FIFOs and other IP cores]]&lt;br /&gt;
* [[Running Different Bitfiles on each AE]]&lt;br /&gt;
* [[Using SPAT]]&lt;br /&gt;
* [[Using GPROF]]&lt;br /&gt;
* [[Convey vector example | Example of Loop Unrolling using FPGA]]&lt;br /&gt;
* [[Sobel Algorithm | Speeding up Sobel Algorithm]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manuals ==&lt;br /&gt;
=== Convey ===&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] (updated to V5.2; April 2012)&lt;br /&gt;
* [[Media:ConveyProgrammersGuide.pdf | Convey Programmers Guide (.pdf)]] (updated to V1.8; November 2010)&lt;br /&gt;
* [[Media:ConveyReferenceManual.pdf | Convey Reference Manual (.pdf)]]&lt;br /&gt;
* [[Media:ConveySpatUsersGuide.pdf | Convey SPAT (Simulator Performance Analysis Tool) Guide]]&lt;br /&gt;
* [[Media:Convey PDK Training.pdf | Convey PDK (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
* [[Media:Convey Overview.pdf | Convey Overview (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
The newet version of these documents are available at [http://www.conveysupport.com/help/?page_id=112 Convey&#039;s Support Site]&lt;br /&gt;
&lt;br /&gt;
=== CUDA ===&lt;br /&gt;
* [[Media:CUDA_C_Programming_Guide.pdf | CUDA_C_Programming_Guide (.pdf)]]&lt;br /&gt;
* [[Media:CUDA_C_Best_Practices_Guide.pdf | CUDA_C_Best_Practices_Guide(.pdf)]]&lt;br /&gt;
* [[Media:CUDA_Memory.pdf | CUDA_Memory (.pdf)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://memocode.irisa.fr MemoCODE 2012]&lt;br /&gt;
** [[Media:2012-memocode-contest.pdf | MemoCODE Contest.pdf]]&lt;br /&gt;
** [http://memocode.irisa.fr/2012/2012-memocode-contest.tar.gz Reference Implementation]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/technical/reference/human_g1k_v37.fasta.gz Human Reference Genome (human_g1k_v37.fasta.gz)]&lt;br /&gt;
** [ftp://ftp-trace.ncbi.nih.gov/1000genomes/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (ERR050082.filt.fastq.gz)]&lt;br /&gt;
** [http://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA06985/sequence_read/ERR050082.filt.fastq.gz Example Reads (Alternative Link) (ERR050082.filt.fastq.gz)]&lt;br /&gt;
&lt;br /&gt;
* [[2010 Main Page | CprE 584 2010 Wiki Main Page]]&lt;br /&gt;
* [http://class.ee.iastate.edu/cpre583/ CprE 583 Website]&lt;br /&gt;
* [http://class.ece.iastate.edu/cpre584/ CprE 584 Website]&lt;br /&gt;
&lt;br /&gt;
=== Other Articles ===&lt;br /&gt;
* [[Assignment|Assignments]]&lt;br /&gt;
* [[A quick start on CUDA]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Guides ==&lt;br /&gt;
* [http://courseware.ee.calpoly.edu/~bmealy/shock_awe_vhdl_adobe.pdf &amp;quot;The Shock and Awe&amp;quot; VHDL Tutorial]&lt;br /&gt;
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Simple Code Examples]&lt;br /&gt;
* [http://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html VHDL Primer]&lt;br /&gt;
* [http://www.kxcad.net/electronic_Xilinx_guide/mergedProjects/xsim/html/xs_p_ml_instantiation.htm Using VHDL components in Verilog]&lt;br /&gt;
&lt;br /&gt;
== Readings for Memocode 2012 ==&lt;br /&gt;
*[[Media:Brief_Bioinform-2010-Li-473-83.pdf|A survey on algorithms for sequencing]]&lt;br /&gt;
*[[Media:Gb-2009-10-3-r25.pdf|Burrows-Wheeler indexing]]&lt;br /&gt;
&lt;br /&gt;
== Spring 2012 Teams ==&lt;br /&gt;
* [[Team Gryffindor]]&lt;br /&gt;
* [[Team Slytherin]]&lt;br /&gt;
* [[Team 142857]]&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
	<entry>
		<id>https://wikis.ece.iastate.edu/cpre584/index.php?title=Tutorial:_Creating_a_Custom_Bitfile&amp;diff=644</id>
		<title>Tutorial: Creating a Custom Bitfile</title>
		<link rel="alternate" type="text/html" href="https://wikis.ece.iastate.edu/cpre584/index.php?title=Tutorial:_Creating_a_Custom_Bitfile&amp;diff=644"/>
		<updated>2012-09-24T16:55:03Z</updated>

		<summary type="html">&lt;p&gt;Cnel711: /* Device Usage Statistics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page covers the creation and installation of a custom personality/bitfile (a modification of the vector adder sample project).&lt;br /&gt;
&lt;br /&gt;
== Building a Bitfile ==&lt;br /&gt;
Copy the newest version of the [[Running the Vector Adder Example Application#Compiling the Project|example project]] and set your [[Convey environment setup|environment variables]] if you have not done so already.  You can make a small modification to the verilog code if you wish, such as making it a vector subtractor instead of a vector adder.&lt;br /&gt;
&lt;br /&gt;
Next, compile your bitfile:&lt;br /&gt;
&lt;br /&gt;
 cd ~/pdk_sample/cae_vadd/phys&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The bitfile will take a long time to create (while the Reference Manual states 2 to 4 hours, it may take much longer).  Be patient.&lt;br /&gt;
&lt;br /&gt;
Next, package your bitfile using the command:&lt;br /&gt;
&lt;br /&gt;
 make release&lt;br /&gt;
&lt;br /&gt;
=== FPGA Usage Statistics ===&lt;br /&gt;
&lt;br /&gt;
The device usage statistics are displayed on the terminal while building the bitfile.  The log is saved to disk at:&lt;br /&gt;
&lt;br /&gt;
 {project directory}/phys/cae_fpga.map&lt;br /&gt;
&lt;br /&gt;
Search the end of the log file for &amp;quot;Design Summay&amp;quot; for a percentage break down in LUT, Flip flop, and BRAM usage.&lt;br /&gt;
&lt;br /&gt;
== Choose a New Signature == &lt;br /&gt;
Custom personalities should not use the default PDK signature (4.1.1.1.0).  Choose a new signature between 65000 and 65535.  In this example, we will use 65123.1.1.1.0.&lt;br /&gt;
&lt;br /&gt;
You will need to create a new directory and copy the pertinent files to this directory:&lt;br /&gt;
&lt;br /&gt;
 cd /opt/convey/personalities&lt;br /&gt;
 mkdir 65123.1.1.1.0&lt;br /&gt;
 cd 65123.1.1.1.0&lt;br /&gt;
 &lt;br /&gt;
 cp /home/PROJECT_RELEASE/DATE/cae_fpga.tgz ./ae_fpga.tgz&lt;br /&gt;
&lt;br /&gt;
This is the only required file, but you may copy PersDesc.dat from the default PDK folder to your new folder and uncomment additional custom instructions you have used.&lt;br /&gt;
&lt;br /&gt;
 cp /opt/convey/personalities/4.1.1.1.0/PersDesc.dat ./&lt;br /&gt;
&lt;br /&gt;
Instead of adding a new directory to Convey&#039;s personality folder as done above, you may set the CNY_PERSONALITY_PATH environment variable to any directory, i.e.&lt;br /&gt;
&lt;br /&gt;
 export CNY_PERSONALITY_PATH=/home/PROJECT_PATH/&lt;br /&gt;
   or&lt;br /&gt;
 setenv CNY_PERSONALITY_PATH /home/PROJECT_PATH/&lt;br /&gt;
&lt;br /&gt;
The default when the CNY_PERSONALITY_PATH is not set is to use the /opt/convey/personalities folder.&lt;br /&gt;
&lt;br /&gt;
You will also need to update the &#039;&#039;customdb&#039;&#039; file in /opt/convey/personalities (or create your own customdb file in your user defined personalities folder).  This file is used by the cny_get_signature function and converts strings to a signature number.  Our customdb file contains the following text:  &lt;br /&gt;
&lt;br /&gt;
 65123.1.1.1.0,subtractor&lt;br /&gt;
&lt;br /&gt;
Finally, there are certain places in the code where you should ensure that the signature has been updated.&lt;br /&gt;
&lt;br /&gt;
* In the simulator (/sim/CaeIsaVadd.cpp), update: &#039;&#039;&#039;#define PERS_SIGN_CAE 0xfe63001000101000LL&#039;&#039;&#039;, where 0xfe63 is the hex value for your signature (65123).&lt;br /&gt;
* In the C code, (SampleAppVadd/UserApp.c) update: &#039;&#039;&#039;cny_get_signature(&amp;quot;subtractor&amp;quot;, &amp;amp;sig, &amp;amp;sig2, &amp;amp;stat);&#039;&#039;&#039;, where &amp;quot;subtractor&amp;quot; is the pseudo name of your CAE given in the customdb file.&lt;br /&gt;
* In the assembly code, (SampleAppVadd/cpVadd.s) update the signature directive: &#039;&#039;&#039;.signature pdk=65123&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
When you change the personalities directory, flush the MP cache.  This will unload the current bitfile:&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mpcache -f&lt;br /&gt;
&lt;br /&gt;
You can also add a signature, and preload a given bitfile by using the commands:&lt;br /&gt;
&lt;br /&gt;
 /opt/convey/sbin/mpcache -add  -S&amp;lt;personality&amp;gt;&lt;br /&gt;
 /opt/convey/sbin/mpcache -load -S&amp;lt;personality&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional details are available in Appendix D of the [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Using a Custom Bitfile in C Code]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[Media:ConveyPDKReferenceManual.pdf | Convey PDK Reference Manual (.pdf)]] - Sections 9.4.6, 9.4.7, 10, Appendix D&lt;/div&gt;</summary>
		<author><name>Cnel711</name></author>
	</entry>
</feed>