小梅哥和你一起深入學習FPGA之串口調試(一)(下)

2021-01-08 電子產品世界

  以上為小梅哥為了對特權同學的串口收發模塊進行測試所展開的部分工作,到這裡,仿真測試所需要的準備工作我們就做好了,接下來將實際進行仿真,通過仿真來分析該模塊的性能。

本文引用地址:http://www.eepw.com.cn/article/283060.htm

  這裡極力推薦大家使用modelsim進行仿真,因為quartusII自帶的仿真工具靈活性和功能都趕modelsim相差甚遠。Modelsim作為一款強大的仿真軟體,在業界被廣泛使用。同時,modelsim針對不同的EDA廠家,也推出了OEM版本,modelsim-altera就是為Altera公司開發的OEM版本,此版本針對Altera公司的器件預先做了許多的工作,使我們使用的時候能夠更加的快捷方便,這裡,小梅哥就使用modelsim-Altera版本來仿真這個設計。

  我們可以使用modelsim-Altera,通過完全手動化的方式來建立仿真工程,添加仿真庫、編譯文件,添加波形,運行仿真,當然也可以使用Nativelink的方式,通過quartus II軟體實現一鍵調用,實現自動化的仿真過程。這裡,對於初學者,小梅哥還是推薦採用這種自動化的方式,因為簡單,不需要過多的手動操作,且不容易出錯。這裡,小梅哥也使用這種方式來進行仿真。

  要使用這種方式仿真,我們需要在QuartusII軟體中進行EDA Tools的設置。在quartus II軟體中,依次點擊「tools – options 」,在打開的選項卡中選擇「EDA tool options」,在modelsim-altera一欄中輸入你的modelsim-Altera的安裝路徑(部分在安裝的時候就已經自動設置好了,就不用去管),如下圖所示:

    

 

  這裡設置完成後,點擊OK即可。

  當確認這一步沒有問題後,我們就可以開始進行Nativelink的設置了。Nativelive就是一個連結的過程,通過設置Nativelink,讓Quartus II軟體能夠自動的調用modelsim-altera軟體,並建立仿真工程,添加仿真庫、編譯文件,添加波形,運行仿真。接下來我們就來進行Nativelink的設置

  第一步:依次點擊「assignments– settings」,

    

 

  在彈出的選項卡中,選中「EDA Tool Settings」(紅色標號1處),在子選項中選擇「Simulation」(紅色標號2處),注意紅色標號5處和6處應分別選擇為modelsim-altera和Verilog HDL,如果不是,請通過下拉列表選擇為上述選項。點擊「Compile test bench」 (紅色標號3處),然後點擊最右側的「Test Benchs」 (紅色標號4處),就會彈出如下所示的界面:

    

 

  點擊「New」 (紅色標號1處),接著會彈出「New Test Bench Settings」界面,如下圖所示:

    

 

  首先我們點擊紅色標號1處的三個小點,在彈出的文件選擇界面中,選中我們需要加入的testbench文件,如下所示:

    

 

  這裡我們選擇「Uart_tb.v」和「Uart_module.v」,點擊「Open」打開。這裡,「Uart_tb.v」為仿真頂層文件,「Uart_module.v」為串口仿真模型。

  文件選擇好之後,回到New Test Bench Settings界面,如下圖所示,

    

 

  在頂端「test bench name」(紅色標號2)處輸入我們的仿真頂層文件名,即Uart_tb,注意,不要加「.v」後綴。於是,」Top level module in test bench」會自動與「Test bench name」保持一致。

  至此,我們的Nativelink設置就完成了,一路選擇OK下去,直到回到Quartus II軟體的主界面。此時,我們已經完成了仿真需要的所有設置,我們直接點擊Quartus II軟體上的RTL Simulation圖標

    

 

  即可啟動仿真,也可以通過「Tools– Run Simulation Tool – RTL Simulation」啟動仿真。

  接下來,我們需要做的就是大約20秒左右的等待,這個過程中,Quartus II會自動啟動modelsim-altera軟體,建立仿真工程,添加仿真庫、編譯文件,添加波形,運行仿真。最後停留在如下所示的狀態:

    

 

  這裡,右側深色窗口為波形窗口,下方為副本界面,列印了軟體運行過程中的信息,包括添加文件、編譯文件、添加波形、運行等,同時還列印了testbench中需要列印輸出的信息。具體的列印信息如下:

    

 

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

    

 

  這裡小梅哥就有點疑惑了,我們一般的應用中,串口一幀的數據為十位,包含1位起始位、8位數據位、一位停止位,一般不含校驗位。因此,這裡明顯多了兩個波特率周期,那麼,問題很有可能就出在這裡。回到這部分的代碼:

  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//我們的標準接收模式下只有1+8+1(2)=11bit的有效數據

  87 num <= 4'd0 ; // STOP ,num

  88 rx_data_r <= rx_temp_data ; // rx_data

  89 end

  90 end

 

