国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2016-1-26 11:52    發(fā)布者:designapp
關(guān)鍵詞: FPGA , 串口調(diào)試
  以上為小梅哥為了對(duì)特權(quán)同學(xué)的串口收發(fā)模塊進(jìn)行測(cè)試所展開的部分工作,到這里,仿真測(cè)試所需要的準(zhǔn)備工作我們就做好了,接下來將實(shí)際進(jìn)行仿真,通過仿真來分析該模塊的性能。
  這里極力推薦大家使用modelsim進(jìn)行仿真,因?yàn)閝uartusII自帶的仿真工具靈活性和功能都趕modelsim相差甚遠(yuǎn)。Modelsim作為一款強(qiáng)大的仿真軟件,在業(yè)界被廣泛使用。同時(shí),modelsim針對(duì)不同的EDA廠家,也推出了OEM版本,modelsim-altera就是為Altera公司開發(fā)的OEM版本,此版本針對(duì)Altera公司的器件預(yù)先做了許多的工作,使我們使用的時(shí)候能夠更加的快捷方便,這里,小梅哥就使用modelsim-Altera版本來仿真這個(gè)設(shè)計(jì)。
  我們可以使用modelsim-Altera,通過完全手動(dòng)化的方式來建立仿真工程,添加仿真庫、編譯文件,添加波形,運(yùn)行仿真,當(dāng)然也可以使用Nativelink的方式,通過quartus II軟件實(shí)現(xiàn)一鍵調(diào)用,實(shí)現(xiàn)自動(dòng)化的仿真過程。這里,對(duì)于初學(xué)者,小梅哥還是推薦采用這種自動(dòng)化的方式,因?yàn)楹唵危恍枰^多的手動(dòng)操作,且不容易出錯(cuò)。這里,小梅哥也使用這種方式來進(jìn)行仿真。
  要使用這種方式仿真,我們需要在QuartusII軟件中進(jìn)行EDA Tools的設(shè)置。在quartus II軟件中,依次點(diǎn)擊“tools – options ”,在打開的選項(xiàng)卡中選擇“EDA tool options”,在modelsim-altera一欄中輸入你的modelsim-Altera的安裝路徑(部分在安裝的時(shí)候就已經(jīng)自動(dòng)設(shè)置好了,就不用去管),如下圖所示:
    


  這里設(shè)置完成后,點(diǎn)擊OK即可。
  當(dāng)確認(rèn)這一步?jīng)]有問題后,我們就可以開始進(jìn)行Nativelink的設(shè)置了。Nativelive就是一個(gè)鏈接的過程,通過設(shè)置Nativelink,讓Quartus II軟件能夠自動(dòng)的調(diào)用modelsim-altera軟件,并建立仿真工程,添加仿真庫、編譯文件,添加波形,運(yùn)行仿真。接下來我們就來進(jìn)行Nativelink的設(shè)置
  第一步:依次點(diǎn)擊“assignments– settings”,
    


  在彈出的選項(xiàng)卡中,選中“EDA Tool Settings”(紅色標(biāo)號(hào)1處),在子選項(xiàng)中選擇“Simulation”(紅色標(biāo)號(hào)2處),注意紅色標(biāo)號(hào)5處和6處應(yīng)分別選擇為modelsim-altera和Verilog HDL,如果不是,請(qǐng)通過下拉列表選擇為上述選項(xiàng)。點(diǎn)擊“Compile test bench” (紅色標(biāo)號(hào)3處),然后點(diǎn)擊最右側(cè)的“Test Benchs” (紅色標(biāo)號(hào)4處),就會(huì)彈出如下所示的界面:
    


  點(diǎn)擊“New” (紅色標(biāo)號(hào)1處),接著會(huì)彈出“New Test Bench Settings”界面,如下圖所示:
    


  首先我們點(diǎn)擊紅色標(biāo)號(hào)1處的三個(gè)小點(diǎn),在彈出的文件選擇界面中,選中我們需要加入的testbench文件,如下所示:
    


  這里我們選擇“Uart_tb.v”和“Uart_module.v”,點(diǎn)擊“Open”打開。這里,“Uart_tb.v”為仿真頂層文件,“Uart_module.v”為串口仿真模型。
  文件選擇好之后,回到New Test Bench Settings界面,如下圖所示,
    


  在頂端“test bench name”(紅色標(biāo)號(hào)2)處輸入我們的仿真頂層文件名,即Uart_tb,注意,不要加“.v”后綴。于是,”Top level module in test bench”會(huì)自動(dòng)與“Test bench name”保持一致。
  至此,我們的Nativelink設(shè)置就完成了,一路選擇OK下去,直到回到Quartus II軟件的主界面。此時(shí),我們已經(jīng)完成了仿真需要的所有設(shè)置,我們直接點(diǎn)擊Quartus II軟件上的RTL Simulation圖標(biāo)
    


  即可啟動(dòng)仿真,也可以通過“Tools– Run Simulation Tool – RTL Simulation”啟動(dòng)仿真。
  接下來,我們需要做的就是大約20秒左右的等待,這個(gè)過程中,Quartus II會(huì)自動(dòng)啟動(dòng)modelsim-altera軟件,建立仿真工程,添加仿真庫、編譯文件,添加波形,運(yùn)行仿真。最后停留在如下所示的狀態(tài):
    


  這里,右側(cè)深色窗口為波形窗口,下方為副本界面,打印了軟件運(yùn)行過程中的信息,包括添加文件、編譯文件、添加波形、運(yùn)行等,同時(shí)還打印了testbench中需要打印輸出的信息。具體的打印信息如下:
    


  由此打印信息可知,串口仿真模型總共進(jìn)行了8次數(shù)據(jù)發(fā)送,卻只收到了6次數(shù)據(jù),因此有兩次發(fā)送給串口模塊的數(shù)據(jù)丟失或者串口模塊發(fā)送的數(shù)據(jù)不正確。同時(shí),第一次發(fā)送出去的數(shù)據(jù)接收回來還是正確的,但是第二次發(fā)送的數(shù)據(jù)再接收回來,就錯(cuò)誤了。這兩次數(shù)據(jù)發(fā)送之間的時(shí)間間隔為40ns。考慮可能是發(fā)送間隔太短導(dǎo)致,但是當(dāng)?shù)?次發(fā)送的數(shù)據(jù)(s4)被正確接收后(r3),緊接著第5次發(fā)送的數(shù)據(jù)在發(fā)回的時(shí)候,再次出錯(cuò),而s4和s5之間間隔了300ns,因此可知,該串口收發(fā)模塊在連續(xù)兩次發(fā)送間隔很短的情況下,很容易出錯(cuò)。那么,怎么樣才能保證連續(xù)兩次發(fā)送之間,即使很短的間隔,也不出錯(cuò)誤呢?小梅哥通過對(duì)仿真波形的分析發(fā)現(xiàn):一次接收數(shù)據(jù),總共有12個(gè)波特率脈沖,如下圖所示:
    


  這里小梅哥就有點(diǎn)疑惑了,我們一般的應(yīng)用中,串口一幀的數(shù)據(jù)為十位,包含1位起始位、8位數(shù)據(jù)位、一位停止位,一般不含校驗(yàn)位。因此,這里明顯多了兩個(gè)波特率周期,那么,問題很有可能就出在這里。回到這部分的代碼:
  43 always @ ( posedge clk or negedge rst_n )
  44 if(! rst_n ) begin
  45 bps_start_r
  46 rx_int
  47 end
  48 else if( neg_rs232_rx ) begin
  // rs232_rx
  49 bps_start_r
  50 rx_int
  51 end
  52 else if( num==4'd12 ) begin //
  53 bps_start_r
  54 rx_int
  55 end
  56
  57 assign bps_start = bps_start_r ;
  58
  59//---------------------------------------------------------
  60 reg[ 7 : 0] rx_data_r ; //
  61 //---------------------------------------------------------
  62
  63 reg[ 7 : 0] rx_temp_data ; //
  64
  65 always @ ( posedge clk or negedge rst_n )
  66 if(! rst_n ) begin
  67 rx_temp_data
  68 num
  69 rx_data_r
  70 end
  71 else if( rx_int ) begin //
  72 if( clk_bps ) begin
  // , 8bit 1 2
  73 num
  74 case ( num)
  75 4'd1:rx_temp_data[0]
  76 4'd2:rx_temp_data [1]
  77 4'd3:rx_temp_data [2]
  78 4'd4:rx_temp_data [3]
  79 4'd5:rx_temp_data [4]
  80 4'd6:rx_temp_data [5]
  81 4'd7:rx_temp_data [6]
  82 4'd8:rx_temp_data [7]
  83 default : ;
  84 endcase
  85 end
  86 else if( num == 4'd12 ) begin//我們的標(biāo)準(zhǔn)接收模式下只有1+8+1(2)=11bit的有效數(shù)據(jù)
  87 num
  88 rx_data_r
  89 end
  90 end

                               
                                                               
                               
                  那么,特權(quán)同學(xué)在這里有通過注釋解釋為什么是12個(gè)波特率周期:“我們的標(biāo)準(zhǔn)接收模式下只有1+8+1(2)=11bit的有效數(shù)據(jù)”。即使是11位,小梅哥還是無法理解為什么需要12個(gè)波特率時(shí)鐘。我們?cè)趯?shí)際使用的時(shí)候,一般不去考慮校驗(yàn)位的問題,因此總共只有10位,也就是說,我寫的10位數(shù)據(jù)位的仿真模型和特權(quán)的11位方式不兼容。考慮到大多數(shù)的應(yīng)用過程中是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”。通過這樣更改,就能夠適應(yīng)1bit的數(shù)據(jù)接收。同時(shí),小梅哥在實(shí)際調(diào)試中發(fā)現(xiàn),第45行的“bps_start_r


  同樣有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
  44 tx_en
  45 tx_data
  46 end
  47 else if( neg_rx_int ) begin //
  48 bps_start_r
  49 tx_data
  50 tx_en
  51 end
  52 else if( num==4'd11 ) begin //
  53 bps_start_r
  54 tx_en
  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
  66 rs232_tx_r
  67 end
  68 else if( tx_en ) begin
  69 if( clk_bps ) begin
  70 num
  71 case ( num)
  72 4'd0 : rs232_tx_r
  73 4'd1 : rs232_tx_r
  74 4'd2 : rs232_tx_r
  75 4'd3 : rs232_tx_r
  76 4'd4 : rs232_tx_r
  77 4'd5 : rs232_tx_r
  78 4'd6 : rs232_tx_r
  79 4'd7 : rs232_tx_r
  80 4'd8 : rs232_tx_r
  81 4'd9 : rs232_tx_r
  82 default : rs232_tx_r
  83 endcase
  84 end
  85 else if( num==4'd11 ) num
  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


  由以上仿真結(jié)果可知,通過修改,該串口模塊已經(jīng)能夠?qū)崿F(xiàn)正確的收發(fā)了。接下來,小梅哥將通過板級(jí)驗(yàn)證來對(duì)該模塊進(jìn)行測(cè)試。
  這里,小梅哥使用至芯科技提供的一塊入門級(jí)FPGA開發(fā)板來完成該模塊的板級(jí)驗(yàn)證。以下為該開發(fā)板的照片:
    


    


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


    


    


    


    


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


    


    


    


    


    


  通過以上步驟,電路就已經(jīng)成功的配置到了我們的開發(fā)板上并運(yùn)行起來了,這個(gè)時(shí)候,我們就需要通過調(diào)試軟件來進(jìn)行調(diào)試,以驗(yàn)證我們修改后的UART收發(fā)模塊能否穩(wěn)定運(yùn)行。要調(diào)試我們的設(shè)計(jì),我們還需要一個(gè)串口調(diào)試工具,通過串口調(diào)試工具,對(duì)我們編寫的串口模塊持續(xù)發(fā)送數(shù)據(jù),然后接收串口模塊發(fā)送回來的數(shù)據(jù),通過對(duì)比發(fā)送與接收的數(shù)據(jù),如果相同,則表明我們的模塊是能夠穩(wěn)定工作的,如果出現(xiàn)丟碼或者亂碼,表明收發(fā)過程中出現(xiàn)了錯(cuò)誤,則表明我們?cè)O(shè)計(jì)的模塊存在工作不穩(wěn)定的情況,需要進(jìn)一步修改優(yōu)化。
  這里,我們使用程序匠人前輩編寫的強(qiáng)大串口調(diào)試軟件——串口獵人。該軟件的下載和安裝小梅哥就不多說了,當(dāng)我們啟動(dòng)串口獵人軟件后,會(huì)顯示以下界面,接下來小梅哥就直接以圖片配文字的形式來一步一步演示該軟件的使用:
    


    


    


  通過以上測(cè)試,我們知道了,經(jīng)過小梅哥的修改,該串口模塊目前能夠以連續(xù)無間隔的發(fā)碼速度進(jìn)行收發(fā),而且不存在任何誤碼和丟碼。因此,可以說,小梅哥的修改是成功的。
  這一篇,主要帶領(lǐng)大家一起進(jìn)行了串口代碼的分析、仿真模型的設(shè)計(jì)(testbench)、Quartus II軟件下使用Nativelink調(diào)用Modelsim-altera軟件進(jìn)行仿真、仿真結(jié)果簡單分析、串口代碼的修改、串口模塊的板級(jí)驗(yàn)證。相信通過此文,初學(xué)者能夠?qū)W到部分知識(shí)。
  這是該系列文檔的第一篇,主要對(duì)特權(quán)大神的UART代碼進(jìn)行了簡單的修改,以適應(yīng)小梅哥自己的用途。下一篇,小梅哥將詳細(xì)介紹基于此模塊的擴(kuò)展設(shè)計(jì),其實(shí)擴(kuò)展也沒多少內(nèi)容,主要就是加上可變波特率功能,順便介紹一下代碼中一些增加設(shè)計(jì)靈活性的技巧。第三篇,則是小梅哥開始手把手教大家從原理入手,設(shè)計(jì)我們自己的UART模塊,設(shè)計(jì)中會(huì)加入收發(fā)FIFO,并使用標(biāo)準(zhǔn)的Avalon ST接口協(xié)議,以形成IP核的形式。





























                               
                                                               
                               
               
