首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在时钟的正边缘和负边缘设置信号?

如何在时钟的正边缘和负边缘设置信号?
EN

Stack Overflow用户
提问于 2020-08-06 06:32:41
回答 1查看 360关注 0票数 2

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

我的想法是:在输入时钟的负沿,输出时钟信号设置为0。在输入时钟的后边缘,如果我想发送时钟,我会将输出时钟设置为1,但如果我想停止输出时钟,我会将输出时钟设置为0,这样其他设备(都是后边缘触发的)就不会检测到后边缘。

这是我的设计:

代码语言:javascript
复制
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连接到多个驱动器。有没有办法解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 21:17:13

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

看起来您正在尝试创建某种类型的门控时钟。你可以使用一个简单的逻辑来检测时钟的负沿,而不是麻烦地检测时钟的负沿,这很可能也是不可综合的:

代码语言:javascript
复制
    always @*
        clk_out = enable & clk_in;

您只需弄清楚如何生成enable

顺便说一句,千万不要在生成时钟信号时使用NBAs (<=),否则最终会出现时钟/数据竞争情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63274426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档