暑期實訓報告_第1頁
暑期實訓報告_第2頁
暑期實訓報告_第3頁
暑期實訓報告_第4頁
暑期實訓報告_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、西北工業大學2014年暑期實踐報告學 院: 軟件與微電子學院 學號: 姓名: 專 業: 微電子學 實驗時間: 2014.7 實驗地點: 指導教師: 西北工業大學2014 年 7 月實驗一 FPGA設計實訓一、實驗目的及要求1. 了解 FPGA 內部結構及其資源;2. 掌握 FPGA 設計的流程;3. 掌握 FPGA 設計工具的使用技巧;4. 掌握 FPGA 嵌入式系統設計流程及其開發工具的使用;5. 掌握 FPGA 嵌入式系統設計的軟件開發及其調試;6. 掌握 FPGA 嵌入式設計的 IP 核的創建、添加和總線功能仿真;7. 了解處理器基礎。二 、實驗內容1、FPGA 設計基礎使用 ISE軟件

2、工具實現設計,并深入了解 Xilinx FPGA 架構并獲得最佳設計實踐經驗并了解 Xilinx 設計流程的細節。本課程講述了 ISE 工具特性,例如結構向導、 管腳規劃和約束編輯器。其它主題還包括 FPGA 結構、同步設計技術、理解報告內容和全局時序約束等。2、嵌入式系統設計通過 MicroBlaze 軟處理器、PowerPC® 硬處理器、AXI 互連和為芯片優化的架構資源提供了新的系統設計能力水平。本課程可以加快經驗豐富的 FPGA設計者利用嵌入式開發套件(EDK)進行嵌入式系統開發的步伐。本演講和實驗還包含 Xilinx MicroBlaze 軟處理器與 PowerPC 440

3、 處理器的特性及功能。動手實驗提供了進行嵌入式系統開發、調試和仿真操作的經驗。3、項目案例以FPGA 數字邏輯設計教程-Verilog參考書為主,介紹一些常用的數字電路和接口的原理,如交通燈、PS2、LCD、RS232 串口等,并在開發板上做實際應用開發,組合多個模塊,最終形成一個系統級設計。三、具體內容1)了解基本的FPGA架構,熟悉使用Xilinx ISE工具來進行設計的流程。實驗1:在ISE Project Navigator中創建新工程并使用ISE仿真器來做行為仿真,并使用默認的軟件選項來執行設計。案例:二位比較器、毛刺、利用Verilog任務的4位比較器。2)結構向導和IO規劃。使用

4、結構向導例化DCM和PLL;了解I/O Planner的特性及如何獲得高質量的IO管腳分配。實驗 2:結構向導和管腳分配。使用時鐘向導來生成 DCM 并例化到設計中;使用 PlanAhead工具來分配管腳。執行設計并做下載。通過讀取設計產生的各種報告來評估設計是否符合面積目標和性能目標。實驗 3:預先分配管腳。使用 PlanAhead 工具實現優化的管腳分配,并進行 WASSO 分析避免地反彈和進行DRC檢測以確認設計遵循 I/O banking規則。案例:3-8譯碼器,8-3編碼器,4位加法器,4位加/減法器。3)通過添加全局時序約束來簡化同步設計及使用約束編輯器來制定全局時序約束。通過復制

5、寄存器、添加流水線等手段來提高設計性能;通過使用 I/O 寄存器來提高接口性能;如何建立穩定的同步電路。實驗 4:用 Xilinx 約束編輯器來編輯全程時序約束, 回顧映設后靜態時序報告來驗證時序約束能否實現, 使用布局布線后靜態時序報告來確定每個時序約束的最長約束路徑延遲。案例:4位乘法器、用task實現8位除法器、4位ALU。4)同步設計技術:有效利用層次化設計和同步設計技術來提高系統的穩定性和性能。案例:4 位環形計數器、防抖按鈕、脈沖寬度調制器、Fibonacci 數列。5)Chipscope 工具介紹:描述 Chipscope 工具的特性和使用。實驗6:利用 Chipscope 工具

6、來抓取設計內部信號:Core Insert 和 Core Instantiation。案例:序列檢測器、門鎖代碼。6)EDK 概述:介紹 Xilinx 嵌入式處理器的組成和嵌入式設計流程,描述 XPS 硬件平臺管理和 SDK 軟件平臺管理。基本系統創建器(BSB):詳細描述如何使用 BSB 創建一個硬件平臺。使用 SDK 進行軟件開發:熟悉SDK 開發工具的使用環境,使用 SDK 創建一個應用工程并進行編譯糾錯。實驗 7:簡單硬件設計。利用 Xilinx Platform Studio(XPS)創建一個簡單的處理器系統。實驗 8:寫基本的軟件應用程序。添加一個 XPS Bram 控制器并修改鏈

