【问题标题】:How to set a signal at both posedge and negedge of a clock?如何在时钟的 posedge 和 negedge 设置信号?
【发布时间】:2020-08-05 22:32:40
【问题描述】:

我正在尝试实现一个控制器,该控制器具有发送与其输入时钟相同的时钟信号的功能。但如果需要,控制器也可以停止输出信号。我正在 Xilinx ISE 上实现它。

我的想法是:在输入时钟的下沿,输出时钟信号设置为0。在输入时钟的上沿,如果我想发出时钟,我将输出时钟设置为1,但是如果我想停止输出时钟,我会将输出时钟设置为 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 连接到多个驱动程序。有什么办法解决吗?

【问题讨论】:

    标签: verilog hdl xilinx-ise


    【解决方案1】:

    您有两个不同的 always 块,它们驱动相同的信号 clk_out。这就是综合告诉你的。可合成 rtl 中的所有信号都必须仅由单个模块驱动。

    您似乎正在尝试创建某种类型的门控时钟。您可以使用一个简单的逻辑来执行此操作,而不是通过检测时钟信号的麻烦(这很可能也无法合成):

        always @*
            clk_out = enable & clk_in;
    

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

    顺便说一句,切勿在生成时钟信号时使用 NBA (

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多