Verilog注意事项(不断补充版)

  1. 组合逻辑电路用阻塞赋值(=),时序、锁存器电路描述用非阻塞赋值(<=)。

阻塞是串行的,下一时钟几条语句对几个变量的赋值同时完成;非阻塞赋值是并行的,按语句顺序在时钟先后分步完成赋值,非阻塞赋值常用于always块中,不能在assign语句中用<=。

eg.阻塞和非阻塞

翻译:用一个全加器的3个例化来创建一个3位加法器,其中的cout[3:0]就是记录3个全加器的进位信息(例:cout[2]代表a[2]和b[2]相加是否进位,非所有加数的最终进位)。

在主模块中3条语句需要按顺序一条一条执行(因为cout从低位到高位在不停变化,加法结果受cout变化影响),所以在设计加法器模块时需要用非阻塞语句赋值,而不能直接assign {cout,sum}=a+b+cin.

  1. assign 可以将一种类型变量赋给另一类型变量,不能出现在always语句块中

例:当有一定触发时才想使某一变量值变化,此时须要用reg类型,而这一变量与其他模块实现连接时却是wire类型。

module mem(……

output wire mem_we_o,

……);

……

reg mem_we;

……

assign mem_we_o = mem_we;

always @ (*) begin

if(rst == `Enable) begin

mem_we <= `Disable;

……end

……

  1. 多位宽变量赋值时,位宽必须是常量

HDLbits Mux256to1v

不能用in[sel*4+3:sel*4]给out赋值

  1. 中间变量类型的定义。

一般为wire型。

但如果你想在输出处寄存一下,则必须声明为reg类型;或者使用always时序语句,让信号在时钟边沿才变化,也需要reg类型了。

如果你想assign的话就是直接连接,就是用wire型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值