Verilog 奇怪的仿真结果综合后

标签 verilog hdl synthesis vivado

我遇到了一个奇怪的问题。该代码适用于简单的 ALU。仅将感兴趣的代码粘贴到此处:

   always @(posedge clk or posedge rst)
   begin
        if (rst == 1) begin
           mul_valid_shr = 3'b000; 
        end else begin
            if (op_mul_i == 1) begin
                mul_valid_shr = 3'b111;
            end else begin
                mul_valid_shr <= mul_valid_shr << 1;
            end
        end
   end

在always block 之外:

assign mul_valid = mul_valid_shr[2];

使用我的测试台进行的综合后功能仿真具有以下结果:

enter image description here

重置已经很低了,为什么SIM卡第一次不能工作,但第二次和第三次工作正常?如果我在 100ns 标记之前触发 op_mul_i,即使 rst 很低,即使 mul_result 也会在第一次停止工作。

欢迎任何猜测。

更新:完整代码在这里:https://www.edaplayground.com/x/28Hx

最佳答案

Xilinx 模拟器会在任何综合后模拟的前 100ns 内模拟 FPGA 全局复位,因此您基本上必须将逻辑保持在复位和时钟状态至少 100ns 才能获得合理的结果。 UG900 第 13 页提到了这一点。

关于Verilog 奇怪的仿真结果综合后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44847088/

相关文章:

parsing - 寻找verilog 2001模块声明语法

python - 使用 Python 在不同实例中分割 verilog 路径的正则表达式模式

math - 如何在verilog中使用算术移位和选择器?

verilog - Verilog HDL 中的“始终”与“永远”

c - 音频播放,为淡入/淡出创建嵌套循环

verilog - 将模块输出连接到寄存器

verilog - verilog模块中的reg和wire有什么区别?

verilog - 如何在verilog中将数字转换为二进制补码?

vhdl - VHDL 的 IEEE 库中的可合成定点/浮点

verilog - 综合 Verilog 代码时如何消除敏感列表警告?