0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)現(xiàn)穩(wěn)健的微控制器到FPGA SPI接口: 雙緩沖區(qū)!

得捷電子DigiKey ? 來源:得捷電子DigiKey ? 2024-05-16 09:36 ? 次閱讀

問:實(shí)現(xiàn)穩(wěn)健的微控制器FPGA SPI 接口: 雙緩沖區(qū)

在介紹雙緩沖器之前,我們將簡要探討Verilog 脈寬調(diào)制器 (PWM) 的工作原理。這一點(diǎn)很重要,因?yàn)殡p緩沖區(qū)最好被看作是硬件模塊 (如 PWM) 的可尋址接口。

PWM 的回顧

PWM 模塊的頂層接口在這個 Verilog 代碼片段中描述。觀察該模塊使用了位寬參數(shù),并建立了最小和最大占空比限制。最后,觀察PWM模塊有一個[B - 1:0]輸入矢量來設(shè)置占空比。沒有顯示的是在每個 PWM 占空比開始時讀取輸入的事實(shí)。

module PWM #(parameter

B = 12,

D_MIN_PERCENT = 0,

D_MAX_PERCENT = 95

)

(

input wire clk,

input wire enable,

input wire [B -1:0] d_in,

output reg PWM,

output reg [B -1:0] cnt

);

同步數(shù)據(jù)呈現(xiàn)

PWM 設(shè)計用于在更大的 uC 到 FPGA SPI 系統(tǒng)中工作?;叵胍幌拢琒PI自然地使用字節(jié)寬度的數(shù)據(jù)元素進(jìn)行操作。這與使用B定義的數(shù)據(jù)寬度操作的PWM形成鮮明對比。為了方便,我們假設(shè) PWM 以16位的位寬度(B)實(shí)例化。

當(dāng)系統(tǒng)更新與 PWM 輸入相關(guān)的寄存器時,會出現(xiàn)一個問題。如果沒有適當(dāng)?shù)淖⒁?,PWM 可能會在更新過程中執(zhí)行讀取操作。其結(jié)果是驅(qū)動器字節(jié)被分割成一個舊字節(jié)和一個新字節(jié)。這可能導(dǎo)致占空比的顯著躍升,持續(xù)一個 PWM 周期。如果 PWM 用于LED 指示燈,則可能不會注意到這一點(diǎn)。在更復(fù)雜的系統(tǒng)中,故障相當(dāng)于一個強(qiáng)脈沖,并可能導(dǎo)致系統(tǒng)響鈴或變得不穩(wěn)定,具體取決于錯誤發(fā)生的時間和頻率。

解決方案是實(shí)現(xiàn)以下三篇文章中提到的雙緩沖方案,后面將進(jìn)行深入討論。

第1 部分介紹了指導(dǎo)大型系統(tǒng)開發(fā)的 Verilog 設(shè)計理念。這是介紹寄存器傳輸電平 (RTL) 設(shè)計準(zhǔn)則的關(guān)鍵部分,如時鐘邊界、頻閃器的使用和雙緩沖區(qū)的必要性。

第2部分介紹了 SPI 協(xié)議?;叵胍幌拢x協(xié)議改編自802.3以太網(wǎng)幀,具有可變有效載荷長度和循環(huán)冗余校驗(yàn) (CRC) 等概念,以提供數(shù)據(jù)完整性的度量。

第3部分介紹了 uC 到 FPGA 接口的高級視圖。那篇文章中最重要的部分是這里重復(fù)的框圖。

使用一組寄存器來捕獲單個字節(jié)。當(dāng)收集到完整的n字節(jié)數(shù)據(jù)時,更新第二個更寬的寄存器。第二個寄存器-雙緩沖區(qū)-然后用于驅(qū)動其他模塊,如代表性的 PWM。

雙緩沖模塊

雙緩沖模塊的框圖如圖1所示。在內(nèi)部,它由四個主要部分組成。最重要的是輸出寄存器。在這個例子中,它是16位寬,使其適合驅(qū)動16位 PWM。輸出寄存器由單個8位寄存器驅(qū)動,在本例中它們被標(biāo)記為 LSB 和 MSB。注意,所有的寄存器更新都是由雙緩沖區(qū)的控制部分發(fā)起的。這是一個同步操作,其中所有元素響應(yīng)主 100mhz時鐘的滴答聲。

