gpt4 book ai didi

Verilog:甚至在时钟上设置恒定值

转载 作者:行者123 更新时间:2023-12-02 13:42:31 24 4
gpt4 key购买 nike

我是 Verilog 新手,所以这个问题可能很愚蠢。

我正在尝试:我有一个具有时钟、8 位输入和 8 位输出的组件。它应该做的是:

如果时钟事件为下降沿,则应将输出设置为 0如果时钟事件是正边沿,则应将输出设置为边沿事件此时的输入。在时钟的高电平阶段,无论输入发生变化,输出都不应改变。

到目前为止我尝试过的:

always @(negedge clk)
_ledOut <= 0;

always @(posedge clk)
_ledOut[RowSize-1:0] <= ledIn[RowSize-1:0];

这告诉我,它无法解析 net _ledOut 的多个常量驱动程序。

但是,将其放在始终 @(negedge clk, posege clk) 中告诉我,它无法测试这两种条件。

所以我尝试只制作一个always @(clk) block ,然后使用 if 语句:

always @(clk) begin
if(clk == 0)
_ledOut <= 0;
else if(clk == 1)
_ledOut[RowSize-1:0] <= ledIn[RowSize-1:0];
end

但这不仅仅是开启 clk 事件。在时钟的高电平阶段,它将 _ledOut 与 ledIn 链接起来,因此 ledIn 上的更改也会对 _ledOut 产生影响。我在这里做错了什么?

最诚挚的问候,迈克尔

最佳答案

This tells my, that it can't resolve multiple constant drivers for net _ledOut.

对于综合,您不能从多个always block 分配reg类型。

However, putting this together in an always @(negedge clk, posedge clk) tells me, it can't test for both conditions.

这本质上描述了 DDR 寄存器。虽然许多 FPGA 器件都具有这些特性,但它们通常无法综合。如果您确实需要此功能,Xilinx 可以使用 ODDR2 和 IDDR2 原语。

If the clock event is negative edge, it should set the output to 0 If the clock event is positive edge, it should set the output to whatever input is at this moment of the edge event. During the high phase of the clock, the output should NOT change, regardless changes on the input.

如果这就是您所需要的,那么您可以使用输出端带有与门的 D 触发器。触发器将在 clk 的每个上升沿对 ledIn 进行采样,并且只要时钟为零,与门就会屏蔽输出。这并不理想,因为您通常不希望时钟接触非顺序逻辑,但避免这种情况可能意味着改变您的要求。

如 toolic 所示,您发布的代码可以工作,但您应该了解该代码将合成到由 clk 控制的多路复用器。

关于Verilog:甚至在时钟上设置恒定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8508713/

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