Vhdl 分频器和信号的后续边缘检测

Vhdl 分频器和信号的后续边缘检测,vhdl,xilinx-ise,Vhdl,Xilinx Ise,我对VHDL编程非常陌生,在实现分频器和检测信号边缘时遇到问题。该代码由6个按钮输入组成,每个按钮输入将在1KHz下从50MHz输出脉冲 我正在试验的问题如图所示:我在每个输入变量中得到U。我在网上搜索了多个分频器,但到目前为止没有成功。此外,我还了解到将代码上传到fpga的特定方式的实现,以及在xilinx中进行模拟的另一种方式 use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; use ieee.std_logic_unsigned.

我对VHDL编程非常陌生,在实现分频器和检测信号边缘时遇到问题。该代码由6个按钮输入组成,每个按钮输入将在1KHz下从50MHz输出脉冲

我正在试验的问题如图所示:我在每个输入变量中得到U。我在网上搜索了多个分频器,但到目前为止没有成功。此外,我还了解到将代码上传到fpga的特定方式的实现,以及在xilinx中进行模拟的另一种方式

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use ieee.std_logic_unsigned.all;

entity armmov is
port(
    CLK_50MHz: in std_logic;
    rst  : in std_logic;
    BTN1 : in std_logic;
    BTN2 : in std_logic;
    BTN3 : in std_logic;
    BTN4 : in std_logic;
    BTN5 : in std_logic;
    BTN6 : in std_logic;
    PUL1 : out std_logic;
    PUL2 : out std_logic;
    PUL3 : out std_logic;
    PUL4 : out std_logic;
    PUL5 : out std_logic;
    PUL6 : out std_logic
);
end armmov;

architecture Behavioral of armmov is
signal Counter : integer := 1;
signal CLK_1KHz: std_logic := '0';

begin

process (CLK_50MHz,rst)
begin
        if (rst = '1') then
        Counter <= 1;
        CLK_1KHz <= '0';

    elsif(CLK_50MHz'event and CLK_50MHz='1') then
    Counter <= Counter + 1;
    if (Counter = 25000) then
    CLK_1KHz <= NOT CLK_1KHz;
    Counter <= 1;
    end if;
end if;
end process;


process(CLK_1KHz)
begin

if BTN1='1' then
PUL1<=CLK_1KHz;
else
PUL1 <='0';
end if;

if BTN2='1' then
PUL2<=CLK_1KHz;
else
PUL2 <='0';
end if;

if BTN3='1' then
PUL3<=CLK_1KHz;
else
PUL3 <='0';
end if;

if BTN4='1' then
PUL4<=CLK_1KHz;
else
PUL4 <='0';
end if;

if BTN1='1' then
PUL1<=CLK_1KHz;
else
PUL1<='0';
end if;

if BTN2='1' then
PUL2<=CLK_1KHz;
else
PUL2<='0';
end if;

if BTN3='1' then
PUL3<=CLK_1KHz;
else
PUL3<='0';
end if;

if BTN4='1' then
PUL4<=CLK_1KHz;
else
PUL4<='0';
end if;

if BTN5='1' then
PUL5<=CLK_1KHz;
else
PUL5<='0';
end if;

if BTN6='1' then
PUL6<=CLK_1KHz;
else
PUL6<='0';
end if;

end process;

end Behavioral;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
使用ieee.std_logic_unsigned.all;
实体armmov是
港口(
时钟50MHz:标准逻辑中;
rst:标准逻辑中;
BTN1:标准逻辑中;
BTN2:标准逻辑中;
BTN3:标准逻辑中;
BTN4:标准逻辑中;
BTN5:标准逻辑中;
BTN6:标准逻辑中;
PUL1:输出标准逻辑;
PUL2:输出标准逻辑;
PUL3:输出标准逻辑;
PUL4:输出标准逻辑;
PUL5:输出标准逻辑;
PUL6:输出标准逻辑
);
结束阿姆莫夫;
armmov的体系结构是
信号计数器:整数:=1;
信号时钟1KHz:标准时钟逻辑:='0';
开始
过程(时钟50MHz,rst)
开始
如果(rst='1'),则
计数器输入值为“U”,因为这些信号未被驱动。您可以通过两种方法驱动这些信号

  • 从模拟GUI强制时钟和常数
  • 编写用于驱动这些值的测试台
  • PS:不要使用ieee.std_logic_unsigned和类似的库,因为它们没有标准化。相反,请使用ieee.numeric\u std.all

    一些学习VHDL的有用网站:

  • 输入值为“U”,因为这些信号未被驱动。您可以通过两种方法驱动这些信号

  • 从模拟GUI强制时钟和常数
  • 编写用于驱动这些值的测试台
  • PS:不要使用ieee.std_logic_unsigned和类似的库,因为它们没有标准化。相反,请使用ieee.numeric\u std.all

    一些学习VHDL的有用网站:

  • ieee库;
    使用ieee.std_logic_1164.all;
    使用ieee.numeric_std.all;
    实体armmov是
    港口
    (
    时钟50mhz:标准逻辑中;
    复位:在标准逻辑中;
    btn1:标准逻辑中;
    btn2:标准逻辑中;
    btn3:标准逻辑中;
    btn4:标准逻辑中;
    btn5:标准逻辑中;
    btn6:标准逻辑中;
    pul1:输出标准逻辑;
    pul2:输出标准逻辑;
    pul3:输出标准逻辑;
    pul4:输出标准逻辑;
    pul5:输出标准逻辑;
    pul6:输出标准逻辑
    );
    结束阿姆莫夫;
    armmov的体系结构是
    信号计数器:自然:=0;
    信号时钟1khz:标准时钟逻辑:='0';
    开始
    过程(时钟50mhz,复位)
    开始
    如果重置,则
    计数器<代码>库ieee;
    使用ieee.std_logic_1164.all;
    使用ieee.numeric_std.all;
    实体armmov是
    港口
    (
    时钟50mhz:标准逻辑中;
    复位:在标准逻辑中;
    btn1:标准逻辑中;
    btn2:标准逻辑中;
    btn3:标准逻辑中;
    btn4:标准逻辑中;
    btn5:标准逻辑中;
    btn6:标准逻辑中;
    pul1:输出标准逻辑;
    pul2:输出标准逻辑;
    pul3:输出标准逻辑;
    pul4:输出标准逻辑;
    pul5:输出标准逻辑;
    pul6:输出标准逻辑
    );
    结束阿姆莫夫;
    armmov的体系结构是
    信号计数器:自然:=0;
    信号时钟1khz:标准时钟逻辑:='0';
    开始
    过程(时钟50mhz,复位)
    开始
    如果重置,则
    柜台