【发布时间】:2019-11-08 06:38:21
【问题描述】:
我对 VHDL 编程领域非常陌生,在实现分频器以及检测信号边缘时遇到了问题。该代码由 6 个按钮输入组成,每个按钮将在 50MHz 到 1KHz 的频率下运行并输出脉冲。
我正在尝试的问题如图所示:我在每个输入变量中都得到了 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;
【问题讨论】:
标签: vhdl xilinx-ise