SOPC實驗報告(不含綜合實驗)_第1頁
SOPC實驗報告(不含綜合實驗)_第2頁
SOPC實驗報告(不含綜合實驗)_第3頁
SOPC實驗報告(不含綜合實驗)_第4頁
SOPC實驗報告(不含綜合實驗)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、#SOPC系統(tǒng)搭建實驗步驟:一、系統(tǒng)模塊設計FPGANios IICPUJTAG UARTTimer定時器AVALONSDRAM ctrollerSDRAM chipCH452_controller_IPcore4×4矩陣鍵盤led_pio (4 bits)8個動態(tài)數碼管UART ctroller電平轉換RS-232 to PCCH452鍵盤顯示管理芯片 PLL自主PWM_IPcoreLED燈(觀察?)控制四個LED燈2、 建立Quartus工程設定工程目錄、工程名、選擇器件等;建立一個與工程名相同的頂層圖形設計文件;將兩個相關文件夾拷到工程目錄下;3、 進入SOPC Builder

2、,搭建Nios2系統(tǒng)模塊確定FPGA芯片型號和和系統(tǒng)工作頻率;添加Nios2處理器并配置;添加JTAG UART調試模塊;添加SDRAM控制器;添加Time core并配置;添加UART并配置;添加PIO Core,配置為4位輸出,控制臺上的4個LED燈;添加CH452_controllerIPcore;添加自主IPcore(PWM);選擇自動分配地址和中斷號;設定CPU啟動地址和異常處理地址;Generate生成Nios2模塊;4、 在Quartus頂層圖形設計文件中添加(insert symbol)Nios2系統(tǒng)模塊;添加alt_pll并配置;添加Timer_out輔助電路;添加(inse

3、rt symbol)input、output、bidir引腳并連線;設定未用引腳狀態(tài)為三態(tài),編譯工程;進行引腳分配(如下所示);再次編譯;下載.sof文件下為引腳分配示意圖:系統(tǒng)搭建完畢后的硬件核截圖:實驗小結:系統(tǒng)搭建其實是本次實驗中最難倒我們的部分,主要是在搭建過程中我們組與老師的進度脫節(jié),以至于出現了不切實際的設計部分而我們又不自知。這帶來的后果則是我們在做后續(xù)的實驗中頻頻遭遇問題而難以從代碼和設置上解決,這個影響甚至持續(xù)到UART實驗部分。好在我們在最后完全修正了系統(tǒng)的設置問題也檢查了引腳的正確性,最終使用了正確的系統(tǒng)完成了后續(xù)的實驗。#基本實驗實驗步驟:1. 建立軟件工程-test,

4、并與硬件系統(tǒng)綁定2. 選擇“hello world”模板,設系統(tǒng)庫屬性, 添加 #include <system.h> 添加 #include <altera_avalon_pio_regs.h>3. builder工程,有錯則修改,直到正確4. run 程序,調試信息窗內應顯示“Hello from Nios II!”5. 打開“system.h”,查看系統(tǒng)硬件信息,熟悉相關內容 打開 altera_avalon_pio_regs.h 熟悉PIO控制方法6. 修改程序,使調試信息窗內顯示出和實驗學生相關的信息,例如“Hello from 12070005!”7. 添加

5、程序,通過PIO控制4個LED閃爍8. 運行程序,觀察調試信息窗內顯示內容和實驗臺LED現象,滿足要求后, 整理獲得實驗報告使用的代碼和截圖,思考如何構建測試程序的流程圖。#include <stdio.h>#include <system.h>#include <altera_avalon_pio_regs.h>int main()printf("13073108 13073113n");while(1)IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0); usleep(1000000);IOWR_

6、ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xf); usleep(1000000); return 0;開始輸出“13073108 13073113”設置無限循環(huán)設置LED狀態(tài)設置LED顯示時間實驗小結:基本實驗其實沒什么好說的,畢竟是為后續(xù)的實驗熟悉編譯環(huán)境而設置的實驗,本身并沒有什么難度。有意思的是盡管我們的系統(tǒng)在搭建之初是存在很大問題的,但是基本實驗卻憑借有缺陷的設計無障礙地完成了,這點知道撰寫報告時我才發(fā)現。相比個中原因可能是基本實驗涉及硬件核功能部分不多。#鍵盤控制部分實驗步驟:1. 建立軟件工程-disp&key,并與硬件系統(tǒng)綁定2. 選擇

7、“hello world”模板,設系統(tǒng)庫屬性,添加 #include <system.h>3. run 程序,調試信息窗內應顯示“Hello from Nios II!”4. 復制相關文件夾下define.h到工程目錄,查看并理解相關內容; 查看并理解CH452_CORE使用說明 復制粘貼相關文件夾下的測試例程,解析代碼結構與功能5. 修改程序,使調試信息窗內顯示出和實驗學生相關的信息, 例如“DISP and KEY test from 12070005!”6. builder工程,有錯則修改,直到正確7. 運行程序,觀察數碼管顯示現象11. 滿足要求后,整理獲得實驗報告使用的代

