1

我正在用 Verilog 准备一个程序。我在实现一个短脉冲时遇到问题,该脉冲每次都会在慢速时钟的上升沿发生并在快速时钟的上升沿消失。

下面我粘贴我写的代码,它给了我这样一个脉冲,但不幸的是它只在第一个边缘出现一次,并且再也不会出现。

reg cnt_write_bit1, cnt_write_bit2; 
initial cnt_write_bit1 = 0;
initial cnt_write_bit2 = 0;
reg cnt_write_fifo;
initial cnt_write_fifo = 0; 

always @ (posedge clk_1kHz)
begin : WRITE_FIFO
    if (cnt_write_fifo)
    begin
        cnt_write_bit1 <= 0;
    end
    else
    begin
        cnt_write_bit1 <= 1;
    end
end

always @ (posedge clk_50MHz)
begin : STOP_WRITE_FIFO
    if (cnt_write_fifo)
    begin
        cnt_write_bit2 <= 0;
    end
    else //if (!cnt_write_bit1)
    begin
        cnt_write_bit2 <= 1;
    end
end

always @ (cnt_write_bit1, cnt_write_bit2)
begin 
    if (cnt_write_bit1 && cnt_write_bit2)
    begin 
        cnt_write_fifo <= 1;
    end
    else if (!cnt_write_bit2)
    begin
        cnt_write_fifo <= 0;
    end
end

在模拟中它看起来像这样:

“cnt_write_fifo”信号上的脉冲应该在慢时钟的每个上升沿上都是可重复的,但不幸的是它不是。

我将不胜感激任何帮助。

4

1 回答 1

2

如果如你所说,时钟是异步的,你就不能做你想做的事。
假设在某个时间点,两个时钟上升沿相隔 1ps,(慢速时钟领先)然后您需要生成一个高 1ps 的信号。除了实现这一目标的困难之外,你会怎么做?

我建议您将“规范”更改为:

“有一个从慢时钟产生的信号。如果有一个上升沿,我想在一个不相关的更快时钟上产生一个 1 个时钟周期长的脉冲。信号之间最多允许 X 个快速时钟脉冲延迟在慢时钟上改变,在快时钟上产生一个脉冲 (X>=2)"。

抱歉,主要编辑:我的大脑没有打开!
使用同步将信号从慢时钟传输到快时钟。然后在快速时钟域中找到上升沿:

//
// Transfer a signal from a slow clock to a fast clock
// Also detect the rising edge in the fast clock domain
//
module signal_transfer 
(

  input      slow_clock, 
  input      slow_signal,

  input      reset_n,     // reset for fast clock domain
  input      fast_clock,
  output reg fast_signal,
  output     fast_rising
  );

reg signal_meta,signal_delay;


   always @(posedge fast_clock or negedge reset_n)
   begin
      if (!reset_n)
      begin
         signal_meta  <= 1'b0;
         fast_signal  <= 1'b0;
         signal_delay <= 1'b0;
      end
      else
      begin
         signal_meta  <= slow_signal;
         fast_signal  <= signal_meta;
         signal_delay <= fast_signal;
      end
   end

   assign fast_rising = fast_signal & !signal_delay;

endmodule   
于 2018-02-18T13:24:36.093 回答