函数副作用
获取服务器所有玩家的列表
1 | FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList(); |
获取玩家所在的世界
1 | player.world |
Chisel提供的常用接口之一是 DecoupledIO
,为传输数据提供一个随时有效的接口。DecoupledIO
的原理是,当源端有数据要传入时使能valid
信号,并且将数据传入bits
。
当接收器准备好接受数据时,使能ready
信号,当ready
和 valid
在一个周期内都被使能时,数据被认为是被传输的。
DecoupledIO
Bundle的字段:
valid
: Output(Bool)ready
: Input(Bool)bits
: Output(UInt(width.W(or U)))Flipped
会改变DecoupledIO
的bits
字段的默认方向,DecoupledIO
的bits
字段默认方向是Output,在使用Flipped
之后,bits
字段的方向会变为Input。1 | val in = Decoupled(UInt(8.W)) |
1 | val in = new Bundle { |
Flipped
之后,DecoupledIO
的输出方向会变成Input。1 | val in = Flipped(Decoupled(UInt(8.W))) |
1 | val in = new Bundle { |
Queue
创建一个FIFO队列,两边都有Decoupled接口,允许背压(backpressure)。数据类型和元素的数量都是可配置的。首先用sbt
创建一个Scala项目,sbt scala/scala3.g8
然后进入项目文件夹
修改build.sbt
,将build.sbt
修改为以下内容
1 | ThisBuild / scalaVersion := "2.12.13" |
然后创建一个src/main/scala/QueueTest/QueueTest.scala
文件,里面填入以下内容
1 | package QueueTest |
再创建一个src/main/scala/QueueTest/QueueTestSpec.scala
文件,里面填入以下内容
1 | package QueueTest |
最后打开命令行,再命令行里如下以下代码,下面这行代码会在generated/QueueTest
里生成verilog
代码
1 | sbt "test:runMain QueueTest.testMain --target-dir generated/QueueTest" |
Starting:
io.in: ready=1
io.out: valid=0, bits=0
After first enqueue:
io.in: ready=1
io.out: valid=1, bits=42
On first read:
io.in: ready=Bool(false)
io.out: valid=Bool(true), bits=UInt<8>(42)
On second read:
io.in: ready=Bool(true)
io.out: valid=Bool(true), bits=UInt<8>(43)
On third read:
io.in: ready=Bool(true)
io.out: valid=Bool(false), bits=UInt<8>(42)
Interlude: Chisel Standard Library
What does Flipped() do in Chisel3?
近日,python的官网更新了3.10.0的alpha版本,我个人非常期待这次python的版本更新,因为在3.10.x中,python加入了结构模式匹配(Structural Pattern Matching)的语法。
python的结构模式匹配(下文简称模式匹配)类似于C/C++的switch语句。但python的模式匹配比C语言的switch语句功能强大。下面就来看看python的模式匹配。
python的模式匹配使用的关键字时match。
1 | #运行上面的代码,如果输入1则输出"您输入了1",否则输出"您没输入1"。 |
下面是等价的C语言代码。
1 | #include <stdio.h> |
python的模式匹配不仅能匹配数字,还能直接匹配字符串。
1 | #运行上面的代码,如果输入hello则输出"hello match",否则输出"match hello"。 |
下面是等价的C语言代码。
1 | #include <stdio.h> |
1 | x = int(input()) |
下面是等价的C代码
1 | #include <stdio.h> |
在介绍chinoGL之前,先来介绍一下openGL。
什么是OpenGL?
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的API。
OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
OpenGL的高效实现(利用图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。
什么是chinoGL?
chinoGL是用于渲染2D,3D矢量图形的跨平台API,chinoGL使用纯软件实现,不使用硬件加速(暂时)。
chinoGL的目标是用纯软件来实现openGL的所有功能,但API和OpenGL的API不兼容。chinoGL用于给学习图形学的新手提供具体算法的参考代码。
chinoGL目前能处理3D矢量图形吗?
由于chinoGL还处于起步阶段,所以还不支持3D矢量图形的处理和绘制,目前只能处理2D图形。