初試高雲FPGA

来源:https://www.cnblogs.com/maaaaark/archive/2022/12/18/16990371.html
-Advertisement-
Play Games

前言 之前一直眼饞Sipeed的Tang系列,正好遇到有工程需要高速控制並行匯流排,就買了NANO 9K和Primer 20K試試水 買回來先拆的貴的20k,結果發現Sipeed設計師有奇怪的腦迴路: 核心板沒有指示燈,沒有集成下載器 tf卡在核心板與底板中間藏著,JTAG絲印在背面 JTAG介面和官 ...


前言

之前一直眼饞Sipeed的Tang系列,正好遇到有工程需要高速控制並行匯流排,就買了NANO 9K和Primer 20K試試水
買回來先拆的貴的20k,結果發現Sipeed設計師有奇怪的腦迴路:

  • 核心板沒有指示燈,沒有集成下載器
  • tf卡在核心板與底板中間藏著,JTAG絲印在背面
  • JTAG介面和官方下載器需要扭麻花形式連接
  • 調整供電bank需要手動拆除0R電阻。
  • 板載晶振27MHz,很奇怪的頻率
    image
    image
    image

結果就是失去了調試的興趣,隨便寫了個分頻器輸出1pps脈衝了事。

之後拆了NANO 9K,這個就比20K好用多了,板載一串LED,雖然一些板載資源占用了IO,但還是比較方便調試的。
image

Sipeed還有個問題就是,常式太少,點燈、點屏幕,沒了。好在高雲的手冊比較多,雖然各個功能的手冊是分別發佈的,沒有系統教程,但好在詳細。摸索了一天,算是明白了這個工具要怎麼用,因此先寫一篇博客記錄一下。

軟體準備

  1. 前往高雲官網下載軟體和各種參考手冊。推薦使用教育版,不用申請license。
  2. 安裝下載好的雲源軟體,我安裝的1.9.8.09教育版,有的教程說要另外下載programmer,該版本已自帶。軟體安裝問題可以參考SUG501手冊。
  3. 打開軟體,界面功能問題可以參考SUG100手冊。
  4. 新建工程,點燈測試,詳見Sipeed點燈常式
  5. 綜合、約束、下載之類的基礎操作在常式中已有詳解,這裡列一下可能用到的手冊
    • 綜合問題在SUG550
    • 約束在SUG935和SUG940
    • 下載在SUG502
    • 其他高級功能樣例在SUG918,所有功能有獨立說明手冊
      所以說高雲手冊雖然不系統,但好在很詳細

IP核調用

IP核怎麼調用,沒有專門教程參考,僅在SUG100中放了個界面。各各IP核手冊中也只是用Verilog或VHDL實例化原語,搞得我這Verilog入門菜鳥一頭霧水。在此隨手記錄一下IP核調用方式。

項目目標

點燈教程中系統時鐘來自於板載時鐘27MHz,這個時鐘我猜測是為了保留3M時鐘基頻,以便精確PLL出如21M、12M、24M等時鐘(那為什麼不用21M時鐘,還包含7M基頻)。

但是我看27MHz不順眼,於是項目目標就是,利用GW1NR-9C自帶的可編程時鐘,產生一個25MHz頻率,再用這個25MHz進PLL產生100MHz時鐘,同時把25MHz用緩衝器輸出到引腳上,以檢測板子的信號完整性。最後固化到內部Flash,完成燒錄與離線運行。

這樣,該項目檢測了邏輯單元、IO、IO速率、PLL、CLK,只剩下DSP、SRAM和一些PHY沒測試了,之後可以寫一個DDS工程,測一下DSP和SRAM。

