Chisel入門——在windows下vscode搭建|部署Scala2.13.3開發環境|用Chisel點亮FPGA小燈等實驗

文章目錄

  • 前言
  • 一、vscode搭建scala開發環境
    • 1.1 安裝Scala官方插件
    • 1.2 創建hello_world.scala文件
    • 1.3 確認java的版本(博主使用的是1.8)
    • 1.4 下載Scala Windows版本的二進制文件
    • 1.5 配置環境變量
    • 1.6 交互模式測試一下
    • 1.7 vscode運行scala
  • 二、windows安裝sbt
    • 2.1 下載sbt
    • 2.2 設置環境變量
    • 2.3 sbt配置
    • 2.4 設置阿里云鏡像
    • 2.5 驗證
  • 三、用Chisel點亮FPGA小燈
    • 3.1 參考文檔
    • 3.2 得到Verilog文件
      • 1. 環境搭建
      • 2. 克隆項目
      • 3. 編譯運行
      • 4. 生成Verilog文件
    • 3.3 上板驗證
      • 1. 創建quartus項目
      • 2. 加入.v文件
      • 3. 綁定引腳
      • 4. 上板燒錄
  • 四、在DE2-115開發板上重做Verilog實驗
    • 4.1 流水燈
  • 總結
  • 參考


前言

由于verilog效率比較低下,重復勞動太多了QAQ
所以打算用近兩年比較火的chisel進行開發。
于是先裝一波環境,踩了一天的坑。

傳統數字芯片的RTL設計采用Verilog語言為主,Chisel語言的全稱是Constructing Harward in Scala Embeded Language,即在Scala語言中導入Chisel3庫,即可使用Chisel語言。其特點是面向對象編程,可以方便地參數化定制硬件電路,加快設計流程。目前在RISC-V生態中應用較多,中科院計算所主持的培育下一代處理器設計人才的“一生一芯”項目也在極力推進該語言。


一、vscode搭建scala開發環境

1.1 安裝Scala官方插件

VS Code中安裝插件,先安裝 Scala Syntax (official),再安裝 Scala (Metals)

(官方插件,有個語法高亮功能也挺香的)
在這里插入圖片描述
在這里插入圖片描述

1.2 創建hello_world.scala文件

在這里插入圖片描述

代碼如下:

object HelloWorld 
{    def main(args: Array[String]): Unit = {println("Hello, world!")    }
}

1.3 確認java的版本(博主使用的是1.8)

在這里插入圖片描述

1.4 下載Scala Windows版本的二進制文件

下載鏈接:
https://downloads.lightbend.com/scala/2.13.3/scala-2.13.3.msi

在這里插入圖片描述

雙擊進行安裝,并一路 next
在這里插入圖片描述

記住安裝路徑,等下配置環境變量需要用
博主的安裝路徑為:
在這里插入圖片描述

1.5 配置環境變量

1.剛剛讓記的那個 安裝路徑
在這里插入圖片描述

在這里插入圖片描述

2.PATH變量下再新增值
在這里插入圖片描述在這里插入圖片描述
至此 安裝完畢

1.6 交互模式測試一下

在這里插入圖片描述

至此 Scala開發環境搭建成功

1.7 vscode運行scala

在這里插入圖片描述

二、windows安裝sbt

2.1 下載sbt

官網:http://www.scala-sbt.org/download.html

無腦執行下一步即可,注意 記住安裝位置 ,方便后續環境變量的配置
在這里插入圖片描述

2.2 設置環境變量

#SBT_HOME 設置為sbt解壓目錄,例如:

SBT_HOME=C:\Programs\sbt;

添加到 系統變量 中:
在這里插入圖片描述

添加到 path 中:
在這里插入圖片描述
在這里插入圖片描述

2.3 sbt配置

修改 sbt\conf\sbtconfig.txt 為以下內容:

