IPO 发表于 2010-8-11 14:44:36

如何实现信号延时(上升沿同步,但下降沿延迟几个时钟出现)?

如何实现信号延时(上升沿同步,但下降沿延迟几个时钟出现)?

IPO 发表于 2010-8-11 14:44:40

解决方法:
   PROC_ADJ_VSYNCS: process (CLK_IN,CLK)--可实现信号线延时
         variable VAR_VSYNC_CNT: std_logic_vector(3 downto 0):= "0000";
         constant CONST_VSYNC_CNT_MAX: std_logic_vector(3 downto 0):= "1100";
   begin
         if CLK_IN='1' then
             CLK_OUT <= '1';
             VAR_VSYNC_CNT := "0000";
         elsif rising_edge(CLK) then
             if (VAR_VSYNC_CNT<CONST_VSYNC_CNT_MAX) then
               CLK_OUT <= '1';
               VAR_VSYNC_CNT := VAR_VSYNC_CNT + 1;
             else
               CLK_OUT <= '0';
             end if;
         end if;
   end process PROC_ADJ_VSYNCS;

amyxxf 发表于 2010-8-18 23:47:56

input signal;
reg test_reg;
wire signal_up;
wire signal_down;
always@(posedge clk or negedge rst)
begin
if(!rst)
   test_reg <= 3'b000;
else
   test_reg <= {test_reg,signal};
end
assign signal_up = ((!test_reg ) && signal) ? 1'b1 : 1'b0;//信号上升沿
assignsignal_down=(test_reg && (!test_reg)) ? 1'b1 : 1'b0;//信号下降沿

*****一般都是这么处理的,可以看看------------------------------------------------
-----------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------

amyxxf 发表于 2010-8-18 23:48:02

input signal;
reg test_reg;
wire signal_up;
wire signal_down;
always@(posedge clk or negedge rst)
begin
if(!rst)
   test_reg <= 3'b000;
else
   test_reg <= {test_reg,signal};
end
assign signal_up = ((!test_reg ) && signal) ? 1'b1 : 1'b0;//信号上升沿
assignsignal_down=(test_reg && (!test_reg)) ? 1'b1 : 1'b0;//信号下降沿

*****一般都是这么处理的,可以看看------------------------------------------------
-----------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
页: [1]
查看完整版本: 如何实现信号延时(上升沿同步,但下降沿延迟几个时钟出现)?