use of de.neemann.digital.core.element.ElementAttributes in project Digital by hneemann.
the class VHDLTestBenchCreator method write.
/**
* Writes the test benches
*
* @param file the original vhdl file
* @return this for chained calls
* @throws IOException IOException
* @throws HDLException HDLException
*/
public VHDLTestBenchCreator write(File file) throws IOException, HDLException {
String filename = file.getName();
int p = filename.indexOf('.');
if (p > 0)
filename = filename.substring(0, p);
for (ElementAttributes tc : testCases) {
String testName = tc.getCleanLabel();
if (testName.length() > 0)
testName = filename + "_" + testName + "_tb";
else
testName = filename + "_tb";
File f = new File(file.getParentFile(), testName + ".vhdl");
testFileWritten.add(f);
try (CodePrinter out = new CodePrinter(f)) {
try {
writeTestBench(out, testName, tc);
} catch (TestingDataException | ParserException | RuntimeException e) {
throw new HDLException(Lang.get("err_vhdlErrorWritingTestBench"), e);
}
}
}
return this;
}
use of de.neemann.digital.core.element.ElementAttributes in project Digital by hneemann.
the class ClockIntegratorARTIX7 method insertMMCMClock.
private void insertMMCMClock(HDLCircuit model, Params p, HDLPort clock) throws HDLException {
ElementAttributes attr = new ElementAttributes().set(new Key<>("cascading", 0), p.isCascading()).set(new Key<>("D_PARAM", 0), p.d).set(new Key<>("M_PARAM", 0), p.m).set(new Key<>("DIV_PARAM", 0), p.divider).set(new Key<>("DIV4_PARAM", 0), p.divider4).set(new Key<>("PERIOD_PARAM", 0.0), clkInPeriod);
model.integrateClockNode(clock, new HDLNodeBuildIn("MMCME2_BASE", attr, name -> 1));
}
use of de.neemann.digital.core.element.ElementAttributes in project Digital by hneemann.
the class HDLCircuit method createNot.
private HDLNode createNot(HDLPort p, HDLNode node) throws HDLException, NodeException, PinException {
final ElementAttributes attr = new ElementAttributes().setBits(p.getBits());
HDLNodeAssignment n = new HDLNodeAssignment(Not.DESCRIPTION.getName(), attr, name -> p.getBits());
HDLNet outNet = new HDLNet(null);
listOfNets.add(outNet);
HDLNet inNet = p.getNet();
inNet.remove(p);
n.addPort(new HDLPort(Not.DESCRIPTION.getInputDescription(attr).get(0).getName(), inNet, HDLPort.Direction.IN, p.getBits()));
n.addPort(new HDLPort(Not.DESCRIPTION.getOutputDescriptions(attr).get(0).getName(), outNet, HDLPort.Direction.OUT, p.getBits()));
p.setNet(outNet);
node.replaceNet(inNet, outNet);
n.setExpression(new ExprNot(new ExprVar(n.getInputs().get(0).getNet())));
return n;
}
use of de.neemann.digital.core.element.ElementAttributes in project Digital by hneemann.
the class DecoderTest method testDecoder.
public void testDecoder() throws Exception {
Model model = new Model();
ObservableValue sel = new ObservableValue("sel", 2);
Decoder decoder = model.add(new Decoder(new ElementAttributes().set(Keys.SELECTOR_BITS, 2)));
decoder.setInputs(sel.asList());
TestExecuter te = new TestExecuter(model).setInputs(sel).setOutputs(decoder.getOutputs());
te.check(0, 1, 0, 0, 0);
te.check(1, 0, 1, 0, 0);
te.check(2, 0, 0, 1, 0);
te.check(3, 0, 0, 0, 1);
}
use of de.neemann.digital.core.element.ElementAttributes in project Digital by hneemann.
the class MultiplexerTest method testMux2.
public void testMux2() throws Exception {
ObservableValue a = new ObservableValue("a", 4);
ObservableValue b = new ObservableValue("b", 4);
ObservableValue c = new ObservableValue("c", 4);
ObservableValue d = new ObservableValue("d", 4);
ObservableValue sel = new ObservableValue("sel", 1);
FanIn out = new Multiplexer(new ElementAttributes().set(Keys.BITS, 4).set(Keys.SELECTOR_BITS, 2));
try {
out.setInputs(ovs(a, b, c, d, sel));
assertTrue(false);
} catch (BitsException e) {
assertTrue(true);
}
}
Aggregations