gpt4 book ai didi

verilog - 如何在时钟的 posedge 和 negedge 设置信号?

转载 作者:行者123 更新时间:2023-12-04 09:14:47 31 4
gpt4 key购买 nike

我正在尝试实现一个 Controller ,该 Controller 具有发送与其输入时钟相同的时钟信号的功能。但如果需要, Controller 也可以停止输出信号。我正在 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 连接到多个驱动程序。有什么办法可以解决吗?

最佳答案

您有两个不同的 always block ,它们驱动相同的信号 clk_out。这就是综合告诉你的。可合成 rtl 中的所有信号必须仅从单个模块驱动。
看起来您正在尝试创建某种类型的门控时钟。您可以使用一个简单的逻辑来执行此操作,而不是通过检测时钟信号的麻烦(这很可能也无法合成):

    always @*
clk_out = enable & clk_in;
你只需要弄清楚如何生成 enable .
顺便说一句,切勿在生成时钟信号时使用 NBA(<=),否则您最终会遇到时钟/数据竞争条件。

关于verilog - 如何在时钟的 posedge 和 negedge 设置信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63274426/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com