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

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

3天内不再提示

连接和复制运算符

汽车电子技术 来源:OpenFPGA 作者: 碎碎思 2023-02-09 15:40 次阅读

数字硬件建模SystemVerilog-连接和复制运算符

poYBAGPkowyALvtUAATZyu9VRrM226.png

经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。

马上HDLBits-SystemVerilog版本也开始准备了,基本这一部分完成后就开始更新~

pYYBAGPkoxiAUJ-5AAIk-uoqDPg077.png

介绍

连接和复制运算符将多个表达式连接在一起,形成一个向量表达式。结果向量中的位总数是每个子表达式中所有位的总和。连接有两种形式,简单连接和复制连接。一个简单的连接将任意数量的表达式连接在一起。复制连接将表达式连接在一起,然后复制指定次数的结果。表5-3显示了连接和复制运算符的一般语法和用法:

表5-1:RTL建模的连接和复制运算符

以下变量和值用于显示这些运算符的结果。

poYBAGPkoy-AXTi_AAAvdjJlvVU994.png

连接和复制运算符是可综合的。运算符不直接表示硬件中的任何逻辑功能。它们只是表示同时使用多个信号,将文字值附加到信号或文字值。

示例5-1和5-2说明了连接运算符在RTL建模中的两种常见应用:

在赋值语句的右侧或左侧将多个信号连接在一起。在每个示例之后,图5-1和5-2显示了连接运算符如何在综合生成的门级功能。然而,在RTL模型中,连接运算符是一种有用的构造,用于以简洁的方式表示硬件功能。

示例5-1:使用连接运算符:多输入状态寄存器

//`begin_keywords

"1800-2012"

//useSystemVerilog-2012keywords

modulestatus_reg

(inputlogicclk,//registerclk

inputlogicrstN,//active-lowreset

inputlogicint_en,//1-bitinterrupt

enable

inputlogiczero,//1-bitresult=0flag

inputlogiccarry,//1-bitresultoverflowflag

inputlogicneg,//1-bitnegativeresultflag

inputlogic[1:0]parity,//2-bitparitybits

outputlogic[7:0]status//8-bitstatusregisteroutput

);

timeunit1ns;timeprecision1ns;

always_ff@(posedgeclkornegedgerstN)//asyncreset

if

(!rstN)//active-lowreset

status<= {1

'b0,2'

b11,5

'b0};//reset

else

status<= {int_en,2'

b11,zero,carry,neg,parity};//load

endmodule:status_reg

//`end_keywords

图5-1:示例5-l的综合结果:连接运算符(状态寄存器)

pYYBAGPkoz-ANHa2AAGNkcfVBvg169.png
笔记
综合编译器实现运算符的方式会受到许多因素的影响,包括目标设备、与运算符一起使用的其他运算符或编程语句、使用的综合编译器,以及”指定的综合选项和约束。

示例5-1中的状态寄存器有两个未使用的位,它们的常量值为1,用于生成图5-1所示状态寄存器实现的综合编译器将这两个未使用的位映射到8位上拉输出上。其他综合编译器,或者指定不同的综合约束,可能会以不同的方式映射相同的RTL功能,例如通过使用预设为1值的触发器

示例5-2:使用连接运算符:带进位的加法器

//`begin_keywords

"1800-2012"

modulertl_adder

(inputlogica,b,ci,

outputlogicsum,co

);

timeunit1ns;timeprecision1ns;

assign{co,sum}=a+b+ci;

endmodule:rtl_adder

//`end_keywords

图5-2:示例5-2的综合结果:加法运算符(带进位/输出的加法器)

pYYBAGPko0yAAycnAAG_jja-u34700.png

用于生成图5-2所示实现的综合编译器将RTL加法器功能映射到通用加法器块——综合的下一步将针对特定的ASICFPGA设备,通用加法器将在该步骤中映射到特定的加法器实现。

连接和复制运算符经常用于创建用作其他运算符操作数的表达式。这方面的例子将在本章后面的章节和后面的章节中看到。

在使用连接时,有一些重要的规则需要注意:

  • 可以将任何多个表达式连接在一起,只包括一个表达式,
  • 连接中的表达式必须具有固定大小。无大小的文字值不允许使用,例如数字5和’1,是不被允许的。
  • 连接的结果始终是无符号的,无论连接中表达式的符号是什么。

不要将连接与赋值列表混淆。SystemVerilog有一个包含在’{and}(赋值列表)标记之间的赋值列表运算符。虽然赋值列表运算符看起来类似于连接运算符,但其功能却大不相同。赋值列表运算符将多个值连接在一起,以创建一个新的单个值。赋值列表运算符以撇号开头(’),并且用于将单个值的集合分配给数组的单个元素或结构的单个成员。

{{4{a[3]}},a} 结果是11111011(二进制)一个8位的值, a的有效位重复4次,然后连接到a。

{8{2’bl0}}结果是1010101010101010(二进制),一个16位的值,2’b01重复8次。

{4’hF,a}结果是1111_1011(二进制),一个8位的值。

{a,b}结果是101100010001(二进制),一个12位的值。

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

    关注

    0

    文章

    55

    浏览量

    11658
  • 连接
    +关注

    关注

    2

    文章

    95

    浏览量

    20947
  • 运算符
    +关注

    关注

    0

    文章

    172

    浏览量

    11062
收藏 人收藏

    评论

    相关推荐

    C语言基础知识(4)--运算符

    C语言中,运算符包括有算术运算符、关系运算符、逻辑运算符和位运算
    的头像 发表于 06-15 09:38 3375次阅读

    C语言运算符的使用方法

    详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法和使用方法,并讨论了
    发表于 11-02 11:30 1479次阅读
    C语言<b class='flag-5'>运算符</b>的使用方法

    matlab关系运算符

    matlab关系运算符 算数运算符 + 矩阵加  - 减  * 乘  .* 数组乘  ^ 矩阵乘方  .^ 数
    发表于 06-18 14:47 2829次阅读

    条件运算符是什么_条件运算符有哪些

    运算符优先级高于赋值、逗号运算符,低于其他运算符。关系运算实际上是逻辑比较运算,它是逻辑运算
    发表于 11-16 16:02 1.1w次阅读
    条件<b class='flag-5'>运算符</b>是什么_条件<b class='flag-5'>运算符</b>有哪些

    单目运算符是什么_单目运算符有哪些

    单目运算符是指运算所需变量为一个的运算符,又叫一元运算符,其中有逻辑非运算符:!、按位取反运算符
    的头像 发表于 02-24 15:42 6w次阅读
    单目<b class='flag-5'>运算符</b>是什么_单目<b class='flag-5'>运算符</b>有哪些

    C运算符的优先级和结合性详细解决

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。 C语言内置了丰富的运算符,大体可分为10类:算术运算符、关系运算符、逻辑运算符、位
    的头像 发表于 02-22 17:27 3200次阅读

    浅析MySQL中的各类运算符

    MySQL支持多种运算符,我们在写SQL脚本时经常会需要用到各种各样的运算符,这些运算符可以用来连接表达式,进而从数据库中查询我们需要的结果集等。这些类型主要包括算术
    的头像 发表于 05-03 17:41 2028次阅读
    浅析MySQL中的各类<b class='flag-5'>运算符</b>

    python运算符是什么

    python运算符 0. 什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子中,4和5被称为操作数,“+”号为运算符。 Python语言支持
    的头像 发表于 02-21 16:44 2352次阅读

    C语言总结_语句、运算符

    当前文章复盘C语言的: 位运算运算符、基本运算符、数据类型、变量、for语句、while语句、goto语句、switch语句、运算符优先级强制转换等。
    的头像 发表于 08-14 09:39 975次阅读

    什么是运算符重载

    重载运算符是具有特殊名称的函数,是通过关键字** operator **后跟运算符的符号来定义的
    的头像 发表于 01-20 15:30 2437次阅读

    条件(三元)运算符

    RTL建模中广泛使用的运算符是条件运算符,也称为三元运算符,该运算符用于在两个表达式之间进行选择——表5-2列出了用于表示条件运算符的重点。
    的头像 发表于 02-09 15:42 1310次阅读
    条件(三元)<b class='flag-5'>运算符</b>

    什么是移位运算符

    移位运算符将向量的位向右或向左移位指定的次数。SystemVerilog具有按位和算术移位运算符
    的头像 发表于 02-09 15:49 1781次阅读
    什么是移位<b class='flag-5'>运算符</b>

    什么是逻辑运算符

    逻辑运算符对其操作数求值,并返回一个值,该值指示求值结果是真还是假(true or false)。例如,运算a && b测试a和b是否都为真,如果两个操作数都为真,则运算符返回真。否则,运算符
    的头像 发表于 02-09 15:55 1971次阅读
    什么是逻辑<b class='flag-5'>运算符</b>

    C语言的运算符

    在C语言中,我们常常会用到表达式,在使用表达式的过程中便会使用到运算符。C语言中,不同的运算符拥有不同的优先级和结合性。在执行运算的过程中,程序会按照运算符的优先级和结合性进行计算。
    的头像 发表于 02-21 15:12 1152次阅读
    C语言的<b class='flag-5'>运算符</b>

    Go语言运算符主要包括哪些呢?

    Go语言运算符主要包括:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他
    的头像 发表于 05-26 15:54 837次阅读
    Go语言<b class='flag-5'>运算符</b>主要包括哪些呢?