04f2c404-12c9-11ef-a297-92fbcf53809c.png

1:雙緩沖區(qū)的框圖,顯示了單個8位緩沖區(qū)與輸出緩沖區(qū)之間的關(guān)系。

重要的是要理解,每個雙緩沖區(qū)模塊都是用特定的地址和特定的字節(jié)寬度實(shí)例化的,如下面的代碼清單所示。注意,16位地址、8位數(shù)據(jù)和寫頻閃都涉及到加載緩沖區(qū)。當(dāng)16位地址輸入與實(shí)例化地址匹配時,數(shù)據(jù)傳輸就開始了。

module

double_buffer #(

parameterBYTE_WIDTH = 2,

parameterBASE_ADDRESS = 16'h0200

) (

input wire clk,

input wire [7:0]data,

input wire [15:0]address,

input wirewrite_strobe,

output reg [((8 *BYTE_WIDTH) - 1): 0] double_buffer_out,

output regnew_data_strobe

);

如圖1所示,這個 uC 到 FPGA 接口有一個底層的8位傳輸過程。在這文章中首先介紹的命令幀中也隱含了一個連續(xù)寫入操作。為了方便起見,這里將命令幀重復(fù)為圖2。作為一個例子,讓我們假設(shè) PWM 和相關(guān)的雙緩沖區(qū)以地址0x0200實(shí)例化。命令幀的寫地址將被設(shè)置為0x0200,負(fù)載的前兩個字節(jié)將保持所需的16位 PWM 值。

05166148-12c9-11ef-a297-92fbcf53809c.png

2:構(gòu)成uC到FPGA SPI協(xié)議基礎(chǔ)的命令和響應(yīng)幀。

當(dāng)接收并驗(yàn)證命令幀時,MSG 寫塊將斷言地址0x0200,該地址指向 PWM 的雙緩沖區(qū)。它將把第一個有效載荷字節(jié)放到數(shù)據(jù)總線上。最后,它將為一個時鐘周期斷言寫頻閃。這將加載如圖1所示的 MSB (大端)。

繼續(xù)進(jìn)行連續(xù)寫入,MSG 寫入器向前推進(jìn)地址,斷言下一個數(shù)據(jù)字節(jié),然后脈沖寫入頻閃,從而將 LSB 加載到雙緩沖區(qū)中。這個過程對命令幀中的每個字節(jié)繼續(xù)進(jìn)行,由幀的字節(jié)長度字段控制。

從本質(zhì)上講,消息編寫器并不了解相關(guān)的雙緩沖區(qū)的長度。它只關(guān)心斷言地址、數(shù)據(jù)和寫頻閃的三步過程。這取決于雙緩沖區(qū)模塊來理解它們何時被尋址,以及何時接收到 BYTE_WIDTH 參數(shù)指定的必要字節(jié)數(shù)。

由于雙級緩沖區(qū)的基址和字節(jié)寬度在實(shí)例化時是已知的,因此很容易確定何時接收到所有字節(jié)。在這個 PWM 示例中,雙緩沖器計數(shù)到2,然后發(fā)送一個頻閃來加載輸出寄存器。

技術(shù)貼士: 數(shù)據(jù)可能首先訪問最高有效字節(jié) (MSB) 或最低有效字節(jié) (LSB)。描述順序的術(shù)語是“端序” (endian)。如果 MSB 先出現(xiàn),則系統(tǒng)為大端序。如果 LSB 是第一個,則系統(tǒng)是小端序的。本文描述的雙緩沖區(qū)和關(guān)聯(lián)幀是大端序。

雙緩沖區(qū)代碼

雙緩沖區(qū)的 Verilog 代碼附在本注釋的末尾。代碼緊跟圖2的框圖,理解它可以擴(kuò)展到n字節(jié)的寬度。這可以通過更改 BYTE_WIDTH 參數(shù)來實(shí)現(xiàn)。

這段代碼的關(guān)鍵是 Verilog 生成操作符的使用。回想一下,generate特性允許迭代地生成硬件。它的運(yùn)作方式就像一個制造小部件的工廠。

