VHDL:使用开关选择图像

VHDL: Selection of images using switches

我目前在 Basys3 FPGA 上使用 Vivado 中的 VGA,我遇到了一些问题。我想生成不同的图像(测试泥潭)。我为这些图像中的每一个都有一个单独的 .vhd 文件,还有一个顶级文件,我想在其中对这些图像使用多路复用器,以便将它们中的每一个分配给一个单独的开关。我的问题是:如果每个 .vhd 文件的输出都是三种颜色信号 RGB,我如何将图像分配给开关?

我尝试的是,我为每张图像分别命名这 3 个输出信号,并在开关打开时使用 case 结构将它们分配给最终输出信号。我会把它的一部分贴出来让你们明白:

这是顶级实体

entity VGAdraw is                                                
Port ( CLK      : in STD_LOGIC;                              
       cntHor   : in integer range 0 to cstHorTotSize - 1;   
       cntVer   : in integer range 0 to cstVerTotSize - 1;   
       SW       : in STD_LOGIC_VECTOR (15 downto 0);         
       LED      : out STD_LOGIC_VECTOR (15 downto 0);        
       RED      : out STD_LOGIC_VECTOR (3 downto 0);         
       GREEN    : out STD_LOGIC_VECTOR (3 downto 0);         
       BLUE     : out STD_LOGIC_VECTOR (3 downto 0)          
     );                                                      
end VGAdraw;

这是其中一张图片:

signal red5, green5, blue5, red7, green7, blue7: STD_LOGIC_VECTOR (3 downto 0);

component Checkers is                                                       
Port ( CLK      : in STD_LOGIC;                                         
       cntHor   : in integer range 0 to cstHorTotSize - 1; 
       cntVer   : in integer range 0 to cstVerTotSize - 1; 
       red7      : out STD_LOGIC_VECTOR (3 downto 0);    
       green7    : out STD_LOGIC_VECTOR (3 downto 0);     
       blue7     : out STD_LOGIC_VECTOR (3 downto 0)       
     );              
end component;

component Checkers
    port map (CLK => CLK,
              cntHor => cntHor,
              cntVer => cntVer,
              red7 => RED,
              green7 => GREEN,
              blue7 => BLUE
             );

案例结构

process                                                       
begin                                                         
case SW is                                                                     
    when "0000000000100000" => RED <= red7;        
                               GREEN <= green7;           
                               BLUE <= blue7;                    
    when others             => RED <= red5;       
                               GREEN <= green5;           
                               BLUE <= blue5;             
end case;                                         
end process;

VGADraw 是顶级实体,我在其中将每个图像声明为不同的组件。就像上面那个。我如何将它们中的每一个分配到我的 FPGA 板上的一个开关,这样我就可以通过打开一个开关来改变我想要的图像?我也尝试了一些 'if generate' 语句,但没有结果。就像在这种情况下,在 Basys3 上有 16 个开关,通过打开 sw5,我想得到 Checkers 组件绘制的图像。

感谢您的帮助。

就在 process 开头你的代码应该是这样的:

signal red1, blue1, green1, red7, green7, blue7 red5, green5, blue5 : STD_LOCIC_VECTOR(3 downto 0);

一般来说,在进行 Structural 设计时,在完成组件后,您应该按照上面给出的方式声明您需要的信号。