基于FPGA的RS232設(shè)計_第1頁
基于FPGA的RS232設(shè)計_第2頁
基于FPGA的RS232設(shè)計_第3頁
基于FPGA的RS232設(shè)計_第4頁
基于FPGA的RS232設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、課程設(shè)計(論文)說明書 題 目 : 基于FPGA的RS232串口通信 院 (系) : 信息與通信學(xué)院 專 業(yè) : 微電子學(xué) 學(xué)生姓名 : 學(xué) 號 : 指導(dǎo)教師 : 職 稱 : 副教授 2012 年 12 月 10 日摘 要實驗設(shè)計了基于verilog描述的RS232串口通信控制器,通過串口調(diào)試工具實現(xiàn)PC機和FPGA互發(fā)和接收數(shù)據(jù)。完成的功能包括實現(xiàn)收發(fā)一幀10個bit、波特率為9600的串口通信控制器,F(xiàn)PGA接收數(shù)據(jù)后顯示在串口助手的接收數(shù)據(jù)欄里。實驗的重心放在了RS232串口通信控制器發(fā)送模塊和接收模塊的設(shè)計,采用了自頂向下的思路進(jìn)行設(shè)計。報告中給出了完整的設(shè)計思路和過程,并將系統(tǒng)分模塊

2、進(jìn)行了詳細(xì)的設(shè)計,給出了verilog語言描述。完成了各個模塊以及系統(tǒng)整體的仿真驗證。最終下載到實驗板上測試通過。關(guān)鍵詞: RS232;verilog;串口通信;發(fā)送;接收;分頻AbstractExperiment design based on the description of the Verilog RS232 serial communication controller, through the serial port debugging tools to achieve PC machine and FPGA sending and receiving data. Complet

3、e function includes transmitting a frame of 10 bit, baud rate to 9600 serial communication controller, FPGA receives the data displayed in a serial assistants to receive data column.Key words:RS232 ; verilog ; Serial communication ;transmission ;receive ; frequency division 目 錄引言第一部分 任務(wù)要求41.1課題要求41.

4、2設(shè)計目標(biāo)4第二部分 系統(tǒng)設(shè)計52.1設(shè)計思路52.2系統(tǒng)結(jié)構(gòu)設(shè)計6系統(tǒng)結(jié)構(gòu)框圖6系統(tǒng)邏輯功能劃分6層次模塊劃分7模塊設(shè)計圖9發(fā)送模塊設(shè)計10接收模塊設(shè)計11分頻模塊設(shè)計12按鍵防抖模塊設(shè)計12譯碼顯示模塊設(shè)計122.3系統(tǒng)硬件語言描述13描述思路13總體電路的描述13分塊電路的描述142.4系統(tǒng)仿真驗證21第三部分 結(jié)果與分析233.1實現(xiàn)功能說明233.2器件資源分析233.3故障和問題分析25第四部分 總結(jié)與結(jié)論264.1實驗結(jié)論264.2總結(jié)體會26第五部分 附錄部分285.1元器件和儀表清單285.2VHDL源代碼285.3電路圖395.4參考文獻(xiàn)41引言數(shù)據(jù)采集系統(tǒng)常需要進(jìn)行異步串

5、行數(shù)據(jù)傳輸。目前廣泛使用的RS232異步串行接口,如8250、 NS16450等專用集成器件,雖然使用簡單,卻占用電路板面積、布線復(fù)雜等缺點。片上系統(tǒng)SoC(System on Chip)是以嵌入式系統(tǒng)為核心,以IP復(fù)用技術(shù)為基礎(chǔ),集軟、硬件于一體的設(shè)計方法。使用IP復(fù)用技術(shù),將UART集成到FPGA器件上,可增加系統(tǒng)的可靠性,縮小PCB板面積;其次由于IP核的特點,使用IP核可使整個系統(tǒng)更加靈活,還可根據(jù)需要實現(xiàn)功能升級、擴充和裁減。這里采用VHDL語言編寫 UART模塊,將其集成到FPGA上,與器件其他功能模塊構(gòu)成片上系統(tǒng)SoC。第一部分 任務(wù)要求1.1課題要求設(shè)計并實現(xiàn)一個可以和PC機通

