diff --git a/src/main/resources/vhdl2/DIG_D_FF.tem b/src/main/resources/vhdl2/DIG_D_FF.tem
index 943689963..3bb550386 100644
--- a/src/main/resources/vhdl2/DIG_D_FF.tem
+++ b/src/main/resources/vhdl2/DIG_D_FF.tem
@@ -3,11 +3,17 @@ USE ieee.std_logic_1164.all;
if (elem.Bits=1)
entityName:="DIG_D_FF";
- else
+ else {
entityName:="DIG_D_FF_BUS";
+ print("use ieee.numeric_std.all;");
+ }
?>
entity =entityName?> is
- 1) {?>generic ( Bits: integer ); vhdl.registerGeneric("Bits"); }?>
+ generic (1) {?>
+ Default: integer; vhdl.registerGeneric("Default");?>
+ Bits: integer ); vhdl.registerGeneric("Bits"); }
+ else {?>
+ Default: std_logic ); vhdl.registerGeneric("Default", "std_logic");}?>
port ( D : in = vhdl.genericType(elem.Bits)?>;
C : in std_logic;
Q : out = vhdl.genericType(elem.Bits)?>;
@@ -15,7 +21,7 @@ entity =entityName?> is
end =entityName?>;
architecture Behavioral of =entityName?> is
- signal state : = vhdl.genericType(elem.Bits)?> := = vhdl.zero(elem.Bits)?>;
+ signal state : = vhdl.genericType(elem.Bits)?> := 1) {?>std_logic_vector(to_unsigned(Default, Bits))} else {?>Default }?>;
begin
Q <= state;
notQ <= NOT( state );
diff --git a/src/test/java/de/neemann/digital/hdl/verilog2/VerilogSimulatorTest.java b/src/test/java/de/neemann/digital/hdl/verilog2/VerilogSimulatorTest.java
index 671d26790..975599e46 100644
--- a/src/test/java/de/neemann/digital/hdl/verilog2/VerilogSimulatorTest.java
+++ b/src/test/java/de/neemann/digital/hdl/verilog2/VerilogSimulatorTest.java
@@ -45,7 +45,7 @@ public class VerilogSimulatorTest extends TestCase {
File examples = new File(Resources.getRoot(), "/dig/test/vhdl");
try {
int tested = new FileScanner(this::checkVerilogExport).noOutput().scan(examples);
- assertEquals(35, tested);
+ assertEquals(37, tested);
assertEquals(tested+2, testBenches);
} catch (FileScanner.SkipAllException e) {
// if iverilog is not installed its also ok
diff --git a/src/test/java/de/neemann/digital/hdl/vhdl2/ClockTest.java b/src/test/java/de/neemann/digital/hdl/vhdl2/ClockTest.java
index ff32bb019..77be0b284 100644
--- a/src/test/java/de/neemann/digital/hdl/vhdl2/ClockTest.java
+++ b/src/test/java/de/neemann/digital/hdl/vhdl2/ClockTest.java
@@ -66,7 +66,8 @@ public class ClockTest extends TestCase {
"USE ieee.std_logic_1164.all;\n" +
"\n" +
"entity DIG_D_FF is\n" +
- " \n" +
+ " generic (\n" +
+ " Default: std_logic ); \n" +
" port ( D : in std_logic;\n" +
" C : in std_logic;\n" +
" Q : out std_logic;\n" +
@@ -74,7 +75,7 @@ public class ClockTest extends TestCase {
"end DIG_D_FF;\n" +
"\n" +
"architecture Behavioral of DIG_D_FF is\n" +
- " signal state : std_logic := '0';\n" +
+ " signal state : std_logic := Default;\n" +
"begin\n" +
" Q <= state;\n" +
" notQ <= NOT( state );\n" +
@@ -109,6 +110,8 @@ public class ClockTest extends TestCase {
" cin => C,\n" +
" cout => s0);\n" +
" gate1: entity work.DIG_D_FF\n" +
+ " generic map (\n" +
+ " Default => '0')\n" +
" port map (\n" +
" D => A,\n" +
" C => s0,\n" +
@@ -229,7 +232,8 @@ public class ClockTest extends TestCase {
"USE ieee.std_logic_1164.all;\n" +
"\n" +
"entity DIG_D_FF is\n" +
- " \n" +
+ " generic (\n" +
+ " Default: std_logic ); \n" +
" port ( D : in std_logic;\n" +
" C : in std_logic;\n" +
" Q : out std_logic;\n" +
@@ -237,7 +241,7 @@ public class ClockTest extends TestCase {
"end DIG_D_FF;\n" +
"\n" +
"architecture Behavioral of DIG_D_FF is\n" +
- " signal state : std_logic := '0';\n" +
+ " signal state : std_logic := Default;\n" +
"begin\n" +
" Q <= state;\n" +
" notQ <= NOT( state );\n" +
@@ -276,6 +280,8 @@ public class ClockTest extends TestCase {
" cin => C,\n" +
" cout => s0);\n" +
" gate1: entity work.DIG_D_FF\n" +
+ " generic map (\n" +
+ " Default => '0')\n" +
" port map (\n" +
" D => A,\n" +
" C => s0,\n" +
diff --git a/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLGeneratorTest.java b/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLGeneratorTest.java
index 1d09044c8..1bc99015f 100644
--- a/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLGeneratorTest.java
+++ b/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLGeneratorTest.java
@@ -28,7 +28,8 @@ public class VHDLGeneratorTest extends TestCase {
"USE ieee.std_logic_1164.all;\n" +
"\n" +
"entity DIG_D_FF is\n" +
- " \n" +
+ " generic (\n" +
+ " Default: std_logic ); \n" +
" port ( D : in std_logic;\n" +
" C : in std_logic;\n" +
" Q : out std_logic;\n" +
@@ -36,7 +37,7 @@ public class VHDLGeneratorTest extends TestCase {
"end DIG_D_FF;\n" +
"\n" +
"architecture Behavioral of DIG_D_FF is\n" +
- " signal state : std_logic := '0';\n" +
+ " signal state : std_logic := Default;\n" +
"begin\n" +
" Q <= state;\n" +
" notQ <= NOT( state );\n" +
@@ -71,9 +72,11 @@ public class VHDLGeneratorTest extends TestCase {
" signal Z_temp: std_logic;\n" +
"begin\n" +
" Y_temp <= (B OR NOT C);\n" +
- " Z_temp <= NOT A;\n"+
+ " Z_temp <= NOT A;\n" +
" s0 <= ((A OR C) AND (Z_temp OR C) AND '1' AND NOT (B OR C) AND Y_temp);\n" +
" gate0: entity work.DIG_D_FF\n" +
+ " generic map (\n" +
+ " Default => '0')\n" +
" port map (\n" +
" D => s0,\n" +
" C => '1',\n" +
diff --git a/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLSimulatorTest.java b/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLSimulatorTest.java
index f053f3d90..4523eb6eb 100644
--- a/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLSimulatorTest.java
+++ b/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLSimulatorTest.java
@@ -47,7 +47,7 @@ public class VHDLSimulatorTest extends TestCase {
File examples = new File(Resources.getRoot(), "/dig/test/vhdl");
try {
int tested = new FileScanner(this::checkVHDLExport).noOutput().scan(examples);
- assertEquals(35, tested);
+ assertEquals(37, tested);
assertEquals(tested+2, testBenches);
} catch (FileScanner.SkipAllException e) {
// if ghdl is not installed its also ok
diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java
index e89ca1c65..9e0311838 100644
--- a/src/test/java/de/neemann/digital/integration/TestExamples.java
+++ b/src/test/java/de/neemann/digital/integration/TestExamples.java
@@ -43,8 +43,8 @@ public class TestExamples extends TestCase {
*/
public void testTestExamples() throws Exception {
File examples = new File(Resources.getRoot(), "/dig/test");
- assertEquals(148, new FileScanner(this::check).scan(examples));
- assertEquals(140, testCasesInFiles);
+ assertEquals(150, new FileScanner(this::check).scan(examples));
+ assertEquals(142, testCasesInFiles);
}
/**
diff --git a/src/test/resources/dig/test/vhdl/D-Default.dig b/src/test/resources/dig/test/vhdl/D-Default.dig
new file mode 100644
index 000000000..42ae77f38
--- /dev/null
+++ b/src/test/resources/dig/test/vhdl/D-Default.dig
@@ -0,0 +1,119 @@
+
+
+ 1
+
+
+
+ VDD
+
+
+
+
+ VDD
+
+
+
+
+ In
+
+
+ Label
+ C
+
+
+
+
+
+ Out
+
+
+ Label
+ Q1
+
+
+
+
+
+ Out
+
+
+ Label
+ Q2
+
+
+
+
+
+ Testcase
+
+
+ Testdata
+
+ C Q1 Q2
+0 0 1
+C 1 1
+
+
+
+
+
+
+
+ D_FF
+
+
+
+
+ D_FF
+
+
+ Default
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/test/resources/dig/test/vhdl/D-DefaultBus.dig b/src/test/resources/dig/test/vhdl/D-DefaultBus.dig
new file mode 100644
index 000000000..8eb3d0a01
--- /dev/null
+++ b/src/test/resources/dig/test/vhdl/D-DefaultBus.dig
@@ -0,0 +1,150 @@
+
+
+ 1
+
+
+
+ VDD
+
+
+ Bits
+ 4
+
+
+
+
+
+ VDD
+
+
+ Bits
+ 4
+
+
+
+
+
+ In
+
+
+ Label
+ C
+
+
+
+
+
+ Out
+
+
+ Label
+ Q1
+
+
+ Bits
+ 4
+
+
+
+
+
+ Out
+
+
+ Label
+ Q2
+
+
+ Bits
+ 4
+
+
+
+
+
+ Testcase
+
+
+ Testdata
+
+ C Q1 Q2
+0 5 0xA
+C 0xf 0xf
+
+
+
+
+
+
+
+ D_FF
+
+
+ Bits
+ 4
+
+
+ Default
+ 5
+
+
+
+
+
+ D_FF
+
+
+ Bits
+ 4
+
+
+ Default
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file