热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Verilog重点解析

源自微信公众号“数字芯片实验室”1、连续赋值和过程赋值之间有什么区别?2、initial和always中的赋值有什么区别?initial和always中

源自 微信公众号 “数字芯片实验室”

1、连续赋值和过程赋值之间有什么区别?
在这里插入图片描述
2、initial和always中的赋值有什么区别?
initial和always中的赋值都是过程赋值。
在这里插入图片描述

3、阻塞和非阻塞赋值之间有什么区别?
阻塞和非阻塞赋值都是过程赋值。
在这里插入图片描述

4、如何使用连续赋值建模双向nets?
assign语句构成一个连续赋值。 RHS变化立即影响LHS。 然而,LHS的任何变化都不会影响RHS。
例如,在以下声明,rhs net的更改将更新到lhs net,但反之不会。

wire rhs,1hs ;
assign lhs = rhs ;

  • 1
  • 2

System Verilog引入了一个关键字alias,能定义双向nets。
例如,在以下代码中,rhs的任何变化都会更新到lhs,反之亦然。

module test_alias ;wire [3:0] lhs ,rhs ;alias lhs = rhs ;
initial beginforce rhs = 4’h2 ;$display(“lhs = %0h , rhs = %0h”,lhs,rhs) ;release rhs ;

force lhs = 4’hc ;
$display(“lhs = %0h , rhs = %0h”,lhs,rhs) ;
release lhs ;


end

endmodule //test_alias


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

如果上述alias换成assign,则输出如下:

lhs = 2 , rhs = 2
lhs = c , rhs = z

  • 1
  • 2

然而,由于定义了alias,输出如下:

lhs = 2 , rhs = 2
lhs = c, rhs = c

  • 1
  • 2

在上面的示例中,对net任何一侧的更改都会更新到另一侧。

持续更新~



推荐阅读
author-avatar
手机用户2502870457
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有