spinal HDL
文章平均质量分 86
Vuko-wxh
道阻且长 行则将至。
展开
-
spinal HDL - 11 - 使用状态机语法编写“1001“序列检测
了解了在spinal HDL中如何利用scala语言进行状态机编写后,本文通过“1001”序列检测器的代码进行练习状态机的编写。原创 2022-08-16 21:46:46 · 2168 阅读 · 0 评论 -
spinal HDL - 10 - 状态机
在 SpinalHDL 中,您可以通过使用枚举和 switch/case 语句来定义您的状态机,就像在 VHDL/Verilog 中一样。但在 SpinalHDL 中,您也可以使用专用语法。原创 2022-08-16 20:43:17 · 684 阅读 · 0 评论 -
spinal HDL - 09 - 时序逻辑
Registers用 SpinalHDL 创建寄存器与用 VHDL 或 Verilog 创建寄存器非常不同。在SpinalHDL ,没有过程/总是阻塞。寄存器在声明中明确定义。这与传统的事件驱动 HDL 的区别有很大的影响:您可以在相同的范围内分配寄存器和连接,这意味着代码不需要在进程/总是块之间分割。它使一些事情更加灵活(参见函数),并且时钟和重置是分开处理的。实例化有4种方法可以实例化一个寄存器:Syntax语法Description描述Reg(type :原创 2021-11-29 13:26:46 · 1392 阅读 · 3 评论 -
spinal HDL - 08 - 赋值
赋值赋值操作有多个赋值操作符:符号描述:=标准赋值,相当于 < = 在 VHDL/Verilog。对变量的最后一次赋值;直到下一次模拟增量循环时,值才会更新。\=相当于: = 在 VHDL 中,= 在 Verilog,这个值会立即更新到位。<>两个信号或同一类型的两个信号束之间的自动连接。方向是通过使用信号方向(进/出)来推断的。(类似于: =)// Because of hardware concurrency, `a` is alway原创 2021-11-22 13:45:59 · 815 阅读 · 0 评论 -
spinal HDL - 07 - 重命名
保留名称将描述 SpinalHDL 如何将名称从 Scala 代码传播到生成的硬件。了解它们应该使您能够尽可能多地保留这些名称以生成可理解的网表。可命名基类所有可以在 SpinalHDL 中命名的东西都扩展了 Nameable 基类。所以在实践中,以下类扩展了 Nameable :ComponentAreaData (UInt, SInt, Bundle, …)Nameable API 的例子:class MyComponent extends Component{ val a,原创 2021-11-11 13:13:58 · 933 阅读 · 0 评论 -
spinal HDL - 06 - 例化VHDL and Verilog IP
实例化VHDL and Verilog IPblackbox允许用户通过指定其接口将现有的 VHDL/Verilog 组件集成到设计中。由模拟器或合成器来正确地进行细化。定义blackbox下面显示了如何定义blackbox的示例:// Define a Ram as a BlackBoxclass Ram_1w_1r(wordWidth: Int, wordCount: Int) extends BlackBox { // Add VHDL Generics / Verilog parame原创 2021-11-05 13:22:18 · 1124 阅读 · 0 评论 -
spinal HDL - 05 - Spinal HDL - 函数和时钟域
函数(Function)使用 Scala 函数生成硬件的方式与 VHDL/Verilog 完全不同,原因有很多:您可以实例化寄存器、组合逻辑和其中的组件。您不必使用限制信号分配范围的process/@always块。一切都是通过引用传递的,这允许轻松操作。例如,您可以将总线作为参数提供给函数,然后该函数可以在内部对其进行读/写。还可以从 Scala返回一个组件、一个总线或任何其他东西。RGB转灰色例如,如果您想通过使用系数将红/绿/蓝颜色转换为灰度,您可以使用函数来应用它们:原创 2021-11-02 13:28:40 · 1132 阅读 · 0 评论 -
spinal HDL - 04 - Spinal HDL - 组件、层次结构和区域
写在前面本文主要介绍了spinal HDL的组件、层次结构和区域。组件和层次结构(Component and hierarchy)就像在 VHDL 和 Verilog 中一样,可以定义可用于构建设计层次结构的组件。但是,在 SpinalHDL 中,不需要在实例化时绑定它们的端口:class AdderCell extends Component { // Declaring external ports in a Bundle called `io` is recommended val i原创 2021-11-02 13:25:57 · 1140 阅读 · 1 评论 -
spinal HDL - 03 - Spinal HDL数据类型 - 复合数据类型
BundleBundle是复合类型,根据单个名称定义了一组命名的信号的(任何SpinalHDL基本类型)。Bundle可用于对数据结构、总线和接口进行建模。声明声明包的语法如下:case class myBundle extends Bundle { val bundleItem0 = AnyType val bundleItem1 = AnyType val bundleItemN = AnyType}例如,一个包含颜色的包可以定义为:case class Color(chan原创 2021-10-28 20:54:51 · 1322 阅读 · 0 评论 -
spinal HDL - 02 - Spinal HDL数据类型 - 基本数据类型
写在前面本文主要介绍了spinal HDL语言的基本数据类型,主要对Bool、Bits、UInt、SInt、Enum进行介绍。数据类型简介该语言提供了 5 种基本类型和 2 种可以使用的复合类型。基本类型:Bool,Bits,UInt用于无符号整数,SInt用于有符号整数和Enum。复合类型:Bundle和Vec。除了基本类型之外,Spinal 还支持开发:定点数(部分支持)浮点数(实验支持)最后,有一种特殊类型可用于检查 BitVector 和包含空洞(无关值)的位常量之间的相原创 2021-10-26 14:10:13 · 2491 阅读 · 0 评论 -
spinal HDL - 01 - 环境搭建与Scala编程指南
写在前面SpinalHDL这个语言,我是在了解了香山处理器Chisel才知道的,一直想用一用,SpinalHDL和Chisel师承一脉,都是基于Scala来进行电路描述。其本质上仍旧是HDL而非HLS,在设计之前依旧需要有清晰的电路结构,在电路描述上更加方便和快捷。本文主要对spinal HDL的参考文档进行了翻译,后期打算应用spinal HDL进行简单的模块的改写。环境搭建参考大佬知乎文章搭建环境:环境搭建文章参考数据类型在 Scala 中,有 5 种主要数据类型:类型示例描述原创 2021-10-21 13:32:01 · 1966 阅读 · 0 评论