VHDL中的数组/标准逻辑向量

VHDL中的数组/标准逻辑向量,vhdl,hardware,fpga,Vhdl,Hardware,Fpga,在我的BASYS-3板上,我想使用4个开关,并根据这些开关的组合输出不同的东西。例如,如果开关12打开,我希望为信号分配一个值。我设法把我的代码上传到主板上,但当我拨动开关时,显示屏上什么也没发生 以下是此代码段的约束文件的一部分: #Switches #SW12 set_property -dict { PACKAGE_PIN W2 IOSTANDARD LVCMOS33 } [get_ports {i_SW[0]}] #SW13 set_property -dict { PACKAGE_

在我的BASYS-3板上,我想使用4个开关,并根据这些开关的组合输出不同的东西。例如,如果开关12打开,我希望为信号分配一个值。我设法把我的代码上传到主板上,但当我拨动开关时,显示屏上什么也没发生

以下是此代码段的约束文件的一部分:

#Switches
#SW12
set_property -dict { PACKAGE_PIN W2   IOSTANDARD LVCMOS33 } [get_ports {i_SW[0]}]
#SW13
set_property -dict { PACKAGE_PIN U1   IOSTANDARD LVCMOS33 } [get_ports {i_SW[1]}]
#SW14
set_property -dict { PACKAGE_PIN T1   IOSTANDARD LVCMOS33 } [get_ports {i_SW[2]}]
#SW15
set_property -dict { PACKAGE_PIN R2   IOSTANDARD LVCMOS33 } [get_ports {i_SW[3]}] 
这是我在顶级实体的端口图中编写的:

i_SW : in STD_LOGIC_VECTOR (3 downto 0)
然后以这种方式在单独的实体中调用:

case i_SW is
    when "1000" => -- data select 0
        --doesn't matter ;
        --doesn't matter ;
该代码应该读取开关值,并将其存储在STD_LOGIC_向量中,然后为case语句读取它。例如,如果打开SW12,我希望向量保持“1000”,因此它将进入这种情况

我想知道我是否用了不正确的格式写了这篇文章,还有其他的方法吗? 我是否应该将其存储在一个数组中,并在端口映射中声明该数组,然后在其他实体中使用

多谢各位


编辑:当我模拟代码时,它告诉我I_SW是'U',我相信这意味着未初始化,但这可能只是我的测试台的一个问题。

向量是用
向下声明的,因此元素的顺序是3,2,1,0,
“1000”
对应于SW15,而不是SW12


此外,交换机可能处于低激活状态,许多开发板都是这样接线的——然后您还必须反转这些值。

看起来您走对了方向。由于“显示器上什么也没发生”,首先尝试向输出发送一个固定模式,看看是否有效。如果是,那么尝试将输入复制到输出,并查看它们在您更改输入时是否响应。只有在您知道输出和输入都正常工作后才能添加处理。嗨,Ben,谢谢您的回复。我没有说这句话,因为我不认为这很重要,但现在我想它可能很重要。当我打开电路板时,显示屏显示0000,这是我的最终案例陈述(如果其他=>0000)。这会改变你的答案吗?我仍然会遵循同样的步骤,首先使用极其简单的VHDL,以验证你的端口和pin映射是否按照你期望的方式工作。嗨,Simon,谢谢你的回复。你说“1000”对应于SW15,但当我插上电路板,一个接一个地打开所有开关,查看是否有任何错误表示时,SW15对我的显示器的影响并不比轻弹SW12大。我不认为开关处于低激活状态,但再次感谢您的回复。。在任何情况下都有“1”位置和“0”位置。一个更有趣的问题可能是“代码是否模拟?”