相關焦點

  • 小梅哥和你一起深入學習FPGA之PS2鍵盤驅動
    新朋友點上方藍字「EDN China」快速關注在我們的電子系統中,當需要用到大量的按鍵輸入時,普通的獨立按鍵和矩陣鍵盤已經無法滿足我們的輸入需求在pc機上,我們經常使用104鍵的鍵盤,這種鍵盤與pc機的接口,可分為USB接口和PS2接口,我們FPGA要實現USB接口比較困難,因為USB的接口線路,不是標準的TTL電平,而PS2接口,則使用標準的TTL電平,那麼我們今天就使用FPGA來解碼驅動一個採用PS2接口的pc機鍵盤,用這個鍵盤來擴展我們FPGA的輸入系統,以使我們能夠方便的輸入更多的信息。
  • 利用VSPD、串口調試助手、Keil做串口調試
    下面詳細介紹下如何用虛擬串口調試串口發送接收程序。把KEIL和虛擬出來的串口綁定。現在把COM3和KEIL綁定。在KEIL中進入DEBUG模式。
  • 6個步驟 讓你成為FPGA設計高手
    目前FPGA應用較多的是Altera和xilinx這兩個公司,可以選擇安裝quartusII或者ISE軟體。這是必備的軟體環境。硬體環境還需要下載器、目標板。雖然有人說沒有下載器和目標板也可學習fpga,但那總是紙上談兵。這就像談女朋友,總是嘴上說說,通個電話,連個手都沒牽,能說人家是你朋友?
  • 串口調試助手
    串口調試助手 生活工具
  • 串口伺服器調試方法_口伺服器怎麼設置
    MOXA串口伺服器有多種型號,其中最常用的要數5130、5232等基本型號。其功能強大性能穩定深的用戶喜愛。在此我們就5130這個型號看一看MOXA串口伺服器的基本調試方法串口伺服器如何調試是很多用戶入手新產品時必須要考慮的問題。解析如何調試設備。 第一步,硬體連接。
  • Python版串口調試助手
    作為一名嵌入式軟體開發工程師,串口是比較常用的一個外設,雖然網上能找到各種五花八門的串口工具,但是有時候測試時,難免需要根據產品來進行定製化。而Python就能很好的勝任,它簡單功能強大。下面是我自己根據自己的需求定製的一款串口調試工具,僅供學習使用,滿足自己的需求即可。
  • 如何用ESP32簡單進行藍牙串口調試!
    與非網電路城論壇 發表於 2020-05-01 11:17:00 串口調試工具對於廣大電子工程師和電子愛好者來說再熟悉不過了,常見的有USB轉TTL串口線,另外還有一些無線串口調試工具
  • 【實例】如何用串口軟體調試變頻器?
    每一個做工控的都必須要會利用串口調試軟體來和我們的外圍設備來做通訊測試。今天我們就來學習怎麼用串口調試軟體控制臺達的這款變頻器。廢話不多說,直接進入正題。 首先我們要準備好USB轉RS-232的串口線和RS-232轉RS485的模塊,或者USB直接轉RS485也行。
  • 中標麒麟作業系統串口調試方法研究
    串口作為一種廣泛應用的計算機接口,計算機對設備進行通信控制幾乎都是通過串口進行的。在中標麒麟作業系統下進行串口調試與Windows不同,本文將介紹兩種中標麒麟作業系統下的串口調試方法。本文引用地址:http://www.eepw.com.cn/article/148103.htm1串口編程在任何作業系統下,串口調試程序的編寫都是按照打開串口設備、初始化串口和串口讀寫操作的步驟進行[2]。1.1打開串口中標麒麟作業系統與Linux系統類似都是基於文件的,把硬體設備都看作文件,對硬體設備進行操作,就是對設備文件的操作[3]。
  • Proteus-PIC-虛擬串口---串口調試仿真
    1、準備工作本文引用地址:http://www.eepw.com.cn/article/201609/296524.htm  首先,需要準備齊全的軟體:①Proteus;②MPLAB;③串口調試助手;④虛擬串口Virtual Serial Port Driver  2、繪製簡單電路圖
  • 「實例」如何用串口軟體調試變頻器?
    每一個做工控的都必須要會利用串口調試軟體來和我們的外圍設備來做通訊測試。今天我們就來學習怎麼用串口調試軟體控制臺達的這款變頻器。廢話不多說,直接進入正題。串口調試軟體這邊的通信參數要設置成和變頻器一樣。
  • 沒有真實串口設備時使用"虛擬串口驅動"調試你的串口代碼
    代碼,但是又沒有真實串口設備來調試代碼。以及本身就是要操作2個串口的情況,可以使用「虛擬串口驅動」工具方便的調試代碼。「COM1 <-> COM2」是一組總結有時候需要調試串口代碼,但每次接設備進行調試很麻煩,使用「虛擬串口驅動」工具不僅可以用來調試代碼,甚至可以做到單元測試裡面。
  • labview串口調試
    1.labview對串口進行調試時,首先需要安裝visa驅動,可在NI的官方網站上下載,不過速度好像不是很快。 2.最簡模式下進行串口程序接收。如圖:然後在最右邊接一個字符串接受區就可以接受到串口發送的數據了。
  • DIY一款4路USB轉TTL串口調試模塊
    本打算淘寶選購4路USB轉TTL串口調試模塊,均價在60RMB.遂決定DIY一款4路USB轉TTL串口調試模塊~USB轉TTL串口調試模塊需要將電腦輸入由於輸入輸出間的電壓差很小和靜態偏置電流很小,這些器件特別適用於希望延長電池壽命的電池供電類產品,如計算機、消費類產品和工業設備等。
  • 9年FPGA工作經驗,轉行了,苦海無涯……
    工作了9年的fpga,總要總結…… 其實說我的fpga經驗,也是一坨屎。三年的,用altera的c3和c4 做led控制卡。2年的用lattice的MACHXO-XO2和ECP2做了視頻和網絡光端機,3年的XILINX的SPARTAN 6 做了視頻ISP處理,現在一年的xilinx的ZYNQ做機器視覺。
  • 開源軟體分享-基於WPF的串口調試工具
    最近同事在調試硬體的串口通訊功能,由於PLC暫時還沒到,所以準備用USB轉串口線連接在終端上,通過電腦USB口模擬串口收發功能。一開始同事下載了一款串口調試工具,發現沒有自定義功能,比如通訊串口收到終端發送的數據,需要自動應答對應指令數據(ModBus 主從問答方式)。
  • 有關Keil軟體仿真的51單片機串口調試技巧
    傳統方式串口程序的調試,往往是利用專用的單片機硬體仿真器。在編寫好程序後,利用仿真器來設置斷點,觀察變量和程序的流程,逐步對程序進行調試,修正錯誤。使用硬體仿真器的確是很有效的方法,但是也有一些缺點:  很多仿真器不能做到完全硬體仿真,因而會造成仿真時正常,而實際運行時出現錯誤的情況;也有仿真不能通過,但是實際運行正常的情況。
  • 串口伺服器配置及串口調試的6大技巧
    在使用終端伺服器之前,必須在連接和使用系統之前根據自己的操作環境和應用程式要求配置參數。這些參數主要包括網絡參數,每個串行埠的操作模式,列印服務以及設備本身的管理信息和其他內容。連接短插針2和3,並使用串行調試助手手動發送一個(或多個)字節。如果接收區域可以接收相同的字節,則表示串行埠良好,並且可以正常工作;否則,串口有問題。添加串行伺服器後,無論交叉還是直接連接,該方法仍然可以應用。
  • 串口調試助手源程序
    1.建立項目2.在項目中插入MSComm控制項3.利用ClassWizard定義CMSComm類控制變量4.在對話框中添加控制項5.添加串口事件消息處理函數
  • 工程師筆記|串口調試只能待在機房?這份遠程操作請查收!
    奈何串口調試是IT運維工程師經常遇到的一個場景。由於串口傳輸的特性,很多時候都需要工程師通過串口將自己的筆記本連接到待調試設備上,然後在機房裡進行各種嘗試,可能是幾個小時,也可能是一整天,直到設備成功調試完成為止。只要串口調試,就得進機房,只要進機房,就可能感冒。怎麼辦?