Verilog学习笔记——之重点

verilog原本被设计成一种仿真语言,而不是一种综合语言,所以verilog HDL中很多逻辑描述没有相应的硬件可以对应。因此如果程序只用于仿真,那么verilog中的所有语句和语法都可以使用。但如果用于硬件电路的实现,则许多的语句和描述方式都是不可综合的。

  • 只有寄存器类型的信号才可以在always和initial 语句中进行赋值,类型定义通过reg语句实现。
  • always 语句是一直重复执行,由敏感表(always 语句括号内的变量)中的变量触发。
  • always 语句从0 时刻开始。
  • 在begin 和end 之间的语句是顺序执行,属于串行语句。书写规范
  • 用有意义的有效的名字如 Sum 、CPU_addr等。
  • 用下划线区分词。
  • 采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50,Clk_CPU;低电平采用_n 后缀:Enable_n;
  • 统一一定的缩写 如全局复位信号 Rst。
  • 同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。
  • 自定义的标识符不能与保留字同名。
  • 参数采用大写,如SIZE 。

  • case 的缺省项必须写,防止产生锁存器。
  • 对if 语句,除非在时序逻辑中,if 语句需要有else 语句。若没有缺省语句,设计将产生一个锁存器,锁存器在ASIC设计中有诸多的弊端

如下一例:

if (T)
Q = D;

没有else 语句,当T为1(真)时,D 被赋值给Q,当T为0(假)时,因为没有else 语句,电路保持 Q 以前的值,这就形成一个锁存器。

  • 在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。在例化中,可能有些管脚没用到,可在映射中采用空白处理。对输入管脚悬空的,则该管脚输入为高阻 Z,输出管脚被悬空的,该输出管脚废弃不用。
  • 数据流的描述是采用连续赋值语句(assign )语句来实现的。连续赋值语句用于组合逻辑的建模。等式左边是wire 类型的变量。连续赋值语句之间是并行语句,因此与位置顺序无关。
  • Verilog HDL 中提供两种过程赋值语句 initial 和 always 语句,用这两种语句来实现行为的建模。
  • 对组合逻辑器件的赋值采用阻塞赋值。时序逻辑器件的赋值语句采用非阻塞赋值
  • 阻塞型幅值语句就是当前的赋值完成之前阻塞或停止其他语句的赋值行为。也就是说阻塞语句按照他们在程序中的顺序依次执行,前一条语句完成之前,后面的语句不可能被执行。换句话说,前面的语句阻塞了后面的语句。
  • 非阻塞型赋值语句 <=其特点是执行当前语句使,对于块中的其他语句的执行情况不加限制,不加阻塞。
  • 不要在同一个always语句块中混合使用阻塞型赋值和非阻塞型幅值
  • 循环语句中有for语句、repeat语句、while语句和forever语句。其中只有for语句可以被综合。

Verilog学习笔记——之重点》上有2条评论

    1. Muggle 文章作者

      谢谢支持,虽然我觉得多半你应该没有看。哈哈O(∩_∩)O哈哈~

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注