Verilog 仿真问题:打拍失败

1:记录一下在今的天仿真的时候,对信号打拍操作,发现打拍失败。

打拍失败现象如下:

verilog代码如下:

cpp 复制代码
    always @ (posedge clkb or negedge rst_n)
    	if (!rst_n)
    		begin
    			pulse_reg1	<=	0;
    			pulse_reg2	<=	0;
    		end
    	else
    		begin
    			pulse_reg1	<=	pulse_ina	;
    			pulse_reg2	<=	pulse_reg1	;
    		end

仿真代码如下:

cpp 复制代码
module sim_slow2fast_cdc ( );
	reg		clka	;
	reg		clkb	;
	reg		rst_n	;
	reg		pulse_ina;
	
	wire	pulse_outb;
	
	slow2fast_cdc	slow2fast_cdc_inst (
		.clka		(clka)	,
		.clkb		(clkb)	,
		.rst_n		(rst_n)	,
		.pulse_ina	(pulse_ina)	,
		
		.pulse_outb	(pulse_outb)
	);
	
	always #10	clka = ~clka;
	always #6	clkb = ~clkb;
	initial	begin
		clka		=	0;
		clkb		=	0;
		rst_n		=	0;
		pulse_ina	=	0;
		#25
		rst_n		=	1;	// 复位无效
		
		#5	// 对齐
		
		clk_come;	#45
		clk_come;	#35
		clk_come;	#50
		clk_come;
	end
	
	task	clk_come;
	   begin
		  pulse_ina	=	1;	// 来一个慢时钟下的高脉冲
		  #20
		  pulse_ina	=	0;
	   end
	endtask
	
endmodule

2:现象:可以看见pulse_reg1将pulse_ina信号采集并没有延迟1拍,从而形成打拍失败的结果;

3:问题原因:因为我们这个pulse_ina是模拟外部信号进入,是reg变量,我这里是D触发器要去采集pulse_ina,这里仿真代码是使用的是阻塞赋值;故而出现仿真打拍失败。

4:解决办法:将仿真文件里面的pulse_ina的阻塞赋值改成非阻塞赋值,即可解决。

修改之后仿真代码:

5:仿真结果如下;

放大图效果:

6:总结:打拍成功;

7:参考资料Verilog 仿真问题:打拍失败_哔哩哔哩_bilibili

相关推荐
FPGA_ADDA27 分钟前
基于复旦微ZYNQ7015+VU3P 的双FMC 基带信号处理平台(国产率100%)
fpga开发·信号处理·全国产·vu3p·adda射频采集
9527华安5 小时前
FPGA实现Aurora 64B66B图像视频传输,基于GTY高速收发器,提供2套工程源码和技术支持
fpga开发·音视频·aurora·高速收发器·gty·aurora 64b66b
我是苹果,不是香蕉1 天前
【FPGA Interlaken协议】
fpga开发
碎碎思1 天前
“邪修“FPGA[~秘笈]
fpga开发
不会留有遗憾1 天前
【FPGA】VGA显示-贪吃蛇
fpga开发
9527华安2 天前
FPGA实现Aurora 64B66B数据回环传输,基于GTY高速收发器,提供4套工程源码和技术支持
fpga开发·aurora·高速收发器·gty·64b66b
嵌入式-老费2 天前
Zynq开发实践(FPGA之verilog仿真)
fpga开发
希言自然也4 天前
FPGA 时序分析(一)
fpga开发
I'm a winner4 天前
基于FPGA的情绪感知系统设计方案:心理健康监测应用(一)
fpga开发·前沿研究
嵌入式-老费5 天前
Zynq开发实践(Verilog、仿真、FPGA和芯片设计)
fpga开发