0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

开源的Bluespec SystemVerilog (BSV)语言表现如何?

OpenFPGA 来源:OpenFPGA 2023-06-27 10:14 次阅读

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 一样,被用于 FPGAASIC 的设计和验证。BSV 于 2003 年被 Bluespec 公司开发,期间是商业收费工具,到 2020 年它的编译器才开源,这才给了我们接触它的机会。

Verilog 的语法简单、特性少,却能全面且精准地描述数字电路,是“小而美”的语言。学习 Verilog 时,只需要掌握3种常见写法:assign, always @ (*) 和 always @ (posedge clk) ,剩下的就依赖于你对电路设计的理解了。当然,这才是最难的,包括各种繁杂的硬件设计思维——状态机、并行展开、流水线化、握手信号、总线协议等。

各位读到这里有没有意识到问题——用如此简单的抽象级别来描述如此复杂的数字电路系统,会不会很吃力?相信每个接触过复杂的 Verilog 系统的读者,都体会过被 always 块下的几十个状态所支配的恐惧,也清晰地记得模块实例化时那几十行吓人的端口连接。因此,我们需要一种抽象层次更高的 HDL 来提高开发效率,BSV 就能胜任这一工作。

对BSV有兴趣的可以看看上面文章《爆肝6万字的 Bluespec SystemVerilog (BSV) 中文教程上线了》。

今天的核心是使用BSV设计一款游戏,看下在实际设计中BSV表现如何~

使用BSV设计《太空入侵者》

绪论

2020年1月,Bluespec开源了bsc(Bluespec SystemVerilog Compiler)。因此我安装了 bsc,这是一个编译器,可以对用BSV (Bluespec SystemVerilog)编写的设计进行高级综合。BSV 与任何其他语言一样,无法通过阅读手册来学习,我认为学习新语言的唯一方法是实际设计应用程序。因此,我尝试使用 BSV 设计《太空入侵者》游戏。

a4b7f8a6-1482-11ee-962d-dac502259ad0.png

BSV

简而言之,Verilog HDL 是一种标准化为 IEEE 1364 的硬件设计语言 (HDL),而 SystemVerilog 是其标准化为 IEEE 1800 的扩展。BSV 是进一步扩展 SystemVerilog 的 HDL。

使用设备

使用的开发板如下:

a50ee710-1482-11ee-962d-dac502259ad0.png

第一步 - 声音 FSM(有限状态机)设计

第一次应用BSV时,声音状态机的规模比较小,所以这是第一个设计目标。

确定声道

游戏中使用了 10 种不同的声音;需要确定同时发生的数量(=声道的数量)。考虑到游戏场景中同时发生的条件,假设有4个通道:玩家自己的船的声音、入侵者的声音1和2、UFO的声音。

声音系统框图

框图如下图所示。声音FSM从之前的设计扩展到4个通道。

a544dc4e-1482-11ee-962d-dac502259ad0.png

第二步——游戏FSM设计

然后继续进行游戏FSM的状态机设计。

在设计声音 FSM 时,我使用基于状态的设计方法来设计 FSM 。本文中的基于状态的FSM设计方法是指将序列手动分解为状态,并为每个状态一一编写规则的方法。这种方法基本上需要与Verilog相同的工时。换句话说,使用高级语言没有什么好处。

另一方面,BSV 有一个名为StmtFSM的库,可以高效地设计状态机。在这个游戏FSM中,我充分利用了这一点,设计时无需手动进行状态分解。在本文中,这种方法将被称为基于序列的方法。

博弈FSM算法

基本上,我发现游戏可以用与用C编写相同的方式来编写。例如,如果我考虑子弹移动、碰撞检测、碰撞处理以及显示和擦除爆炸标记的算法,则算法是对于自己和敌人的子弹来说都是一样的,如下所示。

