【发布时间】:2023-03-15 06:54:01
【问题描述】:
在我的 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_VECTOR 中,然后为 case 语句读取它。例如,如果 SW12 被轻弹,我希望向量保持“1000”,所以它会进入这种情况。
我想知道我是否以不正确的格式编写了这个,还有其他方法可以做到吗? 我是否应该将它存储在一个数组中并在端口映射中声明该数组以便在其他实体中使用?
谢谢
编辑:当我模拟代码时,它显示 i_SW 是“U”,我认为这意味着未初始化,但这可能只是我的测试台的问题。
【问题讨论】:
-
看来您走在了正确的轨道上。由于“显示器上没有发生任何事情”,首先尝试将固定模式发送到输出,看看是否有效。如果是,则尝试将输入复制到输出,并查看它们在您更改输入时是否响应。只有在您知道输出和输入都正常工作后才能添加您的处理。
-
嗨,本,感谢您的回复。我没有这么说,因为我认为这并不重要,但现在我认为它可能很重要。当我打开电路板时,显示屏显示 0000,这是我的最后一个案例陈述(如果其他人 => 0000)。这会改变你的答案吗?
-
我仍然会遵循相同的步骤,首先使用极其简单的 VHDL,以验证您的端口和引脚映射是否按您期望的方式工作。