【正文】
mation,即 EDA)技術(shù)是指包括電路系統(tǒng)設(shè)計(jì)、系統(tǒng)仿真、設(shè)計(jì)綜合、 PCB 版圖設(shè)計(jì)和制版的一整套自動(dòng)化流程。 秒表、彩燈控制器、搶答器、電梯控制器、出租車計(jì)費(fèi)器、微波爐控制器、FIR 濾波器、 I2C 控制器、 DDS、序列檢測(cè)器、自動(dòng)售貨機(jī)、函數(shù)發(fā)生器、調(diào)制解調(diào)器和 UART 等 15個(gè)數(shù)字系統(tǒng)的 VHDL 設(shè)計(jì)范例,給用戶演示了數(shù)字電路的設(shè)計(jì)方法和思路。它與傳統(tǒng)的電子產(chǎn)品在設(shè)計(jì)上的顯著區(qū)別師大量使用大規(guī)??删幊踢壿嬈骷?,使產(chǎn)品的性能提高,體積縮小,功耗降低 .同時(shí)廣泛運(yùn)用現(xiàn)代計(jì)算機(jī)技術(shù),提高產(chǎn)品的自動(dòng)化程度和競(jìng)爭(zhēng)力,縮短研發(fā)周期。 選題背景 2 第二章 FPGA簡(jiǎn)介 3 第二章 FPGA 簡(jiǎn)介 FPGA 概述 FPGA 是現(xiàn)場(chǎng)可編程門陣列( Field Programmable Gate Array) 的簡(jiǎn)稱,與之相應(yīng)的 CPLD 是復(fù)雜可編程邏輯器件( Complex Programmable Logic Device)的簡(jiǎn)稱,兩者的功能基本相同,只是實(shí)現(xiàn)原理略有不同,所以有時(shí)可以忽略這兩者的區(qū)別,統(tǒng)稱為可編程邏輯器件或 CPLD/PGFA。它如同一張白紙或是一堆積木,工程師可以通過(guò)傳統(tǒng)的 原理圖輸入或硬件描述語(yǔ)言自由的設(shè)計(jì)一個(gè)數(shù)字系統(tǒng)。使用 CPLA/FPGA 開發(fā)數(shù)字電路,可以大大縮短設(shè)計(jì)時(shí)間,減少 PCB 面積,提高系統(tǒng)的可靠性。 FPGA 基本結(jié)構(gòu) FPGA 一般由 3種可編程電路和一個(gè)用于存放編程數(shù)據(jù)的靜態(tài)存儲(chǔ)器 SRAM 組成??删幊踢壿嬆K CLB 是實(shí)現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個(gè)陣列,散布于整個(gè)芯片;可編程輸入 /輸出模塊( IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長(zhǎng)度的連接線段和一些可編程連接開關(guān),它們將各個(gè) CLB 之間或 CLB、 IOB之間以及 IOB之間連接起來(lái),構(gòu)成特定 功能的電路 FPGA 編程原理 硬件設(shè)計(jì)需要根據(jù)各種性能指標(biāo)、成本、開發(fā)周期等因素,確定最佳的實(shí)現(xiàn)方案,畫出系統(tǒng)框圖,選擇芯片,設(shè)計(jì) PCB 并最終形成樣機(jī)。編程語(yǔ)言主要有VHDL 和 Verilog 兩種硬件描述語(yǔ)言;編程工具主要是兩大廠家 Altera 和 Xilinx的集成綜合 EDA 軟件(如 MAX+plusII、 QuartusII、 Foundation、 ISE)以及第三方工具(如 FPGA Express、 Modelsim、 Synposys SVS 等) 。 HDL 既可以描述底層設(shè)計(jì),也可以描述頂層的設(shè)計(jì),但它不容易做到較高的工作速度和芯片利用率。 。有的軟件 3 種輸入方法都支持,如 ActiveHDL。電路原理圖方式描述比較直觀和高效,對(duì)綜合軟件的要求不高。在圖形的方式下定義好各個(gè)工作狀態(tài),然后在各個(gè)狀態(tài)上輸入轉(zhuǎn)換條件以及相應(yīng)的輸入輸出,最后生成 HDL 語(yǔ)言描述,送去綜合軟件綜合到可編程邏輯器件的內(nèi)部。這種輸入方式最后所能達(dá)到的工作速度和芯片利用率也是主要取決于綜合軟件。目前這種高層次的設(shè)計(jì)方法已被廣泛采用。 CPLD/FPGA 系統(tǒng)設(shè)計(jì)的工作流程如圖 22所示。 KEYPAD 若其中某一位為高電平,則表示用戶按下了相應(yīng)的數(shù)字鍵 當(dāng) KEYDOWN 為高電平,表示用戶按下某一數(shù)字鍵。 當(dāng) TIMEBUTTON 為高電平時(shí)表示用戶按下 TIME 鍵 DISPLAY 實(shí)際上表示了 4 個(gè) 7 段數(shù)碼管,用于顯示時(shí)間 。 2)各部分的組成 根 據(jù)系統(tǒng)的設(shè)計(jì)要求,整個(gè)系統(tǒng)分為 7個(gè)模塊:鬧鐘控制器,譯碼器,鍵盤緩沖器,鬧鐘寄存器,時(shí)間計(jì)數(shù)器,顯示驅(qū)動(dòng)器,分頻器。 譯碼器:可將 KEYPAD 信號(hào) 轉(zhuǎn)換為 0~9的整形數(shù),以直觀地表示和處理用戶輸入的數(shù)字。 分頻器:將較高的外部時(shí)鐘頻率分成每分鐘一次的時(shí)鐘頻率,以便進(jìn)行時(shí)鐘計(jì)數(shù)。 鬧鐘寄存器:用于保存用戶設(shè)置的鬧鐘時(shí)間,是一個(gè)異步復(fù)位寄存器。 數(shù)字鐘的工作原理 數(shù)字 鬧 鐘電路的基本結(jié)構(gòu)由兩個(gè) 60 進(jìn)制計(jì)數(shù)器和一個(gè) 24 進(jìn)制計(jì)數(shù)器組成,分別對(duì)秒、分、小時(shí)進(jìn)行計(jì)時(shí),當(dāng)計(jì)時(shí)到 23 時(shí) 59分 59秒時(shí),再來(lái)一個(gè)計(jì)數(shù)脈沖,則計(jì)數(shù)器清零,重新開始計(jì)時(shí)。 選題背景 8 當(dāng)數(shù)字 鬧 鐘處于計(jì)時(shí)狀態(tài)時(shí),秒計(jì)數(shù)器的進(jìn)位輸出信號(hào)作為分鐘計(jì)數(shù)器的計(jì)數(shù)信號(hào),分鐘計(jì)數(shù)器的進(jìn)位輸出信號(hào)又作為小時(shí)計(jì)數(shù)器的計(jì)數(shù)信號(hào)時(shí)、分、秒的計(jì)時(shí)結(jié)果通過(guò) 4個(gè)數(shù)碼管來(lái)動(dòng)態(tài)顯示。因此,通過(guò)模式選 擇信號(hào) KEY KEY2 控制數(shù)字鐘的工作狀態(tài),即控制數(shù)字鐘,使其分別工作于正常計(jì)時(shí),調(diào)整分、時(shí)和設(shè)定 鬧鐘 分、時(shí) 5個(gè)狀態(tài)。當(dāng)數(shù)字 鬧 鐘處于調(diào)整時(shí)間狀態(tài)時(shí),被調(diào)的分或時(shí)會(huì)一秒一秒地增加;當(dāng)數(shù)字鐘處于 鬧鐘 定時(shí)狀態(tài)時(shí),可以設(shè)定小時(shí)和分;當(dāng)計(jì)時(shí)到所設(shè)定的時(shí)刻時(shí), speak 將會(huì)被賦予 梁祝音樂(lè) 信號(hào)用于驅(qū)動(dòng)揚(yáng)聲器,持續(xù) 1分鐘。 use 。 entity shizhong is port( clk: in std_logic。 md2:in std_logic_vector(1 downto 0)。 h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0))。 architecture one of shizhong is signal hou1:std_logic_vector(3 downto 0)。 signal min1:std_logic_vector(3 downto 0)。 signal seth1:std_logic_vector(3 downto 0)。 signal setm1:std_logic_vector(3 downto 0)。 signal sec1:std_logic_vector(3 downto 0)。 選題背景 10 begin 小時(shí)十位 h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2) begin if clk39。139。 elsif hou1=0010and hou2=0011and md1=39。 and md2=01 then當(dāng)時(shí)間為 23 點(diǎn)且處于校時(shí)狀態(tài)時(shí) hou1=0000。039。 end if。 end process h110。event and clk=39。 then if (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) then hou2=0000。 elsif (hou2=1001and md1=39。 and md2=01) or (hou1=0010and hou2=0011) then hou2=0000。139。039。speak=clk。 end if。 分鐘十位 m110:process(clk,min2,sec1,sec2,md1,md2) begin if clk39。139。 elsif min1=0101and min2=1001and (md1=39。 and md2=00)then min1=0000。039。 end if。end if。 分鐘個(gè)位 m220:process(clk,sec1,sec2,md1,md2) begin if clk39。139。 elsif min2=1001and (md1=39。 and md2=00)then min2=0000。039。 end if。end if。 秒十位 s110:process(clk) begin if clk39。139。 else if sec2=1001then sec1=sec1+1。 end if。 end process s110。event and clk=39。 then if sec2=1001 then sec2=0000。 end if。 end process s220。event and clk=39。 then if seth1=0010and seth2=0011 then seth1=0000。 end if。 end process sethour1。event and clk=39。 then if (seth1=0010and seth2=0011)or seth2=1001then 選題背景 12 seth2=0000。139。 end if。 end process sethour2。event and clk=39。 then if setm1=0101and setm2=1001then setm1=0000。 end if。 end process setmin1。event and clk=39。then if setm2=1001then setm2=0000。139。 end if。 end process setmin2。event and clk=39。then if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then clken=39。 else clken=39。 end if。 end process speaker。039。h2=hou2。m2=min2。s2=sec2。h2=seth2。m2=setm2。s2=1111。 end process disp。 第四 章 模塊電路設(shè)計(jì) 13 3)樂(lè)曲演奏模塊: LIBRARY IEEE。 USE 。 Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0)。 END。 BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) 。039。139。 ELSIF clk39。139。 END IF。 GenSpkS : PROCESS(PreCLK, Tone) 11 位可預(yù)置計(jì)數(shù)器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0)。EVENT AND PreCLK = 39。 THEN IF Count11 = 167FF THEN Count11 := Tone 。139。 FullSpkS = 39。 END IF。 END PROCESS。 BEGIN IF FullSpkS39。139。 IF Count2 = 39。 THEN SpkS = 39。 ELSE SpkS = 39。 END IF。 END PROCESS。 LIBRARY IEEE。 USE 。 ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) )。 ARCHITECTURE one OF NoteTabs IS COMPONENT MUSIC 音符數(shù)據(jù) ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0)。 q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0))。 SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0)。 ELSIF (clk39。139。 END IF。 u1 : MUSIC PORT MAP(address=Counter , q=ToneIndex, inclock=clk)。 LIBRARY IEEE。 ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) 。 en : IN STD_LOGIC)。 ARCHITECTURE one OF ToneTaba IS BEGIN PROCESS(