国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA開發板DE23-Lite的串口通信設計

友晶FPGA ? 來源:友晶FPGA ? 2025-10-15 10:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1開發板串口簡介

DE23-Lite開發板提供了一個UART通信接口(物理接口是下圖的Type C接口),用戶能夠通過主機與Agilex 3 FPGA進行串口通信

272e8206-a643-11f0-8c8f-92fbcf53809c.png

該接口使用DE23-Lite板載的USB Blaster III電路中的FT2232H芯片作為UART轉USB的橋梁。將USB線連接到DE23-Lite板的Type-C接口和主機之間,即可啟用USB Blaster III和FPGA UART功能,此時無需串行驅動程序,但用戶在使用UART功能前需要確保已安裝USB Blaster III驅動程序。

2790766e-a643-11f0-8c8f-92fbcf53809c.png

連接USB線后,通常在PC設備管理器中會顯示USB Blaster III和一個COM端口號。

27f86828-a643-11f0-8c8f-92fbcf53809c.png

2實驗任務

設計一個串口回環實驗,實現上位機發送數據給開發板串口,串口接收數據后又通過串口發送給上位機。

284feef4-a643-11f0-8c8f-92fbcf53809c.png

串口時序圖如下:

28abb928-a643-11f0-8c8f-92fbcf53809c.png

要求:數據位為8位, 停止位1位,無校驗位,波特率115200bps。

3模塊設計

DE23-Lite的串口回環設計主要是2個模塊:串口發送模塊(發送數據時將并行的數據轉換成串行數據進行傳輸)和串口接收模塊(在接收數據時將接收到的串行數據轉換成并行數據)。

291115a2-a643-11f0-8c8f-92fbcf53809c.png

系統時鐘是50MHz,波特率是115200bps,那么串口發送和接收時,數據的每個位將占用50000000/115200 ≈ 434個時鐘周期。

在串口接收模塊設置一個4狀態的狀態機:

空閑狀態:在空閑狀態下,檢測起始位(低電平)。一旦檢測到起始位,進入START狀態,并設置計數器在半位時間后采樣,這樣可以確保在位的中心點采樣,提高抗噪能力。

起始位檢測狀態:等待半個位周期后,再次檢查線路狀態。如果仍然是低電平,確認是有效的起始位,進入DATA狀態;否則認為是噪聲干擾,返回IDLE狀態。

數據位接收狀態:在每個位周期的中心點采樣數據位,并存入移位寄存器。接收完8位數據后,進入STOP狀態。

停止位處理狀態:等待一個完整的位周期(停止位),然后將接收到的數據輸出,并產生一個時鐘周期的接收完成信號

296577fa-a643-11f0-8c8f-92fbcf53809c.png

接收模塊工程代碼:

moduleuart_rx(
 input clk,
 input rst_n,
 input uart_rx,
 output reg [7:0] rx_data,
 output reg rx_done
);


parameterCLK_FREQ=50000000;
parameterBAUD_RATE=115200;
 
 //波特率計數器
 localparam BAUD_CNT_MAX=CLK_FREQ/BAUD_RATE;
 localparam HALF_BAUD_CNT=BAUD_CNT_MAX/2;
 reg [15:0] baud_cnt;
 
 //狀態定義
 localparam IDLE=2'd0;
 localparam START = 2'd1;
 localparam DATA=2'd2;
 localparam STOP = 2'd3;
 
 reg [1:0] state;
 reg [2:0] bit_cnt;
 reg [7:0] rx_reg;
 reg uart_rx_sync1, uart_rx_sync2;
 
 //同步輸入信號
always @(posedge clkornegedge rst_n)begin
 if(!rst_n)begin
  uart_rx_sync1<=?1'b1;
