新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 小梅哥和你一起深入學(xué)習(xí)FPGA之串口調(diào)試(一)(下)

小梅哥和你一起深入學(xué)習(xí)FPGA之串口調(diào)試(一)(下)

作者: 時(shí)間:2015-11-19 來(lái)源:網(wǎng)絡(luò) 收藏

  那么,特權(quán)同學(xué)在這里有通過(guò)注釋解釋為什么是12個(gè)波特率周期:“我們的標(biāo)準(zhǔn)接收模式下只有1+8+1(2)=11bit的有效數(shù)據(jù)”。即使是11位,小梅哥還是無(wú)法理解為什么需要12個(gè)波特率時(shí)鐘。我們?cè)趯?shí)際使用的時(shí)候,一般不去考慮校驗(yàn)位的問(wèn)題,因此總共只有10位,也就是說(shuō),我寫(xiě)的10位數(shù)據(jù)位的仿真模型和特權(quán)的11位方式不兼容??紤]到大多數(shù)的應(yīng)用過(guò)程中是10位,因此小梅哥在特權(quán)大神的代碼上稍作修改,以適應(yīng)10位模式。這里,將第52行代碼“else if( num==4'd12 ) begin ”改為“else if( num==4'd10 ) begin ”,將第86行代碼“else if( num == 4'd12 ) begin”改為“else if( num == 4'd10 ) begin”。通過(guò)這樣更改,就能夠適應(yīng)1bit的數(shù)據(jù)接收。同時(shí),小梅哥在實(shí)際調(diào)試中發(fā)現(xiàn),第45行的“bps_start_r <= 1'bz ;”代碼也存在問(wèn)題,在復(fù)位時(shí),給了bps_start_r一個(gè)高阻態(tài),這樣在實(shí)際仿真時(shí),會(huì)導(dǎo)致錯(cuò)誤,因此小梅哥在這里,將這一行代碼進(jìn)行了修改,復(fù)位時(shí)將bps_start_r置為0,即修改為“bps_start_r <= 1'b0 ;”。

