IntelliJ IDEA下開發FPGA——FPGA開發體驗提升__下

前言

? ? ? ? 由于Quartus寫代碼比較費勁,雖然新版已經有了代碼補全,但體驗上還有所欠缺。于是使用VS Code開發,效果如下所示,代碼樣式和基本的代碼補全已經可以滿足開發,其余工作則交由Quartus完成

????????但VS Code的自帶的git功能,說實話并不好用,只能查看更改的,需要手動展開才能瀏覽全局代碼。而合并過程,辨識度并不是很高,容易造成重復代碼

????????分支方面并不清晰,雖然提供了多種視圖

????????基于此,打算使用CLion試試。在官網上恰好看到了對應的插件,那么也就意味著此法可行。不過官方這個插件似乎還不支持所安裝的CLion

一、安裝插件

? ? ? ? 于是打算換成IntelliJ IDEA。下圖中的第一個插件與VS Code下的差不多,有基本的代碼補全功能,可以滿足基本的Verilog開發。第三個插件有不少Verilog相關的代碼檢查等功能。

????????需要注意的是,后者與其他Verilog插件可能不兼容,所以需要作出取舍。此處使用后者,前者需要禁用,否則工程目錄會一直處在正在加載

????????這個牛掰的插件,同時也是開源項目。

教程文檔:Scaleda:將 IntelliJ IDEA 打造為 FPGA 開發工具 — Scaleda v0.2.1 文檔

手冊:快速開始 — Scaleda v0.2.1 文檔

二、創建新項目

1,創建工程

新建項目,指定好路徑,路徑不能有中文。下圖這個Scaleda圖標表明插件不兼容

圖標實際應為

創建后會自動生成下面文件

2,新建文件

①新建Verilog文件

新建后,會自動生成對應框架

先寫一個簡單的計數器模塊,在強大的代碼補全和代碼提示下,很輕松地完成了

module demo (
input clk,
input reset,
output reg [7:0] count
);
always @(posedge clk) beginif (reset)count <= 8'h00;elsecount <= count + 1;
endendmodule

②新建Testbench文件

先簡單寫一個測試激勵文件

