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

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

3天内不再提示

在SpinalHDL电路中进行信号的赋值

冬至配饺子 来源:Spinal FPGA 作者:玉骐 2022-07-28 18:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

对于SpinalHDL电路描述,信号的赋值不免有些小伙伴带有些许迷茫,本篇抽丝剥茧,一块儿来梳理。

是val还是var?

先来看两个语法:

poYBAGLiYUaAerlMAAAxyFuFyMg400.png

对于变量a,声明为val,在对其进行第二次赋值时发现会报错,而声明为var的变量则正常。在Scala里,对于val和var的定义:

**val:不可变变量类型。

var:可变变量类型

这似乎与我们在其他语言中所接触的有些冲突,变量是不可变的为什么还叫变量呢?Scala是一门函数式编程语言,而在函数式编程里,其所倡导的往往是变量的赋值仅有一次,对于其他地方不会对该变量进行重新赋值,这也是引入val类型的原因,颇有些C语言中const类型的意味。

而下面的语句:

pYYBAGLiYVyAePMYAABN4KsGDp4153.png

这里变量c声明为val,其意味着c所指向的地址不可变更,但我们仍可以修改其指向的内容,这也正式为什么我们能对c(0)赋值,而无法再将c指向一个新声明的Array。

声明师=,赋值靠:=

有了上面的了解,再回到SpinalHDL电路描述里,我们在描述电路时,无论是寄存器还是Mem、这些都是电路对象,其声明有且仅应当只有一次,因而我们在定义变量时,往往这么来定义:

pYYBAGLiYW6AFeTiAAAS6hNzlwM758.png

在Scala里一切皆为class,这里我们声明a为一个UInt对象、b为一个RegNext(a)对象,即这里声明a、b均为8比特的寄存器,而寄存器本身一旦定义了是不可变的,为val类型。想一想倘若一会儿将a声明为8bit寄存器,一会儿声明为9比特寄存器,像Verilog中这么写:

pYYBAGLiYYKAE1_nAAARNt06Qp4376.png

想必没人会在Verilog中这么来写吧。同理,在SpinalHDL里,我们声明一个电路对象时,自然是=。

虽然电路对象不可改,就像声明了a是8bit,其一定是8bit,但这8bit所代表的值是可以改变的!!!这也正是我们描述电路里的赋值。

SpinalHDL里为电路对象的赋值提供了三种形式:

pYYBAGLiYZeABewYAACSCwiQpKs514.png

我们是为电路对象所代表的值进行赋值,而不是改变电路对象本身(把电路对象指向另一个对象,想一想是否和上面Array的赋值有点儿类似),因而这里我们是不能用=(=在Scala中本身也是一个方法,是改变变量指向的位置,玩不可行),因而所要采用的是SpinalHDL中提供的:=或者\=来给电路对象所代表的含义进行赋值:

pYYBAGLiYauAKkVMAAAeLVny_28278.png

由于只有声明为Reg类型的变量才会被当成寄存器类型,这里即可放心使用“:=”。

小结

劝君莫惧Scala,我们在电路描述里用到的语法特性并不多,若有systemverilog的基础那么对于这类软件语言入门没那么可怕,毕竟又不是去转大数据不是么?


