SpinalHDL
文章平均质量分 77
千穹凌帝
这个作者很懒,什么都没留下…
展开
-
SpinalHDL 学习笔记
SpinalHDL是一种基于Scala的硬件构筑语言(Constructing Hardware In Scala Embedded Language),通过比Verilog/VHDL更好层次的行为级描述,拥有更加高层次视角以及抽象编码能力,作为一种Verilog/VHDL代码的生成器,在Verilog/VHDL绝对统治芯片设计语言的情况下,宛如一泓清泉带来不一样的清新体验,又似一匹黑马从一堆新芯片设计语言中杀将出来。4.请文明交流,做这行的都算高层次人才,希望你有对应的高素质;3.可以潜水,不能灌水;原创 2024-06-14 21:27:21 · 677 阅读 · 0 评论 -
SpinalHDL之IIC(三)
为例,介绍一下SpinalHDL实际描述。本文作为SpinalHDL学习笔记第。本篇介绍IIC顶层模块。原创 2024-10-15 11:26:42 · 285 阅读 · 0 评论 -
SpinalHDL之IIC(二)
本文作为SpinalHDL学习笔记第篇,以一个完整的IIC模块为例,介绍一下SpinalHDL实际描述的方式。本篇介绍IIC主体模块。原创 2024-10-15 11:14:34 · 157 阅读 · 0 评论 -
SpinalHDL之设计错误(Design Errors)(三)
在某些情况下, 可能由于硬件参数化, ⽣成只有init描述但⽆分配的寄存器也是有意义的。十三、⽆法实现的is表述(Unreachable is statement)⽆法实现的is表述(Unreachable is statement)SpinalHDL会检查并确保switch中的所有is语句是可实现的。十二、未分配的寄存器(Unassigned register)SpinalHDL会检查赋值两侧的操作和信号有相同的位宽。我们需要克隆的是硬件的单元, ⽽不是最终在其中赋值的值。篇,介绍SpinalHDL的。原创 2024-10-14 12:13:49 · 315 阅读 · 0 评论 -
SpinalHDL之IIC(一)
本文作为SpinalHDL学习笔记第篇,以一个为例,介绍一下SpinalHDL实际描述RTL的方式。原创 2024-10-14 11:34:37 · 479 阅读 · 0 评论 -
SpinalHDL之错误集(一)
本文作为SpinalHDL学习笔记第篇,作为错误集使用,类似高中生的错题集,几率使用SpinalHDL过程中遇到的问题,小到语法错误、版本兼容问题,大到SpinalHDL库函数错误等等,。原创 2024-10-12 11:28:15 · 627 阅读 · 0 评论 -
SpinalHDL之设计错误(Design Errors)(二)
六.锁存器检测(Latch detected)原创 2024-10-12 10:43:43 · 365 阅读 · 0 评论 -
SpinalHDL之设计错误(Design Errors)(一)
SpinalHDL将会检查当前层次设计的信号不会访问到该组件的外部区域。下述信号可以被⼀个组件内所访问:原创 2024-10-11 12:22:09 · 662 阅读 · 0 评论 -
SpinalHDL之时序逻辑(Sequential logic)(二)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的。原创 2024-10-10 12:08:34 · 678 阅读 · 0 评论 -
SpinalHDL之时序逻辑(Sequential logic)(一)
⼀、简介(Introduction)在SpinalHDL中创建寄存器与VHDL和Verilog中区别很⼤。在SpinalHDL中, 没有process/always块, 寄存器在声明的时候就清晰地定义出来。原创 2024-10-09 20:53:12 · 1018 阅读 · 0 评论 -
SpinalHDL之语义(Semantic)(三)
⼀、简介(Introduction)SpinalHDL背后的语义学很重要, 学会语义你就能理解在这些情景背后到底发⽣了什么, 并且如何去控制它。这些语义通过以下⼏条规则定义:原创 2024-09-29 21:46:37 · 694 阅读 · 0 评论 -
SpinalHDL之语义(Semantic)(二)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的。原创 2024-09-27 22:07:15 · 479 阅读 · 0 评论 -
SpinalHDL之语义(Semantic)(一)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的。原创 2024-09-26 17:46:44 · 403 阅读 · 0 评论 -
SpinalHDL之结构(八)
⼀、简介(Introduction)SpinalHDL的参数化概念涉及多个⽅⾯:原创 2024-09-26 12:14:33 · 387 阅读 · 0 评论 -
SpinalHDL之结构(七)
⼀、简介(Introduction)本文会介绍SpinalHDL如何把名字从scala代码传递到产⽣的硬件中。知道这些能帮助你更好地了解如何保留名字, 以尽可能增加⽣成的⽹表的可读性。⼆、可命名的基础类(Nameable base class)在SpinalHDL中所有可以被命名的东⻄都扩展了可命名的基类。所以实际上, 以下的类拓展了可命名特点:原创 2024-09-25 14:16:22 · 890 阅读 · 0 评论 -
SpinalHDL之结构(六)
⼀、描述(Description)⿊盒(blackbox)允许使⽤者把已有的VHDL/Verilog模块通过指定接⼝集成到当前设计中, 这种调⽤的正确描述取决于仿真器或综合器。⼆、定义⿊盒(Defining an blackbox)原创 2024-09-24 12:01:04 · 715 阅读 · 0 评论 -
SpinalHDL之结构(五)
三、跨时钟域(Clock domain crossing)本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的。原创 2024-09-23 12:05:03 · 526 阅读 · 0 评论 -
SpinalHDL之结构(四)
⼀、简介(Introduction)在SpinalHDL中, 时钟和复位信号能结合起来构成时钟域(clock domain)。时钟域可以应⽤于设计的某些区域中, 例化在这些区域中的所有同步单元都会隐式地使⽤这些时钟域。时钟域的应⽤的⼯作模式类似于堆栈, 这意味着你在⼀个给定的时钟域中仍然可以在本地施加另⼀个时钟域。需要注意的是, ⼀个寄存器在它被创建的时候捕捉时钟域, ⽽非它被赋值的时候。所以请确保在你所希望的ClockingArea中创建寄存器。⼆、例化(Instantiation)原创 2024-09-20 12:17:21 · 997 阅读 · 0 评论 -
SpinalHDL之结构(三)
⼀、简介(Introduction)⽤Scala函数产⽣硬件的⽅式与VHDL/Verilog中非常不同, 原因如下:原创 2024-09-19 11:58:20 · 552 阅读 · 0 评论 -
SpinalHDL之结构(二)
在VHDL和Verilog中, 有时候前缀可以⽤来把变量拆分成逻辑块, 在SpinalHDL中可以⽤。ClockingArea是⼀种特殊的Area允许你⽤给定的ClockDomain定义⼀块硬件电路。本文作为SpinalHDL学习笔记第。篇,介绍SpinalHDL的。原创 2024-09-19 11:49:20 · 238 阅读 · 0 评论 -
SpinalHDL之结构(一)
⼀、简介(Introduction)正如VHDL和Verilog, 你可以在SpinalHDL中定义模块来进⾏层次化设计。然⽽, 在SpinalHDL中, 你不需要在例化的时候分配他们的端⼝。原创 2024-09-18 12:02:13 · 1098 阅读 · 0 评论 -
SpinalHDL之数据类型(七)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的数据类型。SpinalHDL定点数只是部分⽀持并部分经过测试的, 如果你发现它有任何bug, 或者你认为有些函数丢失了, 请创建⼀个Github issue。并且, 请不要在代码中⽤未在doc中指出的特征。原创 2024-09-14 12:06:25 · 894 阅读 · 0 评论 -
SpinalHDL之数据类型(六)
Vec是定义了⼀组带有标号的信号的复合信号(基于SpinalHDL基础类别)。前缀⽤来与接受lambda函数作为参数的同名Scala函数的歧义。4. 库辅助函数(Lib Helper functions)1. 比较操作(Comparison)2. 类型转换(Type cast)⼀、描述(Description)1.描述(Description)⼀、描述(Description)⼆、声明(Declaration)三、操作符(Operators)篇,介绍SpinalHDL的。使⽤这些函数, 需要。原创 2024-09-13 11:57:01 · 539 阅读 · 0 评论 -
SpinalHDL之数据类型(五)
如果你的接⼝遵从于master/slave拓扑, 你可以使⽤IMasterSlave特性, 之后你需要对函数def asMaster(): Unit配置来补全每个来⾃master⽅⾯的元素的⽅向, 这之后你就可以在IO定义中⽤master(MyBundle())和slave(MyBundle())语句。bundle的元素在⼆进制串中按照定义的顺序排列, 因此r在color1中myBits(LSB)中的0-8, 之后按顺序依次所g和b。当你在模块的IO定义中定义⼀个Bundle, 你需要指定它的⽅向。原创 2024-09-11 11:24:50 · 614 阅读 · 0 评论 -
SpinalHDL之数据类型(四)
对于上述例⼦, 使⽤默认的编码⽅式。原⽣的枚举类型⽤于VHDL, ⼆进制编码⽤于Verilog。|操作符|描述|返回类型| |x===y|相等|Bool| |x=/=y|不相等|Bool|为了使⽤你的enum, 例如在函数⾥, 你需要它的类型。Enumeration类型代表⼀组值组成的列表。1. 比较运算(Comparison)⼀、描述(Description)⼆、声明(Declaration)三、操作符(Operators)1. 编码(Encoding)2. 举例(Example)原创 2024-09-10 10:17:02 · 693 阅读 · 0 评论 -
SpinalHDL之数据类型(三)
一.描述(Description)本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的数据类型。目录:1.描述(Description)2.声明(Declaration)3.操作符(Operators)一.描述(Description)UInt/SInt数据类型是⼀个能⽤在有/⽆符号计算中的bits向量。原创 2024-09-09 16:20:38 · 727 阅读 · 0 评论 -
SpinalHDL之数据类型(二)
以上移位虽说是逻辑移位, 但⽣成的Verilog中是算术移位, ⽤>>>或原创 2024-09-09 14:10:18 · 406 阅读 · 0 评论 -
SpinalHDL之数据类型(一)
Bool(value:Boolean) 创建⼀个值为Scala Boolean(true, false)的Bool量。最后, 还有⼀种特殊类型能够检查BitVector和bit常量是否相等, 且可以添加⽆效位。Bool, Bits, UInt⽆符号整型, SInt有符号整型, Enum。4.请文明交流,做这行的都算高层次人才,希望你有对应的高素质;Bool数据类型对应于布尔值(True/False)声明布尔值的语法如下所⽰:([]中的内容可填项)2.提问是你的权利,但回答不是别人的义务;原创 2024-09-07 11:46:38 · 572 阅读 · 0 评论 -
SpinalHDL之IMasterSlave 特 征
有些函数定义为 toXXX,例如 Flow 类的 toStream 方法。这些函数通常可以由 master 端调用。另外,fromXXX 函数是为 slave 侧设计的。通常 master 端可用的功能多于 slave 端。从 master 的角度设置每个元素的方向。如 果 接 口 遵 循 主/从 拓 扑 结 构, 可 以 使 用。篇,介绍SpinalHDL的IMasterSlave 特 征。valid, ready 和 payload。信号的简单总线,则可以在其中定义一些有用。例如,如果定义一个带有。原创 2024-09-07 11:15:10 · 259 阅读 · 0 评论 -
SpinalHDL之BlackBox(下篇)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的BlackBox类的一些特性。原创 2024-09-04 20:54:39 · 629 阅读 · 0 评论 -
SpinalHDL之BlackBox(上篇)
在Spinal的代码里,可以将Verilog的代码加进来,需要在Verilog外在包一层,这一层就是SpinalHDL里的BlackBox类。在VHDL 中, Bool 类型的信号将被转换为 std_logic , Bits 将被转换为 std_logic_vector。如果只想在黑盒组件中使用 std_logic_vector ,则可以将标签 noNumericType 添加到黑盒中。要将 ClockDomain 的信号映射到黑盒的相应输入,可以使用。篇,介绍SpinalHDL的BlackBox类。原创 2024-09-04 20:37:13 · 802 阅读 · 0 评论 -
SpinalHDL之样例类
在SpinalHDL中,定义Bundle 或 Component时,可以定义成类或是样例类,即。,那么这两种方式有什么区别,以及怎么选择呢?本文作为SpinalHDL学习笔记第。篇,介绍SpinalHDL的样例类。原创 2024-08-19 09:29:52 · 217 阅读 · 0 评论 -
SpinalHDL之spinal.core 组件(下篇)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的组件相关内容。原创 2024-08-18 12:32:42 · 858 阅读 · 0 评论 -
SpinalHDL之spinal.core 组件(中篇)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL的组件相关内容。原创 2024-08-18 12:24:18 · 519 阅读 · 0 评论 -
SpinalHDL之常见错误
1.“main”线程中异常 java.lang.NullPointerException本文作为SpinalHDL学习笔记第篇,介绍 在使用 SpinalHDL 时可能出现的错误。原创 2024-08-17 12:21:49 · 531 阅读 · 0 评论 -
SpinalHDL之pinsec(下篇)
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL pinsec相关内容。原创 2024-08-15 12:05:32 · 697 阅读 · 0 评论 -
SpinalHDL之pinsec(上篇)
1.简介。原创 2024-08-12 10:33:13 · 1143 阅读 · 0 评论 -
SpinalHDL之RiscV
本文作为SpinalHDL学习笔记第篇,介绍SpinalHDL RiscV设计。:本文仅记录在 SpinalHDL 中创造的第一代 RISC-V CPU。未记录 VexRiscV CPU,它是该CPU 的第二代,可在 此处获取,并提供更好的性能/面积/特性。原创 2024-08-12 08:59:21 · 472 阅读 · 0 评论 -
SpinalHDL之高级示例(下篇)
但即使对于计时器,也可以使用 SpinalHDL 做一些有趣的事情。这个示例将定义一个简单的计时器组件,其中集成了一个总线桥接实用工具。下面是一些演示代码,它与 Pinsec SoC 计时器模块中使用的代码非常接近。• 在 Timer 组件内定义一个函数,这个函数可以从父组件调用该函数,并以抽象方式驱动 Timer 的。现在我们可以从这个例子的主要目的开始:定义总线桥接功能。内定义的函数,它在 APB3 总线和所有实例化组件之间创建桥接逻辑。让我们在 Timer 组件中添加这个桥接函数。原创 2024-08-11 09:27:56 · 842 阅读 · 0 评论 -
SpinalHDL之中级示例(下篇)
让我们定义一个新的 VgaCtrl Component ,它将 RgbConfig 和 timingsWidth 作为参数。我们将位宽设置为默认值 12。原创 2024-08-08 10:15:21 · 506 阅读 · 0 评论