【正文】
。 library ieee 。 ) ,這表明實體AOI從所有名字在程序包std_logic_1164并且定義在library IEEE庫中獲取資源,數(shù)據類型std_logic是特殊數(shù)據類型。這句話定義的是,一個新的VHDL設計單位的定義. 庫和使用語句,雖然是在定義VHDL開始表明實體之前寫的書但這是一起測試的語句。 這個實體表明包括實體的名稱(在AOI這個例子中),并建立一系列的端口說明。一個端口數(shù)據類型的定義要根據這個端口可能流經的值。它允許VHDL編譯以確保設計至少是相當合理的在開始模擬之前。包括實體的名稱設計特別適用于大型說明那里的端口名稱可能會延續(xù)許多屏幕(或頁數(shù));這是好事可以提醒設計實體的名稱,其結果大家都看得到,以免我們忘記。注意到當我們定義一個結構體我們要告訴VHDL分析器,architecture v1對應的AOI實體設計。事實上,在該體系中和所有的名稱都是參照這一端口設計的。同時執(zhí)行當前任務無論4個端口中的一個A, B , C或端口D是否變換值。 end v1 。. 硬件描述語言的主要優(yōu)點: VHDL 是一種全方位的硬件描述語言,包括系統(tǒng)行為級、寄存器傳輸級和邏輯門級多個設計層次,支持結構、數(shù)據流、行為 3 種描述形式的混合描述,因此 VHDL 幾乎覆蓋了以往各種硬件描述語言的功能, 整個自頂向下或自底向上的電路設計過程都可以用 VHDL 來完成。 VHDL具有多層次描述系統(tǒng)硬件功能的能力。 (5)VHDL是一個標準語言,它的設計描述可以被不同的EDA 工具所支持,可移植性強,易于共享和復用[11]。 (2) VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設計早期就能查驗設計系統(tǒng)功能的可行性,隨時可對設計進行仿真模擬。 (6) 用 VHDL 語言編寫的源程序便于文檔管理,用源代碼描述來進行復雜控制邏輯的設計,既靈活方便,又便于設計結果的交流、保存和重用[13]。 即使最后綜合出的電路都能實現(xiàn)相同的邏輯功能,其電路的復雜程度和時延特性都會有很大的差別,甚至某些額外的電路還使得系統(tǒng)運行效率達不到要求。而且由于這些結構通常都由大量的觸發(fā)器組成,不僅使電路更復雜,工作速度降低,而且由于時序配合的原因可能導致不好的結果?!璭lsestepsize=“0000000”。但是,程序2由于when…else的語句不能生成鎖存器的結構且else后一定要有結果。當對同一電路采用不同集成方式時,該電路對應的VHDL語言可以采用不同的描述方式。程序3:process(a,b,test)beginif (test=true)then q=a+b。程序4:process(a,b,test)variable temp:integer range 0 to 255。q=a+temp。程序5:q1=a+b+c。(4)高級設計的綜合技巧上述方法是在沒有改變其功能的條件下進行綜合優(yōu)化的,有時候可以在不妨礙設計規(guī)格約束的前提下,采用一定的綜合設計技巧,稍微改變其功能,就可以提高其綜合效率,例如下面的兩個程序:程序7:processbeginwait until clk’event and clk=’1’。end process。end if。(5)設計規(guī)劃的科學劃分設計規(guī)劃能否科學劃分也是引起電路復雜化的又一主要原因。“自頂而下”的設計方法10年前,電子設計的基本思路還是選擇標準的集成電路“自底向上”(Bottom Up)地構造出一個新的系統(tǒng)。第3章 交通燈系統(tǒng)設計的方法 交通系統(tǒng)的發(fā)展趨勢交通系統(tǒng)未來的發(fā)展趨勢就是要提高通行能力,加強環(huán)境保護,開展智能化運輸和環(huán)保專項技術的研究,并且要做到以人為本,重點開展交通安全技術的研究,在這個過程中要確定經濟合理的目標,促進新材料的廣泛應用和開發(fā)。然而,在提供良好的交通信息服務的背后,必定要有功能強大、信息資源豐富的ITS共用信息平臺作為支撐。智能交通各界通過多年的研究和工程實踐,普遍認為信息平臺的建設應實現(xiàn)信息共享樞紐、綜合交通信息服務、交通輔助決策、重大事件管理等功能目標。 ITS共用信息平臺的建設決不是一般的IT系統(tǒng)集成,為完整解決信息平臺數(shù)據采集、數(shù)據處理整合以及信息發(fā)布的問題,必須同時考慮多方面技術的綜合集成。是EDA設計中使用最多的語言之一,它具有很強的電路描述和建模能力,能從多個層次對數(shù)字系統(tǒng)進行建模和描述,從而大大地簡化了硬件設計任務,提高了設計效率和可靠性。VHDL 語言能夠成為標準化的硬件描述語言并獲得廣泛應用 , 它自身必然具有很多其他硬件描述語言所不具備的優(yōu)點。VHDL 語言設計方法靈活多樣 , 既支持自頂向下的設計方式, 也支持自底向上的設計方法。VHDL 語言的強大描述能力還體現(xiàn)在它具有豐富的數(shù)據類型。這樣做的好處是可以使設計人員集中精力進行電路設計的優(yōu)化, 而不需要考慮其他的問題。這些模塊可以預先設計或者使用以前設計中的存檔模塊, 將這些模塊存放在庫中 , 就可以在以后的設計中進行復用[13]。(2)參數(shù)化的概念:針對不同時段的交通流量,可以調整紅綠燈電路(增加或者減少電路的計數(shù)時間),以增加程序的靈活性。接收到時鐘信號的紅綠燈信號控制電路開始工作,并將產生的重新計數(shù)的輸出使能控制信號發(fā)送給計數(shù)秒數(shù)選擇電路和倒計時控制電路,同時還會將目前電路產生的狀態(tài)信號發(fā)送給前者。因此,為了避免意外事件的發(fā)生,電路必須給出一個穩(wěn)定的時鐘(clock)才能讓系統(tǒng)正常的工作。經仿真后得到的時序圖(見圖圖6):圖5 將clk經分頻處理后得到的ena_scan信號圖6 時鐘發(fā)生電路時序圖從圖5中可以看出,當外部信號發(fā)生器提供了1kHZ的時鐘信號后,系統(tǒng)輸出信號ena_scan就將時鐘信號進行了4分頻。這就使設計的靈活性增強了。第二句是定義一個信號,它的位數(shù)就是(scan_bit1),因為之前scan_bit設定的值為2,所以信號的位數(shù)就是2位。use 。 ena_scan:out std_logic。architecture bhv of hld1 isconstant scan_bit:positive:=2。signal clk_scan_ff:std_logic_vector(scan_bit1 downto 0)。signal ena_two:std_logic。 ena_s=39。139。 else clk_scan_ff=clk_scan_ff+1。 end if。139。039。139。 ena_two=39。 ena_two=39。 end if。flash_1hz=ena_one。圖7 計數(shù)秒數(shù)選擇電路模塊圖系統(tǒng)輸入信號:clk:由外部信號發(fā)生器提供1kHZ的時鐘信號;reset:系統(tǒng)內部自復位信號;ena_scan:接收由時鐘發(fā)生電路提供的250Hz的時鐘脈沖信號;recount:接收由交通燈信號控制電路產生的重新計數(shù)的使能控制信號;sign_state:接收由交通燈信號控制電路產生的狀態(tài)信號。東西方向紅燈設定為15s。東西方向綠燈設定為25s。南北方向黃燈設定為5s。139。139。139。 sign_state=“001”時,南北方向黃燈亮5s。 sign_state=“011”時,東西方向紅燈亮15s。 sign_state=“101”時,東西方向綠燈亮25s。use 。 ena_scan:in std_logic。end。constant redsn_time:integer:=15。139。139。139。 when 011=load=conv_std_logic_vector(redew_time,8)。 end case。end。就是將十進制的25轉換成二進制的19,這就使設計減少了很多不必要的麻煩??紤]到有些路口的交通擁堵現(xiàn)象較為嚴重,車輛會在道路上排成很長的一隊,這樣排在較遠距離的司機就很難看清楚倒計時顯示器上變化的數(shù)字,有可能會影響到車輛之間的正常行駛。系統(tǒng)輸出信號:led:負責將計數(shù)數(shù)值轉換成BCD碼,并利用發(fā)光二極管顯示倒計時狀態(tài);next_state:當計數(shù)器計時完畢后,負責產生一個脈沖信號,作為下一個狀態(tài)的觸發(fā)信號。) then t_ff=00000000。event and clk=39。 then if (recount=39。 else t_ff=t_ff1。 case conv_integer(t_ff) is when 0=led(24 downto 0)=1000000000000000000000000。 …… when 23=led(24 downto 0)=1111111111111111111111110。倒計時控制電路程序代碼library ieee。entity hld3 isport(reset:in std_logic。 load:in std_logic_vector(7 downto 0)。architecture bhv of hld3 issignal t_ff:std_logic_vector(7 downto 0)。 led=0000000000000000000000000。) then if ena_1hz=39。) then t_ff=load1。 case conv_integer(t_ff) is when 0=led(24 downto 0)=1000000000000000000000000。 when 4=led(24 downto 0)=1111100000000000000000000。 when 8=led(24 downto 0)=1111111110000000000000000。 when 12=led(24 downto 0)=1111111111111000000000000。 when 16=led(24 downto 0)=1111111111111111100000000。 when 20=led(24 downto 0)=1111111111111111111110000。 when 24=led(24 downto 0)=1111111111111111111111111。end process。039。由圖可知led是25位的系統(tǒng)輸出信號,負責控制發(fā)光二極管的輸出,所以25位的輸出信號可以分成七組控制發(fā)光二極管的顯示,其中“1”為點亮,“0”為熄滅。 圖11 紅綠燈信號控制電路系統(tǒng)輸入信號:clk:由外部信號發(fā)生器提供1kHZ的時鐘信號;reset:系統(tǒng)內部自復位信號;ena_scan:接收由時鐘發(fā)生電路提供的250Hz的時鐘脈沖信號;ena_1hz:接收由時鐘發(fā)生電路提供的1Hz的脈沖信號;flash_1hz:接收由時鐘發(fā)生電路提供的1Hz的脈沖時鐘信號;a_m:手動、自動切換按鈕(1:自動、0:手動);st_butt: 紅綠燈狀態(tài)切換按鈕(在手動操作下,每按一次按鈕就變換一個狀態(tài));next_state:接收由倒計時控制電路提供的下一個狀態(tài)的觸發(fā)信號。use 。 ena_1hz:in std_logic。 next_state:in std_logic。 green:out std_logic_vector(1 downto 0)。signal state:sreg0_type。beginif (st_butt=39。) then rebn_ff:=111111。event and clk=39。) then if (rebn_ff=3) then rebn_ff:=rebn_ff1。 st_transfer=39。039。end process。 sign_state=011。event and clk=39。 and ena_1hz=39。) then recount=39。 else recount=39。 elsif (a_m=39。) then if (st_transfer=39。 state=rewgsn。 sign_state=011。139。139。 sign_state=101。 end if。139。139。 state=gewrsn。when gewrsn= if (a_m=39。) then if (next_state=39。 state=yewrsn。 state=gewrsn。 and ena_scan=39。) then state