8、碼和截圖,思考如何構建測試程的流程圖。9. 按動4*4鍵盤的按鍵,觀察IDE顯示內容,分析實驗現象8. 修改程序,顯示學號(例如12070005 ),運行程序,觀察數碼管顯示現象10. 修改程序,某鍵按下時,開啟顯示;另一鍵按下時,關閉顯示。運行程序,觀察、 分析實驗現象實驗代碼:#include <stdio.h>#include <system.h>#include "alt_types.h"#include <define.h>#include <altera_avalon_CH452_regs.h>#include &

9、lt;altera_avalon_PIO_regs.h>void disp_init();void we_ch452_comand(alt_u16 data);void ch452_init();void delay(alt_u32 delay_data);void close_disp_key();void open_disp_key();void KeyDownISR();void disp_init() we_ch452_comand(CH452_DIG0|3); we_ch452_comand(CH452_DIG1|1); we_ch452_comand(CH452_DIG2|8

10、); we_ch452_comand(CH452_DIG3|0); we_ch452_comand(CH452_DIG4|1); we_ch452_comand(CH452_DIG5|3); we_ch452_comand(CH452_DIG6|7); we_ch452_comand(CH452_DIG7|0); void close_disp_key() we_ch452_comand(CH452_SYSOFF); void open_disp_key() we_ch452_comand(CH452_SYSON2); void delay(alt_u32 delay_data) usleep

11、(delay_data); void we_ch452_comand(alt_u16 data) alt_u16 temp=IORD_ALTERA_AVALON_CH452_STATUS(CH452_BASE); while (temp&0x0001)=1) temp=IORD_ALTERA_AVALON_CH452_STATUS(CH452_BASE); IOWR_ALTERA_AVALON_CH452_INSTRACTION(CH452_BASE, data); delay(1000); /wait ch452 ok alt_u8 keyvalue=0,flag=0;void Ke

12、yDownISR(void* context, alt_u32 id) keyvalue=IORD_ALTERA_AVALON_CH452_KEY_DATA(CH452_BASE); flag=1; void ch452_init() we_ch452_comand(CH452_SYSON2);/open disp & key we_ch452_comand(CH452_BCD); /BCD disp mode IOWR_ALTERA_AVALON_CH452_IRQ_MASK(CH452_BASE, 1);/enable key irq alt_irq_register(CH452_

13、IRQ, NULL, KeyDownISR);int main() printf("Hello from Nios II!n"); ch452_init(); disp_init(); while (1) if(flag=1) printf("reg0=%lxn",keyvalue); flag=0; close_disp_key(); delay(10000); open_disp_key(); delay(10000); return 0;開始數碼管輸出“Hello from Nios II!” 無限循環(huán)當鍵入開關打開,輸出屏幕顯示當前鍵盤輸入緩存值

14、,并關閉鍵入開關結束調用提供的ch452并設置要顯示的字符實驗小結:實驗的重點在于讀懂新的ch452的操作語句使用方法,所幸老師在這方面的講解十分詳細,我們很快通過老師的指導和對于實驗流程及代碼的理解便完成了鍵盤控制顯示實驗。主要也是指導書內容十分詳盡,以至于我們的實驗也沒遇到什么大問題。#UART一、實驗步驟:1.建立軟件工程-UART,并與硬件系統(tǒng)綁定2. 選擇“hello world”模板,設系統(tǒng)庫屬性,添加 #include <system.h>3. run 程序,調試信息窗內應顯示“Hello from Nios II!”4.復制粘貼相關文件夾下的測試例程,解析代碼結構與

15、功能5.修改程序,使調試信息窗內顯示出和實驗學生相關的信息, “UART test from 130731 13073108 13073113!”6.修改程序,alt_u8 tx_buffer10=“wait datan”; 為alt_u8 tx_buffer?=“13073108 13073113 wait datan”;形式7.builder工程,出現error則修改程序直到正確。8.PC上運行“串口助手” ,完成相應設置9.運行SOPC程序,觀察IDE和“串口助手”顯示內容,分析實驗現象10.通過“串口助手”分別發(fā)送A123#、#,觀察IDE和“串口助手”顯示內容,分析實驗現象二、程序清

16、單#include <stdio.h>#include <system.h>#include <altera_avalon_pio_regs.h>#include <altera_avalon_timer_regs.h>#include <altera_avalon_uart_regs.h>#include <alt_types.h>/中斷接收,查詢發(fā)送alt_u16 aaa=0;alt_u8 i=0,j=0,k=0;alt_u8 flag=0,err_cmd=0;alt_u8 tx_buffer20="1307