除了,在這種情況下,我們正在制作8位寄存器,其程序集的總數(shù)等于 BYTE_WIDTH 參數(shù)。我們可以在 Vivado 分層設(shè)計窗口中看到這一點(diǎn),如圖3所示。這些“制造”的塊與它們在生成循環(huán)中定義的連續(xù)命名方案一起出現(xiàn)。

0536e7b0-12c9-11ef-a297-92fbcf53809c.png

3:在雙緩沖區(qū)實(shí)例化中可以看到生成的字節(jié)寬度寄存器。

觀察每個生成的9位寄存器都包含一個對應(yīng)的 local_write_strobe。這是一個重要的設(shè)計方面,因?yàn)?“control”部分使用它來加載相關(guān)的8位寄存器。

除了寄存器之外,生成循環(huán)還制造一個8位矢量,每個8位寄存器的輸出都連接到這個矢量上。然后將這些N × 8位的包連接起來并傳遞到n字節(jié)輸出寄存器。

代碼的最后一部分確定n字節(jié)何時被收集。然后它更新輸出寄存器并發(fā)送一個new_data_strobe。

控制部分有三個基本功能:

當(dāng)基址與實(shí)例化地址匹配時激活模塊。

維護(hù)一個計數(shù)器指向“制造的”8位寄存器。這個計數(shù)器對于連續(xù)寫入是必不可少的。

對相關(guān)的8位寄存器進(jìn)行頻閃。

當(dāng)N個8位寄存器被填滿時,對輸出緩沖區(qū)進(jìn)行頻閃。

技術(shù)貼士:矢量是導(dǎo)線的一維數(shù)組。一個例子是“input wire [15:0] address”,它定義了一個16位的名為 address 的矢量。

結(jié)語

最后,雖然這段代碼確實(shí)很復(fù)雜,但 Verilog 生成操作符提供了很大的靈活性。它消除了為每個期望的字節(jié)寬度構(gòu)建獨(dú)立模塊的需要。


審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5424

    瀏覽量

    123466
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    2037

    瀏覽量

    46659
  • LED指示燈
    +關(guān)注

    關(guān)注

    2

    文章

    94

    瀏覽量

    13212
  • SPI接口
    +關(guān)注

    關(guān)注

    0

    文章

    262

    瀏覽量

    35299
  • 脈寬調(diào)制器
    +關(guān)注

    關(guān)注

    1

    文章

    75

    瀏覽量

    17241

原文標(biāo)題:實(shí)現(xiàn)MCU到FPGA SPI接口有一個好選項(xiàng):用雙緩沖器!

