第六章 数据流建模

本文详细介绍了Verilog中的数据流建模,重点关注连续赋值的不同形式,包括隐式连续赋值和线网声明的延迟控制。通过多个例子,如四选一多路选择器、四位全加器和脉动进位计数器,阐述了连续赋值语句的使用和表达式的操作,包括等价操作符、缩减操作符和条件操作符的运用。
摘要由CSDN通过智能技术生成

连续赋值

  • 连续赋值语句是verilog数据流建模的基本语句,用于对线网进行赋值。

  • 这玩意等价门级描述,却是从更高的抽象角度描述电路。

  • 连续赋值语句必须以关键词assign开始。

  • 连续赋值语句有以下几种特点:

    • 左边的值必须是一个标量 / 向量线网 / 标量与向量线网的拼接,这三种里面选一个,它不能是向量或向量寄存器。
    • 总是激活状态,只要任意一个操作数发生变化,表达式立即重新计算,重新赋值。
    • 操作数可以是标量 / 向量的线网或寄存器 / 函数调用。
    • 赋值延迟可以用于控制对线网赋予新值的时间,类似门延迟。
  • 举例

    //out是线网,in1, in2也是线网
    assign out = in1 & in2;	
    
    // addr是16位向量线网
    // addr1_bits, addr2_bits都是16位向量寄存器
    assgin addr[15:0] = addr1_bits[15:0] ^ addr2_bits[15:0];
    
    // 拼接
    assign {
         c_out, sum[3:0]} = a[3:0] + b[3:0] + c_in;
    

隐式连续赋值

  • 看到这个隐字,就晓得了,肯定缺了什么。

  • 在线网声明的同时,对其进行赋值。线网只能被声明一次,因此隐式连续赋值只能有一次。

    // 普通赋值
    wire out;
    assgin out = in1 & in2;
    
    // 可等价于
    wire out = in1 & in2;
    

隐式线网声明

  • 同理,既然可以隐掉assgin,那可以隐掉wire吗?

  • 当然也是可以的

    // out并未对其做线网声明,仿真器会推断出out是隐式声明的线网
    wire in1,in2;
    assgin out = in1 & in2;
    

延迟

  • 连续赋值语句中的延迟,用于控制任一操作数发生变化到语句左值被赋予新值之间的时间间隔(说白了就是,左边的值什么时候发生变化,这个时间是可以人为定义的)。
  • 指定赋值延迟的方法:
    • 普通赋值延迟
    • 隐式连续赋值延迟
    • 线网声明延迟

普通赋值的延迟

  • 在连续赋值语句中说明延迟的值,延迟值位于assgin
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值