天天看點

systemVerilog-接口時序問題

Verilog中通過存儲單元進行鎖存輸入信号的,在一個輸入信号傳輸後與下一個輸入信号傳輸前,testbench需要驅動輸入并且完成采樣這個過程。

而當時鐘邊沿進行驅動testbench和DUT兩者時,可能會導緻競争的現象。

如果在DUT中一些實行了時鐘快于激勵,一些實行了時鐘慢于激勵,這樣雖然不會出現競争,但是會一些DUT一些輸入是在上一個時鐘采樣的,另一些是在目前時鐘采樣的。

解決的方法:

  1. 給整個系統較小#0的延遲,Verilog的線程會停止,并在所有的代碼完成後重新執行。但是也有問題,就是會有多個線程的情況,每次運作的時候線程的最後情況都不一樣。
  2. 給一個較大的延時#1,RTL代碼的時序隻由時鐘控制,這裡邏輯電路在一個時間機關後就會穩定。但是問題是每個子產品的時間精度可能不同。
module memory(input wire start,write,
				input wire [7:0] addr,
				input wire [7:0] data);
			logic [7:0] mem[256];
			always @(posedge start) begin
				if(write)
					mem[addr]<= data;
			end
		endmoodule

module test(output logic start,write,output logic[7:0]addr,data);
	initial begin
		start = 0;//信号初始化
		write = 0;
		#10;
		addr= 8'h42;//先找到位址,之後進行data指派,
		data = 8'h5a;
		start = 1;
		write = 1;
		...
		end
	endmodule
           

其實主要是因為設計和測試都使用了同一個time slot,如果在某個時刻 ,測試平台在這個設計産生變動前就進行采樣,這樣測到的就是前一個時鐘留下了的最後值,等到設計完成所有的事件後,測試平台再開始下一個動作。

這裡也牽扯到一個設計和測試兩個機關的事件,其中一個time slot首先運作的是active,如圖所示進行不同區域的執行

systemVerilog-接口時序問題

繼續閱讀