verilog 语言[N:0]和[0:N]定义变量方法、比较大小以及不定值x用于if语句中的处理

为了搞清楚verilog [N:0]和[0:N]两种定义变量的区别,以及测试代码对不定值x的处理(x是有时当作1处理,有时当作0处理,还是既不做0也不做1处理?)写了如下的测试代码
module HL_order;
        reg [4:0] A;
        reg [0:4] B;
        reg [4:0] data;
        reg C;
initial
  begin
    #10 A=5'b11101;
    #10 B=5'b11101;
    #10 data=11100;
    #10 A<=data;//test assignment of MSB & LSB
    #10 B<=data;//test assignment of MSB & LSB
    //#10 A<=A+2'b01;//test compare value
    #10 C=A>B?1:0;
    #10 C=A==B?1:0;
    #10 B=B+2'b01;
    #10 B=B+2'b01;
    #10 A[4:0]=B[0:4];  //test assignment of MSB & LSB
    #10 A=5'b1110x;//text variable x
    #10 if(A==5'b11101) A=5'b11111;
        else if(A==5'b11100) A=5'b00000;
        else if(A==5'b1110x) A=5'b11100;
    #10 if(B==5'b11110) B<=5'b00000;
    end
endmodule

代码仿真结果如下图所示:



总结:1.A[4:0]和B[0:4]赋值时(例子中11100)得到的结果为:

               A[4]=1,A[3]=1,A[2]=1,A[1]=0,A[0]=0        B[0]=1,B[1]=1,B[2]=1,B[3]=0,B[4]=0   

            2.此时比较大小得到A[4:0]=11100和B[0:4]=11100,比较大小得到A=B;(即A[4]和B[0]作为数据的最高位比较,次高位分别为A[3]和B[1])

            3.不定值x在用于判断时不是当作不确定的或者0或者1处理,而是当作一个第三种情况(仿真结果显示x不能用于if语句中进行判断赋值)

            4 A[4:0]<=B[4:0]这样赋值时提示出错信息:Bounds of part-select into 'B' are reversed.


错误之处,请不吝指出。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值