📄 lutabsolutemapping.java
字号:
/*
* LUTAbsoluteMapping.java
*
* Created on 01 April 2002, 19:00
*/
package jaga.pj.circuits.fpgaft;
import jaga.BitSet;
import jaga.pj.circuits.*;
/** Genotype -> Phenotype mapping is: <p>
* first 2^LUTInputs bits of block declare Look Up Table bits. <p>
* other bitsPerVar * LUTInputs declare element from where inputs are taken,
* coding similar to jaga.pj.circuits.grippingeh.cnand.SimlatorCNANDCircuit.java
*
* @author Michael Garvie
* @version
*/
public class LUTAbsoluteMapping implements CircuitMapping {
/** Config */
protected int nrIns, nrOuts, LUTInputs, bitsPerVar;
protected ElementDelayModel delayModel;
public LUTAbsoluteMapping(int ins,int outs,int bpv,int LUTins,ElementDelayModel delmod)
{
nrIns = ins;
nrOuts = outs;
LUTInputs = LUTins;
bitsPerVar = bpv;
delayModel = delmod;
}
public SimulatorLogicElement[][] map( BitSet genotype )
{
int numVars = 1 << bitsPerVar;
int numLUTs = numVars - nrIns;
int LUTSize = 1 << LUTInputs;
SimulatorLogicElement[] inputs = new SimulatorLogicElement[ nrIns ];
SimulatorLogicElement[] outputs = new SimulatorLogicElement[ nrOuts ];
SimulatorFaultyDelayLE[] elements = new SimulatorFaultyDelayLE[ numVars ];
int genPos = 0;
int geneSize = LUTSize + LUTInputs * bitsPerVar;
// 1. Init LUTs
for( int ll = 0; ll < numLUTs; ll++ )
{
//elements[ ll ] = new SimulatorLUT( genotype.getChunk( genPos, LUTSize ), delayModel.getDelay() );
elements[ ll ] = new SimulatorLUT( genotype.getBooleanChunk( genPos, LUTSize ), delayModel.getDelay() );
genPos += geneSize;
}
// 2. Init inputs
for( int il = 0; il < inputs.length; il++ )
{
elements[ numVars - il - 1 ] = new SimulatorFaultyDelayLE( 0 );
}
genPos = 0;
// 3. Internal Connections
for( int ll = 0; ll < numLUTs; ll++ )
{
SimulatorLogicElement[] connections = new SimulatorLogicElement[ LUTInputs ];
genPos += LUTSize;
for( int il = 0; il < LUTInputs; il++ )
{
int inpIndex = genotype.bitsToInt( genPos, genPos + bitsPerVar );
connections[ il ] = elements[ inpIndex ];
//addFwdLink( inpIndex, elements[ ll ] );
genPos += bitsPerVar;
}
elements[ ll ].connect( connections );
}
// 4. Connect Inputs
for( int il = 0; il < inputs.length; il++ )
{
inputs[ il ] = elements[ numVars - il - 1 ];
}
// 5. Connect Outputs
for( int ol = 0; ol < outputs.length; ol++ )
{
outputs[ ol ] = elements[ ol ];
}
SimulatorFaultyDelayLE[] onlyUsedLUTs;
onlyUsedLUTs = new SimulatorFaultyDelayLE[ numLUTs ];
System.arraycopy( elements, 0, onlyUsedLUTs, 0, numLUTs );
SimulatorLogicElement[][] rv = { inputs, outputs, onlyUsedLUTs };
return rv;
}
public String toString()
{
String rv = "LUTAbsoluteMapping with:";
rv += "\n # inputs = " + nrIns;
rv += "\n # outputs = " + nrOuts;
rv += "\n Bits per Variable = " + bitsPerVar;
rv += "\n # LUT inputs = " + LUTInputs;
rv += "\n Delay Model: " + delayModel;
return rv;
}
public void resetDelays( Object delayDef )
{
delayModel.set( delayDef );
}
public SimulatorLogicElement getElementFromAddress(SimulatorLogicElement[][] inoutels, int address)
{
int numVars = 1 << bitsPerVar;
int numLUTs = numVars - nrIns;
if( address < numLUTs )
{
return inoutels[ ELEMENTS ][ address ];
}else
{
return inoutels[ INPUTS ][ numVars - 1 - address ];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -