Refactors VGA timing and mode handling

Renames and restructures VGA timing generator for clarity and modularity.
Introduces VGA modes package for centralized resolution and timing configuration.
Updates related testbenches and constraints to align with new structure.
Improves maintainability and flexibility for future VGA mode additions.
This commit is contained in:
2025-04-26 10:26:52 +00:00
parent 319b51bf56
commit a73f125357
13 changed files with 404 additions and 223 deletions

View File

@@ -1,45 +0,0 @@
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity VGATimingGenerator_tb is
end;
architecture bench of VGATimingGenerator_tb is
-- Clock period
constant clk_period : time := 40 ns;
-- Ports
signal I_CLK : std_logic := '0';
signal I_CE : std_logic := '1';
signal I_RST : std_logic := '1';
signal O_PixelReady : std_logic;
signal O_HSync : std_logic;
signal O_VSync : std_logic;
begin
VGATimingGenerator_inst : entity work.VGATimingGenerator
port map
(
I_CLK => I_CLK,
I_CE => I_CE,
I_RST => I_RST,
O_PixelReady => O_PixelReady,
O_HSync => O_HSync,
O_VSync => O_VSync
);
I_CLK <= not I_CLK after clk_period/2;
process
begin
wait for 100 ms;
I_RST <= '0';
wait for 500 ms;
I_RST <= '1';
wait for 100 ms;
I_RST <= '0';
wait;
end process;
end;

View File

@@ -17,17 +17,21 @@ architecture bench of VGATimingGenerator_test_tb is
signal O_Red : std_logic_vector(2 downto 0);
signal O_Green : std_logic_vector(2 downto 0);
signal O_Blue : std_logic_vector(1 downto 0);
signal O_Pixel : std_logic_vector(7 downto 0);
begin
VGATimingGenerator_test_inst : entity work.VGATimingGenerator_test
VGATimingGenerator_test_inst : entity work.VGA_test
port map (
I_CLK => I_CLK,
O_VGA_HSync => O_HSync,
O_VGA_VSync => O_VSync,
O_Red => O_Red,
O_Green => O_Green,
O_Blue => O_Blue
O_VGA_Pixel => O_Pixel
);
O_Red <= O_Pixel(2 downto 0);
O_Green <= O_Pixel(5 downto 3);
O_Blue <= O_Pixel(7 downto 6);
I_CLK <= not I_CLK after clk_period/2;
end;

View File