`timescale 1ns / 1psmodule demo_tb;// 信號聲明reg clk;reg reset;wire [7:0] count;// 實例化被測模塊demo dut (.clk  (clk),.reset(reset),.count(count));// 時鐘生成(50MHz)initial beginclk = 0;forever #10 clk = ~clk;  // 10ns半周期end// 測試流程控制initial beginreset = 1'b1;  // 初始復位#100;  // 保持100nsreset = 1'b0;  // 釋放復位// 監控信號變化$monitor("Time=%0t: count=%d", $time, count);// 運行16個時鐘周期repeat (16) @(posedge clk);// 驗證最終值(預期255+16會溢出)
//        if (count !== 8'd15) begin
//            $error("Final count mismatch! Expected 15, got %d", count);
//        end$finish;end//    這段語句會自動生成,所以不用加
//    // VCD波形記錄
//    initial begin
//    $dumpfile("demo_tb_waveform.vcd");
//    $dumpvars;    // 記錄測試臺頂層信號
//    end
endmodule

③格式化文件

? ? ? ? 從上圖可以看出,有很多警告表示應用Tab代替空格。

可以先按Ctrl + A全選,然后再按Ctrl + Alt + L 格式化代碼

④代碼檢查

? ? ? ? 代碼出現問題,不僅會有報錯提示,還有對應的解決措施,成功地把編寫代碼的難度降低一大截

3,基本功能

①語言服務器

? ? ? ? 在設置中可以找到該插件的相關配置,首先是如圖的語言服務器(LSP),提供代碼檢查等功能

????????Verible是檢測Verilog的,svls則是檢測System Verilog

? ? ? ? 手冊中亦有記載

②代碼樣式

③配色方案

4,添加工具鏈

①Intel Quartus

? ? ? ? 由于本人使用的是Quartus,所以添加的是Quartus的工具鏈,Vivado等在手冊中有相關配置教程

點擊添加,會有多個工具鏈模板,選擇最后一個Intel Quartus

在Quartus的安裝路徑中找到bin64這個路徑即可

②Icarus Verilog

????????Intel Quartus是FPGA的綜合和實現工具,而Icarus Verilog是開源仿真器,主要用于驗證HDL代碼

下載

? ? ? ? ?? ? ? ? 進入網址Icarus Verilog for Windows,然后選擇對應版本下載,比如最新版

安裝

? ? ? ? 選擇合適的目錄即可

????????可以選擇添加環境變量,環境變量若想生效,需要重啟(此時可以不重啟)

安裝完成后就可以添加該工具鏈了,由于已經包含了所需的三個程序,故路徑非常簡單。但要注意,此時需要指向程序,而非目錄

5,添加仿真配置

①添加目標平臺

? ? ? ? 點擊右上角的任務視圖

????????再點擊編輯任務

? ? ? ? 然后點擊“+”,會出現一個目標平臺,選擇對應的目標名稱、工具鏈和頂層模塊

????????頂層模塊,這里應添demo,而非demo_tb。約束文件暫時不管

②添加仿真任務

????????點擊目標平臺后,再點擊這個目標平臺,然后點擊“+”來添加仿真項目。注意!是仿真任務,所以使用的工具鏈是Icarus Verilog這個開源工具鏈

③刷新

? ? ? ? 回到任務視圖,點擊刷新

可以看到對應配置都刷新出來了,這里方括號的顯示與前面不一致,應該是個小bug

6,運行

? ? ? ? 雙擊運行可以看到有正確的輸出提示

????????尷尬的是,沒有產生手冊中的波形圖

設置波形

????????回到設置里咱去看看怎么個事。可以看到前面兩個選項勾選很正常,但波形處理這塊應該沒有生效

點開后,可以看到三個選項,其中gtkwave我們在iverilog的目錄里看到過,那么就選擇它吧

gtkwave

? ? ? ? 雙擊任務視圖里的仿真任務,或者點擊上面的運行,效果相同

????????此時,會彈出一個新窗口(老窗口)

點擊SST欄里的demo_tb,可以將其展開,其下方欄也會有相應信息

點擊這些信號,Signals那一欄就會出現相應信號,Waves下則出現對應波形

縮放一下,有那么一點韻味了

Surfer

? ? ? ? 與前面相同,在設置里選擇即可,點擊運行后,可以彈出這樣一個窗口。不得不說,這個背景色調相當有吸引力

Rvcd(未解決)

? ? ? ? 雖然插件里提到,Rvcd和Surfer是內置的,不過實際運行仿真任務時Rvcd卻沒有任何窗口,可能是我姿勢不對?

? ? ? ? 應該是插件錯誤導致的

7、曲線救Rvcd(失敗)

? ? ? ? 找到Rvcd項目(非常棒的項目),Scaleda/rvcd: VCD viewer in Rust, running on ANY platform

? ? ? ? 不過,我們并不需要下載Rust編譯器。到設置里,我們可以看到LSP的可執行路徑,那么我們就前往這個路徑

在bin這里,可以找到我們想要的文件

雙擊運行

找到我們項目下的仿真波形文件

然后什么都沒發生,疑似程序崩潰。那么根據README提示,使用命令行來完成操作(路徑需自行替換)

.\rvcd -i "E:\Program\Embedded\FPGA\demo\.sim\demo-iverilog-sim\demo_tb_waveform.vcd"

????????剛才當我沒說,Rust編譯器還是得下,下載是基本功,這里不啰嗦了。下載Rvcd源碼壓縮包后,執行下面命令進行編譯

# run rvcd
cargo run
# compile to release executable
cargo build --release

三、綜合Quartus項目

1,遷移

?把前面工程下的scaleda.yml復制到Quartus的舊工程里

然后右鍵工程文件夾,使用IDEA打開

????????接著修改配置即可,如果配置不生效,那么就重啟IDEA。可以選擇在任務視圖里修改,也就是圖形化操作

????????該插件對System Verilog的支持有限,建議文件后綴名為.v,使用Verilog

2,原理

? ? ? ? 接下來是對項目進行綜合,不知道為什么,這個插件Quartus的綜合項目時只會卡著,什么反應都沒有

????????不過綜合這一步終歸是利用Quartus的工具,自己手動配置也沒多麻煩。于是在Quartus里運行一下,進行綜合。

????????然后再根據輸出信息框篩選出命令,可以看到它執行了下面的五條命令,我們只需要把這些命令添加到外部工具即可

????????打開設置,找到外部工具,點擊“+”添加外部工具

可以輸入下面信息

????????這些信息怎么來的呢?前面在輸出信息框里,我們先找第一條命令

Info: Command: quartus_map --read_settings_files=on --write_settings_files=off Firefly -c Firefly

????????“Command:”后面的內容其實就是終端里執行的命令,quartus_map就是可執行程序,后面則是它需要的參數,也就是實參

? ? ? ? 而這個程序在哪呢?它在Quartus安裝目錄下的quartus/bin64目錄,此目錄就是Intel Quartus的工具鏈路徑。因此程序一欄添該程序的完整執行路徑即可

? ? ? ? 我們需要編譯(綜合)本工程,那么工作目錄自然是當前目錄(項目根目錄)

????????

????????剩下的外部工具皆是如此配置,幸運的是工作目錄和實參都差不多,只有程序名稱不同。不過這種方法有些劣質,如果是不同的工程,那么工作目錄就需要重新改了

2,powershell目標

? ? ? ? 為此,干脆寫一個powershell腳本,創建一個powershell目標,進行一鍵綜合。

????????點擊添加目標,選擇Shell Script

? ? ? ? 接下來找一個目錄存放腳本

? ? ? ? 可根據自己的情況更改

# 設置程序路徑
$QUARTUS_BIN = "E:\Tools\Develop\Embedded\intelFPGA\quartus\bin64"
# 設置項目名
$PROJECT_NAME = "Firefly"
# 設置工作目錄
$WORK_DIR = "E:/Program/Embedded/FPGA/Firefly"# 初始化環境
$env:PATH = "$QUARTUS_BIN;$env:PATH"
Set-Location $WORK_DIR# 執行流程
$commands = @("quartus_map --read_settings_files=on --write_settings_files=off $PROJECT_NAME -c $PROJECT_NAME","quartus_fit --read_settings_files=off --write_settings_files=off $PROJECT_NAME -c $PROJECT_NAME","quartus_asm --read_settings_files=off --write_settings_files=off $PROJECT_NAME -c $PROJECT_NAME","quartus_sta $PROJECT_NAME -c $PROJECT_NAME","quartus_eda --read_settings_files=off --write_settings_files=off $PROJECT_NAME -c $PROJECT_NAME"
)foreach ($cmd in $commands) {Write-Host "Run: $cmd" -ForegroundColor CyanInvoke-Expression $cmdif ($LASTEXITCODE -ne 0) {Write-Host "[Error] $LASTEXITCODE" -ForegroundColor Redexit $LASTEXITCODE}
}

此時在目標里填上腳本路徑,把解釋器路徑清空

執行目標后,輸出結果與Quartus相同,除了最后一條總結外

這里只是提供了一種可行性的方案,進行綜合還是要到Quartus里。至于燒錄等操作,則同理

3,編寫項目(重要)

? ? ? ? 如果以前有項目時要非常注意,該插件對System Verilog的支持有些問題。試過許多次,最后發現,代碼里不能出現中文等非ASCII字符,否則打開即崩。但它對V文件相當寬容

? ? ? ? 這就有些難辦了,既想使用System Verilog,又不能寫中文注釋

[Crash] Verible LSP fails to open .sv files with non-ASCII characters (e.g. Chinese comments) in IntelliJ IDEA

????????考慮到Verilog下的代碼提示和代碼樣式明顯更好,Verilog就Verilog吧

4,仿真

? ? ? ? 該插件對仿真的支持可謂差的一塌糊涂,主要是無法對sv文件進行仿真,如$sin、real、break等常見特性根本用不了。這個有空看看有沒有平替或者次替

ModelSim(GUI)

? ? ? ? 與前面綜合一致,仿真時,在Quartus的輸出信息框里找命令。可以看到在打開ModelSim后,輸出框里有這樣一條信息

而括號內的就是我們需要的命令

quartus_sh -t "e:/tools/develop/embedded/intelfpga/quartus/common/tcl/internal/nativelink/qnativesim.tcl" --rtl_sim "Firefly" "Firefly"

由于命令比較簡單,改為腳本文本,同時加上quartus_sh的路徑

E:\Tools\Develop\Embedded\intelFPGA\quartus\bin64\quartus_sh -t "e:/tools/develop/embedded/intelfpga/quartus/common/tcl/internal/nativelink/qnativesim.tcl" --rtl_sim "Firefly" "Firefly"

運行后會自動啟動ModelSim,與前面執行仿真任務Surfer差不多,唯一的區別就是,它的仿真是根據Quartus自帶的tcl腳本實現的

而內置的tcl腳本與qsf文件有關,換句話說,打開qsf文件,我們可以看到相關的約束命令

qsf的仿真解析

? ? ? ? 在qsf文件中,搜索test,右邊藍色區域可以就是所有涉及到測試激勵(仿真)的地方

? ? ? ? 這三句對應的是圖形后操作后保存的信息

這幾條是仿真器的配置

這條是正在仿真的文件

這幾條就是把測試激勵模塊與實際文件對應起來,用的是相對路徑

????????知道這些信息后,可以很輕松地手動修改。事實上,測試激勵文件的相關操作在配置文件里修改要比圖形化添加要方便一些。

? ? ? ? 需要注意的是ModelSim仿真前,需要進行綜合,也就是前面那個目標

ModelSim(命令行)

? ? ? ? 前面的ModelSim的GUI有些簡陋,那么接下來我們就可以使用命令行模式下的ModelSim,運行結束后讓其再執行Surfer。

? ? ? ? 首先我們可以在simulation/modelsim這個目錄里找到Quartus自動生成的do腳本,該腳本用于vsim(也就是ModelSim的boss?可以這么說的話)。前面不是提到過Quartus運行RTL仿真時,其實是讓quartus_sh執行了tcl腳本,該腳本自動生成了do腳本,并讓vsim運行該腳本

腳本的內容很簡單,都是些配置和啟動命令

????????因此我們可以讓vsim來執行該腳本,并且以命令行的模式(需要帶上參數-c),vsim的可執行路徑需要自行去找(沒有安裝ModelSim是沒有的,可以搜索“Quartus ModelSim”,會有一堆安裝教程)

E:\Tools\Develop\Embedded\intelFPGA\ModelSim\modelsim_ase\win32aloem\vsim -c -do "do E:\\Program\\Embedded\\FPGA\\Firefly\\simulation\\modelsim\\Firefly_run_msim_rtl_verilog.do"

可以看到,腳本很順利地執行下去了,執行后,可能會停留在vism界面(按Ctrl+C可退出)

我們可以在自動生成的do腳本里加上下面這句,即可讓其仿真結束后自動退出

????????那么也就意味著,我們把前面vsim執行do腳本的命令寫入到ps1腳本或者bat腳本,再在后面補充上Surfer的命令。那么就可以讓其仿真后,自動打開Surfer顯示波形了,與之前雙擊Scaleda的仿真任務無異了

? ? ? ? 為了進一步簡化流程,可以寫一個腳本先讀取qsf中的頂層文件,再到test目錄里去找有沒有對應的測試激勵文件,然后再生成對應的do腳本,接著讓vsim執行仿真,在控制臺輸出信息,輸出完之后,再自動打開Surfer,最后就可以優雅地欣賞波形了

? ? ? ? ? ? ? ? 【未完待續】

5、波形顯示

? ? ? ? 由于心心念念的Rvcd不能使用,只得另辟蹊徑來查看“波形”而非“波形數據”(也就是模擬波形)。在VS Code里可以找到這樣的兩個插件,完美代替了Rvcd和Surfe

? ? ? ? 安裝插件后,點擊生成的vcd文件即可。如果兩個插件都安裝的話,可以在上方自行切換,二者擇其一即可

WaveTrace

? ? ? ? 點擊左下角的添加信息,雙擊你要顯示的信號即可

點擊左邊的信號后,上面會有三個顯示類型,分別是數字、數字量化和模擬

Digital IDE

? ? ? ? 此插件功能更豐富,但若想使用還需安裝Vivado

? ? ? ? 如此看來,除了內置git外,IDEA在Verilog方面能做到的VS Code都能做到,且某些方面更強

6、分工考慮

? ? ? ? 編寫一些基本模塊的話,使用Verilog就足夠了,Scaleda中的Verible可以提供非常好的語言支持。此外,git方面,IntelliJ IDEA能提供更好的體驗。

????????仿真的話,僅使用Verilog既冗余、晦澀難懂,又不能很好地達到效果,比如Verilog里沒有real、$sin和break等,想要模擬ADC數據采集有些麻煩。而使用System Verilog的話,Scaleda的支持非常差,近乎不能使用,包括里面的仿真任務。此時只能依賴VS Code的hdl_checker插件了,對System Verilog有基本的支持(代碼檢查)。

? ? ? ? 如果要對System Verilog進行仿真,那么iverilog就無能為力了,只能使用ModelSim等支持的仿真器。在測試激勵文件里可以加上下面這句,以生成波形文件。然后可以在ModelSim仿真后再啟動Surfer觀察波形(可選項)。

initial begin$dumpfile("xxx.vcd");$dumpvars;
end

? ? ? ? 綜合起來,編寫模塊仿真測試使用IntelliJ IDEA仿真代碼編寫方面使用VS Code資源消耗方面使用Quartus。Scaleda的任務目標由于目前其缺陷性,不太適合使用。

????????verilator????????questasim

四、展望

? ? ? ? 目前來說,想要一站式開發,得需要使用VS Code。IntelliJ IDEA與VS Code關于Verilog的插件并不互通,比如Digtal IDE只在VS Code有,Scaleda只在IntelliJ IDEA上有。兩者都是非常優秀的工具,可根據自身開發體驗自行選擇。

? ? ? ? IntelliJ IDEA界面可能更為簡介優美,且運行目標由于有現成的框架,想要運行腳本更方便。VS Code更為輕量且插件功能更為豐富,適合一站式開發,但想要達到更好的配置還需著重學習json等,學習難度較大。

????????VS Code下開發FPGA——FPGA開發體驗提升__下-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75917.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python語言的需求分析

Python語言的需求分析 引言 在信息技術快速發展的今天&#xff0c;編程語言的選擇對于軟件開發的成功與否起著至關重要的作用。Python作為一種高級編程語言&#xff0c;以其簡潔易讀的語法和強大的功能受到越來越多開發者的青睞。通過對Python語言的需求分析&#xff0c;我們…

抓wifi無線空口包之Ubuntu抓包(二)

一、設置網卡信道和頻段&#xff0c;并抓包 1、使用iwconfig查看自己機器的無線網卡名稱 wangwang-ThinkCentre-M930t-N000:~$ iwconfig lo no wireless extensions. eno1 no wireless extensions. enxc8a3624ab329 no wireless extensions. wlx90de80d1b5b1 IE…

深度學習實戰電力設備缺陷檢測

本文采用YOLOv11作為核心算法框架&#xff0c;結合PyQt5構建用戶界面&#xff0c;使用Python3進行開發。YOLOv11以其高效的實時檢測能力&#xff0c;在多個目標檢測任務中展現出卓越性能。本研究針對電力設備缺陷數據集進行訓練和優化&#xff0c;該數據集包含豐富的電力設備缺…

Day1:前端項目uni-app壁紙實戰

uni-app官網下載HBuilder。 uni-app快速上手 | uni-app官網 點擊HBuilder 安裝 新建項目 工具——插件安裝 安裝uni-app&#xff08;vue3&#xff09; 我們先來準備一下&#xff1a; 先在wallpaper下新建目錄 我已經建過了 同樣&#xff0c;再在common下建images和style目錄&…

mac命令操作

mac命令操作 快速刪除一行&#xff1a; control u 剪切文件&#xff1a;步驟1、先進行Command c 進行選擇復制文件&#xff0c;2、進行commandoptionv進行移動文件&#xff0c;如果commandv是進行復制文件。 commandcontrolD 三個鍵即可屏幕取詞進行翻譯 mac中可以使用快捷方…

C#語言的加密貨幣

C#語言與加密貨幣&#xff1a;一個開發者的探索之旅 引言 隨著區塊鏈技術的迅猛發展&#xff0c;加密貨幣的應用已經滲透到我們生活的方方面面。作為一種新興的數字資產&#xff0c;加密貨幣不僅改變了傳統的投資方式&#xff0c;而且對全球經濟產生了深遠影響。其中&#xf…

Mysql 概念

MySQL 是一種 關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;它使用 結構化查詢語言&#xff08;SQL&#xff09; 來管理和操作數據。它最初由瑞典公司 MySQL AB 開發&#xff0c;后來被 Sun Microsystems 收購&#xff0c;現在屬于 Oracle 公司。 一、MySQL…

Golang 項目平滑重啟

引言 平滑重啟&#xff08;Graceful Restart&#xff09;技術作為一種常用的解決方案&#xff0c;通過允許新進程接管而不中斷現有的請求&#xff0c;確保了系統的穩定運行和業務連續性。同時目前公司的服務重啟絕大部分也都適用的 go 的平滑重啟技術。 本部分將對平滑重啟的…

SQL SELECT DISTINCT 語句詳解:精準去重的藝術

在數據驅動的時代&#xff0c;數據質量直接影響決策的準確性。面對海量數據時&#xff0c;重復記錄如同沙礫中的金屑&#xff0c;既占用存儲空間&#xff0c;又干擾分析結果。SELECT DISTINCT 語句便是那把高效的篩子&#xff0c;助您快速剔除冗余&#xff0c;提取唯一值。本文…

16-產品經理-需求的評審

在創建需求的時候&#xff0c;有一個"不需要評審"的復選框&#xff0c;如果選中該復選框的話&#xff0c;需求的創建成功后狀態是激活的。 但大部分情況下面&#xff0c;需求還是需要評審的。 即使產品完全由一個人負責&#xff0c;也可以將一些不成熟的想法存為草…

計算機網絡學習前言

前言 該部分說明計算機網絡是什么&#xff1f;它有什么作用和功能&#xff1f;值不值得我們去學習&#xff1f;我們該如何學習&#xff1f;這幾個部分去大概介紹計算機網絡這門課程&#xff0c;往后會介紹計算機網絡的具體知識點。 1.計算機網絡是什么&#xff1f; 計算機網…

python全棧-JavaScript

python全棧-js 文章目錄 js基礎變量與常量JavaScript引入到HTML文件中JavaScript注釋與常見輸出方式 數據類型typeof 顯示數據類型算數運算符之加法運算符運算符之算術運算符運算符之賦值運算符運算符之比較運算符運算符之布爾運算符運算符之位運算符運算符優先級類型轉換 控制…

C語言一個偶數能表示為兩個素數之和

我們可以先找到其中的一個素數&#xff0c;然后用這個偶數減去這個素數就可以求得了。 運行結果:

vue實現大轉盤抽獎

用vue實現一個簡單的大轉盤抽獎案例 大轉盤 一 轉盤布局 <div class"lucky-wheel-content"><div class"lucky-wheel-prize" :style"wheelStyle" :class"isStart ? animated-icon : "transitionend"onWheelTransitionE…

Docker 核心組件

一、前言 Docker 已成為現代 DevOps 和微服務架構中的核心工具。為了更深入地理解它的工作機制&#xff0c;本文將系統介紹 Docker 的核心組件&#xff0c;配合結構圖直觀展示架構&#xff0c;同時拓展高級用法&#xff0c;幫助讀者全面掌握容器化技術的內核。 二、Docker 核心…

ModuleNotFoundError: No module named ‘pandas‘

在使用Python繪制散點圖表的時候&#xff0c;運行程序報錯&#xff0c;如圖&#xff1a; 報錯顯示Python 環境中可能沒有安裝 pandas 庫&#xff0c;執行pip list命令查看&#xff0c;果然沒有安裝pandas 庫&#xff0c;如圖&#xff1a; 執行命令&#xff1a;python -m pip in…

(51單片機)矩陣按鍵密碼鎖表白(C語言代碼編撰)(矩陣按鍵教程)(LCD1602淺教程)

目錄 源代碼 main.c MatrixKey.c MatrixKey.h LCD1602.c LCD1602.h Delay.c Delay.h 運行效果圖&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 代碼解析與教程&#xff1a; 延時函數Delay LCD1602 MatrixKey模塊 源代…

檢測手機插入USB后,自動啟動scrcpy的程序

博主寫了一個小工具scrcpyAuto&#xff0c;檢測手機插入電腦USB后&#xff0c;自動啟動scrcpy。 這樣只要程序運行&#xff0c;手機接入主機就會有scrcpy大屏出現&#xff0c;方便了很多。 1、程序會最小化到系統托盤中。 2、博主沒有設計得太復雜&#xff0c;所以程序開機啟動…

使用Scade實現神經網絡算法

在ERTS2022中&#xff0c;ANSYS 發表了使用Scade實現神經網絡AI算法的相關工作。論文題目為《Programming Neural Networks Inference in a Safety-Critical Simulation-based Framework》 背景與挑戰 神經網絡在安全關鍵系統中的應用&#xff1a;隨著嵌入式系統中自主性的引入…

Next.js + SQLite 項目 Docker 生產環境部署方案

以下是完整的 Next.js SQLite 項目 Docker 生產環境部署方案&#xff1a; 1. 項目結構準備 your-project/ ├── prisma/ │ ├── schema.prisma │ └── migrations/ ├── app/ ├── lib/ ├── Dockerfile ├── docker-compose.yml ├── .dockerignore └…