IP核配置

  1. 首先是打開IP核界面,選擇時鐘模型,選擇OSC,雙擊
    image
  2. 可以看到內部可編程時鐘的配置是很簡單的,只需要填一個分頻數就好。該IP核的詳細說明見UG286,具體搭載的時鐘原頻率是多少,不要參考軟體中IP核的說明,要參考IC的Datasheet,如GW1NR-9的DS117的晶振時鐘章節
    image
    image
  3. 軟體自動生成verilog文件,自己也可以仿照該文件直接在主模型文件中例化原語。
    image
  4. 在主模型文件中將該OSC模型實例化
    image
  5. 接著,在IP核管理界面選擇rPLL模塊,一般使用普通模式即可,填入輸入時鐘、輸出時鐘、誤差容忍度,點擊計算即可自動配置。需註意,有些需求時鐘是不能產生的,或者它自動生成參數後綜合軟體認為不在VCO適用頻率內,這時就需要手動湊數計算了。詳細參數計算綜合報錯時會有,UG286也有計算方法。
    image
    image
  6. 在主文件中將該PLL實例化
    image
  7. 直接在主文件中將25M時鐘連到OBUF上,輸出帶緩衝的clk_out
    image
  8. 對點燈例子中的一些計數值稍作修改,即可完成代碼
  9. 綜合約束,燒錄。燒錄選擇燒錄在內部Flash里,這樣可以離線運行
    image
    image

代碼如下:

module led (
    input sys_rst_n,        // reset input
    output reg [5:0] led,    // 6 LEDS pin
    output wire clk_out
);

reg [31:0] counter;
wire pll_clk;
wire sys_clk;

Gowin_OSC SYSOSC(sys_clk);
Gowin_rPLL APLL(pll_clk,sys_clk);
OBUF uut(
    .O(clk_out),
    .I(sys_clk)
);

always @(posedge pll_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 32'd0;
    else if (counter < 32'd49_999_999)       // 0.5s delay
        counter <= counter + 1'b1;
    else
        counter <= 32'd0;
end

always @(posedge pll_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 6'b111110;
    else if (counter == 32'd49_999_999)       // 0.5s delay
        led[5:0] <= {led[4:0],led[5]};
    else
        led <= led;
end

endmodule

約束:
image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文是 CSS Houdini 之 CSS Painting API 系列第四篇。 現代 CSS 之高階圖片漸隱消失術 現代 CSS 高階技巧,像 Canvas 一樣自由繪圖構建樣式! 現代 CSS 高階技巧,完美的波浪進度條效果! 在上三篇中,我們詳細介紹了 CSS Painting API 是如 ...
  • 因為團隊內部開啟了一個持續的前端代碼質量改進計劃,其中一個專項就是TS類型覆蓋率,期間用到了type-coverage這個倉庫,所以借這篇文章分享一下這個工具,並順便從源碼閱讀的角度來分析一下該工具的源碼,我自己fork了一個倉庫,完成了中文版本的ReadMe文件並對核心代碼添加了關鍵註釋,需要的同 ...
  • 如果你被問到:什麼是反射?為什麼需要反射、以及反射的應用?你會如何回答呢? 本篇會帶大家初識反射,瞭解反射概念和基本應用。反射的原理以及深入源碼的探究將會在後面幾篇介紹。 ...
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 CSDN: 碼農BookSea 轉載請在文首註明出處,如發現惡意抄襲/搬運,會動用法律武器維護自己的權益。讓我們一起維護一個良好的技術創作環境! 三色標記演算法 可達性分析演算法理論上要求全過程都基於一個能保障一致性的 ...
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 CSDN: 碼農BookSea 轉載請在文首註明出處,如發現惡意抄襲/搬運,會動用法律武器維護自己的權益。讓我們一起維護一個良好的技術創作環境! 記憶集與卡表 跨區引用問題 跨代引用是指新生代中存在對老年代對象的引 ...
  • 大數據量文本文件高效解析方案代碼實現 測試環境 Python 3.6.2 Win 10 記憶體 8G,CPU I5 1.6 GHz 背景描述 這個作品來源於一個日誌解析工具的開發,這個開發過程中遇到的一個痛點,就是日誌文件多,日誌數據量大,解析耗時長。在這種情況下,尋思一種高效解析數據解析方案。 解決 ...
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 CSDN: 碼農BookSea 轉載請在文首註明出處,如發現惡意抄襲/搬運,會動用法律武器維護自己的權益。讓我們一起維護一個良好的技術創作環境! 根節點枚舉與安全點 什麼是根節點枚舉 HotSpot使用的是可達性分 ...
  • 現在有一個需求: 針對一個答題統計, 需要統計近5次的錯誤次數. 思路是, 使用數表去儲存這5次錯誤次數, 然後統計數表 現在有一個5個元素的數表 error_last_5_times = {1, 0, 1, 0 ,1} 其中1表示正確, 0表示錯誤 這裡有兩種統計方法: -- 方法1: 使用迭代數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...