force语句的使用

笔者在一次仿真工程中,想通过force语句强制使内部的某个信号赋值,将仿真遇到的一些问题总结如下:

  1. 不管内部信号是reg还是wire,在force赋值时都是reg。
reg            reco_coor_vld 	;//zuobiao
reg            reco_frm_vld	   ;//ID
reg            stim_conf_vld	  ;//moniyuan 
reg            start_send_vld	;//send 
reg  [31:0]    suart_data		  ;//data 
reg            init_done      ;
  1. 对内部变量直接赋值也是可以的。
initial begin
	force top_uut.suart_data	=32'h00010001;
	force top_uut.stim_conf_vld	=1'b1;
end 

3.正确的操作方法是:
先初始化本地变量与赋值变量(虽然他们的名字一般定义为一样),然后进行赋值。

initial 	begin
		clk_40M	    = 1'b0;	
	    clk_100M	= 1'b0;
	    clk_125M	= 1'b0;
	    clk_156p25M	= 1'b0;
		I_rx_data	= 1'b1; 

	   	force top_uut.suart_data=suart_data;//初始化
	   	force top_uut.stim_conf_vld=stim_conf_vld;//初始化
		force top_uut.start_send_vld=start_send_vld;//初始化
	   	force top_uut.reco_coor_vld=reco_coor_vld;//初始化
		force top_uut.reco_frm_vld=reco_frm_vld;	//初始化
		force init_done= top_uut.init_done;	//初始化
end
	



	
	initial  begin
	   suart_data=0;
	   stim_conf_vld=1'b0;
	   start_send_vld=1'b0;
	   reco_coor_vld=1'b0;
	   reco_frm_vld=1'b0;
	   @(posedge  init_done);
	   #100;
	   ///==============stim source   //赋值操作
	    @(posedge clk_100M)begin
	     suart_data=32'hffff0100;//contiue send , internal source , increase data 
	     stim_conf_vld=1'b1;
	    end 
	   
	   	@(posedge clk_100M)begin
	     suart_data=32'h0;     //contiue send , internal source , increase data 
	     stim_conf_vld=1'b0;
	    end  	
	    
	    ///==============send start  	   
	    @(posedge clk_100M)begin
	     suart_data=32'h0;
	     start_send_vld=1'b1;
	    end 
	   
	   	@(posedge clk_100M)begin
	     suart_data=32'h0;   
	     start_send_vld=1'b0;
	    end  	   
	    	   
	    ///======zuobiao
	     @(posedge clk_100M)begin
	       suart_data=32'h00010001;
	       reco_coor_vld=1'b1;
	    end 

	     @(posedge clk_100M)begin
	       suart_data=32'h00010001;
	       reco_coor_vld=1'b0;
	    end 
	    
	    
	     ///=ID
	     @(posedge clk_100M)begin
	       suart_data=32'h00000001;
	       reco_frm_vld=1'b1;
	    end 

	     @(posedge clk_100M)begin
	       suart_data=32'h00000001;
	       reco_frm_vld=1'b0;
	    end 
	    
	end 

你可能感兴趣的:(fpga,fpga开发)