7、接腳本以在 Bram 中放置文本信息。生成 bit文件并下載,驗證是否正確。案例:交通燈、RS232串口實驗。7)總線介紹:了解不同總線的結構及在 MircoBlaze 處理器中的可用的不同總線。AXI介紹:了解AXI的概念、讀寫操作及AXI與PLB v46的不同,以及AXI的一些使用案例。中斷:了解硬件中斷和 MicroBlaze 處理器的中斷,以及中斷的組成。案例:GCD 算法分析8)添加硬件到嵌入式系統中:介紹EDK里包含的IP,如何添加硬件到嵌入式系統中并修改MHS 文件,也將介紹 PlatGen的功能及其使用。處理器基礎:介紹 MicroBlaze 處理器系統的基本組成模塊,存儲空間

8、的使用,如何添加復位模塊和時鐘生成器,并如何添加 JTAG 接口來做配置。處理器系統接口:介紹 MicroBlaze 處理器的接口, 主要詳細描述了 GPIO 和 AXI 接口。實驗 9:添加 IP 到硬件設計中。使用 XPS 添加 GPIO 外設到已經存在的嵌入式系統,生成 bit 文件并驗證。案例:整數平方根算法分析9)使用 IPIC 接口創建自己的外設:了解IPIC系統的基本架構及其組成,IPIC的不同信號及其使用,如何生成 IPIC 及其設計技術。使用 IPIC 接口安裝自己的外設:如何將自己的 IP 集成到 XPS 上并修改其MPD、PAO、BBD 等文件。添加自己的 IP:介紹如何

9、利用ISE的Project Navigator和EDK的XPS來集成處理器系統。實驗 10:添加自己的 IP。使用創建和導入外設向導來添加自己的外設到嵌入式系統中,生成 bit 文件并下載驗證。10)系統調試:學習使用 EDK 的調試工具,如何在 SDK 軟件調試和 HW/SW 協同調試實驗 11: 使用 SDK 進行高級軟件編程和軟件調試。使用 XPS 添加定時器和中斷控制器,利用 SDK 開發中斷處理程序并調試。實驗 12:硬件/軟件系統調試。利用 SDK 調試器和 ChipScope Pro工具進行硬件/軟件調試。案例:EDK 綜合性實驗案例四、實驗代碼(因為23個案例中,大部分實驗的代

10、碼老師已經給出,只有RS232串口通信實驗的代碼是我們自己編寫的。為節省篇幅,這里只貼出RS232串口通信實驗的代碼)1、top模塊module my_uart_top(clk,rst_n,rs232_rx,rs232_tx);input clk;/ 50MHz主時鐘input rst_n;/低電平復位信號input rs232_rx;/ RS232接收數據信號output rs232_tx;/RS232發送數據信號wire bps_start;/接收到數據后,波特率時鐘啟動信號置位wire clk_bps;/ clk_bps的高電平為接收或者發送數據位的中間采樣點 wire7:0 rx_da