6、過RS232協(xié)議進(jìn)行通信的串口通信控制器。1. PC機通過串口調(diào)試工具來驗證程序的功能;2. 實現(xiàn)一個收發(fā)一幀10個bit的串口控制器,10個bit是1位起始位,8位數(shù)據(jù)位,1位結(jié)束位,無奇偶校驗位;3. 串口的波特率選擇9600bit,串口處于全雙工工作狀態(tài);4. PC機可隨時向FPGA發(fā)送0F的十六進(jìn)制數(shù)據(jù);1.2設(shè)計目標(biāo)根據(jù)課題要求,實驗中將目標(biāo)進(jìn)行了細(xì)化,敘述如下:1. 設(shè)定數(shù)據(jù)幀格式為10bit,其中第一位為起始位,定位低電平,8位數(shù)據(jù)位,1位結(jié)束位,無數(shù)據(jù)傳輸時為高電平;2.通過串口調(diào)試工具向FPGA發(fā)送數(shù)據(jù),F(xiàn)PGA接收后顯示串口調(diào)試工具的接收數(shù)據(jù)窗口;第二部分 系統(tǒng)設(shè)計2.1系

7、統(tǒng)結(jié)構(gòu)設(shè)計2.1.1系統(tǒng)結(jié)構(gòu)框圖接收數(shù)據(jù)PC發(fā)送數(shù)據(jù)FPGA PGA圖2.1 RS232串口通信控制器系統(tǒng)結(jié)構(gòu)框圖串口通信控制器的輸入是PC發(fā)送的數(shù)據(jù)。當(dāng)發(fā)送數(shù)據(jù)按鍵按下時,F(xiàn)PGA向PC發(fā)送已定義好的數(shù)據(jù)。同時,當(dāng)FPGA檢測到PC發(fā)送數(shù)據(jù)幀的起始位時,開始接收數(shù)據(jù),并行輸出。2.1.2系統(tǒng)邏輯功能劃分PC發(fā)送模塊分頻模塊接收模塊圖2.2 RS232串口通信控制器系統(tǒng)邏輯框圖如圖2.2所示,系統(tǒng)可邏輯地劃分為三個子系統(tǒng):一是分頻子系統(tǒng),包括為發(fā)送模塊和接收模塊提供波特率為9600bit的時鐘;二是發(fā)送子系統(tǒng),包括發(fā)送模塊;三是接收子系統(tǒng),包括接收模塊和串口助手顯示模塊。2.1.3層次模塊劃分

8、系統(tǒng)劃分為兩層,自頂向下分別是頂層模塊、控制器子模塊。頂層描述了整個系統(tǒng)的功能和運行;控制器子模塊實現(xiàn)系統(tǒng)中各個獨立而完整的功能部分,每個層次可用一個或多個具體模塊加以實現(xiàn)。A. 頂層模塊:作用為集成子模塊功能,控制子模塊的連接和耦合信號。定義名稱為uart1,在其中例化子模塊。B. 中層模塊:具體實現(xiàn)頂層模塊的描述,包括的功能主要是產(chǎn)生時鐘信號,發(fā)送模塊和接收模塊的定義和狀態(tài)的轉(zhuǎn)移:speed_select時鐘分頻模塊,將50MHz的時鐘分頻為9600×1Hz的時鐘。定義波特率為9600bit,波特因子為1。輸入:50MHz晶振信號。輸出:送往接收模塊和發(fā)送模塊的9600×

9、;11Hz的信號。a) my_uart_rx接收模塊,檢測接收端,若檢測到低電平則開始接收數(shù)據(jù),每隔1個周期接收一位數(shù)據(jù),直到接滿8bit。輸入:9600×1Hz時鐘信號、PC機發(fā)送的串行數(shù)據(jù)。輸出:PC機發(fā)送的串行數(shù)據(jù)并行輸出。b) my_uart_tx發(fā)送模塊。當(dāng)發(fā)送數(shù)據(jù)按鍵確定有效時向PC發(fā)送自定義的數(shù)據(jù)。輸入:9600×1Hz時鐘信號、發(fā)送數(shù)據(jù)按鍵。輸出:字符串的串行輸出。以上模塊分別定義在一個工程內(nèi),最后在頂層模塊中用語言進(jìn)行連接。2.1.4模塊設(shè)計圖發(fā)送模塊設(shè)計發(fā)送模塊工作時首先檢測發(fā)送數(shù)據(jù)下降沿到來,如復(fù)位信號有效時,控制器處于復(fù)位狀態(tài),一旦檢測到復(fù)位信號無效

10、并且檢測到下降沿的到來則進(jìn)入起始狀態(tài)。從PC接收到的數(shù)據(jù)幀:1位起始位+8位數(shù)據(jù)位+1()位停止位(無奇偶校驗),檢測到電腦端的起始位后(rs232_rx下降沿)打開波特率發(fā)生器,到起始電平時間的中點時檢測數(shù)據(jù),每隔“一個”電平時間,采集一次并存入接收暫存寄存器,待到1(或)個結(jié)束位到來后將接收暫存寄存器數(shù)據(jù)放入接收寄存器并關(guān)閉波特率發(fā)生器,清楚數(shù)據(jù)檢測使能標(biāo)志。 接收模塊設(shè)計與發(fā)送模塊類似,接收模塊分為檢驗下降沿到來、啟動接收數(shù)據(jù)使能有效、接收數(shù)據(jù)處理等模塊。沒有檢測到起始位時程序一直處于開始狀態(tài),一旦檢測到低電平的起始位(neg_rs232_rx=1),則進(jìn)入找中狀態(tài)。定時計數(shù)器cnt=0

11、時則進(jìn)入等待狀態(tài),當(dāng)定時計數(shù)器cnt=1時對數(shù)據(jù)進(jìn)行采樣,直到移位計數(shù)器rx_temp_data0 <= rs232_rx;,即8bit數(shù)據(jù)采樣完畢,此時進(jìn)入停止?fàn)顟B(tài),重新返回開始狀態(tài)。檢測到由接收模塊使能位的下降沿后開啟波特率發(fā)生器并使能發(fā)送,隔半個電平時間后開始發(fā)送數(shù)據(jù)幀每隔“一個”電平時間更新要發(fā)的數(shù)據(jù)位,發(fā)送一位結(jié)束位后停止工作2.1.7分頻模塊設(shè)計串行異步通信的關(guān)鍵在于準(zhǔn)確地檢測到起始位,因此接收端的時鐘必須采用比波特率更高的時鐘信號,以便提高采樣的分辨率和抗干擾能力,從而更準(zhǔn)確地判定起始位。本實驗中波特率為9600bit,取波特率因子為1。接收端檢測到傳輸線上電平由高到低的變

12、化后便開始對接收時鐘進(jìn)行計數(shù),當(dāng)計到8個時鐘以后,再次對傳輸線進(jìn)行采樣,如果仍為低電平,則確認(rèn)是起始位,而不是干擾信號,之后每隔16個時鐘進(jìn)行一次采樣,直到采樣到停止位。而且由于每一次采樣都是在碼元的中心進(jìn)行的,這樣還可以最大限度地避免收、發(fā)時鐘偏差對數(shù)據(jù)傳送造成的影響。2.2系統(tǒng)硬件語言描述verilog描述思路第二部分“系統(tǒng)設(shè)計”中對系統(tǒng)的功能和邏輯結(jié)構(gòu)、狀態(tài)轉(zhuǎn)移以及模塊劃分都有了詳細(xì)的敘述,模塊間的耦合和信號的傳遞關(guān)系已經(jīng)清晰。可以使用verilog語言描述硬件電路了。發(fā)送模塊和接收模塊的verilog語言描述按照事先設(shè)計好的狀態(tài)轉(zhuǎn)移進(jìn)行編寫可以使電路思想明晰化,避免編程過程中用軟件的思

13、維去描述硬件的電路系統(tǒng),也可有效避免系統(tǒng)性的錯誤。由于進(jìn)行了細(xì)致的模塊劃分,模塊的間的耦合程度降到了很低,這就使得電路設(shè)計的可靠性大為增強,只要模塊的輸出滿足了功能定義,整個系統(tǒng)就能正常工作,即便個別模塊出現(xiàn)問題,也不會過多影響到其他模塊。實際測試過程中也印證了這一點。2.2.2總體電路的描述頂層符號文件描述如下:圖2.8 頂層符號文件2.2.3分塊電路的verilog描述本節(jié)給出分塊電路的硬件描述,對關(guān)鍵部分進(jìn)行了分析。1、 發(fā)送模塊的描述timescale 1ns / 1psmodule my_uart_tx( clk,rst_n, rx_data,rx_int,rs232_tx, clk

14、_bps,bps_start,led1);input clk;/ 50MHz主時鐘input rst_n;/低電平復(fù)位信號input clk_bps;/ clk_bps_r高電平為接收數(shù)據(jù)位的中間采樣點,同時也作為發(fā)送數(shù)據(jù)改變點input7:0 rx_data;/接收數(shù)據(jù)寄存器input rx_int;/接收數(shù)據(jù)中斷信號,接收到數(shù)據(jù)期間始終為高電平,在該模塊中利用它的下降沿來啟動串口發(fā)送數(shù)據(jù)output rs232_tx;/ RS232發(fā)送數(shù)據(jù)信號output bps_start;/接收或者要發(fā)送數(shù)據(jù),波特率時鐘啟動信號置位output led1;reg rx_int0,rx_int1,rx_