@@ -9,33 +9,209 @@
<top_module name="math_real" />
<top_module name="numeric_std" />
<top_module name="std_logic_1164" />
<top_module name="vgatiminggenerator_tb" />
<top_module name="textio" />
<top_module name="vcomponents" />
<top_module name="vga_modes_pkg" />
<top_module name="vgatiminggenerator_test_tb" />
<top_module name="vital_primitives" />
<top_module name="vital_timing" />
<top_module name="vpkg" />
</top_modules>
</db_ref>
</db_ref_list>
<WVObjectSize size="6" />
<wvobject fp_name="/vgatiminggenerator_tb/VGATimingGenerator_inst/i_clk" type="logic" db_ref_id="1">
<WVObjectSize size="16" />
<wvobject fp_name="/vgatiminggenerator_test_tb/i_clk" type="logic" db_ref_id="1">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">i_clk</obj_property>
<obj_property name="ObjectShortName">i_clk</obj_property>
<obj_property name="label">Clock</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/s_clk_fb" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">s_clk_fb</obj_property>
<obj_property name="ObjectShortName">s_clk_fb</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/s_clk_pixel" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">s_clk_pixel</obj_property>
<obj_property name="ObjectShortName">s_clk_pixel</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/s_clk_logic" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">s_clk_logic</obj_property>
<obj_property name="ObjectShortName">s_clk_logic</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_pixelce" type="logic" db_ref_id="1">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">i_vga_pixelce</obj_property>
<obj_property name="ObjectShortName">i_vga_pixelce</obj_property>
<obj_property name="label">Pixel_CE</obj_property>
</wvobject>
<wvobject fp_name="group3" type="group">
<obj_property name="label">Testbench</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/o_hsync" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_hsync</obj_property>
<obj_property name="ObjectShortName">o_hsync</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/o_vsync" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_vsync</obj_property>
<obj_property name="ObjectShortName">o_vsync</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/o_red" type="array" db_ref_id="1">
<obj_property name="ElementShortName">o_red[2:0]</obj_property>
<obj_property name="ObjectShortName">o_red[2:0]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/o_green" type="array" db_ref_id="1">
<obj_property name="ElementShortName">o_green[2:0]</obj_property>
<obj_property name="ObjectShortName">o_green[2:0]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/o_blue" type="array" db_ref_id="1">
<obj_property name="ElementShortName">o_blue[1:0]</obj_property>
<obj_property name="ObjectShortName">o_blue[1:0]</obj_property>
</wvobject>
</wvobject>
<wvobject fp_name="group9" type="group">
<obj_property name="label">UUT</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_pixelrst" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_pixelrst</obj_property>
<obj_property name="ObjectShortName">i_vga_pixelrst</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_ce" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_ce</obj_property>
<obj_property name="ObjectShortName">i_vga_ce</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_rst" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_rst</obj_property>
<obj_property name="ObjectShortName">i_vga_rst</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_pixeldata_valid" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_pixeldata_valid</obj_property>
<obj_property name="ObjectShortName">i_vga_pixeldata_valid</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/o_vga_pixeldata_ready" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_vga_pixeldata_ready</obj_property>
<obj_property name="ObjectShortName">o_vga_pixeldata_ready</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_pixeldata" type="array" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_pixeldata[7:0]</obj_property>
<obj_property name="ObjectShortName">i_vga_pixeldata[7:0]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/r_currentcolor" type="array" db_ref_id="1">
<obj_property name="ElementShortName">r_currentcolor[7:0]</obj_property>
<obj_property name="ObjectShortName">r_currentcolor[7:0]</obj_property>
</wvobject>
</wvobject>
<wvobject fp_name="group24" type="group">
<obj_property name="label">Y</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/o_vga_req_y_valid" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_vga_req_y_valid</obj_property>
<obj_property name="ObjectShortName">o_vga_req_y_valid</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_req_y_ready" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_req_y_ready</obj_property>
<obj_property name="ObjectShortName">i_vga_req_y_ready</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/o_vga_req_y" type="array" db_ref_id="1">
<obj_property name="ElementShortName">o_vga_req_y[9:0]</obj_property>
<obj_property name="ObjectShortName">o_vga_req_y[9:0]</obj_property>
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
</wvobject>
</wvobject>
<wvobject fp_name="group25" type="group">
<obj_property name="label">X</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/o_vga_req_x_valid" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_vga_req_x_valid</obj_property>
<obj_property name="ObjectShortName">o_vga_req_x_valid</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/i_vga_req_x_ready" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_vga_req_x_ready</obj_property>
<obj_property name="ObjectShortName">i_vga_req_x_ready</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/o_vga_req_x" type="array" db_ref_id="1">
<obj_property name="ElementShortName">o_vga_req_x[9:0]</obj_property>
<obj_property name="ObjectShortName">o_vga_req_x[9:0]</obj_property>
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
</wvobject>
</wvobject>
<wvobject fp_name="group37" type="group">
<obj_property name="label">Errors</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[0]" type="logic" db_ref_id="1">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">[0]</obj_property>
<obj_property name="ObjectShortName">r_error[0]</obj_property>
<obj_property name="label">Pixel Underrun</obj_property>
</wvobject>
<wvobject fp_name="group39" type="group">
<obj_property name="label">Raw</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error" type="array" db_ref_id="1">
<obj_property name="ElementShortName">r_error[7:0]</obj_property>
<obj_property name="ObjectShortName">r_error[7:0]</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[7]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[7]</obj_property>
<obj_property name="ObjectShortName">r_error[7]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[6]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[6]</obj_property>
<obj_property name="ObjectShortName">r_error[6]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[5]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[5]</obj_property>
<obj_property name="ObjectShortName">r_error[5]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[4]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[4]</obj_property>
<obj_property name="ObjectShortName">r_error[4]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[3]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[3]</obj_property>
<obj_property name="ObjectShortName">r_error[3]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[2]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[2]</obj_property>
<obj_property name="ObjectShortName">r_error[2]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[1]" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">[1]</obj_property>
<obj_property name="ObjectShortName">r_error[1]</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/r_error[0]" type="logic" db_ref_id="1">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">[0]</obj_property>
<obj_property name="ObjectShortName">r_error[0]</obj_property>
<obj_property name="label">Pixel Underrun</obj_property>
</wvobject>
</wvobject>
</wvobject>
</wvobject>
<wvobject fp_name="divider40" type="divider">
<obj_property name="label">Slow</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="BkColor">128 128 255</obj_property>
<obj_property name="TextColor">230 230 230</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/INST_TimingGenerator/i_clk" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_clk</obj_property>
<obj_property name="ObjectShortName">i_clk</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_tb/VGATimingGenerator_inst/i_ce" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_ce</obj_property>
<obj_property name="ObjectShortName">i_ce</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/INST_AsyncPixelDataFIFO/i_read_clk" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_read_clk</obj_property>
<obj_property name="ObjectShortName">i_read_clk</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_tb/i_rst" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_rst</obj_property>
<obj_property name="ObjectShortName">i_rst</obj_property>
<wvobject fp_name="divider42" type="divider">
<obj_property name="label">Fast</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="BkColor">128 128 255</obj_property>
<obj_property name="TextColor">230 230 230</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_tb/VGATimingGenerator_inst/o_pixelready" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_pixelready</obj_property>
<obj_property name="ObjectShortName">o_pixelready</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/INST_XY_Generator/i_clk" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_clk</obj_property>
<obj_property name="ObjectShortName">i_clk</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_tb/VGATimingGenerator_inst/o_hsync" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_hsync</obj_property>
<obj_property name="ObjectShortName">o_hsync</obj_property>
</wvobject>
<wvobject fp_name="/vgatiminggenerator_tb/VGATimingGenerator_inst/o_vsync" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">o_vsync</obj_property>
<obj_property name="ObjectShortName">o_vsync</obj_property>
<wvobject fp_name="/vgatiminggenerator_test_tb/VGATimingGenerator_test_inst/INST_VGA/INST_AsyncPixelDataFIFO/i_write_clk" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">i_write_clk</obj_property>
<obj_property name="ObjectShortName">i_write_clk</obj_property>
</wvobject>
</wave_config>