当前位置:网站首页>SystemVerilog-条件(三元)运算符
SystemVerilog-条件(三元)运算符
2022-08-04 05:38:00 【碎碎思】
数字硬件建模SystemVerilog-条件(三元)运算符

经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。
马上HDLBits-SystemVerilog版本也开始准备了,基本这一部分完成后就开始更新~

介绍
RTL建模中广泛使用的运算符是条件运算符,也称为三元运算符,该运算符用于在两个表达式之间进行选择——表5-2列出了用于表示条件运算符的重点。
表5-2:RTL建模的条件(三元)运算符| 运算符 | 示例用法 | 描述 |
|---|---|---|
| ?: | s?m:n | 如果s为真,则选择m;如果s为假,则选择n,否则(s不为真不为假)对m和n进行按位比较 |
问号(?)前面列出的表达式被称为控制表达式(control expression),表示它可以是一个简单的整数值(任何大小的向量,包括1位),也可以是另一个返回整数值的操作的结果。例如:

使用以下规则将控制表达式计算为true或false:
如果所有位为l,则表达式为true。
如果所有位均为0,则表达式为false。
如果未设置任何位且并非所有位均为0,则表达式未知,如果某些位为X或Z,则可能出现这种情况。
对于4-state值,控制表达式可能既不是真的也不是假的。在下面的值中,没有一个位是l,但不是所有的位都是0。

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

条件运算符的行为通常类似于硬件多路复用器。示例5-3说明了如何使用条件运算符在寄存器的两个输入之间进行选择。图5-3显示了综合该示例的结果。条件运算符映射到四个多路复用器,四位d1和d2输入的每一位对应一个多路复用器。
示例5-3:使用条件运算符:4位多路复用寄存器D输入// 4-bit register with multiplexed D input, using conditional
// operator.
//
//`begin_keywords "1800-2012" // use SystemVerilog-2012 keywords
module muxed_register
#(parameter WIDTH = 4) // register size
(input logic clk, // 1-bit input
input logic data_select, // 1-bit input
input logic [WIDTH-1:0] d1, d2, // scalable input size
output logic [WIDTH-1:0] q_out // scalable output size
);
timeunit 1ns; timeprecision 1ns;
always_ff @(posedge clk)
q_out <= data_select? d1 : d2; // store d1 or d2
endmodule: muxed_register
//`end_keywords
图形5-3:示例5-3的综合结果:条件运算符(多路复用寄存器)
图5-3所示的电路是综合编译器将电路映射到特定ASIC或FPGA目标实现之前的中间通用综合结果。用于生成图5-3的综合编译器使用了具有未连接的set和rst输入的通用触发器,使用ASIC或FPGA库的最终实现可能能够使用没有这些输入的触发器(如果目标设备中可用)。不同的综合编译器可能会使用不同的通用型组件来表示这些中间结果。
条件运算符并不总是作为多路复用器实现。综合编译器可能会根据操作数的类型和运算的上下文,将条件运算符映射并优化为其他类型的门级逻辑。在示例5-4中,条件运算符表示三态缓冲器,而不是多路复用逻辑,图5-4显示了综合该示例的结果,
示例5-4:使用条件运算符:带三态输出的4位加法器// 4-bit adder with tri-state outputs, using conditional operator
// (no carry).
//
//`begin_keywords "1800-2012" // use SystemVerilog-2012 keywords
module tri_state_adder
#(parameter N = 4) // N-bit adder size
(input logic enable, // output enable
input logic [N-1:0] a, b, // scalable input size
output tri logic [N-1:0] out // tri-state output, net type
);
timeunit 1ns; timeprecision 1ns;
assign out = enable? (a + b) : 'z; // tri-state buffer
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的综合结果:条件运算符(三态输出)
边栏推荐
猜你喜欢

SegNet——论文笔记

网络技巧:教你给路由器装上电池,断电照样可以上网!

unicloud 腾讯云 上传文件 Have no access right to the storage uniapp

90多款matlab工具箱打包放送

Activiti 工作流引擎 详解

HbuilderX 启动微信小程序 无法打开项目

nacos 返回 403 unknown user 太他么坑了 源码解析

Online public account article content to audio file practical gadget

matlab封闭曲线拟合 (针对一些列离散点)

Faster - RCNN principle and repetition code
随机推荐
零分贝超静音无线鼠标!数量有限!!先到先得!!!【元旦专享】
53个全球免费学术资源数据库整理,查资料写论文必备【开学必备】
基于时序模式注意力机制(TPA)的长短时记忆(LSTM)网络TPA-LSTM的多变量输入风电功率预测
Time Series Forecasting Based on Reptile Search RSA Optimized LSTM
狗都能看懂的Vision Transformer的讲解和代码实现
Hardware Knowledge: Introduction to RTMP and RTSP Traditional Streaming Protocols
电脑软件:推荐一款磁盘空间分析工具——WizTree
Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
Database: Organize Four Practical SQL Server Scripting Functions
网页中常用的两种绘图技术,用canvas绘图,绘制出一个三角形,矩形,柱状图,扇形图
狗都能看懂的变化检测网络Siam-NestedUNet讲解——解决工业检测的痛点
格拉姆角场GAF将时序数据转换为图像并应用于故障诊断
Database document generation tool V1.0
MySQL复制表结构、表数据的方法
什么是多态。
90多款matlab工具箱打包放送
原型图总结规范
数据库文档生成工具V1.0
NelSon:一款新的适配matlab编程语法的编程工具
IDEA 控制台 中文乱码问题(如果网上教程都无法解决你的问题的话)