if(bullet_explosion_timer>=1){//Bulletexploding
bullet_explosion_timer++;
if(bullet_explosion_timer==MAX){
bulletdeletion;//logicaldeletion
erasebullet_explosion_mark;//logicalerasure
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(objectstate==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,用于存储入侵者的模式等。

a6478a10-1482-11ee-962d-dac502259ad0.png

BSV的优势

虽然 BSV 看起来效率更高,但它增加了 bsc 的编译时间,对于大型设计来说可能会超过一个小时。因此,对于这样的设计,修改、模型创建和仿真的TAT(周转时间)将非常长,这可能使其效率低于Verilog。然而,Bluesim 中的仿真速度比 iverilog 中快约 3, 000 倍。

总结

对于这一“语言”,其发展肯定会在某一方面有突出优点,之后才能被慢慢接受,类似SpinalHDL/CHISEL等,但是该门语言目前未在业内受到重视,但是未来的发展我抱有希望

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1351

    浏览量

    110078
  • 编程语言
    +关注

    关注

    10

    文章

    1942

    浏览量

    34718
  • 数字电路
    +关注

    关注

    193

    文章

    1605

    浏览量

    80595
  • 开源
    +关注

    关注

    3

    文章

    3329

    浏览量

    42476
  • 编译器
    +关注

    关注

    1

    文章

    1624

    浏览量

    49113
收藏 人收藏

    评论

    相关推荐

    Bluespec SytemVerilog握手协议接口转换设计实现

    由于接口控制信号上的差异,要实现Bluespec SystemVerilog(BSV)生成的代码和外部Verilog代码之间的正确交互是一件比较麻烦同时容易出错的事情。
    发表于 10-08 11:02 574次阅读
    <b class='flag-5'>Bluespec</b> SytemVerilog握手协议接口转换设计实现

    blue-ethernet高性能FPGA网络数据包处理项目简介

    blue-ethernet项目使用Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在FPGA上加速网络数据包处理的硬件模块。
    的头像 发表于 11-13 10:44 1240次阅读
    blue-ethernet高性能FPGA网络数据包处理项目简介

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    做FPGA工程师需要掌握SystemVerilog吗?

    在某大型科技公司的招聘网站上看到招聘逻辑硬件工程师需要掌握SystemVerilog语言,感觉SystemVerilog语言是用于ASIC验证的,那么做FPGA工程师有没有必要掌握
    发表于 08-02 20:30

    verilog语言表示圆周率

    如何使用verilog语言表示圆周率?
    发表于 09-11 14:24

    SystemVerilog 3.1a语言参考手册

    本参考手册详细描述了Accellera为使用Verilog硬件描述语言在更高的抽象层次上进行系统的建模和验证所作的扩展。这些扩展将Verilog语言推向了系统级空间和验证级空间。SystemVerilog
    发表于 07-22 12:14 188次下载

    SystemVerilog设计语言

    SystemVerilog 是过去10年来多方面技术发展和实际试验的结晶,包括硬件描述语言(HDL)、硬件验证语言(HVL)、SystemC、Superlog和属性规范语言。它们都从技
    发表于 09-07 09:55 1174次阅读

    基于SystemVerilog语言的验证方法学介绍

    文章主要介绍《VMM for SystemVerilog》一书描述的如何利用SystemVerilog语言,采用验证方法学以及验证库开发出先进验证环境。文章分为四部分,第一部分概述了用Syst
    发表于 05-09 15:22 52次下载
    基于<b class='flag-5'>SystemVerilog</b><b class='flag-5'>语言</b>的验证方法学介绍

    现代交互技术下的儿童语言表达训练方法

    现代交互技术下的儿童语言表达训练方法
    发表于 06-27 11:27 3次下载

    SystemVerilog语言介绍汇总

    作者:limanjihe  https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一种硬件描述和验证语言
    的头像 发表于 10-11 10:35 2390次阅读

    IEEE SystemVerilog标准:统一的硬件设计规范和验证语言

    IEEE SystemVerilog标准:统一的硬件设计规范和验证语言
    发表于 08-25 15:52 1次下载

    基于性别的暴力(GBV)的语言表达如何影响责任认知

    不同的语言表达可以通过强调某些部分从不同的角度来概念化同一事件。该论文调查了一个具有社会后果的案例:基于性别的暴力(GBV)的语言表达如何影响责任认知。
    的头像 发表于 11-12 10:28 1533次阅读

    SystemVerilog语言中的Upcasting和Downcasting概念解析

    要想理解清楚SystemVerilog语言中的Upcasting和Downcasting概念,最好的方式从内存分配的角度理解。
    的头像 发表于 11-24 09:58 1490次阅读

    FPGA学习-SystemVerilog语言简介

    SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了 C语言 数据类型、
    的头像 发表于 12-08 10:35 2152次阅读

    在实际设计中BSV表现如何

      Bluespec SystemVerilog (BSV) 是由Arvind 开发的 Bluespec 语言,这是一种高级功能 硬件 描述
    的头像 发表于 06-27 10:44 1278次阅读
    在实际设计中<b class='flag-5'>BSV</b><b class='flag-5'>表现</b>如何