我遇到了一个奇怪的问题。该代码适用于简单的 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];
使用我的测试台进行的综合后功能仿真具有以下结果:
重置已经很低了,为什么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/