11、ta;/接收數據寄存器,保存直至下一個數據來到wire rx_int;/接收數據中斷信號,接收到數據期間始終為高電平/-speed_selectspeed_select(.clk(clk),/波特率選擇模塊,接收和發送模塊復用,不支持全雙工通信.rst_n(rst_n),.bps_start(bps_start),.clk_bps(clk_bps);my_uart_rxmy_uart_rx(.clk(clk),/接收數據模塊.rst_n(rst_n),.rs232_rx(rs232_rx),.clk_bps(clk_bps),.bps_start(bps_start),.rx_data(rx_

12、data),.rx_int(rx_int);my_uart_txmy_uart_tx(.clk(clk),/發送數據模塊.rst_n(rst_n),.clk_bps(clk_bps),.rx_data(rx_data),.rx_int(rx_int),.rs232_tx(rs232_tx),.bps_start(bps_start);endmodule2、發送數據模塊module my_uart_tx(clk,rst_n,clk_bps,rx_data,rx_int,rs232_tx,bps_start);input clk;/ 50MHz主時鐘input rst_n;/低電平復位信號inpu

13、t clk_bps;/ clk_bps的高電平為接收或者發送數據位的中間采樣點input7:0 rx_data;/接收數據寄存器input rx_int;/接收數據中斷信號,接收到數據期間始終為高電平,在次利用它的下降沿來啟動發送數據output rs232_tx;/ RS232發送數據信號output bps_start;/接收或者要發送數據,波特率時鐘啟動信號置位/-reg rx_int0,rx_int1,rx_int2;/rx_int信號寄存器,捕捉下降沿濾波用wire neg_rx_int;/ rx_int下降沿標志位always (posedge clk or negedge rst

14、_n) beginif(!rst_n) beginrx_int0 <= 1'b0;rx_int1 <= 1'b0;rx_int2 <= 1'b0;endelse beginrx_int0 <= rx_int;rx_int1 <= rx_int0;rx_int2 <= rx_int1;endendassign neg_rx_int = rx_int1 & rx_int2;/捕捉到下降沿后,neg_rx_int拉地保持一個主時鐘周期/-reg7:0 tx_data;/待發送數據的寄存器/-reg bps_start_r;reg t

15、x_en;/發送數據使能信號,高有效reg3:0 num;always (posedge clk or negedge rst_n) beginif(!rst_n) beginbps_start_r <= 1'bz;tx_en <= 1'b0;tx_data <= 8'd0;endelse if(neg_rx_int) begin/接收數據完畢,準備把接收到的數據發回去bps_start_r <= 1'b1;tx_data <= rx_data;/把接收到的數據存入發送數據寄存器tx_en <= 1'b1;/進入發送數

16、據狀態中endelse if(num=4'd11) begin/數據發送完成,復位bps_start_r <= 1'bz;tx_en <= 1'b0;endendassign bps_start = bps_start_r;/-reg rs232_tx_r;always (posedge clk or negedge rst_n) beginif(!rst_n) beginnum <= 4'd0;rs232_tx_r <= 1'b1;endelse if(tx_en) beginif(clk_bps)beginnum <=

17、num+1'b1;case (num)4'd0:rs232_tx_r <= 1'b0; /發送起始位4'd1:rs232_tx_r <= tx_data0;/發送bit04'd2:rs232_tx_r <= tx_data1;/發送bit14'd3: rs232_tx_r <= tx_data2;/發送bit24'd4: rs232_tx_r <= tx_data3;/發送bit34'd5: rs232_tx_r <= tx_data4;/發送bit44'd6: rs232_tx_r &

18、lt;= tx_data5;/發送bit54'd7:rs232_tx_r <= tx_data6;/發送bit64'd8: rs232_tx_r <= tx_data7;/發送bit74'd9: rs232_tx_r <= 1'b0;/發送結束位 default: rs232_tx_r <= 1'b1;endcaseendelse if(num=4'd11) num <= 4'd0;/復位endendassign rs232_tx = rs232_tx_r;endmodule3、接收數據模塊module my

19、_uart_rx(clk,rst_n,rs232_rx,clk_bps,bps_start,rx_data,rx_int);input clk;/ 50MHz主時鐘input rst_n;/低電平復位信號input rs232_rx;/ RS232接收數據信號input clk_bps;/ clk_bps的高電平為接收或者發送數據位的中間采樣點output bps_start;/接收到數據后,波特率時鐘啟動信號置位output7:0 rx_data;/接收數據寄存器,保存直至下一個數據來到 output rx_int;/接收數據中斷信號,接收到數據期間始終為高電平/-reg rs232_rx0

20、,rs232_rx1,rs232_rx2;/接收數據寄存器,濾波用wire neg_rs232_rx;/表示數據線接收到下降沿always (posedge clk or negedge rst_n) beginif(!rst_n) beginrs232_rx0 <= 1'b1;rs232_rx1 <= 1'b1;rs232_rx2 <= 1'b1;endelse beginrs232_rx0 <= rs232_rx;rs232_rx1 <= rs232_rx0;rs232_rx2 <= rs232_rx1;endendassign

21、neg_rs232_rx = rs232_rx2 & rs232_rx1;/接收到下降沿后neg_rs232_rx置高一個時鐘周期/-reg bps_start_r;reg3:0num;/移位次數reg rx_int;/接收數據中斷信號,接收到數據期間始終為高電平always (posedge clk or negedge rst_n) beginif(!rst_n) beginbps_start_r <= 1'bz;rx_int <= 1'b0;endelse if(neg_rs232_rx) beginbps_start_r <= 1'b1

22、;/啟動接收數據 rx_int <= 1'b1;/接收數據中斷信號使能endelse if(num=4'd12) beginbps_start_r <= 1'bz;/數據接收完畢rx_int <= 1'b0;/接收數據中斷信號關閉endend assign bps_start = bps_start_r;/-reg7:0 rx_data_r;/接收數據寄存器,保存直至下一個數據來到/-reg7:0rx_temp_data;/但前接收數據寄存器reg rx_data_shift;/數據移位標志always (posedge clk or nege

23、dge rst_n) beginif(!rst_n) beginrx_data_shift <= 1'b0;rx_temp_data <= 8'd0;num <= 4'd0;rx_data_r <= 8'd0;endelse if(rx_int) begin/接收數據處理if(clk_bps) begin/讀取并保存數據,接收數據為一個起始位,8bit數據,一個結束位rx_data_shift <= 1'b1;num <= num+1'b1;if(num<=4'd8) rx_temp_data7

24、<= rs232_rx;/鎖存9bit(1bit起始位,8bit數據)endelse if(rx_data_shift) begin/數據移位處理rx_data_shift <= 1'b0;if(num<=4'd8) rx_temp_data <= rx_temp_data >> 1'b1;/移位8次,第1bit起始位移除,剩下8bit正好時接收數據else if(num=4'd12) beginnum <= 4'd0;/接收到STOP位后結束,num清零rx_data_r <= rx_temp_data;

25、/把數據鎖存到數據寄存器rx_data中endend endendassign rx_data = rx_data_r;endmodule4、波特率選擇模塊module speed_select(clk,rst_n,bps_start,clk_bps);input clk;/ 50MHz主時鐘input rst_n;/低電平復位信號input bps_start;/接收到數據后,波特率時鐘啟動信號置位output clk_bps;/ clk_bps的高電平為接收或者發送數據位的中間采樣點 parameter bps9600 = 5207,/波特率為9600bps bps19200 = 2603

26、,/波特率為19200bpsbps38400 = 1301,/波特率為38400bpsbps57600 = 867,/波特率為57600bpsbps115200= 433;/波特率為115200bpsparameter bps9600_2 = 2603,bps19200_2= 1301,bps38400_2= 650,bps57600_2= 433,bps115200_2 = 216; reg12:0 bps_para;/分頻計數最大值reg12:0 bps_para_2;/分頻計數的一半reg12:0 cnt;/分頻計數reg clk_bps_r;/波特率時鐘寄存器/-reg2:0 uart

27、_ctrl;/ uart波特率選擇寄存器/-always (posedge clk or negedge rst_n) beginif(!rst_n) begin uart_ctrl <= 3'd0;/默認波特率為9600bpsendelse begincase (uart_ctrl)/波特率設置3'd0:beginbps_para <= bps9600;bps_para_2 <= bps9600_2;end3'd1:beginbps_para <= bps19200;bps_para_2 <= bps19200_2;end3'd2

28、:beginbps_para <= bps38400;bps_para_2 <= bps38400_2;end3'd3:beginbps_para <= bps57600;bps_para_2 <= bps57600_2;end3'd4:beginbps_para <= bps115200;bps_para_2 <= bps115200_2;enddefault: ;endcaseendendalways (posedge clk or negedge rst_n)if(!rst_n) cnt <= 13'd0;else if(

29、cnt<bps_para && bps_start) cnt <= cnt+1'b1;/波特率時鐘計數啟動else cnt <= 13'd0;always (posedge clk or negedge rst_n)if(!rst_n) clk_bps_r <= 1'b0;else if(cnt=bps_para_2 && bps_start) clk_bps_r <= 1'b1;/ clk_bps_r高電平為接收或者發送數據位的中間采樣點 else clk_bps_r <= 1'b0;

