verilog中如何将wire类型的变量A 与reg类型的变量B进行比较?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog中如何将wire类型的变量A 与reg类型的变量B进行比较?相关的知识,希望对你有一定的参考价值。

数值的比较是在一个 always 语句中的 if括号里进行的。只要可以实现就行。
我之前试了:reg C;
assign C=A;
之后再比较B与C。
可是 assign 语句左边不能为reg型变量。
求大神?

先在always语句定义:reg A
之后直接再语句里面比较:A与B的大小追问

A是output,默认wire类型,直接对应管脚的输出。可以把它改成reg类型吗?会影响时序吗?

追答

恩恩,没关系的,另外,在always语句中将要被赋值的语句都尽量采用reg类型

参考技术A 你把A先存入寄存器两个数据类型就相同了!然后就可以进行比较了追问

怎么将A存入reg类型的数据中? assign语句是不行的!

追答

reg C;
always @ (posedge clk)
C <= A;
这样就把A的值存入到寄存器C中了,然后对B和C进行比较就可以了。

本回答被提问者采纳

Verilog赋值问题

本人刚接触Verilog,想请教一下,赋值的时候,比如:
wire cin,con;
wire [31:0] sum,a,b;
都什么时候用类似[31:0]这种设置位宽呀?原则呢?我可以都省略吗?
还想问一下reg和wire两个类型,书上说always里必须用reg,那么假如always之前定义的
wire a=2; 在always里面也引用到了a,这样的话是不是就出现错误啦?(a不应该定义为wire)。。。
望高手解答、、好疑惑~

参考技术A 1、【31:0】D,这样设置是为了简洁易懂,比如总线有32位,即D0~D31,这样就把它们一次性赋值,但是可以一位一位地取出来用,比如a=D[0].。
2、所说的always必须用reg意思是你里面有赋值语句的被赋值的变量必须为reg型的,而不是说在always语句里面出现的变量都要为reg型。比如我这里写reg b,wire a,然后在always语句里面有b=a,即当always里面的敏感变量变化时把a的值赋值给b,这里面只有b是reg型,a不是被赋值的变量,所以a可以不为reg型的。
reg型为寄存器型,always语句里面被赋值的变量它的值要是寄存型的,因为要保持,只有当always里面的敏感变量有变化时,被赋值的变量的值才会改变。
希望你懂,不懂再追问哈。追问

那是不是假如
reg [8:1] D=5;
那么就相当于赋值D[0]=1, D[1]=0, D[2]=1, D[3]=D[4]=...=D[7]=0
是这样吗?

追答

verilog是不能在定义变量时直接赋值的,这是他和c语言的区别所在。
但是可以用parameter或者用initial语句来赋值,parameter相当于c语言中的define关键字了。
你这里的要赋值的话直接用D=5就可以了,这样就D[0]=1, D[1]=0, D[2]=1, D[3]=D[4]=...=D[7]=0了。

本回答被提问者采纳

以上是关于verilog中如何将wire类型的变量A 与reg类型的变量B进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

verilog中的reg型变量,wire型变量初值是多少

verilog变量reg和wire问题

verilog中reg和wire的区别

最基本的verilog变量都有哪些类型

为啥在verilog中要定义wire?

在Verilog中对于一个变量,是选成wire型还是选成reg型,根据啥标准来选择?