15、int2;/rx_int信號寄存器,捕捉下降沿濾波用wire neg_rx_int;/ rx_int下降沿標(biāo)志位always (posedge clk or negedge rst_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 &a

16、mp; rx_int2;/捕捉到下降沿后,neg_rx_int拉高保持一個主時鐘周期reg7:0 tx_data;/待發(fā)送數(shù)據(jù)的寄存器reg bps_start_r;reg tx_en;/發(fā)送數(shù)據(jù)使能信號,高有效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/接收數(shù)據(jù)完畢,準(zhǔn)備把接收到的數(shù)據(jù)發(fā)回去bps_s

17、tart_r <= 1'b1;tx_data <= rx_data;/把接收到的數(shù)據(jù)存入發(fā)送數(shù)據(jù)寄存器tx_en <= 1'b1;/進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)中endelse if(num=4'd11) begin/數(shù)據(jù)發(fā)送完成,復(fù)位bps_start_r <= 1'b0;tx_en <= 1'b0;endendassign bps_start = bps_start_r;reg rs232_tx_r;reg led1_r;always (posedge clk or negedge rst_n) beginif(!rst_n) be

18、ginnum <= 4'd0;rs232_tx_r <= 1'b1;led1_r<=1'b0;endelse if(tx_en) beginif(clk_bps)begin led1_r<=1'b1;case (num)4'd0: rs232_tx_r <= 1'b0; /發(fā)送起始位4'd1: rs232_tx_r <= tx_data0;/發(fā)送bit04'd2: rs232_tx_r <= tx_data1;/發(fā)送bit14'd3: rs232_tx_r <= tx_dat

19、a2;/發(fā)送bit24'd4: rs232_tx_r <= tx_data3;/發(fā)送bit34'd5: rs232_tx_r <= tx_data4;/發(fā)送bit44'd6: rs232_tx_r <= tx_data5;/發(fā)送bit54'd7: rs232_tx_r <= tx_data6;/發(fā)送bit64'd8: rs232_tx_r <= tx_data7;/發(fā)送bit74'd9: rs232_tx_r <= 1'b1;/發(fā)送結(jié)束位default: rs232_tx_r <= 1'b

20、1;endcasenum <= num+1'b1;endelse if(num=4'd11)begin num <= 4'd0;/復(fù)位led1_r<=1'b0;endendendassign rs232_tx = rs232_tx_r;assign led1=led1_r;endmodule2、 接收模塊的描述timescale 1ns / 1psmodule my_uart_rx(clk,rst_n, rs232_rx,rx_data,rx_int,clk_bps,bps_start,led0);input clk;/ 50MHz主時鐘inp

21、ut rst_n;/低電平復(fù)位信號input rs232_rx;/ RS232接收數(shù)據(jù)信號input clk_bps;/ clk_bps的高電平為接收或者發(fā)送數(shù)據(jù)位的中間采樣點output bps_start;/接收到數(shù)據(jù)后,波特率時鐘啟動信號置位output7:0 rx_data;/接收數(shù)據(jù)寄存器,保存直至下一個數(shù)據(jù)來到output rx_int;/接收數(shù)據(jù)中斷信號,接收到數(shù)據(jù)期間始終為高電平output led0;reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;/接收數(shù)據(jù)寄存器,濾波用wire neg_rs232_rx;/表示數(shù)據(jù)線接收到下降沿alw

22、ays (posedge clk or negedge rst_n) beginif(!rst_n) beginrs232_rx0 <= 1'b0;rs232_rx1 <= 1'b0;rs232_rx2 <= 1'b0;rs232_rx3 <= 1'b0;endelse beginrs232_rx0 <= rs232_rx;rs232_rx1 <= rs232_rx0;rs232_rx2 <= rs232_rx1;rs232_rx3 <= rs232_rx2;endendassign neg_rs232_rx =

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

