HDLBits学习记录

一、 reg VS wire

assign语句的赋值目标一定是wire型;而过程赋值语句(initial语句和always语句)中赋值目标为reg型。

//Verilog有两大数据类型
一、线网类型:表示结构化元件间的物理连接,它的值由驱动元件的值决定,eg.连续赋值或门的输出,如果没有驱动元件连接到线网,则缺省值为z(高阻)线网子类型如下:

  1. wire
  2. tri
  3. wor
  4. trior
  5. wand
  6. triand
  7. trireg
  8. tri1
  9. tri0
    10.supply0
    11.suppply1

二、寄存器类型:表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来,寄存器的变量缺省值为x(未知),五种寄存器类型如下:

  1. reg
  2. integer
  3. time
  4. real
  5. realtime
    //

二、 阻塞赋值 VS 非阻塞赋值

在Verilog中有三种赋值语句
1、连续性赋值:assign x=y,当不在一个过程块中时使用(eg.always块)
2、过程性阻塞赋值:x=y,在过程块内使用,赋值完成后,才进行下一条语句的执行,赋值一旦完成,被赋值变量的值立即变化(串行,立即生效)
3、过程性非阻塞赋值:x<=y,在过程块内使用,允许块内的其他语句同时执行,且在一个仿真周期结束时才更新被赋值的变量,非立即生效。

所以在一个过程块中,非阻塞赋值的表达式书写的顺序不影响赋值结果,而阻塞赋值则会出现不同顺序的表达式赋值结果不一样。

举例说明:
设初始值x=0,y=0,且a=1;
always@(
begin
x=a;
y=x;
end
阻塞赋值,最后输出的结果为y的值为x变化后的值,即结果为x=1,y=1;
always@(

begin
x<=a;
y<=x;
end
非阻塞赋值,最后输出结果为y的值为x的旧值,结果为x=1,y=0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值