30、assign clk_bps = clk_bps_r;endmodule5、test文件module test;/ Inputsreg clk;reg rst_n;reg rs232_rx; reg 7:0 tx_data;wire 7:0 rx_data; reg bps_start;/ Outputswire rs232_tx;/ Instantiate the Unit Under Test (UUT)my_uart_top uut (.clk(clk), .rst_n(rst_n), .rs232_rx(rs232_rx), .rs232_tx(rs232_tx);initial be

31、gin/ Initialize Inputsclk = 0;rst_n = 1;tx_data=0; bps_start=0;#54 rst_n = 0; #70 rst_n = 1; #40 bps_start = 1'b1; #10 tx_data = 8'b11011001; #100 bps_start = 1'b0;end always begin #30 clk=clk;#10 clk=clk;endendmodule五、個人感悟在為期10天的FPGA設計實訓中,我學到了有關FPGA設計的更深層次的知識,熟悉了其設計流程,并逐步掌握了使用Xilinx ISE

32、工具來進行設計的過程。在老師進行講解的過程中,我深深的體會到之前學習的知識的單薄,必須要有實踐與其結合,才能對其真正的理解并達到靈活運用的層次。在大三上學期的FPGA設計課程中,我們就曾經接觸過類似的實驗課,但是當時只是覺得很抽象,而且僅僅只是停留在編寫代碼,完成實驗,仿真得到波形圖而已,并沒有真正領悟到什么是真正可行的,可綜合的設計。而在這次實訓中,我逐步認識到FPGA設計的內涵和實踐意義,它并不僅僅只是停留在實驗室里的仿真模型,它更是廣泛應用于各個領域的一門實用性的開發技術。它要求我們不僅要熟練掌握Verilog語言編程的技巧,還要深刻體會什么樣的代碼風格是適于綜合的,是最優化的方案。并且

33、,要使其成為可用的設計,還必須完成一系列復雜設計。而通過使用ISE 工具,我們可方便的使用結構向導例化各種模塊、使用PlanAhead工具進行管腳規劃和用約束編輯器來添加約束等等。這些都使我們朝著靈活應用所學知識又進了一步。六、教師評語簽名:日期:成績實驗二 版圖提取一、實驗目的及要求本實驗要求學生獨立對給定的CMOS數字集成電路單元版圖,完成電路的反向提取、繪制整理和功能分析等工作。通過對CMOS數字集成電路單元版圖的反向提取實驗,鍛煉和提高了學生對半導體器件和數字集成電路版圖的認知能力和對電路整理與結構優化技能,培養學生對數字集成電路反向設計思想的理解,加強了學生靈活運用所學“半導體物理”

34、、“場效應器件物理”、“數字集成電路設計”和“集成電路制造技術”等理論知識的能力。二、背景知識與資料搜集逆向設計傳統上被稱為“自底向上”的設計方法,也稱為反向設計。“反向設計”的提法似乎讓人很容易與侵犯別人知識產權產生聯系,實際上逆向設計與正向設計一樣,只是IC設計的一種技術手段,通過逆向設計獲取別人先進的設計思想用于自己的芯片設計中,并不能說侵犯知識產權。特別是對于初學IC設計的人員,通過學習和研究比較成熟的電路版圖,可以迅速增加相關電路設計經驗,更快熟悉整個IC設計流程和完善IC設計知識體系。       目前中國的IC

35、設計業還處在學習模仿國外的階段,早在幾年前中國的IC設計企業往往是完全復制國外的芯片。最近幾年,隨著人們對知識產權意識的提高,都能夠采取正確的方式來對待逆向設計,即利用逆向設計來設計自己的芯片。逆向設計流程與正向設計正好相反,從流程上來講,首先要去掉芯片的封裝,然后對芯片進行層層剝離,對剝離出來的芯片進行拍照和分析。隨著芯片復雜度的提高,簡單的拍照已經不能對芯片進行有效的分析,芯愿景公司推出了Chiplogic軟件,其它逆向設計公司也推出了自己的逆向軟件,利用軟件方來實現對芯片的分析,大大提高了分析的效率。       &#

36、160;逆向設計非常適合模擬芯片設計,如ADC、DAC、鎖相環等模擬電路,因為模擬電路的設計往往靠經驗。此外,對于10萬門以下的數字電路也適合,對于混合信號電路來講,可以適合模擬部分的反向設計服務。在時間方面,普通的逆向設計往往需要3-5個月,而小于10萬門的數字電路逆向設計一般需要2-3個月。三 、逆向設計流程 1、 腐蝕 塑料封裝外殼的腐蝕,可看到第一層金屬層。一般采用98%的硫酸加熱蒸煮,根據不同塑封料可能會用到濃硝酸。金屬鋁層的腐蝕,采用熱磷酸,可看到多晶和有源區。有多層金屬時,去除一層金屬后需要用氫氟酸去二氧化硅。去多晶硅,染色看顯現P阱和N阱。其它細節處理,縱向結構解剖(SEM掃描電鏡/TEM透射電鏡或摻雜濃度曲線測試,一般需要IC解剖不作,都是標準工藝,分立器件一般需要做)。2、照

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論