请哪位大虾指教一下关于如何用CPLD检测外部信号的上升沿(程序最好是用VHDL)
谢谢了!
port(
data_in : in std_logic;
clk : in std_logic;
data_out : out std_logic
)
signal data_temp : std_logic;
-- 将输入数据打一个节拍,用于判断上升沿
process(clk, data_in)
begin
if clk'event and clk = '1' then
data_temp <= data_in;
end if;
end process;
-- 当 当前的data_in = 为高电平,而前一个clk输入的data_in即data_temp = 0 为低电平时,表示检测到data_in的上升沿。
porcess(clk, data_in, data_temp)
begin
if clk'event and clk = '1' then
if data_in = '1' and data_temp = '0' then
data_out <= '1';
else
data_out <= '0'
end if;
end if;
end process;
楼上兄弟是标准的检测外部信号的上升沿写法。但有个前提,一定要主时钟大于检测信号变化的频率,否则检测有问题,可能丢掉的检测事件。我个人建议如果FPGA内部有PLL,先把主时钟CLK PLLL后,然后对外部信号检测,确保CLK》》外部信号周期,保证采样的正确性。
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!