在Verilog仿真时如果需要调用某子模块中的信号在本模块中使用可以使用层次化引用的方法,而不需要在rtl部分用端口引出来。

引用方式:当前例化模块名.子例化模块名.子子例化模块名.参数 将需要的信号引出。
注意是用例化模块名而不是用子模块名,两者区别如下:
在这里插入图片描述
如示例代码中的有两处分别引用不同子模块中的信号在本模块使用。

`timescale 1ns/1ns
module tb_top();

	wire                     i_rst_n		  ;
	assign i_rst_n	= u_top.u_ctrl.w_sys_rst_n;
	
	reg 		[7:0]		   data_in	;
	reg 					   clr_n	;

	 initial begin
			i_clk 	  = 	1'b1;
		
			clr_n    <= 1'b0	;
			data_in  <=	8'b0	;
		#520
		wait (u_top.u_trig.w_sam_en == 1'b1)begin
			clr_n    <= 1'b1	;
			data_in  <=	8'h5A	;
		end
	
top u_top(							
	.i_ext_clk          (i_clk		),
				
	.o_spi_sclk         (o_spi_sclk ),
	.o_spi_mosi         (o_spi_mosi	),
	.i_spi_miso         (i_spi_miso )
);
//==========================< Clock block >============================
	always 	  	#10		i_clk = ~i_clk;
	
endmodule

实际上有多种层级引用方式:可参考Verilog基础:标识符的向上向下层次名引用

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