4-2 Verilog 多路選擇器設計實現

使用工具:Xilinx ISE 14.7

設計一個二位4路選擇器,由於選擇器使用條件觸發的方法對應真值表進行匹配輸出與輸入,因此可以聯想到在C程序設計中的條件語句“If”和“Case”兩種,那麼這兩種設計從硬件的角度出發有什麼不同呢?

代碼如下:


爲了區別兩種設計的不同,可以查看ISE提供的綜合報告,操作如下:


綜合報告對比:


使用Case條件語句 使用IF條件語句

由綜合報告查看可知,if語句運用的元器件多於case語句運用的元器件,同時,if語句中每一個分支之間具有優先級(串行),得到類似級聯的結構;而case語句所有分支處於同一優先級(並行),綜合可以得到一個多路選擇器。因此,對於設計多路選擇器而言,if語句所造成的延時往往比case語句的大,所以對於多路選擇器而言,運用case語句的效果會更好。

Case語句下可能出現鎖存器。註釋case條件下的case語句塊的某一行可以得到不完整的case語句下的2位四路選擇器。由不完整case語句下的2位四路選擇器可知:由於case語句所有分支處於同一優先級,所以當條件不完整時,對於處理結果,它不取決於語句的先後順序,只取決於待處理信號,而處理結果爲與待處理信號相差1’b1的信號的處理結果,在這一條件下相當於與待處理信號相差1’b1的信號的處理結果得到了鎖存,鎖存器因此產生。

對與鎖存器而言,鎖存器在待處理信號存在Glitch的情況下,可能會對Glitch產生鎖存,從而導致鎖存出現嚴重錯誤,是目標信號處理結果與預期目的產生極大的偏差,因此鎖存器存在不穩定因素,所以在使用鎖存器時,要牢記優先消除待處理信號的Glitch。


測試文件:

initial begin
		// Initialize Inputs
		d0 = 0;
		d1 = 1;
		d2 = 2;
		d3 = 3;
		
		select = 0;
		#100;
      select = 1;
		#100;
		select = 2;
		#100;
		select = 3;
		#100;
		// Add stimulus here
	end
仿真結果:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章