首页 > 解决方案 > 两个模拟相同设计的合成——如果在 SET clk 的过程中,有和没有第二个

问题描述

我在verilog中有两个相同的(通过模拟)触发器过程。

首先是具有异步复位 (CLR) 和时钟 (SET) 的寄存器的标准描述,其中数据绑定到 1:

always @(posedge SET, posedge CLR)
if (CLR)
    Q <= 0;
else
    Q <= 1;

第二个与上面相同,但第二个 if 条件为 SET 信号:

always @(posedge SET, posedge CLR)
if (CLR)
    Q <= 0;
else if (SET)
    Q <= 1;

这两种触发器在仿真中的实现没有区别。但是对于这种情况,verilog 标准是怎么说的呢?这些测试是否应该等同于综合过程之后的网表?

标签: veriloghdlvivadosynthesissynplify

解决方案


第二个示例中的“if (SET)”是多余的,将在 n 合成中进行优化。由于 always 块只会在 SET 或 CLR 的 posedge 上输入,else 语句暗示 SET 的 posedge 已经发生。

顺便说一句,第一个例子是一个更被接受的触发器编码版本。我还没有看到第二个版本成为运输设计。


推荐阅读