Skip to content

Commit a9baefc

Browse files
committed
WIP: Blog
1 parent 35e8438 commit a9baefc

File tree

9 files changed

+526
-43
lines changed

9 files changed

+526
-43
lines changed

docs/blog/vhdl_configurations.rst

Lines changed: 429 additions & 0 deletions
Large diffs are not rendered by default.

examples/vhdl/vhdl_configuration/dff.vhd

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,6 @@ begin
3232
end process;
3333
end;
3434

35-
configuration dff_rtl of tb_selecting_dut_with_vhdl_configuration is
36-
for tb
37-
for test_fixture
38-
for dut : dff
39-
use entity work.dff(rtl);
40-
end for;
41-
end for;
42-
end for;
43-
end;
44-
4535
architecture behavioral of dff is
4636
begin
4737
process
@@ -50,13 +40,3 @@ begin
5040
q <= (others => '0') when reset else d;
5141
end process;
5242
end;
53-
54-
configuration dff_behavioral of tb_selecting_dut_with_vhdl_configuration is
55-
for tb
56-
for test_fixture
57-
for dut : dff
58-
use entity work.dff(behavioral);
59-
end for;
60-
end for;
61-
end for;
62-
end;

examples/vhdl/vhdl_configuration/handling_generics_limitation/tb_selecting_dut_with_generate_statement.vhd

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ entity tb_selecting_dut_with_generate_statement is
1818
generic(
1919
runner_cfg : string;
2020
width : positive;
21-
dff_arch : string
21+
dut_arch : string
2222
);
2323
end entity;
2424

@@ -64,7 +64,7 @@ begin
6464
begin
6565
clk <= not clk after clk_period / 2;
6666

67-
dut_selection : if dff_arch = "rtl" generate
67+
dut_selection : if dut_arch = "rtl" generate
6868
dut : entity work.dff(rtl)
6969
generic map(
7070
width => width
@@ -76,7 +76,7 @@ begin
7676
q => q
7777
);
7878

79-
elsif dff_arch = "behavioral" generate
79+
elsif dut_arch = "behavioral" generate
8080
dut : entity work.dff(behavioral)
8181
generic map(
8282
width => width
@@ -89,7 +89,7 @@ begin
8989
);
9090

9191
else generate
92-
error("Unknown DFF architecture");
92+
error("Unknown DUT architecture");
9393
end generate;
9494
end block;
9595
end architecture;

examples/vhdl/vhdl_configuration/run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def hook(output_path):
5252
tb = lib.test_bench("tb_selecting_dut_with_generate_statement")
5353
for width in [8, 32]:
5454
for arch in ["rtl", "behavioral"]:
55-
tb.add_config(name=f"dff_{arch}_width={width}", generics=dict(dff_arch=arch, width=width))
55+
tb.add_config(name=f"dut_{arch}_width={width}", generics=dict(dut_arch=arch, width=width))
5656

5757
# Instead of having a testbench containing a shared test fixture
5858
# and then use VHDL configurations to select different test runners implementing

examples/vhdl/vhdl_configuration/tb_selecting_dut_with_vhdl_configuration.vhd

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ begin
7878
begin
7979
clk <= not clk after clk_period / 2;
8080

81-
dut : dff
81+
dut : component dff
8282
generic map(
8383
width => width
8484
)
@@ -90,3 +90,23 @@ begin
9090
);
9191
end block;
9292
end architecture;
93+
94+
configuration rtl of tb_selecting_dut_with_vhdl_configuration is
95+
for tb
96+
for test_fixture
97+
for dut : dff
98+
use entity work.dff(rtl);
99+
end for;
100+
end for;
101+
end for;
102+
end;
103+
104+
configuration behavioral of tb_selecting_dut_with_vhdl_configuration is
105+
for tb
106+
for test_fixture
107+
for dut : dff
108+
use entity work.dff(behavioral);
109+
end for;
110+
end for;
111+
end for;
112+
end;

examples/vhdl/vhdl_configuration/tb_selecting_test_runner_with_vhdl_configuration.vhd

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ architecture tb of tb_selecting_test_runner_with_vhdl_configuration is
4646
);
4747
end component;
4848

