首页 > 解决方案 > 系统verilog开关不改变

问题描述

如果开关打开,此代码用于打开 LED。这是顶级模块。

module myb(
input clk,
input execute,
input switch,
output reg k

    );
    logic [5:0] led;
    always@(posedge clk)
    begin
   if(switch)
   led[0] = 1;
    end


endmodule

这是约束

set_property PACKAGE_PIN U16 [get_ports {led[0]}]                   
    set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN E19 [get_ports k]                  
    set_property IOSTANDARD LVCMOS33 [get_ports k]
set_property PACKAGE_PIN U19 [get_ports {led[2]}]                   
    set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
    set_property PACKAGE_PIN V19 [get_ports {led[3]}]                   
        set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]

 set_property PACKAGE_PIN T18 [get_ports execute]                        
         set_property IOSTANDARD LVCMOS33 [get_ports execute]

                        #------------------------------------------------------------
        #---------------------- Clock signal ------------------------
        #------------------------------------------------------------
        set_property PACKAGE_PIN W5 [get_ports clk]
        set_property IOSTANDARD LVCMOS33 [ get_ports clk]
        create_clock -period 10.000 -name sys_clk_pin -waveform {0.000 5.000} -add [get_ports clk]

set_property PACKAGE_PIN V17 [get_ports {switch]                    
    set_property IOSTANDARD LVCMOS33 [get_ports {switch]

但不知何故,什么都没有改变。我也用按钮、去抖动器等尝试过。我做错了什么?

标签: verilogfpgasystem-verilogvhd

解决方案


正如 Serge 所说:对于来自 FPGA 的信号,您的顶部模块应该有一个输出端口。你的工具没有给你警告或错误吗?因为您的约束无法实现!

其次,我会产生两个输出:一个高,一个低。这保证至少有一个 LED 会亮起。

确保彻底检查端口到 FPGA 引脚的映射。除了编码错误之外,它是 I/O 引脚不工作时最常见的错误来源。

你很擅长回到基本代码来测试你的 I/O。这才是正确的调试方式。你本可以多走一步,也可以省略时钟。只是:assign led = 6'b101010;然后在你让他们工作后添加时钟。

最后一句话:您的输出k未使用且未定义。


推荐阅读