HDL_BITS--三元条件运算符

本文讨论了如何在Verilog中使用三元条件运算符实现四向无符号数字的最小值查找,指出错误在于未指定中间变量位宽,导致比较仅限于最低位。正确的做法是明确定义中间变量的位宽。
摘要由CSDN通过智能技术生成

Verilog 有一个三元条件运算符,即(状态 ? if_true : if_false):

 assign intermediate_result1 = compare? true: false;

练习题目:

        给定四个无符号数字,找到最小值。无符号数字可以与标准比较运算符(a < b)进行比较。使用条件运算符创建双向最小电路,然后组合其中的一些电路以创建 4 向最小电路。您可能需要一些用于中间结果的线向量。

错误解法:

module top_module (
    input [7:0] a, b, c, d,
    output [7:0] min);//

    // assign intermediate_result1 = compare? true: false;
    wire  temp1,temp2,temp3; //这里没有定义矢量,默认值为一位,从而导致错误
	always @(*)
	begin
    temp1 = (a<b)? a:b;
	temp2 = (temp1<c)? temp1:c;
	min	 = (temp2<d)? temp2:d;
	end
endmodule

可以正常编译,但是综合仿真出来的时序图错误,错误如下:

错误分析:

        因为我没有定义temp1和temp2这两个中间变量的位宽,导致默认1位,因此在利用三元条件运算符的时候,进行逐一比较,直到第一位不同大小的值进行比较,并且保存到中间变量。这也是为什么时序图中我的答案只出现了0,1两种情况。

正确解法:

module top_module (
    input [7:0] a, b, c, d,
    output [7:0] min);//
    
    wire [7:0]	min1,min2;    //区别
    assign	min1 = (a<b) ? a : b;
    assign	min2 = (c<d) ? c : d;
    assign  min = (min1<min2) ? min1 : min2;
    // assign intermediate_result1 = compare? true: false;
 
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值