文章出處:【微信號:得捷電子DigiKey,微信公眾號:得捷電子DigiKey】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    SPI接口如何實(shí)現(xiàn)微控制器之間的通信

    微控制器接口側(cè)配有一個通用同步和異步收發(fā) (USART)、一個 I2C 兼容型雙線接口 (TWI) 和 SPI。USART 可配置為第
    發(fā)表于 08-02 11:24 ?3027次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>接口</b>如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>微控制器</b>之間的通信

    L9663如何使用上行緩沖區(qū)發(fā)送同步脈沖?

    我根據(jù)L9663 Datasheet這個手冊,想使用這個配置“通過帶有上行數(shù)據(jù)緩沖區(qū)SPI觸發(fā)。微控制器發(fā)送相應(yīng)的SPI命令以發(fā)送同步脈沖。然后,同步脈沖觸發(fā)發(fā)生
    發(fā)表于 03-13 08:15

    采用FT245BM和FPGA實(shí)現(xiàn)USB接口設(shè)計

    USB數(shù)據(jù)與并行I/O口數(shù)據(jù)的交換緩沖區(qū)。FIFO實(shí)現(xiàn)與外界(微控制器、FPGA或其它器件)的接口,主要通過8根數(shù)據(jù)線D0~D7、讀寫
    發(fā)表于 04-22 07:00

    采用FT245BM和FPGA實(shí)現(xiàn)USB接口設(shè)計

    USB數(shù)據(jù)與并行I/O口數(shù)據(jù)的交換緩沖區(qū)。FIFO實(shí)現(xiàn)與外界(微控制器、FPGA或其它器件)的接口,主要通過8根數(shù)據(jù)線D0~D7、讀寫
    發(fā)表于 04-26 07:00

    基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計方案

    CPU用戶手冊,在FPGA端編寫相應(yīng)的接口代碼來配合ARM CPU2端的讀寫時序實(shí)現(xiàn)。 下面重點(diǎn)介紹環(huán)形緩沖區(qū)接口的軟件
    發(fā)表于 05-30 05:00

    UART緩沖技術(shù):友好中斷

    UART對于業(yè)余和專業(yè)項(xiàng)目都是很好的傳輸協(xié)議,但是在時間緊迫的系統(tǒng)中,UART可能很棘手。UART(通用異步接收傳輸)是微控制器在其他微控制器和計算機(jī)之間進(jìn)行接口的一種流行協(xié)議。使用高速微控制
    發(fā)表于 09-19 08:32

    請問如何實(shí)現(xiàn)微控制器FPGA接口設(shè)計?

    基于FPGA的MCU設(shè)計有兩種基本實(shí)現(xiàn)方式如何實(shí)現(xiàn)微控制器FPGA接口設(shè)計
    發(fā)表于 05-06 10:05

    什么是緩沖區(qū)模式?

    什么是緩沖區(qū)模式?
    發(fā)表于 12-08 07:05

    什么是緩沖區(qū)模式?

    什么是緩沖區(qū)模式?
    發(fā)表于 02-28 10:09

    環(huán)形緩沖區(qū)實(shí)現(xiàn)原理

    在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)的互斥訪問。
    的頭像 發(fā)表于 03-22 10:03 ?7822次閱讀
    環(huán)形<b class='flag-5'>緩沖區(qū)</b>的<b class='flag-5'>實(shí)現(xiàn)</b>原理

    緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)

    緩沖區(qū)顧名思義是緩沖數(shù)據(jù)用的。實(shí)現(xiàn)緩沖區(qū)最簡單的辦法時,定義多個數(shù)組,接收一包數(shù)據(jù)數(shù)組A,就把接收數(shù)據(jù)的地址換成數(shù)組B,每個數(shù)據(jù)有個標(biāo)記字
    的頭像 發(fā)表于 07-22 15:33 ?1.1w次閱讀

    STM32微控制器上的Octo-SPI接口

    STM32微控制器上的Octo-SPI接口
    發(fā)表于 11-21 08:11 ?4次下載
    STM32<b class='flag-5'>微控制器</b>上的Octo-<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>

    環(huán)形緩沖區(qū)實(shí)現(xiàn)思路

    單片機(jī)程序開發(fā)一般都會用到UART串口通信,通過通信來實(shí)現(xiàn)上位機(jī)和單片機(jī)程序的數(shù)據(jù)交互。通信中為了實(shí)現(xiàn)正常的收發(fā),一般都會有對應(yīng)的發(fā)送和接收緩存來暫存通信數(shù)據(jù)。這里使用環(huán)形緩沖區(qū)的方式來設(shè)計數(shù)據(jù)收發(fā)的緩存,即
    的頭像 發(fā)表于 01-17 15:07 ?2003次閱讀

    C++環(huán)形緩沖區(qū)設(shè)計與實(shí)現(xiàn)

    的存儲空間。環(huán)形緩沖區(qū)的特點(diǎn)是其終點(diǎn)和起點(diǎn)是相連的,形成一個環(huán)狀結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)在處理流數(shù)據(jù)和實(shí)現(xiàn)數(shù)據(jù)緩存等場景中具有廣泛的應(yīng)用。 環(huán)形緩沖區(qū)的主要作用是存儲和管理數(shù)據(jù)
    的頭像 發(fā)表于 11-09 11:21 ?2939次閱讀
    C++環(huán)形<b class='flag-5'>緩沖區(qū)</b>設(shè)計與<b class='flag-5'>實(shí)現(xiàn)</b>

    RTOS的流緩沖區(qū)機(jī)制解析

    SAFERTOS中的流緩沖區(qū)(Stream buffer)機(jī)制,可以實(shí)現(xiàn)任務(wù)到任務(wù)或中斷到任務(wù)之間的通信。字節(jié)流是由發(fā)送方寫入緩沖區(qū),接收方讀取緩沖區(qū)數(shù)據(jù)。流
    的頭像 發(fā)表于 02-14 11:33 ?452次閱讀
    RTOS的流<b class='flag-5'>緩沖區(qū)</b>機(jī)制解析

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品