verilog中有哪几种类型的赋值语句,说明它们的区别,并举例

 我来答
硪丨暧恋
2017-06-29 · TA获得超过8979个赞
知道大有可为答主
回答量:5336
采纳率:93%
帮助的人:2122万
展开全部
在Verilog中有两种类型的赋值语句 连续赋值和过程赋值 赋值表达式由三个部分组成 左
值赋值运算符=或<= 和右值右值可以是任何类型的数据包括net型和register型但对连续

赋值 左值必须是net类型的数据 而过程赋值 左值必须是register类型的数据 下面将作详细描



1连续赋值

在initial或always外的assign赋值语句 称为连续赋值语句 一般在描述纯组合电路时使用 例



wire out //类型定义左值必须是net类型包括wire tri wand wor等等

assign out = a + b //综合结果为加法器

assign out = en ? a : b //多路选择器

assign out = en ? in : Z //三态门

也可以在数据定义时同时进行连续赋值如

wire out = a + b

使用连续赋值语句 所有右值都是敏感信号 当右值发生变化时 计算表达式的值 并将结

果传给左值具有组合电路的特性输入变化输出立即变化

2过程赋值

在initial或always块中的赋值语句 称为过程赋值语句 包括三种 Blocking赋值

Non-blocking赋值和过程连续赋值assign/deassign

Blocking赋值与顺序相关的而Non-blocking赋值与顺序无关一般来说使用Non-blocking赋

值描述时序逻辑电路使用Blocking赋值语句描述组合逻辑电路例如

reg X,Y,Z;

//Non-blocking assignment

always @(posedge Clk)

begin

X <= A && B;

Y <= X;

Z <= Y;

end

reg X,Y,Z;

//Blocking assignment

always @(posedge Clk)

begin

X = A && B;

Y = X;

Z = Y;

end在Verilog中有两种类型的赋值语句 连续赋值和过程赋值 赋值表达式由三个部分组成 左

值赋值运算符=或<= 和右值右值可以是任何类型的数据包括net型和register型但对连续

赋值 左值必须是net类型的数据 而过程赋值 左值必须是register类型的数据 下面将作详细描



1连续赋值

在initial或always外的assign赋值语句 称为连续赋值语句 一般在描述纯组合电路时使用 例



wire out //类型定义左值必须是net类型包括wire tri wand wor等等

assign out = a + b //综合结果为加法器

assign out = en ? a : b //多路选择器

assign out = en ? in : Z //三态门

也可以在数据定义时同时进行连续赋值如

wire out = a + b

使用连续赋值语句 所有右值都是敏感信号 当右值发生变化时 计算表达式的值 并将结

果传给左值具有组合电路的特性输入变化输出立即变化

2过程赋值

在initial或always块中的赋值语句 称为过程赋值语句 包括三种 Blocking赋值

Non-blocking赋值和过程连续赋值assign/deassign

Blocking赋值与顺序相关的而Non-blocking赋值与顺序无关一般来说使用Non-blocking赋

值描述时序逻辑电路使用Blocking赋值语句描述组合逻辑电路例如

reg X,Y,Z;

//Non-blocking assignment

always @(posedge Clk)

begin

X <= A && B;

Y <= X;

Z <= Y;

end

reg X,Y,Z;

//Blocking assignment

always @(posedge Clk)

begin

X = A && B;

Y = X;

Z = Y;

end
匿名用户
2017-06-29
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式