VHDL:使用开关

时间:2016-04-01 20:39:53

标签: vhdl multiplexing

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

我试过的是,我为每个图像命名了这三个输出信号,并在使用外壳结构打开开关时将它们分配给最终输出信号。我会粘贴部分内容,以便你们可以得到这个想法:

这是顶级实体

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板上的开关,这样我可以通过打开Switch切换到我想要的图像?我也尝试了一些'if generate'语句,没有结果。就像在这种情况下,在Basys3上有16个开关,通过打开sw5,我想得到Checkers组件绘制的图像。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

process的正上方,您的代码应该是这样的:

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

通常,在进行Structural设计时,在完成组件后,您应该声明上面给出的信号。