永发信息网

VHDL如何测量两个外部输入信号的上升沿的时间差啊?求代码啊!

答案:2  悬赏:80  手机版
解决时间 2021-03-27 21:48
  • 提问者网友:浮克旳回音
  • 2021-03-26 22:10
VHDL如何测量两个外部输入信号的上升沿的时间差啊?求代码啊!
最佳答案
  • 五星知识达人网友:一秋
  • 2021-03-26 23:50
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY edge_detection IS
PORT(clr,clk,first_edge,second_edge:IN std_logic;
counter_out:OUT std_logic_vector(31 DOWNTO 0));
END edge_detection;
ARCHITECTURE behavioral OF edge_detection IS
SIGNAL counter:std_logic_vector(31 DOWNTO 0);
SIGNAL detection_on:std_logic:='0';
BEGIN
PROCESS(clr,first_edge,second_edge)
BEGIN
IF clr='0' THEN
detection_on <= '0';
ELSIF first_edge='1' AND first_edge'Last_Value='0' THEN
detection_on <= '1';
ELSIF second_edge='1' AND second_edge'Last_Value='0' THEN
detection_on <= '0';
END IF;
END PROCESS;

PROCESS(clk)
BEGIN
IF rising_edge(clk) THEN
IF detection_on='1' THEN
counter <= counter + '1';
ELSE
counter <= (OTHERS =>'0');
END IF;
END IF;
END PROCESS;

PROCESS(detection_on)
BEGIN
IF falling_edge(detection_on) THEN
counter_out <= counter;
END IF;
END PROCESS;

END behavioral;
全部回答
  • 1楼网友:不想翻身的咸鱼
  • 2021-03-26 23:59
首先你要确定这个时间差要求达到的精度量级,三五个纳秒以上的话一般的FPGA就可以,更高的精度就要特殊处理了。学过VHDL这个语言的一般都会写上升沿条件的表达式:
process(xxx)
begin
if rising_edge(xxx) then
~~~
end if;
end process;
此处xxx就是你希望捕获其上升沿的信号,这个信号的上升沿到来时这个if语句满足执行条件
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