? ? uart_rx_sync2 <= 1'b1;
??end?else?begin
? ? uart_rx_sync1?<=?uart_rx;
? ? uart_rx_sync2?<=?uart_rx_sync1;
??end
end
? ??
? ??//?狀態機
always @(posedge clk?or?negedge rst_n)?begin
? if(!rst_n)?begin
? ? state?<=?IDLE;
? ? rx_data?<=?8'd0;
? ? rx_done <= 1'b0;
? ? baud_cnt?<=?0;
? ? bit_cnt?<=?0;
? ? rx_reg?<=?0;
??end
??else?begin
? ? rx_done?<=?1'b0; ? ??
? ? case (state)
? ? ? IDLE: begin
? ? ? ? if(uart_rx_sync2 == 1'b0)?begin??//?檢測起始位
? ? ? ? ? state?<=?START;
? ? ? ? ? baud_cnt?<=?HALF_BAUD_CNT?-?1; ?//?半位時間后采樣
? ? ? ??end
? ? ??end
? ? ? ? ? ? ? ??
? ? ??START:?begin
? ? ? ? if(baud_cnt?==?0)?begin
? ? ? ? ? if(uart_rx_sync2?==?1'b0) begin ?// 確認起始位
? ? ? ? ? ? state <= DATA;
? ? ? ? ? ? baud_cnt <= BAUD_CNT_MAX - 1;
? ? ? ? ? ? bit_cnt <= 0;
? ? ? ? ? end
? ? ? ? ? else begin
? ? ? ? ? ? state <= IDLE; ?// 假起始位
? ? ? ? ? end
? ? ? ? end else begin
? ? ? ? ? baud_cnt <= baud_cnt - 1;
? ? ? ? end
? ? ? end
? ? ? ? ? ? ? ??
? ? ? DATA: begin
? ? ? ? if(baud_cnt == 0) begin
? ? ? ? ? rx_reg[bit_cnt] <= uart_rx_sync2;
? ? ? ? ? if (bit_cnt == 3'd7)?begin
? ? ? ? ? ? state?<=?STOP;
? ? ? ? ??end
? ? ? ? ??else?begin
? ? ? ? ? ? bit_cnt?<=?bit_cnt?+?1;
? ? ? ? ??end
? ? ? ? ? baud_cnt?<=?BAUD_CNT_MAX?-?1;
? ? ? ??end?
? ? ? ??else?begin
? ? ? ? ? baud_cnt?<=?baud_cnt?-?1;
? ? ? ??end
? ? ??end
? ? ? ? ? ? ? ??
? ? ? STOP:?begin
? ? ? ? if(baud_cnt?==?0)?begin
? ? ? ? ? rx_data?<=?rx_reg;
? ? ? ? ? rx_done?<=?1'b1;
? ? ? ? ? state <= IDLE;
? ? ? ? end
? ? ? ? else begin
? ? ? ? ? baud_cnt <= baud_cnt - 1;
? ? ? ? end
? ? ? end
? ? endcase
? end
end


endmodule

串口發送模塊同樣設置了一個4狀態的狀態機:

空閑狀態:空閑狀態保持高電平。

起始位發送狀態:發送起始位,低電平。

數據發送狀態:數據位從最低位(LSB)開始發送,這是UART的標準格式。

停止位發送狀態:發送停止位,高電平。

29bee39e-a643-11f0-8c8f-92fbcf53809c.png

串口發送模塊的工程代碼:

module uart_tx(
 input clk,
 input rst_n,
 input tx_start,
 input [7:0] tx_data,
 output reg uart_tx,
 output tx_busy
);


parameterCLK_FREQ =50000000;
parameterBAUD_RATE =115200;
 
  // 波特率計數器
 localparam BAUD_CNT_MAX = CLK_FREQ / BAUD_RATE;
 reg [15:0] baud_cnt;
 wire baud_tick = (baud_cnt ==0);
 
  // 狀態定義
 localparam IDLE =2'd0;
 localparam START = 2'd1;
 localparamDATA=2'd2;
 localparam STOP = 2'd3;
 
 reg [1:0] state;
 reg [2:0] bit_cnt;
 reg [7:0] tx_reg;
 
  // 波特率計數器
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
  baud_cnt <=?0;
??end
??elseif(state != IDLE)?begin
? ??if(baud_cnt ==?0)?begin
? ? ? baud_cnt <= BAUD_CNT_MAX -?1;
? ??end
? ??else?begin
? ? ? baud_cnt <= baud_cnt -?1;
? ??end
??end
??else?begin
? ? baud_cnt <=?0;
??end
end
? ??
? ? // 狀態機
always?@(posedge clk or negedge rst_n)?begin
??if(!rst_n)?begin
? ? state <= IDLE;
? ? uart_tx <=?1'b1;
? ? bit_cnt <= 0;
? ? tx_reg <= 0;
? end
? else begin
? ? case(state)
? ? ? IDLE: begin
? ? ? ? uart_tx <= 1'b1;
? ? ? ??if?(tx_start)?begin
? ? ? ? ? state <=?START;
? ? ? ? ? tx_reg <= tx_data;
? ? ? ??end
? ? ??end
? ? ? ? ? ? ? ??
? ? ??START:?begin
? ? ? ??if(baud_tick)?begin
? ? ? ? ? uart_tx <=?1'b0;
? ? ? ? ? state <= DATA;
? ? ? ? ? bit_cnt <= 0;
? ? ? ? end
? ? ? end
? ? ? ? ? ? ? ??
? ? ? DATA: begin
? ? ? ? if(baud_tick) begin
? ? ? ? ? uart_tx <= tx_reg[bit_cnt];
? ? ? ? ? if (bit_cnt == 3'd7)?begin
? ? ? ? ? ? state <= STOP;
? ? ? ? ??end
? ? ? ? ??else?begin
? ? ? ? ? ? bit_cnt <= bit_cnt +?1;
? ? ? ? ??end
? ? ? ??end
? ? ??end
? ? ? ? ? ? ? ??
? ? ? STOP:?begin
? ? ? ??if(baud_tick)?begin
? ? ? ? ? uart_tx <=?1'b1;
? ? ? ? ? state <= IDLE;
? ? ? ? end
? ? ? end
? ? endcase
? end
end
? ??
? ? assign tx_busy = (state != IDLE);


endmodule

top文件代碼要完成的任務是:

只有在檢測到接收完成信號的上升沿時才啟動發送

只有在發送器不忙時才啟動新的發送

實現了接收數據到發送數據的無縫銜接

moduleDE23_Lite_uart(
 input clk,
 input rst_n,
 input uart_rx,
 output uart_tx
);


/* synthesis keep */wire [7:0] rx_data;
 wire rx_done;
 wire rx_done_rise,tx_start;
 wire tx_busy;
 
 // UART接收模塊
 uart_rx#(
  .CLK_FREQ(50000000),
  .BAUD_RATE(115200)
  ) uart_rx_inst (
  .clk(clk),
  .rst_n(rst_n),
  .uart_rx(uart_rx),
  .rx_data(rx_data),
  .rx_done(rx_done)
 );
 
 // UART發送模塊
 uart_tx#(
  .CLK_FREQ(50000000),
  .BAUD_RATE(115200)
 ) uart_tx_inst (
  .clk(clk),
  .rst_n(rst_n),
  .tx_start(tx_start),
  .tx_data(rx_data),
  .uart_tx(uart_tx),
  .tx_busy(tx_busy)
 );
 
 // 回環控制邏輯
 reg rx_done_reg;
 always @(posedge clkornegedge rst_n)begin
 if(!rst_n) begin
   rx_done_reg <=?1'b0;
? ? end?else?begin
? ? ? rx_done_reg <= rx_done;
? ? end
? end
? ??
? ??// 檢測接收完成的上升沿
? assign rx_done_rise = rx_done && !rx_done_reg;
? ??
? ??// 發送啟動信號
? assign tx_start = rx_done_rise && !tx_busy;


endmodule

仿真代碼:

`timescale1ns/1ps


module DE23_Lite_uart_tb;


 // 輸入
 reg clk;
 reg rst_n;
 reg uart_rx;
 
 // 輸出
 wire uart_tx;
 
 // 測試參數
 parameter CLK_PERIOD =20; // 50MHz時鐘周期
 parameter BIT_PERIOD =8680;// 115200波特率的位周期(1/115200 ≈ 8.68μs)
 
 // 實例化頂層模塊
DE23_Lite_uartuut(
 .clk(clk),
 .rst_n(rst_n),
 .uart_rx(uart_rx),
 .uart_tx(uart_tx)
 );
 
 // 時鐘生成
 always begin
  clk =0;
 #(CLK_PERIOD/2);
  clk =1;
 #(CLK_PERIOD/2);
 end
 
 // 測試任務:發送一個字節
 task send_byte;
  input [7:0] data;
  integer i;
  begin
     // 發送起始位
   uart_rx =0;
  #(BIT_PERIOD);    
     // 發送8個數據位
  for(i =0; i 

modelsim仿真波形:

2a24923e-a643-11f0-8c8f-92fbcf53809c.png

可以看到:

第一個波特位時間內,rx先發送低電平起始位,然后發送8bit數據01010101(低位在前,8'h55),最后發送高電平停止位;tx則一直是高電平。

第二個波特位時間內,rx先發送低電平起始位,然后rx發送第二個測試數據10101010(低位在前,8'hAA),最后發送高電平停止位;tx則接收到8bit數據01010101。

第三個波特位時間內,rx先發送低電平起始位,然后rx接收第二個測試數據11110000(低位在前,8'hF0),最后發送高電平停止位;tx則接收到8bit數據10101010。

第四個波特位時間內,rx先發送低電平起始位,然后rx接收第二個測試數據00001111(低位在前,8'h0F),最后發送高電平停止位;tx則接收到8bit數據11110000。

第五個波特位時間內,rx保持高電平;tx則接收到8bit數據00001111。

Quartus版本選擇:25.1,具體操作參考文章最新版Quartus Prime Pro 25.1 的安裝和使用演示(含Questa仿真)

引腳分配:

2a7c8d5e-a643-11f0-8c8f-92fbcf53809c.png

4下板測試

2ad727c8-a643-11f0-8c8f-92fbcf53809c.png

打開串口工具比如Putty或者是下面截圖所示的XCOM,然后按照如下操作去測試:

選擇正確的COM口

波特率設置為115200

停止位設置為1位

無校驗位

點擊打開串口

在發送窗口隨便發送數據,可以看到上面接收窗口得到同樣的數據顯示,表示測試成功。

2b3dcad2-a643-11f0-8c8f-92fbcf53809c.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1652

    文章

    22258

    瀏覽量

    629429
  • 接口
    +關注

    關注

    33

    文章

    9417

    瀏覽量

    155991
  • 串口通信
    +關注

    關注

    34

    文章

    1656

    瀏覽量

    57589
  • 開發板
    +關注

    關注

    25

    文章

    6092

    瀏覽量

    112354
  • Agilex
    +關注

    關注

    0

    文章

    25

    瀏覽量

    3969

原文標題:2-基于FPGA開發板DE23-Lite的串口通信設計 (FT2232H)

文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于FPGA開發板TSP的串口通信設計

    本文詳細介紹基于Terasic FPGA開發板TSP(又名C5P和OSK)和其板載CP2102N USB-UART橋接芯片的串口通信系統設計與實現。系統采用Verilog HDL編寫U
    的頭像 發表于 10-15 11:05 ?3741次閱讀
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>開發板</b>TSP的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設計

    基于FPGA開發板DE10-Standard和T-Core的串口通信設計

    本文適用于DE10-Standard、T-Core、DE1-SOC以及DE10-Nano等有GPIO引腳外擴的FPGA開發板
    的頭像 發表于 10-28 11:15 ?3468次閱讀
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>開發板</b><b class='flag-5'>DE</b>10-Standard和T-Core的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設計

    基于DE1-SOC開發板的太空射擊游戲

    今天繼續常春藤名校之一——康奈爾大學的FPGA課程ECE 5760典型案例分享:基于DE1-SOC開發板的太空射擊游戲。
    的頭像 發表于 08-04 10:47 ?3387次閱讀
    基于<b class='flag-5'>DE</b>1-SOC<b class='flag-5'>開發板</b>的太空射擊游戲

    出售DE2-70 FPGA開發板

    開發板型號為友晶DE2-70,FPGA為EP2C70,本人于2010年購入,現長期閑置,故打算出售。有意者可QQ聯系,價格面議。聯系QQ:26638773
    發表于 02-12 00:37

    Altera DE2 開發板測試說明

    1 安裝 Quartus II 5.1 Web Edition Full;2 將 DE2 System 光盤中的全部內容復制到PC 機上,其中DE2_control_panel文件夾內容最為重要;3 將開發板的電源和 USB 線
    發表于 07-21 16:35 ?0次下載

    fpga開發板電路圖

    最全面的fpga開發板電路圖,一共有10多份fpga開發板電路圖。
    發表于 04-19 12:50 ?133次下載
    <b class='flag-5'>fpga</b><b class='flag-5'>開發板</b>電路圖

    基于FPGA了解DE2開發板

    DE2 是以CycloneII 2C35FPGA為特點的672 針引腳的包裝。上所有重要的部件都與上的芯片相連,使用戶能夠控制
    發表于 09-01 16:32 ?25次下載
    基于<b class='flag-5'>FPGA</b>了解<b class='flag-5'>DE</b>2<b class='flag-5'>開發板</b>

    fpga開發板用途,fpga開發板價格

    (host),一個是目標平臺(target)即開發板。在此描述的開發平臺指的是使用計算機,通過傳輸的界面,例如串口(RS-232)、USB、并口、或者網絡(Ethernet)與目標平臺連接,f
    發表于 10-23 17:18 ?4720次閱讀

    ALTERA公司的DE1 SoC FPGA開發板的培訓教程免費下載

    本文檔的主要內容詳細介紹的是ALTERA公司的DE1 SoC FPGA開發板的培訓教程免費下載包括了:第1章 DE1-SOC 快速入門,第2章 DE
    發表于 07-08 08:00 ?35次下載
    ALTERA公司的<b class='flag-5'>DE</b>1 SoC <b class='flag-5'>FPGA</b><b class='flag-5'>開發板</b>的培訓教程免費下載

    使用小凌派開發板wifi進行tcp通信的步驟

    開發過程中想要與開發板進行通信一般使用串口通信,當開發板使用
    的頭像 發表于 05-16 09:35 ?2852次閱讀

    上位機和FPGA開發板--串口通信實驗

    首先,上位機發送數據給FPGA開發板;然后,FPGA開發板收到數據,再回發給上位機。
    發表于 05-11 18:26 ?12次下載
    上位機和<b class='flag-5'>FPGA</b><b class='flag-5'>開發板</b>--<b class='flag-5'>串口</b><b class='flag-5'>通信</b>實驗

    基于STM32F4開發板的激光測距模塊串口通信(三)

    在我們使用外設時怎樣將外設的數據返回給開發板呢? 今天以STM32F4開發板為例,講解激光測距模塊如何通過串口通信將數據發送給開發板。PS
    發表于 05-17 09:50 ?7次下載
    基于STM32F4<b class='flag-5'>開發板</b>的激光測距模塊<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(三)

    fpga開發板與linux開發板區別

    FPGA開發板與Linux開發板是兩種不同的硬件開發平臺,各自具有不同的特點和應用場景。在以下的文章中,我將詳細介紹FPGA
    的頭像 發表于 02-01 17:09 ?3907次閱讀

    fpga開發板使用教程

    FPGA開發板的使用教程主要包括以下幾個關鍵步驟。
    的頭像 發表于 03-14 15:50 ?2365次閱讀

    fpga開發板是什么?fpga開發板有哪些?

    FPGA開發板是一種基于FPGA(現場可編程門陣列)技術的開發平臺,它允許工程師通過編程來定義和配置FPGA芯片上的邏輯電路,以實現各種數字
    的頭像 發表于 03-14 18:20 ?4334次閱讀