# sbt configuration file for Windows# Set the java args#-mem 1024 was added in sbt.bat as default-Xms1024m
-Xmx1024m
-Xss4M
-XX:ReservedCodeCacheSize=128m# Set the extra sbt options-Dsbt.log.format=true
-Dsbt.boot.directory=D:/SoftWare/scala-2.13.3/sbt/boot/
-Dsbt.global.base=D:/SoftWare/scala-2.13.3/sbt/.sbt
-Dsbt.ivy.home=D:/SoftWare/scala-2.13.3/sbt/.ivy2
-Dsbt.repository.config=D:/SoftWare/scala-2.13.3/sbt/conf/repo.properties
-Dsbt.override.build.repos=true

2.4 設置阿里云鏡像

國內的網絡環境復雜,阿里云還挺好用的,在 sbt\conf\ 下新建 repo.properties 文件,內容為:

[repositories]localaliyun-central: https://maven.aliyun.com/repository/centralaliyun-public: https://maven.aliyun.com/repository/publicjcenter: https://jcenter.bintray.com/repo1: https://repo1.maven.org/maven2/store_2: https://repo2.maven.org/maven2/aliyun-releases: https://maven.aliyun.com/repository/releasesaliyun-apache-snapshots: https://maven.aliyun.com/repository/apache-snapshotsaliyun-google: https://maven.aliyun.com/repository/googlealiyun-jcenter: https://maven.aliyun.com/repository/jcenteraliyun-spring: https://maven.aliyun.com/repository/springaliyun-spring-plugin: https://maven.aliyun.com/repository/spring-pluginsbt-plugin: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/sonatype: https://oss.sonatype.org/content/repositories/snapshots  typesafe: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnlytypesafe2: https://repo.typesafe.com/typesafe/releases/atlassian: https://packages.atlassian.com/content/repositories/atlassian-public/spring-plugin: https://repo.spring.io/plugins-release/hortonworks: https://repo.hortonworks.com/content/repositories/releases/

2.5 驗證

完成后打開cmd,輸入 sbt,可能會有一段下載依賴包的過程,成功后會進入命令行,即sbt安裝成功
在這里插入圖片描述

退出方式:在命令框中輸入 exit 即可退出:
在這里插入圖片描述

三、用Chisel點亮FPGA小燈

3.1 參考文檔

參考的chisel書為chisel-book,是一個PDF文檔,

Chisel-book: https://wwu.lanzoue.com/isdim08x8x5i
在這里插入圖片描述在這里插入圖片描述

3.2 得到Verilog文件

1. 環境搭建

找到其中 WINDOWS開發環境搭建
在這里插入圖片描述

OK,按著以上內容下載所需要的軟件(前面我們已經配置好了環境)

question: 哪能找到一個Chisel例程?

OK,繼續看這本書,這是本好書,Hello world例程書里有了,代碼在Git

在這里插入圖片描述

2. 克隆項目

繼續找到了GIT上的chisel-examples.

OK 點擊去GIT上 克隆下來

github:https://github.com/schoeberl/chisel-examples

在這里插入圖片描述

好了,找到helloworld例程了。現在想想例程怎么編譯?生成Verilog代碼在哪?
書中3.7章節有寫
在這里插入圖片描述

3. 編譯運行

書里只寫了Chisel下的編譯生成。至于下載到FPGA文檔里說要自己動手,不在文檔教程內了。

具體流程:

cmd命令下,

git clone https://github.com/schoeberl/chisel-examples.git
cd chisel-examples/hello-world/

執行編譯 sbt run
在這里插入圖片描述

第一次編譯需要等待很長時間,然后顯示成功。(因為我編譯過了,所以第二次很快)。

Hello.scala

//點亮小燈
/** This code is a minimal hardware described in Chisel.* * Blinking LED: the FPGA version of Hello World*/
// 
import chisel3._
// 
/*** The blinking LED component.*/
// 
class Hello extends Module {val io = IO(new Bundle {val led = Output(UInt(1.W))})val CNT_MAX = (50000000 / 2 - 1).U
// val cntReg = RegInit(0.U(32.W))val blkReg = RegInit(0.U(1.W))
// cntReg := cntReg + 1.Uwhen(cntReg === CNT_MAX) {cntReg := 0.UblkReg := ~blkReg}io.led := blkReg
}
// 
/*** An object extending App to generate the Verilog code.*/
object Hello extends App {(new chisel3.stage.ChiselStage).emitVerilog(new Hello())
}

4. 生成Verilog文件

OK,現在找生成的Verilog,書中說是 Hello.v文件

在這里插入圖片描述

生成的 Hello.v 文件:

module Hello(input   clock,input   reset,output  io_led
);
`ifdef RANDOMIZE_REG_INITreg [31:0] _RAND_0;reg [31:0] _RAND_1;
`endif // RANDOMIZE_REG_INITreg [31:0] cntReg; // @[Hello.scala 23:23]reg  blkReg; // @[Hello.scala 24:23]wire [31:0] _cntReg_T_1 = cntReg + 32'h1; // @[Hello.scala 26:20]assign io_led = blkReg; // @[Hello.scala 31:10]always @(posedge clock) beginif (reset) begin // @[Hello.scala 23:23]cntReg <= 32'h0; // @[Hello.scala 23:23]end else if (cntReg == 32'h17d783f) begin // @[Hello.scala 27:28]cntReg <= 32'h0; // @[Hello.scala 28:12]end else begincntReg <= _cntReg_T_1; // @[Hello.scala 26:10]endif (reset) begin // @[Hello.scala 24:23]blkReg <= 1'h0; // @[Hello.scala 24:23]end else if (cntReg == 32'h17d783f) begin // @[Hello.scala 27:28]blkReg <= ~blkReg; // @[Hello.scala 29:12]endend
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INITinteger initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin`ifdef RANDOMIZE`ifdef INIT_RANDOM`INIT_RANDOM`endif`ifndef VERILATOR`ifdef RANDOMIZE_DELAY#`RANDOMIZE_DELAY begin end`else#0.002 begin end`endif`endif
`ifdef RANDOMIZE_REG_INIT_RAND_0 = {1{`RANDOM}};cntReg = _RAND_0[31:0];_RAND_1 = {1{`RANDOM}};blkReg = _RAND_1[0:0];
`endif // RANDOMIZE_REG_INIT`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule

在這里插入圖片描述

以及頂層文件 hello_top.v
在這里插入圖片描述
hello_top.v

/* Minimal top level for the Chisel Hello World.Wire reset to 0. */module hello_top(input clk, output led);wire h_io_led;wire res;assign led = h_io_led;assign res = 1'h0;Hello h(.clock(clk), .reset(res),.io_led( h_io_led ));
endmodule

在這里插入圖片描述

3.3 上板驗證

1. 創建quartus項目

板子型號為 EP4CE115F29C7

2. 加入.v文件

將生成的 Hello.v文件hello_top.v文件 添加到項目中,并設置hello_top.v為頂層文件
在這里插入圖片描述

3. 綁定引腳

根據技術文檔,led的引腳如下,任意選擇一個led
在這里插入圖片描述

綁定引腳
在這里插入圖片描述

4. 上板燒錄

實現效果:
在這里插入圖片描述

四、在DE2-115開發板上重做Verilog實驗

4.1 流水燈

修改 Hello.scala 文件為:

import chisel3._
import chisel3.util._class Hello extends Module {val io = IO(new Bundle {val led = Output(UInt(8.W))  // 8 位 LED 輸出})val maxCount = (50000000 / 10).U  // 調整這個參數改變流水燈的速度(DE2-115 使用 50MHz 時鐘)val counter = RegInit(0.U(32.W))val position = RegInit(0.U(3.W))// 計數器邏輯counter := counter + 1.Uwhen(counter === maxCount) {counter := 0.Uwhen(position === 7.U) {position := 0.U}.otherwise {position := position + 1.U}}// LED 輸出邏輯io.led := (1.U << position)
}object Hello extends App {(new chisel3.stage.ChiselStage).emitVerilog(new Hello())
}

重新運行:
在這里插入圖片描述

生成的Hello.v 文件,直接將該文件設置為頂層文件:

module Hello(input        clock,input        reset,output [7:0] io_led
);
`ifdef RANDOMIZE_REG_INITreg [31:0] _RAND_0;reg [31:0] _RAND_1;
`endif // RANDOMIZE_REG_INITreg [31:0] counter; // @[Hello.scala 57:24]reg [2:0] position; // @[Hello.scala 58:25]wire [31:0] _counter_T_1 = counter + 32'h1; // @[Hello.scala 61:22]wire [2:0] _position_T_1 = position + 3'h1; // @[Hello.scala 67:28]assign io_led = 8'h1 << position; // @[Hello.scala 72:18]always @(posedge clock) beginif (reset) begin // @[Hello.scala 57:24]counter <= 32'h0; // @[Hello.scala 57:24]end else if (counter == 32'h4c4b40) begin // @[Hello.scala 62:30]counter <= 32'h0; // @[Hello.scala 63:13]end else begincounter <= _counter_T_1; // @[Hello.scala 61:11]endif (reset) begin // @[Hello.scala 58:25]position <= 3'h0; // @[Hello.scala 58:25]end else if (counter == 32'h4c4b40) begin // @[Hello.scala 62:30]if (position == 3'h7) begin // @[Hello.scala 64:28]position <= 3'h0; // @[Hello.scala 65:16]end else beginposition <= _position_T_1; // @[Hello.scala 67:16]endendend
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INITinteger initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin`ifdef RANDOMIZE`ifdef INIT_RANDOM`INIT_RANDOM`endif`ifndef VERILATOR`ifdef RANDOMIZE_DELAY#`RANDOMIZE_DELAY begin end`else#0.002 begin end`endif`endif
`ifdef RANDOMIZE_REG_INIT_RAND_0 = {1{`RANDOM}};counter = _RAND_0[31:0];_RAND_1 = {1{`RANDOM}};position = _RAND_1[2:0];
`endif // RANDOMIZE_REG_INIT`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule

引腳分配:
在這里插入圖片描述

編譯。沒有錯誤了,OK,下載。
沒反應!!!!準備要哭了,隨便點了個開發板上reset按鍵,哦,哦,哦,流水燈居然正常工作了。
看看上面代碼 ,
好像chisel里面代碼生成里面有 if(res_n)判斷,猜是判斷按鍵吧?那么我把按鍵直接去掉試試?

好了,在邏輯判斷里面,設置為復位之后有效即可,原先是需要手動按鍵才能觸發:
在這里插入圖片描述
在這里插入圖片描述

實驗效果:
在這里插入圖片描述


總結

學習Chisel語言是一段既充滿挑戰又極具啟發性的旅程。Chisel以Scala為基礎,它的抽象級別高,極大提升了硬件設計效率,讓代碼更簡潔且易于維護。通過Chisel,我體驗了用近似軟件工程的思維做硬件設計的便捷,特別是在模塊化、參數化設計上的優勢,這為復用代碼和快速迭代創造了條件。Chisel結合Scala的強大生態,使得測試和驗證更加高效,同時降低了硬件設計的學習曲線,尤其適合教學和研究用途。親手實踐,如在IDEA中配置環境并實現流水燈項目,讓我深刻理解了理論到實踐的每一步,過程中遇到問題的解決也鍛煉了自我探索能力。總之,Chisel正引領硬件設計的新風潮,它不僅豐富了我的技術棧,也激發了對硬件設計未來無限可能的想象。

參考

WIN10系統下,用Chisel開發入門FPGA的HelloWorld呼吸燈

【多圖預警】Windows 安裝 SBT、IDEA 使用 SBT 構建項目指南

Scala安裝出現neither build.sbt nor a…問題解決

Chisel入門之路(一)之在windows下vscode搭建|部署Scala2.13.3開發環境|安裝教程

Chisel速成——跟著這個Chisel教程來就行了(已完結)

【IC設計】Windows下基于IDEA的Chisel環境安裝教程(圖文并茂)

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

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

相關文章

函數遞歸及具體例子(持續更新)

遞歸就是函數自己調用自己 求n的階乘 n! n * (n - 1)! 直到n為1或者0的時候為止 舉個例子 int Fun(int n) {if (n < 0){return 1;}else{return n * Fun(n - 1);} }int main() {int n 0;scanf("%d", &n);int ret Fun(n);printf("%d\n", ret…

安裝Kubernetes v3 ----以docker的方式部署

以docker的方式部署 docker run -d \ --restartunless-stopped \ --namekuboard \ -p 80:80/tcp \ -p 10081:10081/tcp \ -e KUBOARD_ENDPOINT"http://192.168.136.55:80" \ -e KUBOARD_AGENT_SERVER_TCP_PORT"10081" \ -v /root/kuboard-data:/data \ e…

springboot中抽象類無法注入到ioc容器

1、背景 在寫代碼時&#xff0c;發現service接口有兩個實現類&#xff0c;并且兩個實現類中沒有對類名重命名&#xff0c;屬性注入的時候也沒有使用byName或Qualifier&#xff0c;正確情況下會發生多實現報錯的問題&#xff0c;以前對這個問題進行解析過。 2、調試過程 我想…

【設計模式】創建型-建造者模式

前言 在面向對象的軟件開發中&#xff0c;構建復雜對象時經常會遇到許多挑戰。一種常見的解決方案是使用設計模式&#xff0c;其中建造者模式是一個強大而靈活的選擇。本文將深入探討建造者模式的原理、結構、優點以及如何在實際項目中應用它。 一、復雜的對象 public class…

飛凌嵌入式FET3568/3568J-C核心板現已適配OpenHarmony4.1

近日&#xff0c;飛凌嵌入式為FET3568/3568J-C核心板適配了OpenHarmony4.1系統&#xff0c;新系統的加持使核心板在兼容性、穩定性與安全性等方面都得到進一步提升&#xff0c;不僅為FET3568/3568J-C核心板賦予了更強大的功能&#xff0c;也為開發者們提供了更加廣闊的創新空間…

每日一練編程題:今天是【接口,多態】

設計程序 : 電腦類的屬性USB接口數組 : 有3個usb插口電腦類的功能 : 通過接口插入外設 (u盤,麥克風,鍵盤等) addUSB(USB usb) { }開機 要求: 電腦開機前,先啟動外設關機 要求: 電腦關機前,先關閉外設 外設類(u盤,麥克風,鍵盤等) 功能 : 啟動 關閉 USB接口 定義usb設備的統一…

python多種方式 保留小數點位數(附Demo)

目錄 前言1. 字符串格式2. round函數3. Decimal模塊4. numpy庫5. Demo 前言 在Python中&#xff0c;保留小數點后特定位數可以通過多種方式實現 以下是幾種常見的方法&#xff0c;并附上相應的代碼示例&#xff1a; 使用字符串格式化&#xff08;String Formatting&#xff…

IDE集成開發環境

IDE集成開發環境&#xff0c;全稱“Integrated Development Environment” 介紹 定義&#xff1a; IDE是用于提供程序開發環境的應用程序&#xff0c;它集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟件服務套。 組成部分&#xff1a; IDE通常包括代碼編…

Ubuntu20.04 Mysql基本操作知識

#Mysql基本知識 運行環境Ubuntu20.04 1.開啟mysql服務 sytemctl start mysql不然&#xff0c;命令行進入myql交互行提交命令后&#xff0c;就會出現4200錯誤。 2.顯示所有數據庫 SHOW DATABASES;注意復數s&#xff0c;畢竟很多數據庫 3.新建數據庫test CREATE DATABASE …

【學習筆記】計算機組成原理(九+十)

控制單元的功能 文章目錄 控制單元的功能9.1 微操作命令的分析9.1.1 取指周期9.1.2 間址周期9.1.3 執行周期9.1.4 中斷周期 9.2 控制單元的功能9.2.1 控制單元的外特性9.2.2 控制信號舉例9.2.3 多級時序系統9.2.4 控制方式 控制單元的設計10.1 組合邏輯設計10.1.1 組合邏輯控制…

LabVIEW與Simulink的通信及調用方式

LabVIEW和Simulink可以通過多種方式進行通信和集成&#xff0c;實現數據交互和功能調用。常見的通信方式包括TCP/IP、UDP、共享內存等&#xff0c;此外還可以利用MATLAB Script Node和S-Function等直接調用對方的功能。這些方法使得LabVIEW和Simulink能夠協同工作&#xff0c;充…

[Algorithm][動態規劃][子序列問題][最長遞增子序列的個數][最長數對鏈]詳細講解

目錄 1.最長遞增子序列的個數1.題目鏈接2.算法原理詳解3.代碼實現 2.最長數對鏈1.題目鏈接2.算法原理詳解3.代碼實現 1.最長遞增子序列的個數 1.題目鏈接 最長遞增子序列的個數 2.算法原理詳解 注意&#xff1a;本題思路和思維方式及用到的方法很值得考究&#xff0c;個人感…

dubbo復習:(18)服務端Filter

用來在服務響應返回到客戶端之前進行額外處理。 一、定義Filter package cn.edu.tju.config;import org.apache.dubbo.rpc.Filter; import org.apache.dubbo.rpc.Result; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Invocation; import org.apache.du…

大量path計算優化方案

1.影響path基礎屬性數據做key緩存&#xff0c;緩存的path應去除坐標變換&#xff0c;歸一化。基礎屬性應滿足CAB, BC-A 2.高頻path操作以&#xff08;keykey操作&#xff09;做新key緩存。 3.高頻修改高級屬性&#xff0c;以新key屬性變更做新key緩存。 4.key與id做中轉映射&am…

redis修改密碼

基于鏡像部署 其實在dockerhub上都有寫 redsi 配置文件從哪找呢? 答案是&#xff1a;從官網或者從github上的release里找到你需要的對應版本解壓后有配置文件 配置文件路徑在哪呢 用redis-server /etc/redis/redis.conf 去指定啟動使用的配置文件 好那么接下來就是一些簡單的…

ad18學習筆記20:焊盤設置Solder Mask Expansion(阻焊層延伸)

【AD18新手入門】從零開始制造自己的PCB_ad18教程-CSDN博客 Altium Designer繪制焊盤孔&#xff08;Pad孔&#xff09;封裝庫的技巧&#xff0c;包括原理圖封裝和PCB封裝_嗶哩嗶哩_bilibili 默認的焊盤中間是有個過孔的&#xff0c;單層焊盤&#xff08;表貼燭盤&#xff09;…

工作流 Activiti7 初始

文章目錄 ??1.1 Activiti 介紹??1.2 Activiti 開發流程??1.3 BPMN 2.0 規范是什么??1.4 BPMN 2.0 基本流程符號????1.4.1 事件 Event????1.4.2 活動????1.4.3 網關 Gateway ??1.5 Activiti API 服務接口????1.5.1 核心Service接口及其獲取 ??1.1 A…

AI科普:TensorFlow 的基本概念和使用場景

TensorFlow是一個開源的深度學習框架&#xff0c;由Google開發并于2015年發布。它提供了一個使用數據流圖進行數值計算的接口&#xff0c;可以在不同的硬件平臺上運行&#xff0c;包括CPU、GPU和TPU。 TensorFlow的核心概念是張量&#xff08;Tensor&#xff09;和計算圖&…

fps游戲如何快速定位矩陣

fps游戲如何快速定位矩陣 矩陣特點: 1、第一行第一列值的范圍在**-1 ---- 1**之間&#xff0c;如果開鏡之后值會變大。 2、第一行第三列的值始終為 0。 3、第一行第四列 的值比較大 &#xff0c; >300或者**<-300**。 根據這三個特點&#xff0c;定位矩陣已經足夠了…

centos7.9離線安裝mysql5.7

centos7.9離線安裝mysql5.7 查詢mysql查詢組查詢用戶不存在創建即可&#xff0c;創建mysql用戶組上傳下載的安裝包創建my.cnf文件修改配置文件修改mysql登陸密碼 centos7.9 mysql5.7 查詢mysql rpm -qa | grep mysql我這里查詢是不存在&#xff0c;如果你的存在可以用rm -rf […