verilog语言中assign怎么用

verilog语言中assign怎么用,第1张

assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。

例如:

wire A,B,SEL,L//声明4个线型变量

assign L=(A&~SEL)|(B&SEL)//连续赋值

在assign语句中,左边变量的数据类型必须是wire型。input和output如果不特别声明类型,默认是wire类型。

举例2选1的数据选择器:

module mux2x1_df(A,B,SEL,L)

input A,B,SEL

output L

assign L=SEL?A:B

endmodule

扩展资料:

注意事项

assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点:

1、持续赋值;

2、连线;

3、对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。wire型变量的值随时变化。其实以上三点是相通的。

要更好的把握assign的使用,Verilog中有几个要点需要深入理解和掌握:

1、在Verilog module中的所有过程块(如initial块和always块)、连续赋值语句(如assign语句)和实例引用都是并行的。在同一module中这三者出现的先后顺序没有关系。

2、只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于module的功能定义部分。

3、连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句。

assign语句是用来对变量进行赋值的。它只能对变量进行赋值,也就是说只能对变量类型的数据进行赋值。这些变量类型可以是基本数据类型,如int、float、char等,也可以是复合数据类型,如数组、结构体、联合体等。在赋值过程中,需要注意变量类型的兼容性,例如不能用一个整型值给一个字符型变量赋值,否则会出现数据类型不兼容的错误。除此之外,还需要注意变量的作用域和生命周期等方面。总之,assign语句是一个关键的语句,对于变量的正确赋值和程序的正确运行起着至关重要的作用。

众所周知,iOS开发中,assign和weak都是弱引用,基础数据类型我们一般都是用assign修饰,而对象一般都是用weak修饰的。那么问题来了,如果用assign修饰对象,会产生什么的后果?

在弄清之前,我们首先要了解一下内存管理机制。我们初始化一个对象如下:

Objct *obc =[ [Objct alloc]init]

@property(assign)int a

@property(assign) Objct  *obc

对于以上 Objct 对象内存分配控件存在于堆上,而地址指针obc存在于栈上。对于a,内存空间存在于栈上面,都知道存在栈上面的由系统统一管理,不需要程序员去管理,而存在于堆上的空间需要程序员去手动管理的,当我们将对象销毁的时候,对象的内存空间释放,存在于栈指针也会nil,就不会产生野指针了。回到上面问题,如果用assign修饰一个对象后,当对象被释放后,存在于栈上的指针还是存在的,假如此时使用指针,它就是一个野指针了,就容易造成程序崩溃,如果是用weak修饰的对象,则不会产生上面的情况,因为对象销毁的时候,系统会将指针置nil,也就不会产生野指针了。

综上所述,修饰对象用weak,基础数据类型用assign。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7937762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存