assign的选择用法示例

本文深入探讨了Verilog中的三种条件赋值语句:有优先级的选择赋值、并行选择赋值及带附加判断条件的赋值。通过对比分析,详细解释了每种赋值方式的工作原理及其在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.有优先级的

assign out2 = sel1?in1[3:0]:
					sel2?in2[3:0]:
						sel3?in3[3:0]:
							4'b0;
//c中等效于
if(sel1)
	out2=in1[3:0];
else if (sel2)	
	out2=in2[3:0];
else if (sel3)	
	out2=in3[3:0];
else	
	out2=4'b0;					

在这里插入图片描述
2.并行选择的

assign out1=({4{sel1}} & in1[3:0])
					| ({4{sel2}} & in2[3:0])
					|({4{sel3}} & in3[3:0]);
//c中等效于
if (sel1)
	out1=in1[3:0];
if (sel2)
	out1=in2[3:0];
if (sel3)
	out1=in3[3:0];

在这里插入图片描述

分析:假设(sel1==1) &&(sel2==0) &&(sel3==0) && (sel4==0)
表示4个sel1信号和in1的四位分别按位与,最后所有结果相或;则四个或门输出为in1[3],in1[2],in1[1],in1[0],接到out1[3:0]即可。

3.带附加判断条件的

pc_add_op1 = 
             `ifndef E203_TIMING_BOOST
       			pipe_flush_req  ? pipe_flush_add_op1 :
                dly_pipe_flush_req  ? pc_r :
             `endif
                ifetch_replay_req  ? pc_r :
                bjp_req ? prdt_pc_add_op1    :
                ifu_reset_req   ? pc_rtvec :
                pc_r;
### JavaScript 中 `Object.assign` 的使用教程 `Object.assign` 是 JavaScript 提供的一个用于对象合并的方法。它会将一个或多个源对象的可枚举属性复制到目标对象上,并返回目标对象[^1]。 以下是 `Object.assign` 的基本语法: ```javascript Object.assign(target, ...sources); ``` - **`target`**:目标对象,所有源对象的属性将被复制到这里。 - **`...sources`**:一个或多个源对象,其属性会被复制到目标对象中。 #### 浅拷贝特性 需要注意的是,`Object.assign` 执行的是浅拷贝操作,这意味着如果源对象中的属性值是引用类型(如数组、对象等),那么目标对象中对应的属性值将是该引用类型的引用,而不是一个新的独立副本[^2]。 以下是一个示例代码展示浅拷贝行为: ```javascript const original = { a: 1, b: { c: 2 } }; const copy = Object.assign({}, original); console.log(copy); // { a: 1, b: { c: 2 } } // 修改 copy.b 的内容会影响 original.b copy.b.c = 3; console.log(original.b.c); // 输出 3 ``` #### 创建对象的浅拷贝 `Object.assign` 常用于创建对象的浅拷贝。例如: ```javascript const obj = { x: 10, y: 20 }; const clonedObj = Object.assign({}, obj); console.log(clonedObj); // { x: 10, y: 20 } ``` #### 合并多个对象 `Object.assign` 还可以用来合并多个对象。如果有属性重名的情况,后面的源对象的属性值会覆盖前面的属性值[^3]。 ```javascript const obj1 = { a: 1, b: 2 }; const obj2 = { b: 3, c: 4 }; const mergedObj = Object.assign({}, obj1, obj2); console.log(mergedObj); // { a: 1, b: 3, c: 4 } ``` #### 深拷贝解决方案 由于 `Object.assign` 只能实现浅拷贝,如果需要深拷贝对象,可以考虑以下方法: - 使用 JSON 序列化和反序列化(适用于简单结构的对象): ```javascript const deepCopy = JSON.parse(JSON.stringify(original)); ``` - 使用专门的深拷贝库,如 Lodash 的 `_.cloneDeep` 方法[^3]。 #### 注意事项 - 如果目标对象与源对象有同名属性,源对象的值会覆盖目标对象的值。 - 如果源对象中有 `undefined` 或 `null`,它们不会被复制到目标对象中。 - `Object.assign` 不会递归地复制嵌套对象,因此对于复杂对象结构,可能需要额外处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值