本文地址:http://www.qingdxww.cn/thread-160365-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 利用模擬開發(fā)工具生態(tài)系統(tǒng)進(jìn)行安全電路設(shè)計(jì)
  • 你仿真過嗎?使用免費(fèi)的MPLAB Mindi模擬仿真器降低設(shè)計(jì)風(fēng)險(xiǎn)
  • 深度體驗(yàn)Microchip自動(dòng)輔助駕駛應(yīng)用方案——2025巡展開啟報(bào)名!
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲热在线观看 | 欧美视频免费在线播放 | 日韩高清dvd | 国产欧美第一页 | 亚洲精品三级 | 四虎精品成人免费观看 | 国产精品亚洲综合天堂夜夜 | 欧美视频三区 | 国产免费色视频 | 四虎永久在线精品波多野结衣 | 国产成人亚洲综合无 | 五月婷婷六月爱 | 黄色一级毛片看一级毛片 | 青青草国产三级精品三级 | 99久久99视频| 五月婷婷激情四射 | 蜜桃tv在线| 国产精品日韩欧美一区二区 | 精品视频在线观看免费 | 高傲名媛野外耻辱调教 | 国产亚洲精aa在线观看不卡 | 久久aa毛片免费播放嗯啊 | 全部老头和同性老头xxxxx | 岛国视频在线观看 | 免费一级毛片不卡在线播放 | 国产亚洲福利精品一区二区 | 成年女人视频网站免费m | 辛芷蕾三级在线视频无删减 | 麻豆精品久久精品色综合 | 亚洲国产成人99精品激情在线 | 香蕉视频啊啊啊 | 欧美亚洲综合另类 | 青草国内精品视频在线观看 | 免费a级午夜绝情美女图片 免费a级毛片 | 久久国产精品免费一区二区三区 | 亚洲精品视频在线观看免费 | 美女在线网站视频免费观看 | 亚洲欧美中文日韩在线v日本 | 免费在线欧美 | 日日摸摸| 毛片免费毛片一级jjj毛片 |