使用工具: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
仿真結果: