簡體   English   中英

如何在時鍾的 posedge 和 negedge 設置信號?

[英]How to set a signal at both posedge and negedge of a clock?

我正在嘗試使用 function 實現 controller,它發出與其輸入時鍾相同的時鍾信號。 但如果需要,controller 也可以停止 output 信號。 我正在 Xilinx ISE 上實現它。

我的想法是:在輸入時鍾的后沿,output 時鍾信號設置為 0。在輸入時鍾的位置,如果我想發送時鍾,我會將 output 時鍾設置為 1,但如果我想為了停止 output 時鍾,我將 output 時鍾設置為 0,以便其他設備(所有 posedge 觸發)不會檢測到 posedge。

這是我的設計:

module controller(
    input clk_in,
    input reset,
    output clk_out
    //and other ports
);
    always @(negedge clk_in)
      clk_out<=0;

    always @(posedge clk_in)
      if(reset)
        clk_out<=1;
      else
      begin
        case(cases)
          case1:
          begin
            //do something and halt the output clock
            clk_out<=0;
          end
          case2:
          begin
            //do something and continue the output clock
            clk_out<=1;
          end
        endcase
      end       

當我合成設計時,我有一個錯誤說信號 clk_out 連接到多個驅動程序。 有什么辦法可以解決嗎?

您有兩個不同的 always 塊,它們驅動相同的信號 clk_out。 這就是綜合告訴你的。 可合成 rtl 中的所有信號必須僅從單個模塊驅動。

看起來您正在嘗試創建某種類型的門控時鍾。 您可以使用一個簡單的邏輯來執行此操作,而不是通過檢測時鍾信號的麻煩(這很可能也無法合成):

    always @*
        clk_out = enable & clk_in;

您只需要弄清楚如何生成enable

順便說一句,切勿在生成時鍾信號時使用 NBA(<=),否則您最終會遇到時鍾/數據競爭條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM