当前位置: 首页 > news >正文

Chisel入门——在windows系统下部署Chisel环境并点亮FPGA小灯等实验

Chisel入门——在windows系统下部署Chisel环境并点亮FPGA小灯等实验

  • 一、chisel简介
  • 二、vscode搭建scala开发环境
    • 2.1 安装Scala官方插件
    • 2.2 java版本(本人用的是jdk18)
    • 2.3 下载Scala Windows版本的二进制文件
    • 2.4 配置环境变量
    • 2.5 scala测试
    • 2.6 vscode运行scala
  • 三、windows安装sbt
    • 3.1、sbt下载及安装
    • 3.2 配置环境变量
    • 3.3 sbt配置
    • 3.4测试
  • 四、用Chisel点亮FPGA小灯
    • 4.1 Hello world 实现
    • 4.2 上板验证
  • 五、在DE2-115开发板上实现流水灯
  • 六、心得体会

一、chisel简介

传统数字芯片的RTL设计采用Verilog语言为主,Chisel语言的全称是Constructing Harward in Scala Embeded Language,即在Scala语言中导入Chisel3库,即可使用Chisel语言。其特点是面向对象编程,可以方便地参数化定制硬件电路,加快设计流程。目前在RISC-V生态中应用较多,中科院计算所主持的培育下一代处理器设计人才的“一生一芯”项目也在极力推进该语言。

Chisel是一个Scala库,用于构建高级别的、可综合的、模块化的硬件设计。它允许设计师在高层次上定义硬件的行为,然后通过一系列的转换步骤将其转换为低层次的Verilog或VHDL代码。这使得设计师可以专注于实现硬件的功能,而不需要关心底层的细节。

Chisel的主要特点包括:

高级抽象:使用Scala的高级别抽象来描述硬件行为。
可综合:生成的Verilog或VHDL代码可以直接用于ASIC或FPGA的设计。
模块化:可以将设计分解为多个独立的模块,每个模块都可以独立地进行测试和验证。
交互式开发:可以在Scala REPL中直接运行Chisel代码,以便于调试和验证。

为什么要提出Chisel?
Chisel的设计者们是这么说的(以下翻译自官网Motivation – “Why Chisel?”):

在我们的科研项目和硬件设计课程中,与现有硬件描述语言进行了多年的斗争,这促使我们开发一种新的硬件语言。Verilog和VHDL是作为硬件仿真语言开发的,直到后来它们才成为硬件综合的基础。这些语言的大部分语义不适用于硬件综合,事实上,许多结构都无法综合。其他结构在他们如何映射到硬件实现是很不直观的,或者说他们的使用可能会意外地导致非常低效的硬件结构。虽然可以使用这些语言的子集并且还能得到可以接受的效果,但它们仍然呈现出混乱和令人困惑的规范模型,特别是在教学环境中。

然而,我们开发新硬件语言的最强烈动机是我们希望改变电子系统设计的方式。我们认为,重要的是不仅要教学生如何设计电路,还要教他们如何设计电路生成器——从高级设计参数和约束自动生成设计的程序。通过电路生成器,我们希望利用设计专家的辛勤工作,为大家提高设计抽象水平。为了表达灵活和可拓展的电路结构,电路生成器必须采用复杂的编程技术来确定如何根据高级参数值和约束更好地定制其输出电路。虽然Verilog和VHDL包含一些用于编程电路生成的原始结构,但它们缺乏现代编程语言中的强大功能,例如面向对象编程、类型推断、对函数式编程的支持以及反射等。

我们没有从头开始构建新的硬件设计语言,而是选择在现有语言中嵌入硬件构造原语,我们选择Scala不仅是因为它包含我们认为对于构建电路生成器很重要的编程特性,还因为它是专门作为特定领域语言(DSL)的基础而开发的。

这里只做简单的介绍:更多资料可以查看以下链接
链接: link

二、vscode搭建scala开发环境

2.1 安装Scala官方插件

在VS Code中安装插件,先安装 Scala Syntax (official),再安装 Scala (Metals):
在这里插入图片描述
第一个和第二个都需要安装

2.2 java版本(本人用的是jdk18)

注意可能部分jdk不适配
在这里插入图片描述
直接打开终端,输入

java -version

在这里插入图片描述

2.3 下载Scala Windows版本的二进制文件

下载链接:link

在这里插入图片描述
然后一直点击next即可

注意需要记得安装的路径
在这里插入图片描述

2.4 配置环境变量

1、变量值即为安装的路径
在这里插入图片描述
2.PATH变量下再新增值
在这里插入图片描述

2.5 scala测试

终端输入scala,出现以下信息即可
在这里插入图片描述

2.6 vscode运行scala

在这里插入图片描述
代码如下:

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

在这里插入图片描述

三、windows安装sbt

3.1、sbt下载及安装

官网:http://www.scala-sbt.org/download.html
如果下载的是压缩文件,解压后需要配置环境变量等
通过下面这种方式一般都自动配置好了环境变量

点击next即可,还是要记住安装路径()
在这里插入图片描述

3.2 配置环境变量

这里和sacla的配置内容相同
在这里插入图片描述
在这里插入图片描述

3.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:/sbt/boot/
-Dsbt.global.base=D:/sbt/.sbt
-Dsbt.ivy.home=D:/sbt/.ivy2
-Dsbt.repository.config=D:/sbt/conf/repo.properties
-Dsbt.override.build.repos=true

设置阿里云镜像,国内的网络环境复杂,在 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/

3.4测试

完成后打开cmd,输入 sbt,可能会有一段下载依赖包的过程,成功后会进入命令行,即sbt安装成功
在这里插入图片描述
退出方式:在命令框中输入 exit 即可退出
在这里插入图片描述

四、用Chisel点亮FPGA小灯

参考的chisel书为chisel-book,是一个PDF文档,
链接: link
在这里插入图片描述

4.1 Hello world 实现

在这里插入图片描述
我们从书上找到相应的代码,然后把代码拉下来

git clone https://gitcode.com/schoeberl/chisel-examples.git

在这里插入图片描述

我们知道FPGA需要的是.v文件,显然我们拉下来的代码并没有这个文件,所以我们需要进行一些处理

来到当前文件目录,运行 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())
}

然后即可生成.v文件
在这里插入图片描述

hello.v文件如下

在这里插入图片描述
以及顶层文件 hello_top.v:

在这里插入图片描述

4.2 上板验证

  1. 创建quartus项目
    板子型号为 EP4CE115F29C7

  2. 加入.v文件
    将生成的 Hello.v文件 和 hello_top.v文件 添加到项目中,并设置hello_top.v为顶层文件:

3、引脚绑定
在这里插入图片描述

4、烧入
实验结果如下:
在这里插入图片描述

五、在DE2-115开发板上实现流水灯

步骤和上面相似:

修改 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 10:24]reg [2:0] position; // @[Hello.scala 11:25]wire [31:0] _counter_T_1 = counter + 32'h1; // @[Hello.scala 14:22]wire [2:0] _position_T_1 = position + 3'h1; // @[Hello.scala 20:28]assign io_led = 8'h1 << position; // @[Hello.scala 25:18]always @(posedge clock) beginif (reset) begin // @[Hello.scala 10:24]counter <= 32'h0; // @[Hello.scala 10:24]end else if (counter == 32'h4c4b40) begin // @[Hello.scala 15:30]counter <= 32'h0; // @[Hello.scala 16:13]end else begincounter <= _counter_T_1; // @[Hello.scala 14:11]endif (reset) begin // @[Hello.scala 11:25]position <= 3'h0; // @[Hello.scala 11:25]end else if (counter == 32'h4c4b40) begin // @[Hello.scala 15:30]if (position == 3'h7) begin // @[Hello.scala 17:28]position <= 3'h0; // @[Hello.scala 18:16]end else beginposition <= _position_T_1; // @[Hello.scala 20: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

(这个实验直接把hello.v文件设为top文件即可,不需要加其他文件了)

然后依照和上面一样即可

引脚绑定信息如下:

在这里插入图片描述
实验效果:需要按住key0
在这里插入图片描述

六、心得体会

初次使用chisel,说实话遇到了许多的困难,无论是软件安装还是例子的寻找的遇到了一定的问题,最后磕磕绊绊终于完成了本次实验。
Chisel以Scala为基础,它的抽象级别高,极大提升了硬件设计效率,让代码更简洁且易于维护。通过Chisel,我体验了用近似软件工程的思维做硬件设计的便捷,特别是在模块化、参数化设计上的优势,这为复用代码和快速迭代创造了条件。Chisel结合Scala的强大生态,使得测试和验证更加高效,同时降低了硬件设计的学习曲线,尤其适合教学和研究用途。
感谢这些文章
https://blog.csdn.net/weixin_43681766/article/details/124905667

https://blog.csdn.net/zhengwenbang/article/details/108483335

相关文章:

Chisel入门——在windows系统下部署Chisel环境并点亮FPGA小灯等实验

Chisel入门——在windows系统下部署Chisel环境并点亮FPGA小灯等实验 一、chisel简介二、vscode搭建scala开发环境2.1 安装Scala官方插件2.2 java版本&#xff08;本人用的是jdk18&#xff09;2.3 下载Scala Windows版本的二进制文件2.4 配置环境变量2.5 scala测试2.6 vscode运行…...

Python和C++赋值共享内存、Python函数传址传值、一些其他的遇到的bug

1、Numpy共享内存的情况&#xff1a; array1 np.array([1, 2, 3]) array2 array1 array2[0] 0 # array1也会跟着改变&#xff0c;就地操作 array2 array2 * 2 # array2不会跟着改变&#xff0c;属于非就地操作&#xff0c;会创建一个新的地址给array2array2 array1…...

深度解析ONLYOFFICE协作空间2.5版本新功能

深度解析ONLYOFFICE协作空间2.5版本新功能 上个月&#xff0c;4月份&#xff0c;ONLYOFFICE协作空间推出了V2.5版本&#xff0c;丰富了一些很实用的新功能&#xff0c;之前已经有文章介绍过了&#xff1a; ONLYOFFICE 协作空间 2.5 现已发布https://blog.csdn.net/m0_6827469…...

Java I/O模型

引言 根据冯.诺依曼结构&#xff0c;计算机结构分为5个部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备。 输入设备和输出设备都属于外部设备。网卡、硬盘这种既可以属于输入设备&#xff0c;也可以属于输出设备。 从计算机结构的视角来看&#xff0c;I/O描述了…...

【简单介绍下Sass,什么是Sass?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

bat脚本—快速修改网络配置

一、bat编写前注意事项 windows桌面用文本文件打开把批命令输入在文本框中&#xff0c;保存采用ANSI编码&#xff0c;后缀用.bat 可参考博客——bat脚本简介学习原理以及具体创建方式 &#xff08;文件扩展名位置&#xff09; 语法准确性&#xff1a;严格遵循 BAT 脚本的语…...

node.js漏洞——

一.什么是node.js 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境&#xff0c;基于 Google 的 V8 引擎&#xff0c;V8 引擎执行 Javascript 的速度非常…...

Qt多线程之moveToThread()函数

文章目录 一、moveToThread()执行后&#xff0c;当前代码线程没有改变。二、对象执行moveToThread()后&#xff0c;哪些成员加入了子线程1、创建对象时不指定父对象2、对属性对象使用moveToThread加入子线程作用域3、将属性对象的创建放到子线程中执行 三、C内存模型 在使用“继…...

【WEB前端2024】智体OS:poplang编程控制成本小千元的长续航robot机器人底盘(开源)

【WEB前端2024】智体OS&#xff1a;poplang编程控制成本小千元的长续航robot机器人底盘&#xff08;开源&#xff09; 前言&#xff1a;dtns.network是一款主要由JavaScript编写的智体世界引擎&#xff08;内嵌了three.js编辑器的定制版-支持以第一视角游览3D场馆&#xff09;…...

动态规划法学习

当然&#xff0c;让我们用更生活化的语言和一个实际的例子来解释动态规划&#xff0c;以及如何在实践中应用它。 动态规划通俗理解 想象一下&#xff0c;你是个水果摊老板&#xff0c;每天要决定订购多少苹果&#xff0c;目标是最大化利润。但苹果的价格每天波动&#xff0c;…...

前端技术回顾系列 10|TS 泛型在类和接口中的应用

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供动力。 上文回顾:约束泛型(Generic Constraints) 上一篇文章我们回顾了 泛型 在 TypeScript 中的高级用法 —— 泛型…...

【Ardiuno】实验ESP32单片机自动配置Wifi功能(图文)

这里小飞鱼按照ESP32的示例代码&#xff0c;实验一下wifi的自动配置功能。所谓的自动配置&#xff0c;就是不用提前将wifi的名称和密码写到程序里&#xff0c;这样可以保证程序在烧录上传后&#xff0c;可以通过手机端的软件来进行配置&#xff0c;可以避免反复修改代码&#x…...

xml数据解析

XML Pull Parser&#xff08;使用Android的XmlPullParser&#xff09; 原理 Pull Parser允许应用程序代码从XML数据中“拉取”事件&#xff0c;而不是像SAX那样通过事件处理程序被“推送”。应用程序代码可以决定何时拉取下一个事件&#xff0c;如开始元素、结束元素或文本内…...

vite工程化搭建vue项目之自动按需导入

背景 当我们在使用vue3组合式开发的时候&#xff0c;大多数情况下我们的代码可能是这样的 <script setup lang"ts"> import { ref, reactive, toRefs, onMounted, computed } from vue; defineProps({}); </script><template><div></di…...

yolo-inference多后端+多任务+多算法+多精度模型 框架开发记录(python版)

先贴出github地址&#xff0c;欢迎大家批评指正&#xff1a;https://github.com/taifyang/yolo-inference 不知不觉LZ已经快工作两年了&#xff0c;由于之前的工作内容主要和模型部署相关&#xff0c;想着利用闲暇时间写一些推理方面的经验总结&#xff0c;于是有了这个工程。其…...

uniapp使用vue3语法构建自定义导航栏,适配小程序胶囊

具体代码 <template><view class"nav-wrapper-container" :style"height:navBarHeight px"><view class"nav-status-container" :style"height:navstatusBarHeight px;" /><view v-if"isCustom" clas…...

wpf、winform 监听USB拔插时触发

C# USB拔插监听 C#查找设备管理器中所有的 USB 设备 wpf、winform 监听USB拔插时触发 监听Windows USB 拔插时触发 private void MainWindow_Loaded(object sender, RoutedEventArgs e){FleckWebSocketConfig.OpenSocketConfig().GetAwaiter(); //websocket 服务开启用于监听W…...

C语言:指针笔试题

// 输入某一年的第几天&#xff0c;计算并输出它是这一年的第几月第几日。 /* 函数功能: 对给定的某一年的第几天&#xff0c;计算它是这一年的第几月第几日。 函数入口参数: 整形变量year,存储年&#xff1b; 整形变量yearDay,存储某一年的第几天&am…...

搜维尔科技:Movella旗下的Xsens在人形机器人开发中得到广泛应用

人形机器人的发展正在全球范围内受到广泛关注。作为机器人领域的重要分支&#xff0c;人形机器人因其具备高度仿真的外观和动作&#xff0c;以及更贴近人类的行为模式&#xff0c;有望逐渐成为人们日常生活和工业生产中的得力助手。在中国&#xff0c;这一领域的发展尤为引人注…...

k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例&#xff08;1&#xff09;部署一个服务&#xff08;2&#xff09;创建HPA对象&#xff08;3&#xff09;执行压测 前言…...

OV5640摄像头SCCB配置详解:告别照抄寄存器表,教你读懂数据手册进行个性化设置

OV5640摄像头SCCB高级配置实战&#xff1a;从寄存器表解读到图像优化全解析 1. 深入理解OV5640寄存器架构 OV5640作为OmniVision推出的500万像素图像传感器&#xff0c;其强大功能背后是超过200个可配置寄存器。许多开发者习惯直接套用现成的寄存器配置表&#xff0c;但当遇到图…...

脑波货币化:公司用我的焦虑情绪炒期货