本文引用地址:http://butianyuan.cn/article/283060.htm

  以上為接收部分的修改。發(fā)送部分的波特率波形如下所示:

    

 

  同樣有11個(gè)波特率時(shí)鐘,因此,小梅哥將發(fā)送部分的代碼稍作修改,以適應(yīng)10bit的數(shù)據(jù)發(fā)送。特權(quán)同學(xué)原始代碼如下:

  41 always @ ( posedge clk or negedge rst_n ) begin

  42 if(! rst_n ) begin

  43 bps_start_r <= 1'bz ;

  44 tx_en <= 1'b0 ;

  45 tx_data <= 8'd0 ;

  46 end

  47 else if( neg_rx_int ) begin //

  48 bps_start_r <= 1'b1 ;

  49 tx_data <= rx_data ; //

  50 tx_en <= 1'b1 ; //

  51 end

  52 else if( num==4'd11 ) begin //

  53 bps_start_r <= 1'b0 ;

  54 tx_en <= 1'b0 ;

  55 end

  56 end

  57

  58 assign bps_start = bps_start_r ;

  59

  60//---------------------------------------------------------

  61 reg rs232_tx_r ;

  62

  63 always @ ( posedge clk or negedge rst_n ) begin

  64 if(! rst_n ) begin

  65 num <= 4'd0 ;

  66 rs232_tx_r <= 1'b1 ;

  67 end

  68 else if( tx_en ) begin

  69 if( clk_bps ) begin

  70 num <= num+1'b1 ;

  71 case ( num)

  72 4'd0 : rs232_tx_r <= 1'b0 ; //

  73 4'd1 : rs232_tx_r <= tx_data [0]; // bit0

  74 4'd2 : rs232_tx_r <= tx_data [1]; // bit1

  75 4'd3 : rs232_tx_r <= tx_data [2];// bit2

  76 4'd4 : rs232_tx_r <= tx_data [3]; // bit3

  77 4'd5 : rs232_tx_r <= tx_data [4];// bit4

  78 4'd6 : rs232_tx_r <= tx_data [5]; // bit5

  79 4'd7 : rs232_tx_r <= tx_data [6]; // bit6

  80 4'd8 : rs232_tx_r <= tx_data [7]; // bit7

  81 4'd9 : rs232_tx_r <= 1'b1 ; //

  82 default : rs232_tx_r <= 1'b1 ;

  83 endcase

  84 end

  85 else if( num==4'd11 ) num <= 4'd0 ; //

  86 end

  87 end

  88

  這里,我們將第52行代碼“else if( num==4'd11 ) begin”修改為“else if( num==4'd10 ) begin”,將第85行代碼“else if( num==4'd11 ) num <= 4'd0 ;”修改為“else if( num==4'd10 ) num <= 4'd0 ;”同樣,第43行,針對(duì)“bps_start_r <= 1'bz;”也進(jìn)行了與接收部分相同的修改,即修改為“bps_start_r <= 1'b0 ;”其他部分不變,然后再進(jìn)行仿真編譯測(cè)試。仿真結(jié)果如下:

    

 

  由以上仿真結(jié)果可知,通過(guò)修改,該串口模塊已經(jīng)能夠?qū)崿F(xiàn)正確的收發(fā)了。接下來(lái),小梅哥將通過(guò)板級(jí)驗(yàn)證來(lái)對(duì)該模塊進(jìn)行測(cè)試。

  這里,小梅哥使用至芯科技提供的一塊入門(mén)級(jí)開(kāi)發(fā)板來(lái)完成該模塊的板級(jí)驗(yàn)證。以下為該開(kāi)發(fā)板的照片:

    

 

    

 

  該開(kāi)發(fā)板上集成了一枚PL2303的USB轉(zhuǎn)串口芯片,因此,我們不再需要笨拙的9針串口線,只需要一根USB線將開(kāi)發(fā)板與電腦的USB口相連,再安裝PL2303的驅(qū)動(dòng),即可在PC端模擬出一個(gè)串口端口,該串口端口的使用和傳統(tǒng)串口端口沒(méi)有任何差別。具體的串口驅(qū)動(dòng)安裝過(guò)程如下圖所示:

    

 

    

 

    

 

    

 

    

 

  通過(guò)以上步驟,我們就實(shí)現(xiàn)了PL2303型USB轉(zhuǎn)串口芯片驅(qū)動(dòng)的安裝。接下來(lái),我們需要根據(jù)各自使用的開(kāi)發(fā)板的電路分配引腳,這里小梅哥先用圖文的形式介紹一下針對(duì)ZX2開(kāi)發(fā)板的引腳分配及最終將配置文件下載到開(kāi)發(fā)板的流程:

    

 

    

 

    

 

    

 

    

 

    

 

  通過(guò)以上步驟,電路就已經(jīng)成功的配置到了我們的開(kāi)發(fā)板上并運(yùn)行起來(lái)了,這個(gè)時(shí)候,我們就需要通過(guò)調(diào)試軟件來(lái)進(jìn)行調(diào)試,以驗(yàn)證我們修改后的UART收發(fā)模塊能否穩(wěn)定運(yùn)行。要調(diào)試我們的設(shè)計(jì),我們還需要一個(gè)工具,通過(guò)工具,對(duì)我們編寫(xiě)的串口模塊持續(xù)發(fā)送數(shù)據(jù),然后接收串口模塊發(fā)送回來(lái)的數(shù)據(jù),通過(guò)對(duì)比發(fā)送與接收的數(shù)據(jù),如果相同,則表明我們的模塊是能夠穩(wěn)定工作的,如果出現(xiàn)丟碼或者亂碼,表明收發(fā)過(guò)程中出現(xiàn)了錯(cuò)誤,則表明我們?cè)O(shè)計(jì)的模塊存在工作不穩(wěn)定的情況,需要進(jìn)一步修改優(yōu)化。

  這里,我們使用程序匠人前輩編寫(xiě)的強(qiáng)大軟件——串口獵人。該軟件的下載和安裝小梅哥就不多說(shuō)了,當(dāng)我們啟動(dòng)串口獵人軟件后,會(huì)顯示以下界面,接下來(lái)小梅哥就直接以圖片配文字的形式來(lái)一步一步演示該軟件的使用:

    

 

    

 

    

 

  通過(guò)以上測(cè)試,我們知道了,經(jīng)過(guò)小梅哥的修改,該串口模塊目前能夠以連續(xù)無(wú)間隔的發(fā)碼速度進(jìn)行收發(fā),而且不存在任何誤碼和丟碼。因此,可以說(shuō),小梅哥的修改是成功的。

  這一篇,主要帶領(lǐng)大家一起進(jìn)行了串口代碼的分析、仿真模型的設(shè)計(jì)(testbench)、Quartus II軟件下使用Nativelink調(diào)用Modelsim-altera軟件進(jìn)行仿真、仿真結(jié)果簡(jiǎn)單分析、串口代碼的修改、串口模塊的板級(jí)驗(yàn)證。相信通過(guò)此文,初學(xué)者能夠?qū)W到部分知識(shí)。

  這是該系列文檔的第一篇,主要對(duì)特權(quán)大神的UART代碼進(jìn)行了簡(jiǎn)單的修改,以適應(yīng)小梅哥自己的用途。下一篇,小梅哥將詳細(xì)介紹基于此模塊的擴(kuò)展設(shè)計(jì),其實(shí)擴(kuò)展也沒(méi)多少內(nèi)容,主要就是加上可變波特率功能,順便介紹一下代碼中一些增加設(shè)計(jì)靈活性的技巧。第三篇,則是小梅哥開(kāi)始手把手教大家從原理入手,設(shè)計(jì)我們自己的UART模塊,設(shè)計(jì)中會(huì)加入收發(fā)FIFO,并使用標(biāo)準(zhǔn)的Avalon ST接口協(xié)議,以形成IP核的形式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FPGA 串口調(diào)試

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