【问题标题】:VHDL: Selection of images using switchesVHDL:使用开关选择图像
【发布时间】:2016-04-01 20:39:52
【问题描述】:

我目前在 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组件绘制的图像。

感谢您的帮助。

【问题讨论】:

  • 由于您没有向我们展示red1 的声明或Checkers 的组件实例化,因此任何帮助都只是猜测。比如,可能没有red1 的声明?

标签: vhdl multiplexing


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我以这种方式摆脱了错误,但程序无法正常工作。我猜这是因为在 case 结构中,它使用了这些声明的信号,而不是来自组件的信号,它们实际上绘制了一些东西?难道没有更优雅的方式来进行选择吗?最初,我将来自每个组件的所有颜色信号命名为相同:红色、绿色、蓝色。没有编号。这样,case结构中是否可以在组件本身之间进行选择,而不是在不同颜色信号之间进行选择?
  • 既然问题已经解决了,你应该通过点击那里的复选标记来接受答案
  • 一般来说,当您声明一个组件时,在端口映射中您必须使用与组件中相同的信号“名称”。至于这个组件的信号应该有什么名字作为输入/输出,这取决于你。
  • 我建议您稍微编辑一下您的帖子,并为我们提供至少一张图片的端口映射。
  • 太棒了。现在有什么问题?至于您想要控制图像的开关,我假设您使用的是 xilinx Ise?如果是这样,您需要创建一个 ucf 文件。这简单。只需在记事本上进行,然后将其保存为 NAME.ucf。如果您需要进一步的帮助,请告诉我您使用的是哪种 FPGA?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多