一、软件测试工程师&#xff1a;焦虑的“完美生产者”在持续集成、敏捷交付的现代开发流程中&#xff0c;软件测试从业者长期处于多重压力夹击之下&#xff1a;精确性高压&#xff1a;对缺陷零容忍的行业标准&#xff0c;使每一次测试执行如同走钢丝技术迭代焦虑&#xff1a;AI…...

告别小白屏!树莓派3.5寸/5寸屏幕驱动安装全攻略(含HDMI/GPIO款区分与镜像下载)

树莓派外接屏幕终极指南&#xff1a;从驱动安装到故障排查一站式解决 树莓派爱好者们常常会遇到一个令人头疼的问题——当你兴冲冲地连接上一块3.5寸或5寸的小屏幕&#xff0c;期待立即开始项目开发时&#xff0c;迎接你的却是一片刺眼的白屏。这种情况在非官方屏幕中尤为常见&…...

OpenClaw隐私保护方案:ollama-QwQ-32B本地化数据处理流程

OpenClaw隐私保护方案&#xff1a;ollama-QwQ-32B本地化数据处理流程 1. 为什么需要本地化隐私保护方案 去年我在处理一份涉及客户隐私的市场分析报告时&#xff0c;遇到了一个棘手问题&#xff1a;当使用云端AI服务进行数据清洗和分析时&#xff0c;不得不将包含敏感字段的原…...

单轴晶体中的偏振转换

摘要 当线偏振光聚焦并通过单轴晶体传播时&#xff0c;即使沿着光轴方向&#xff0c;不同的偏振分量之间也可能会发生复杂的转换。这种现象可以应用于例如产生涡旋光。以方解石晶体为例&#xff0c;这个用例在VirtualLab Fusion中证明了单轴晶体中的偏振转换。并且可以观察到…...

GEO时代的技术突围:Infoseek媒体发布如何改写内容分发规则

最近在技术圈刷到一个新词——GEO&#xff08;生成式引擎优化&#xff09;。和传统SEO不一样&#xff0c;GEO的目标不是让网页排到搜索结果前面&#xff0c;而是让AI在回答用户问题时&#xff0c;把你的内容当成“标准答案”来引用。这个变化挺有意思&#xff0c;意味着内容分发…...

Mermaid CLI深度技术解析:如何构建企业级图表自动化流水线

Mermaid CLI深度技术解析&#xff1a;如何构建企业级图表自动化流水线 【免费下载链接】mermaid-cli Command line tool for the Mermaid library 项目地址: https://gitcode.com/gh_mirrors/me/mermaid-cli Mermaid CLI作为文本图表转换的命令行工具&#xff0c;正在成…...

像素幻梦·创意工坊部署教程:Mac M1/M2芯片原生运行FLUX.1-dev像素生成

像素幻梦创意工坊部署教程&#xff1a;Mac M1/M2芯片原生运行FLUX.1-dev像素生成 1. 前言&#xff1a;认识像素幻梦创意工坊 像素幻梦创意工坊(Pixel Dream Workshop)是一款专为像素艺术创作设计的AI工具&#xff0c;基于最新的FLUX.1-dev扩散模型构建。与传统的AI绘图工具不…...

Python实战:温度转换小工具开发(附GESP考试真题解析)

Python实战&#xff1a;温度转换小工具开发与GESP考试技巧精讲 温度转换是编程入门阶段的经典案例&#xff0c;也是GESP考试中常见的题型。本文将从零开始构建一个功能完整的温度转换工具&#xff0c;同时深入解析GESP考试中可能遇到的类似题型&#xff0c;帮助初学者掌握Pytho…...

CentOS 7 编译 Linux 5.15 内核遇 BTF 报错?别慌,这份保姆级排错指南帮你搞定 dwarves 和 pahole

CentOS 7 编译 Linux 5.15 内核 BTF 报错全攻略&#xff1a;从 dwarves 编译到环境修复 在 CentOS 7 上手动编译较新版本的 Linux 内核&#xff08;如 5.15 系列&#xff09;时&#xff0c;启用 BTF&#xff08;BPF Type Format&#xff09;功能经常会遇到各种依赖问题。本文将…...