VHDL上拉电阻

VHDL上拉电阻,vhdl,Vhdl,我对vhdl相当陌生,我正在努力了解是否可以将其用于项目 我创建了一个项目来了解如何实现上拉阻力,以及它们是如何工作的。我一定做错了什么 我的导线约束条目是 net "rx_i" PULLUP; net "rx_i" loc="p88"; 该项目的流程是: Process (clk_i) type state_type is (qInit, qZero, qZero1, qZero2, qZero3, qZero4); variable state: state_type:= qInit;

我对vhdl相当陌生,我正在努力了解是否可以将其用于项目

我创建了一个项目来了解如何实现上拉阻力,以及它们是如何工作的。我一定做错了什么

我的导线约束条目是

net "rx_i" PULLUP;
net "rx_i" loc="p88";
该项目的流程是:

Process (clk_i)
 type state_type is (qInit, qZero, qZero1, qZero2, qZero3, qZero4);
 variable state: state_type:= qInit;

Begin
if (rising_edge(clk_i)) then
  case state is
    when qInit =>
      if (rx_i = '0') then
        led_o(0) <= '1';
        state := qZero;
      end if;

    when qZero =>
      if (rx_i = '0') then
        led_o(1) <= '1';
        state := qZero1;
      end if;

    when qZero1 =>
      if (rx_i = '0') then
        led_o(2) <= '1';
        state := qZero2;
      end if;

    when qZero2 =>
      if (rx_i = '0') then
        led_o(3) <= '1';
        state := qZero3;
      end if;

    when qZero3 =>
      if (rx_i = '0') then
        led_o(4) <= '1';
        state := qZero4;
      end if;

    when qZero4 =>
      if (rx_i = '0') then
        led_o(5) <= '1';
        state := qInit;
      end if;

    end case;

end if;

End Process;
过程(clk_i)
类型状态_类型为(qInit、qZero、qZero1、qZero2、qZero3、qZero4);
变量状态:state_type:=qInit;
开始
如果(上升沿(clk_i)),则
案例状态为
当它=>
如果(rx_i='0'),则
发光二极管(0)
如果(rx_i='0'),则
发光二极管(1)
如果(rx_i='0'),则
发光二极管(2)
如果(rx_i='0'),则
发光二极管(3)
如果(rx_i='0'),则
发光二极管(4)
如果(rx_i='0'),则

led_o(5)首先:您从未将led的值设置回“0”。将此状态机中的所有值设置为“1”后,将继续驱动“1”。您可以添加一行,如
led_o'0')在您的案例陈述之前

即使这样,你也将以你的时钟的速度在各州奔波。你的LED灯将闪烁得如此之快,以至于你的眼睛只能看到它们“亮”,但亮度稍低。也许您可以在每个状态中添加一个计数器,或者检查另一个条件,如按下按钮


最后,您发布的代码没有显示任何拉升。我只是假设您正在代码的另一部分中使用它。我看到的问题与上拉无关。

您的约束文件仅在代码合成并转换为要加载到FPGA上的比特流时使用。这与模拟无关。在模拟中,您可以通过在信号上驱动“H”(高)来创建上拉

如果您希望led_o成为拉高的信号,您可以执行以下操作:

led_o <= 'H';
led_o <= LED_DRIVE;
led\u o