49+
component dff is
50+
generic(
51+
width : positive := width
52+
);
53+
port(
54+
clk : in std_logic;
55+
reset : in std_logic;
56+
d : in std_logic_vector(width - 1 downto 0);
57+
q : out std_logic_vector(width - 1 downto 0)
58+
);
59+
end component;
60+
4961
begin
5062
test_runner_inst : test_runner
5163
generic map(
@@ -64,7 +76,7 @@ begin
6476
begin
6577
clk <= not clk after clk_period / 2;
6678

67-
dut : entity work.dff(rtl)
79+
dut : component dff
6880
generic map(
6981
width => width
7082
)

examples/vhdl/vhdl_configuration/test_reset.vhd

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,30 @@ begin
2828
test_runner_watchdog(runner, 10 * clk_period);
2929
end;
3030

31-
configuration test_reset of tb_selecting_test_runner_with_vhdl_configuration is
31+
configuration test_reset_behavioral of tb_selecting_test_runner_with_vhdl_configuration is
3232
for tb
3333
for test_runner_inst : test_runner
3434
use entity work.test_runner(test_reset_a);
3535
end for;
36+
37+
for test_fixture
38+
for dut : dff
39+
use entity work.dff(behavioral);
40+
end for;
41+
end for;
42+
end for;
43+
end;
44+
45+
configuration test_reset_rtl of tb_selecting_test_runner_with_vhdl_configuration is
46+
for tb
47+
for test_runner_inst : test_runner
48+
use entity work.test_runner(test_reset_a);
49+
end for;
50+
51+
for test_fixture
52+
for dut : dff
53+
use entity work.dff(rtl);
54+
end for;
55+
end for;
3656
end for;
3757
end;

examples/vhdl/vhdl_configuration/test_state_change.vhd

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,30 @@ begin
3434
test_runner_watchdog(runner, 10 * clk_period);
3535
end;
3636

37-
configuration test_state_change of tb_selecting_test_runner_with_vhdl_configuration is
37+
configuration test_state_change_behavioral of tb_selecting_test_runner_with_vhdl_configuration is
3838
for tb
3939
for test_runner_inst : test_runner
4040
use entity work.test_runner(test_state_change_a);
4141
end for;
42+
43+
for test_fixture
44+
for dut : dff
45+
use entity work.dff(behavioral);
46+
end for;
47+
end for;
48+
end for;
49+
end;
50+
51+
configuration test_state_change_rtl of tb_selecting_test_runner_with_vhdl_configuration is
52+
for tb
53+
for test_runner_inst : test_runner
54+
use entity work.test_runner(test_state_change_a);
55+
end for;
56+
57+
for test_fixture
58+
for dut : dff
59+
use entity work.dff(rtl);
60+
end for;
61+
end for;
4262
end for;
4363
end;

tests/acceptance/test_external_run_scripts.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -181,22 +181,24 @@ def test_vhdl_configuration_example_project(self):
181181
check_report(
182182
self.report_file,
183183
[
184-
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.dff_rtl.Test reset"),
185-
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.dff_behavioral.Test reset"),
186-
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.dff_rtl.Test state change"),
187-
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.dff_behavioral.Test state change"),
188-
("passed", "lib.tb_selecting_test_runner_with_vhdl_configuration.test_reset"),
189-
("passed", "lib.tb_selecting_test_runner_with_vhdl_configuration.test_state_change"),
184+
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.rtl.Test reset"),
185+
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.behavioral.Test reset"),
186+
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.rtl.Test state change"),
187+
("passed", "lib.tb_selecting_dut_with_vhdl_configuration.behavioral.Test state change"),
188+
("passed", "lib.tb_selecting_test_runner_with_vhdl_configuration.test_reset_behavioral"),
189+
("passed", "lib.tb_selecting_test_runner_with_vhdl_configuration.test_reset_rtl"),
190+
("passed", "lib.tb_selecting_test_runner_with_vhdl_configuration.test_state_change_behavioral"),
191+
("passed", "lib.tb_selecting_test_runner_with_vhdl_configuration.test_state_change_rtl"),
190192
("passed", "lib.tb_reset.width=8"),
191193
("passed", "lib.tb_reset.width=32"),
192-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_rtl_width=8.Test reset"),
193-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_behavioral_width=8.Test reset"),
194-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_rtl_width=32.Test reset"),
195-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_behavioral_width=32.Test reset"),
196-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_rtl_width=8.Test state change"),
197-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_behavioral_width=8.Test state change"),
198-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_rtl_width=32.Test state change"),
199-
("passed", "lib.tb_selecting_dut_with_generate_statement.dff_behavioral_width=32.Test state change"),
194+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_rtl_width=8.Test reset"),
195+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_behavioral_width=8.Test reset"),
196+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_rtl_width=32.Test reset"),
197+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_behavioral_width=32.Test reset"),
198+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_rtl_width=8.Test state change"),
199+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_behavioral_width=8.Test state change"),
200+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_rtl_width=32.Test state change"),
201+
("passed", "lib.tb_selecting_dut_with_generate_statement.dut_behavioral_width=32.Test state change"),
200202
("passed", "lib.tb_state_change.width=8"),
201203
("passed", "lib.tb_state_change.width=32"),
202204
],

0 commit comments

Comments
 (0)