初試高雲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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...