审核编辑:刘清

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

    关注

    31

    文章

    5618

    浏览量

    130386
  • C语言
    +关注

    关注

    183

    文章

    7646

    浏览量

    146108
  • 编程语言
    +关注

    关注

    10

    文章

    1965

    浏览量

    39848
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    厚声电阻RT0603FR-071KRL信号调理电路中的应用

    RT0603FR-071KRL并非厚声电阻的标准型号,若以国巨同规格电阻(如RC0603FR-071KL)为参考,其信号调理电路中可承担阻抗匹配、分压偏置、滤波、限流保护等基础功能,但需结合具体
    的头像 发表于 04-02 17:12 380次阅读
    厚声电阻RT0603FR-071KRL<b class='flag-5'>在</b><b class='flag-5'>信号</b>调理<b class='flag-5'>电路</b>中的应用

    VSCode 中进行 CW32L010 MCU 的开发,应该如何配置环境?

    我想在 VSCode 中进行 CW32L010 MCU 的开发,应该如何配置环境?
    发表于 11-24 07:17

    PWM周期和占空比是否可以程序中进行调节?

    PWM周期和占空比是否可以程序中进行调节
    发表于 11-20 07:50

    如何在Zephyr中进行静态代码分析

    嵌入式软件开发中,“能编译通过”并不等于“可以放心交付”。安全性、可靠性和合规性是产品能否顺利量产的关键。进入量产的Bug会浪费宝贵的工程时间,也会削弱用户信任;安全漏洞可能暴露设备,带来严重后果;受监管市场中,若未满足MISRA或CERT检查要求,甚至会直接导致产品
    的头像 发表于 10-17 10:28 1029次阅读

    中断处理程序中进入掉电模式需要注意什么?

    中断处理程序中进入掉电模式需要注意什么?
    发表于 08-26 07:46

    请问中断处理程序中进入掉电模式需要注意什么?

    中断处理程序中进入掉电模式需要注意什么?
    发表于 08-21 06:20

    使用DAP miniWiggleADS中进行对代码的工程下载以及进入调试模式进行调试,需要安装配置什么环境?

    如题,现在想使用DAP miniWiggleADS中进行对代码的工程下载以及进入调试模式进行调试,请问需要安装配置什么环境以及相关的有什么操作步骤,感谢解答
    发表于 07-31 06:08

    射频电路信号有什么影响

    射频电路,听起来是不是有点高大上?其实它就在我们身边,手机信号、无线网络,都离不开它的功劳。今天,咱们就来好好聊聊,射频电路到底是干啥的,它对信号又会有什么影响。
    的头像 发表于 07-16 11:00 1948次阅读
    射频<b class='flag-5'>电路</b>对<b class='flag-5'>信号</b>有什么影响

    matlab appdesigner 表格组件赋值问题,求助

    如上图所示,我在用matlab2021Ra APP模块进行编程的时候,想在表格中调入自己编写的结构数组,我从网上AI了一个程序语句,看着没问题,但是就是给表格赋值不了,还请各位大神帮忙看一下这个是怎么回事,我是初学者,请各位帮忙看看
    发表于 07-12 11:45

    信号发生器泰克AFG31000系列模拟电路检定中的应用

    模拟电路作为电子系统的基础组成部分,其性能直接关系到整个系统的可靠性和稳定性。模拟电路的研发、生产及维护过程中,精确的信号源是进行参数测量
    的头像 发表于 06-18 10:57 1003次阅读
    <b class='flag-5'>信号</b>发生器泰克AFG31000系列<b class='flag-5'>在</b>模拟<b class='flag-5'>电路</b>检定中的应用

    信号发生器AFG31052多载波信号生成中的应用

    优势,为现代通信系统测试、复杂电路验证及科研实验提供了可靠的技术支持。本文将从多载波调制技术原理、AFG31052的关键特性及其应用场景三个方面,探讨其多载波信号生成中的具体应用与价值。
    的头像 发表于 06-07 15:24 904次阅读
    <b class='flag-5'>信号</b>发生器AFG31052<b class='flag-5'>在</b>多载波<b class='flag-5'>信号</b>生成中的应用

    AN65974vivado 2018.2中进行仿真时, 无法获取输出数据信号是怎么回事?

    大家好, 我已经尝试过 AN65974 指南 pdf 并下载了 fpga rtl vhdl 文件夹的示例。 我做了一些配置,例如输入图像和相关信号 vivado 2018.2 中进行仿真
    发表于 05-12 06:58

    FX3的FLAGA信号,在运行一段时间后,无法拉高怎么解决?

    Thread0所的缓存,上传上位机。同时,FPGA检测Thread2中是否有数据需要读取,若有,则将Thread2中的数据读取到FPGA中进行解析。 如下图,正常运行一段时间后,FLAGA
    发表于 05-08 07:38

    labview进行的数据采集

    请问labview中进行数据采集,为保证不同设备之间采集数据的同步性,准备利用PPS进行触发开始任务,利用DAQmx设备内部时钟源来设置数据采集的一些参数,但是为了防止pps信号的缺
    发表于 04-27 10:19

    高精度信号处理电路海绵空气透气率测定仪温度补偿中的应用

    海绵空气透气率测定仪的温度补偿系统中,温度传感器采集到的信号通常处于毫伏级甚至更低的水平,这类信号极其微弱,并且极易受到来自周边环境的电磁噪声、电路自身的热噪声等多方面干扰。一旦这些
    的头像 发表于 04-21 10:27 701次阅读
    高精度<b class='flag-5'>信号</b>处理<b class='flag-5'>电路</b><b class='flag-5'>在</b>海绵空气透气率测定仪温度补偿中的应用