24、x的下降沿標(biāo)志信號bps_start_r <= 1'b1;/啟動串口準(zhǔn)備數(shù)據(jù)接收rx_int <= 1'b1;/接收數(shù)據(jù)中斷信號使能endelse if(num=4'd12) begin/接收完有用數(shù)據(jù)信息bps_start_r <= 1'b0;/數(shù)據(jù)接收完畢,釋放波特率啟動信號rx_int <= 1'b0;/接收數(shù)據(jù)中斷信號關(guān)閉endassign bps_start = bps_start_r;reg7:0 rx_data_r;/串口接收數(shù)據(jù)寄存器,保存直至下一個數(shù)據(jù)來到reg led0_r;reg7:0 rx_temp_dat

25、a;/當(dāng)前接收數(shù)據(jù)寄存器always (posedge clk or negedge rst_n)if(!rst_n) beginrx_temp_data <= 8'd0;num <= 4'd0;rx_data_r <= 8'd0;led0_r<=1'b0;endelse if(rx_int) begin/接收數(shù)據(jù)處理 led0_r<=1'b1;if(clk_bps) begin/讀取并保存數(shù)據(jù),接收數(shù)據(jù)為一個起始位,8bit數(shù)據(jù),1或2個結(jié)束位case (num)4'd1: rx_temp_data0 <=

26、rs232_rx;/鎖存第0bit4'd2: rx_temp_data1 <= rs232_rx;/鎖存第1bit4'd3: rx_temp_data2 <= rs232_rx;/鎖存第2bit4'd4: rx_temp_data3 <= rs232_rx;/鎖存第3bit4'd5: rx_temp_data4 <= rs232_rx;/鎖存第4bit4'd6: rx_temp_data5 <= rs232_rx;/鎖存第5bit4'd7: rx_temp_data6 <= rs232_rx;/鎖存第6bit4

27、'd8: rx_temp_data7 <= rs232_rx;/鎖存第7bitdefault: ;endcasenum <= num+1'b1;endelse if(num = 4'd12) begin/我們的標(biāo)準(zhǔn)接收模式下只有1+8+1(2)=11bit的有效數(shù)據(jù)num <= 4'd0;/接收到STOP位后結(jié)束,num清零rx_data_r <= rx_temp_data;/把數(shù)據(jù)鎖存到數(shù)據(jù)寄存器rx_data中l(wèi)ed0_r<=1'b0;endendassign rx_data = rx_data_r;assign led

28、0=led0_r;endmodule3、 分頻模塊的描述module speed_select(clk,rst_n,bps_start,clk_bps);input clk;/ / 50MHz主時鐘input rst_n;/低電平復(fù)位信號input bps_start;/接收到數(shù)據(jù)后,波特率時鐘啟動信號置位output clk_bps;/ clk_bps的高電平為接收或者發(fā)送數(shù)據(jù)位的中間采樣點defineBPS_PARA5207/波特率9600分頻點數(shù)define BPS_PARA_22603reg12:0 cnt;reg clk_bps_r;reg2:0 uart_ctrl;/ uart?a

29、lways (posedge clk or negedge rst_n) beginif(!rst_n) cnt <= 13'd0;else if(cnt = BPS_PARA) | !bps_start) cnt <= 13'd0;/clear else cnt <= cnt+1'b1; endalways (posedge clk or negedge rst_n) beginif(!rst_n) clk_bps_r <= 1'b0;else if(cnt = BPS_PARA_2) clk_bps_r <= 1'b1;

30、else clk_bps_r <= 1'b0; endassign clk_bps = clk_bps_r;endmodule2.3系統(tǒng)仿真驗證系統(tǒng)仿真分為兩個步驟進(jìn)行,首先是關(guān)鍵模塊的仿真,驗證子系統(tǒng)功能的正確性,然后是綜合仿真,驗證整個系統(tǒng)的功能。仿真環(huán)境是QuartusII 7.2。首先是分頻模塊的仿真。由仿真結(jié)果可看出bclk的時鐘周期為104us,與要求結(jié)果一致,頻率為9600Hz。圖2.9 分頻模塊仿真圖(9600Hz分頻)然后是發(fā)送模塊的仿真波形。下圖為發(fā)送模塊第一個字符發(fā)送的波形,第一個字符的數(shù)值為“01100110”,發(fā)送時低位先發(fā)送,因此仿真波形由時間的先后順

31、序,其序列應(yīng)為“01100110”,每一幀數(shù)據(jù)為10個bit,第一個bit為起始位,最后一個bit為停止位,可以看出,中間的八位為“01100110”,說明了仿真波形的正確性。圖2.10 發(fā)送模塊仿真圖下圖為接收模塊仿真圖。設(shè)定的輸入信號為“10010110”。接收時將先接收到的數(shù)據(jù)作為低位,后接收到的數(shù)據(jù)作為高位,因此轉(zhuǎn)化成的并行數(shù)據(jù)應(yīng)為“01101001”,因此仿真波形正確。圖2.11 接收模塊仿真圖第三部分 結(jié)果與分析3.1實現(xiàn)功能說明本實驗完成的RS232串口通信控制器,完成了課題要求的所有功能。由于頂層設(shè)計采用了子系統(tǒng)分模塊描述的方法,使得控制器具有很好的擴展性??梢栽诓桓淖兿到y(tǒng)框架

32、和模塊間電路連接關(guān)系,增加其他模塊,實現(xiàn)其他功能。本課題中并沒有在數(shù)據(jù)幀中加入校驗位,僅僅實現(xiàn)了1位起始位,1位停止位和8位數(shù)據(jù)位的傳輸。初步實現(xiàn)了PC和FPGA之間的通信。數(shù)字系統(tǒng)的設(shè)計,真正的重點在于把系統(tǒng)層面的設(shè)計做好,把系統(tǒng)狀態(tài)機設(shè)計完整,系統(tǒng)架構(gòu)清晰,層次明確,穩(wěn)定性好,可擴展和可移植性好,這樣的系統(tǒng)給到用戶,只要添加用戶模塊或者稍作修改即可完成非特定的功能。3.2器件資源分析在設(shè)計階段,對系統(tǒng)描述采用過多種方式,嘗試了多種描述,代碼的長度在增加,模塊在增多,但系統(tǒng)穩(wěn)定性和可擴展性也在增強,層次結(jié)構(gòu)和模塊設(shè)計也更加完善。設(shè)計之初對資源使用沒有多少概念,時常以軟件的思想描述硬件,在描述

33、中使用乘法等資源耗費嚴(yán)重的操作,也曾使用過嵌套多層的IF-ELSE語句,產(chǎn)生很長的選擇器,降低了模塊的可靠性,增加處理延時。隨著設(shè)計的深入,加上反復(fù)求精的過程磨練,逐步對硬件描述綜合出的實際電路形式有了更多的理解,對延時和資源占用有了初步概念。一個顯見的結(jié)論是描述代碼的長度和綜合后的電路形式與資源占用無必然聯(lián)系。需要關(guān)注編譯器在綜合時如何將verilog行為級描述轉(zhuǎn)化為結(jié)構(gòu)化的門級電路,才能分析清楚資源占用率和電路結(jié)構(gòu)。行為級描述可能與實際綜合的電路產(chǎn)生不一致,需要謹(jǐn)慎對待。圖3.1是QuartusII編譯工程后的綜合報告。邏輯單元占用率27%。圖3.1 QuartusII編譯綜合報告3.3故

34、障和問題分析實驗中由于仔細(xì)設(shè)計了詳細(xì)劃分了子模塊、各模塊的實現(xiàn)都仔細(xì)進(jìn)行了描述,故沒有出現(xiàn)太多的故障。由于以前對verilog語言的理解停留在很低的層次,甚至和C語言等軟件語言混為一談,沒有很好地理解狀態(tài)機、硬件并發(fā)性、數(shù)字系統(tǒng)設(shè)計的方法,主要的麻煩產(chǎn)生在verilog描述上。在查閱了諸多相關(guān)資料后對verilog的語法基本熟悉,從最初的類似C語言的風(fēng)格到模塊初步成型、狀態(tài)機引入,再到最后全模塊化,自頂向下設(shè)計系統(tǒng),完成verilog描述。最深的感受在于,開始時一心專注于代碼的編寫和語法的使用,忽視了系統(tǒng)設(shè)計,導(dǎo)致設(shè)計結(jié)果不令人滿意,后來逐步采用自頂向下的設(shè)計思路,先從邏輯上把系統(tǒng)的功能和子系統(tǒng)的劃分描述清楚,然后設(shè)計各個模塊的接口和定義,最后分別去描述底層各個模塊的功能和實現(xiàn),清晰明了,一氣呵成。這也是系統(tǒng)沒有多少故障的主要原因。verilog描述中解決的最成功的一個問題是Multi

溫馨提示

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

最新文檔

評論

0/150

提交評論