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

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

3天内不再提示

SystemVerilog-运算符/表达式规则

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-08-03 09:03 次阅读

数字硬件建模SystemVerilog-条件(三元)运算符

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

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

3d888314-12c4-11ed-ba43-dac502259ad0.png

介绍

RTL建模中广泛使用的运算符是条件运算符,也称为三元运算符,该运算符用于在两个表达式之间进行选择——表5-2列出了用于表示条件运算符的重点。

表5-2:RTL建模的条件(三元)运算符

运算符 示例用法 描述
?: s?m:n 如果s为真,则选择m;如果s为假,则选择n,否则(s不为真不为假)对m和n进行按位比较

问号(?)前面列出的表达式被称为控制表达式(control expression),表示它可以是一个简单的整数值(任何大小的向量,包括1位),也可以是另一个返回整数值的操作的结果。例如:

3dba5b0a-12c4-11ed-ba43-dac502259ad0.png

使用以下规则将控制表达式计算为true或false:

如果所有位为l,则表达式为true。

如果所有位均为0,则表达式为false。

如果未设置任何位且并非所有位均为0,则表达式未知,如果某些位为X或Z,则可能出现这种情况。

对于4-state值,控制表达式可能既不是真的也不是假的。在下面的值中,没有一个位是l,但不是所有的位都是0。

3dd90118-12c4-11ed-ba43-dac502259ad0.png

当控制表达式未知时,条件运算符对两个可能的返回值进行按位比较。如果对应位均为0,则该位位置返回0,如果对应位均为l,则该位位置返回1。如果对应的位不同,或者任一位有X或Z值,则返回该位位置的X。下面的示例演示了这种仿真行为。

3dea21f0-12c4-11ed-ba43-dac502259ad0.png

条件运算符的行为通常类似于硬件多路复用器。示例5-3说明了如何使用条件运算符在寄存器的两个输入之间进行选择。图5-3显示了综合该示例的结果。条件运算符映射到四个多路复用器,四位d1和d2输入的每一位对应一个多路复用器。

示例5-3:使用条件运算符:4位多路复用寄存器D输入

//4-bitregisterwithmultiplexedDinput,usingconditional
//operator.
//
//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
modulemuxed_register
#(parameterWIDTH=4)//registersize
(inputlogicclk,//1-bitinput
inputlogicdata_select,//1-bitinput
inputlogic[WIDTH-1:0]d1,d2,//scalableinputsize
outputlogic[WIDTH-1:0]q_out//scalableoutputsize
);
timeunit1ns;timeprecision1ns;

always_ff@(posedgeclk)
q_out<= data_select? d1 : d2;     // store d1 or d2

endmodule: muxed_register
//`end_keywords
图形5-3:示例5-3的综合结果:条件运算符(多路复用寄存器) 3e099fb2-12c4-11ed-ba43-dac502259ad0.png

图5-3所示的电路是综合编译器将电路映射到特定ASICFPGA目标实现之前的中间通用综合结果。用于生成图5-3的综合编译器使用了具有未连接的set和rst输入的通用触发器,使用ASIC或FPGA库的最终实现可能能够使用没有这些输入的触发器(如果目标设备中可用)。不同的综合编译器可能会使用不同的通用型组件来表示这些中间结果。

条件运算符并不总是作为多路复用器实现。综合编译器可能会根据操作数的类型和运算的上下文,将条件运算符映射并优化为其他类型的门级逻辑。在示例5-4中,条件运算符表示三态缓冲器,而不是多路复用逻辑,图5-4显示了综合该示例的结果,

示例5-4:使用条件运算符:带三态输出的4位加法器

//4-bitadderwithtri-stateoutputs,usingconditionaloperator
//(nocarry).
//
//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
moduletri_state_adder
#(parameterN=4)//N-bitaddersize
(inputlogicenable,//outputenable
inputlogic[N-1:0]a,b,//scalableinputsize
outputtrilogic[N-1:0]out//tri-stateoutput,nettype
);
timeunit1ns;timeprecision1ns;

assignout=enable?(a+b):'z;//tri-statebuffer

endmodule:tri_state_adder
//`end_keywords

在本例中,条件运算符(?)选择输出端口应分配(a+b)或高阻抗。如果en为false,则将out赋值为z。’z标记是一个文字值,用于将表达式的所有位设置为高阻抗,并自动缩放到表达式的向量大小。有关向量填充文字值的更多详细信息,请参见之前的文章。

在示例5-4中观察,out三态输出端口被声明为3-state logic类型,而不是通常的逻辑类型,logic数据类型只定义端口时可以有四态值,它不定义端口类型是网络类型或者变量类型。输出端口默认为变量类型,除非显式声明为NET(网络)类型。(相反,输入端口将默认为NET类型,除非显式声明为变量类型),关键字•tri声明网络类型。tri类型在各个方面都与wire类型相同,但tri关键字可以帮助记录网络或端口的预期三态(高阻抗)值。

图5-4:示例5-4的综合结果:条件运算符(三态输出) 3e375254-12c4-11ed-ba43-dac502259ad0.png

3e678802-12c4-11ed-ba43-dac502259ad0.jpg

SystemVerilog-连接和复制运算符

3e7804ac-12c4-11ed-ba43-dac502259ad0.jpg

SystemVerilog-运算符/表达式规则

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

    关注

    31

    文章

    5317

    浏览量

    120000
  • 端口
    +关注

    关注

    4

    文章

    955

    浏览量

    32014
  • 运算符
    +关注

    关注

    0

    文章

    172

    浏览量

    11062

原文标题:SystemVerilog-条件(三元)运算符

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    玩转SQLite8:运算符表达式

    本篇介绍了SQLite的基础运算符表达式,并通过命令行的方式执行sql语句进行测试验证,在实际开发中,可使用C/C++ API函数来使用。
    的头像 发表于 09-27 08:56 2380次阅读
    玩转SQLite8:<b class='flag-5'>运算符</b>与<b class='flag-5'>表达式</b>

    JAVA语言的运算符表达式

    JAVA语言的运算符表达式3.5 运算符表达式数据的类型除了限定数据的存储方式、取值范围之外,还定义了对该数据类型可进行的操作即运算。表
    发表于 12-06 00:28

    数据类型、运算符表达式

    数据类型、运算符表达式2.1   程序设计概述2.2  C语言的数据类型 2.3  常量和变量 2.4 
    发表于 03-10 15:05

    关于C语言的运算符表达式--笔记1

    关于C语言的运算符表达式学好C语言的基础运算,还是很有必要,无论在C语言,还是后面单片机,都会用到基础运算。如果不能很好运用,会给我们编程带来很多麻烦,废话不多说,现在开始写一些个人
    发表于 07-19 00:48

    C语言程序设计--运算符表达式

    c语言对数据有很强的表达能力,具有十分丰富的运算符,利用这些运算符可以组成各种表达式及语句。运算符就是完成某种特定
    发表于 07-14 21:30 46次下载

    单片机C语言教程-运算符表达式

    单片机C语言教程-运算符表达式   单片机C语言教程-运算符表达式  运算符的种类、优先级和结合性  c语言中运
    发表于 03-27 17:13 2211次阅读

    基于运算符信息的数学表达式检索技术

    传统的文本检索技术主要面向一维文本,难以用于对二维结构数学表达式的检索。针对该问题,通过引入公式描述结构,实现基于运算符信息的数学表达式检索。利用公式描述结构提取算法获取 Latex数学表达式
    发表于 04-29 15:58 2次下载
    基于<b class='flag-5'>运算符</b>信息的数学<b class='flag-5'>表达式</b>检索技术

    RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 07-27 09:11 1684次阅读

    关于RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 09-01 09:13 1835次阅读

    RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 10-11 10:15 1666次阅读

    RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 11-03 09:14 1315次阅读

    运算符/表达式规则

    运算符对操作数执行操作。大多数运算符都有两个操作数。例如,在运算a+b中,+(加法)运算的操作数是a和b。每个操作数都被称为表达式
    的头像 发表于 02-09 15:37 949次阅读
    <b class='flag-5'>运算符</b>/<b class='flag-5'>表达式</b><b class='flag-5'>规则</b>

    逻辑运算符表达式

    在C语言中,我们通常会进行真值与假值的判断,这时我们就需要用到逻辑运算符与逻辑表达式。如果表达式的值不为0,则通通返回为真值。只有当表达式的值为0时,才会返回假值。
    的头像 发表于 02-21 15:16 2070次阅读
    逻辑<b class='flag-5'>运算符</b>与<b class='flag-5'>表达式</b>

    位逻辑运算符表达式

    位逻辑运算符与位逻辑表达式可以实现位的编辑,比如位的清零、设置、取反和取补等操作。使用位逻辑运算符与位逻辑表达式可以在不使用汇编的情况下实现部分汇编的功能
    的头像 发表于 02-21 15:22 1215次阅读
    位逻辑<b class='flag-5'>运算符</b>与<b class='flag-5'>表达式</b>

    C语言基本的算术运算符表达式

    注意:自增和自减运算符只能用于变量,而不能用于常量或表达式 **C语言算术表达式运算符的优先级与结合性 ** 在表达式求值时,
    的头像 发表于 03-09 10:44 1543次阅读