17、310813 waitdatan"alt_u8 tx_err_buffer22="1307310813command errn"alt_u8 rx_buffer20;alt_u8 rx_data;void rx_uart_interrupt_server(void*context,alt_u32 id) rx_data=IORD_ALTERA_AVALON_UART_RXDATA(RS232_BASE); if (rx_data='#')&(j!=0) flag=1;j=0; else if (rx_data='#')&am

18、p;(j=0) err_cmd=1; else rx_bufferj=rx_data;j+; void clr_rxbuffer() for (k=0;k<=19;k+) rx_bufferk=0; void init_uart() alt_irq_register(RS232_IRQ,NULL,rx_uart_interrupt_server); IOWR_ALTERA_AVALON_UART_CONTROL(RS232_BASE, ALTERA_AVALON_UART_CONTROL_RRDY_MSK );void send_wait_data() for (i=0;i<=19

19、;i+) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE); while (aaa&ALTERA_AVALON_UART_STATUS_TRDY_MSK)=0) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE); IOWR_ALTERA_AVALON_UART_TXDATA(RS232_BASE, tx_bufferi); void send_err_data() for (i=0;i<=21;i+) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE)

20、; while (aaa&ALTERA_AVALON_UART_STATUS_TRDY_MSK)=0) aaa=IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE); IOWR_ALTERA_AVALON_UART_TXDATA(RS232_BASE, tx_err_bufferi); int main() init_uart(); clr_rxbuffer(); printf("uart_tx Hello from 1307310813n"); while (1) send_wait_data(); usleep(3000000);

21、 if (flag=1) for (k=0;k<=19;k+) printf("%x ",rx_bufferk); flag=0; printf(" rx datan"); clr_rxbuffer(); if (err_cmd=1) err_cmd=0; printf("error rx datan"); send_err_data(); return 0;開始流程圖:Err_CMD=1?N Y輸出錯誤信息Flag=1?N YK>19?YK=k+1 N輸出x清空rx_buffer結束測試結果與分析:在串口助手的信息框中不

22、斷顯1307310813 waitdata在輸入了0后程序顯示了error data;在輸入了學號后程序顯示了學號各位的BCD碼;在實驗過程中出現了硬件連接以及代碼沒有錯誤,但是在串口助手上總是無法顯示程序中編寫的信息的問題,經檢查是由于在引腳分配的過程中,輸入與輸出引腳分配順序發(fā)生了顛倒,導致數據無法正確輸出,將輸入輸出引腳進行修正之后,在串口助手上即可正確的顯示提前編寫的信息。小結:在實驗過程中多次檢查了程序中的錯誤,然而試驗中的問題并沒有出現在軟件方面,而是在硬件上引腳的分配出現了問題,導致在這項實驗上浪費了很多時間,這也從側面證明了sopc技術試驗中,每一個細節(jié)的重要性。#Timer一

23、、實驗步驟:1.建立軟件工程-Timer,并與硬件系統(tǒng)綁定2. 選擇“hello world”模板,設系統(tǒng)庫屬性,添加 #include <system.h>3. 運行程序,調試信息窗內應顯示“Hello from Nios II!”4.復制粘貼相關文件夾下的測試例程,解析代碼結構與功能5.修改程序,使調試信息窗內顯示出和時鐘相關的信息,“0:0:1 0:0:2”6. builder工程,出現error則修改程序直到正確。7. 運行程序,觀察調試信息窗內顯示內容,分析實驗現象。2、 程序清單#include <stdio.h>#include <system.h&

24、gt;#include <altera_avalon_pio_regs.h>#include <altera_avalon_timer_regs.h>#include <alt_types.h>#include <stdio.h>alt_u8 tm_sec,tm_min,tm_hour;alt_u8 flag=0;void timer_interrupt_server(void*context,alt_u32 id) tm_sec+; if(tm_sec=60) tm_sec=0; tm_min+; if(tm_min=60) tm_min=0;

25、 tm_hour+; if(tm_hour=24) tm_hour=0; IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0); flag=1;void init_timer() alt_irq_register(TIMER_IRQ,NULL,timer_interrupt_server); IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK+ ALTERA_AVALON_TIMER_CONTROL_CONT_MSK+ ALTERA_AVALON

26、_TIMER_CONTROL_START_MSK ); int main() init_timer(); printf("Hello from Nios II!n"); while (1) if (flag=1) printf("%d:%d:%dn",tm_hour,tm_min,tm_sec); flag=0; return 0;開始測試流程圖:顯示helloworld執(zhí)行timer函數Flag=1?N顯示“時:分:秒”YFlag歸零結束測試結果與分析:在運行程序后,在調試文字信息框中出現helloworld文字,并在之后隨時間顯示具體的計時信息。小結:在這部分模塊的實驗中,由于對代碼和軟件的不熟悉,出現了頻繁報錯的情況,之后在詢問同學和老師之后這些問題逐漸迎刃而解,之后成功的完成了本次關于timer模塊的實驗。#PWM1、 實驗步驟1

溫馨提示

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

評論

0/150

提交評論