bluespec systemverilog (bsv) 是由arvind 开发的 bluespec 语言,这是一种高级功能 硬件 描述编程语言,本质上是haskell(haskell ( / ˈh æs k əl / ) 是一种通用的、静态类型的、纯函数式 编程语言,具有类型推断和惰性求值。)的扩展,用于处理一般的芯片设计和电子设计自动化。bluespec的主要设计者和实现者是lennart augustsson。bluespec 被部分评估(转换 haskell 部分)并编译为术语重写系统(trs)。它带有一个systemverilog前端。bsv 编译为verilog rtl 设计文件。
为什么要 bsv?verilog 不好用?
bsv 是一门高级硬件描述语言(high-level hardware description language, hl-hdl),与 verilog 一样,被用于 fpga 或 asic 的设计和验证。bsv 于 2003 年被 bluespec 公司开发,期间是商业收费工具,到 2020 年它的编译器才开源,这才给了我们接触它的机会。
verilog 的语法简单、特性少,却能全面且精准地描述数字电路,是“小而美”的语言。学习 verilog 时,只需要掌握3种常见写法:assign, always @ (*) 和 always @ (posedge clk) ,剩下的就依赖于你对电路设计的理解了。当然,这才是最难的,包括各种繁杂的硬件设计思维——状态机、并行展开、流水线化、握手信号、总线协议等。
各位读到这里有没有意识到问题——用如此简单的抽象级别来描述如此复杂的数字电路系统,会不会很吃力?相信每个接触过复杂的 verilog 系统的读者,都体会过被 always 块下的几十个状态所支配的恐惧,也清晰地记得模块实例化时那几十行吓人的端口连接。因此,我们需要一种抽象层次更高的 hdl 来提高开发效率,bsv 就能胜任这一工作。
以上内容来源于:
❝
https://zhuanlan.zhihu.com/p/469917984
❞
对bsv有兴趣的可以看看上面文章《爆肝6万字的 bluespec systemverilog (bsv) 中文教程上线了》。
今天的核心是使用bsv设计一款游戏,看下在实际设计中bsv表现如何~
使用bsv设计《太空入侵者》
绪论
2020年1月,bluespec开源了bsc(bluespec systemverilog compiler)。因此我安装了 bsc,这是一个编译器,可以对用bsv (bluespec systemverilog)编写的设计进行高级综合。bsv 与任何其他语言一样,无法通过阅读手册来学习,我认为学习新语言的唯一方法是实际设计应用程序。因此,我尝试使用 bsv 设计《太空入侵者》游戏。
bsv
简而言之,verilog hdl 是一种标准化为 ieee 1364 的硬件设计语言 (hdl),而 systemverilog 是其标准化为 ieee 1800 的扩展。bsv 是进一步扩展 systemverilog 的 hdl。
使用设备
使用的开发板如下:
第一步 - 声音 fsm(有限状态机)设计
第一次应用bsv时,声音状态机的规模比较小,所以这是第一个设计目标。
确定声道
游戏中使用了 10 种不同的声音;需要确定同时发生的数量(=声道的数量)。考虑到游戏场景中同时发生的条件,假设有4个通道:玩家自己的船的声音、入侵者的声音1和2、ufo的声音。
声音系统框图
框图如下图所示。声音fsm从之前的设计扩展到4个通道。
第二步——游戏fsm设计
然后继续进行游戏fsm的状态机设计。
在设计声音 fsm 时,我使用基于状态的设计方法来设计 fsm 。本文中的基于状态的fsm设计方法是指将序列手动分解为状态,并为每个状态一一编写规则的方法。这种方法基本上需要与verilog相同的工时。换句话说,使用高级语言没有什么好处。
另一方面,bsv 有一个名为stmtfsm的库,可以高效地设计状态机。在这个游戏fsm中,我充分利用了这一点,设计时无需手动进行状态分解。在本文中,这种方法将被称为基于序列的方法。
博弈fsm算法
基本上,我发现游戏可以用与用c编写相同的方式来编写。例如,如果我考虑子弹移动、碰撞检测、碰撞处理以及显示和擦除爆炸标记的算法,则算法是对于自己和敌人的子弹来说都是一样的,如下所示。
if (bullet_explosion_timer >= 1) { // bullet exploding bullet_explosion_timer++; if (bullet_explosion_timer == max) { bullet deletion; // logical deletion erase bullet_explosion_mark; // logical erasure bullet_explosion_timer <= 0; }} else { if (no bullets and bullet generation condition) { bullet generation process; bullet sound; // only own bullets, no sound for enemy bullets } if (bullet exists) { collision detection; if (collision with object) { // invader and ufo for own bullets, ship for enemy bullets delete bullet; // logical deletion erase bullet_mark; // physical deletion object state <= explosion; object_explosion_timer <= 0; } else if (up down hash || base || bullets) { // bullets: if own bullets, enemy bullets; if enemy bullets, own bullets erase bullet_mark; // physical erase show bullet_explosion_mark; bullet_explosion_timer <= 1; // start timer } else { // if no collision advance bullet; // if no collision, advance the bullet; // if no collision, advance the bullet } }}
另一方面,该对象需要专门的处理,如下面的代码所示。
if (object state == explosion) { if (object_explosion_timer == 0) { object_explosion_timer <= 1; // start timer object explosion sound; show object_explosion_mark ; } else { object_explosion_timer++; if (object_explosion_timer == max) { delete object; // logical deletion erase object_explosion_mark; // physical erasure } }}
通过应用 stmtfsm,可以将项目符号序列描述为一种算法,而无需将其分解为逐个时钟状态。我用类c语言编写了上面的伪代码,但我只需要将bsv中的'{'更改为seq ,将'}'更改为endseq 。if、while、for等控制语法由bsc进行行为综合,并转换为verilog中的状态机。
游戏完成
下面的动图展示了可能是世界上第一部由 bsv 设计的《太空入侵者》游戏的视频。
完整的入侵者层次结构如下图所示。button_0 只是一个对板载开关和外部开关进行或运算的电路。入侵者_移动_0是bsv设计的游戏fsm。blk_mem_gen_0是连接到游戏fsm的rom,用于存储入侵者的模式等。
bsv的优势
虽然 bsv 看起来效率更高,但它增加了 bsc 的编译时间,对于大型设计来说可能会超过一个小时。因此,对于这样的设计,修改、模型创建和仿真的tat(周转时间)将非常长,这可能使其效率低于verilog。然而,bluesim 中的仿真速度比 iverilog 中快约 3, 000 倍。
总结
代码如下:
❝
https://github.com/mocapapa/spaceinvaders_bsv_ultra96v2
❞
对于这一“语言”,其发展肯定会在某一方面有突出优点,之后才能被慢慢接受,类似spinalhdl/chisel等,但是该门语言目前未在业内受到重视,但是未来的发展我抱有希望~
【干货分享】从零学习使用瑞萨RA6M4开发板
超低中频CMOS下混频器的设计
AI视觉识别有哪些工业应用
广东鼎丰纸业有限公司选购HS-TGA-103热重分析仪
“忻州号”低轨物联网卫星成功发射
在实际设计中BSV表现如何
Intel无核显处理器i9-9900KF售价高达684美元 比带核显的酷睿i9-9900K贵得多
电路板清洗技术详解_电路板怎么清洗_电路板清洗方法
台积电3nm工艺将实现15%性能提升
小米6、努比亚Z17对比评测:颜值、配置、价格、系统、拍照功能五大对比!
第二层上的PCB布线-打破固定规则
vivo X30 Pro搭载了一枚50mm的专业人像镜头支持60倍超级变焦
院士“天团”为天津智能制造指路
iPhone8什么时候上市?iPhone8最新消息:iphone8长长电源键暗藏黑科技,瞬间秒变大屏电脑
小米户外蓝牙音箱高清图集
物联网带宽需求超过“太空互联网”计划
谷歌推出AI驱动的代码补全和生成工具Duet AI
半导体芯片龙头股频遭减持
小鹏汽车:明年进入辅助驾驶下半场,3年后向无人驾驶进发
超声波流量计是什么,超声波流量计的常见故障剖析