<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

            以上為小梅哥為了對(duì)特權(quán)同學(xué)的串口收發(fā)模塊進(jìn)行測試所展開的部分工作,到這里,仿真測試所需要的準(zhǔn)備工作我們就做好了,接下來將實(shí)際進(jìn)行仿真,通過仿真來分析該模塊的性能。

          本文引用地址:http://www.ex-cimer.com/article/283060.htm

            這里極力推薦大家使用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 <= 1'bz ;

            46 rx_int <= 1'b0 ;

            47 end

            48 else if( neg_rs232_rx ) begin

            // rs232_rx

            49 bps_start_r <= 1'b1 ; //

            50 rx_int <= 1'b1 ; //

            51 end

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

            53 bps_start_r <= 1'b0 ; //

            54 rx_int <= 1'b0 ; //

            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 <= 8'd0 ;

            68 num <= 4'd0 ;

            69 rx_data_r <= 8'd0 ;

            70 end

            71 else if( rx_int ) begin //

            72 if( clk_bps ) begin

            // , 8bit 1 2

            73 num <= num+1'b1 ;

            74 case ( num)

            75 4'd1:rx_temp_data[0] <= rs232_rx; // 0bit

            76 4'd2:rx_temp_data [1] <= rs232_rx; // 1bit

            77 4'd3:rx_temp_data [2] <= rs232_rx; // 2bit

            78 4'd4:rx_temp_data [3] <= rs232_rx; // 3bit

            79 4'd5:rx_temp_data [4] <= rs232_rx; // 4bit

            80 4'd6:rx_temp_data [5] <= rs232_rx; // 5bit

            81 4'd7:rx_temp_data [6] <= rs232_rx; // 6bit

            82 4'd8:rx_temp_data [7] <= rs232_rx; // 7bit

            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 <= 4'd0 ; // STOP ,num

            88 rx_data_r <= rx_temp_data ; // rx_data

            89 end

            90 end

           


          上一頁 1 2 下一頁

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();