Verilog学习笔记3——数据位宽、阻塞/非阻塞赋值、编写原则、三态门

文章目录

  • 前言
  • 一、数据位宽
    • 1、有符号定点数
    • 2、Nbit和Mbit相加或相乘
  • 二、阻塞赋值和非阻塞赋值
  • 三、timescale
  • 四、三态门的设计
  • 五、verilog模块编程原则


前言

2023.4.5 清明节


一、数据位宽

N位有符号数:-2^(N-1) ~ 2^(N-1) -1
N位无符号数:0 ~ 2^N-1
如:8bit无符号数范围0-255,有符号数范围-128-127(0占掉了正数)

1、有符号定点数

范围:
最大值:3 + 2^-1 + 2^-2 + 2^-3 + 2^-4
最小值:-4 - (2^-1 + 2^-2 + 2^-3 + 2^-4 +2^-5)

N = 8,3Q5    //总共8位数,整数部分3位,小数部分5位

2、Nbit和Mbit相加或相乘

相加位数:+1
相乘位数:N+M

二、阻塞赋值和非阻塞赋值

组合电路要使用阻塞赋值,时序电路使用非阻塞赋值

阻塞赋值 非阻塞赋值
= <=
立刻执行,立刻改变 一个周期计算右边的值,下个周期赋值给左边,在过程块结束时才完成赋值操作
执行过程不受其他语句执行的影响 不影响其他语句的执行
其他语句在执行后顺序执行 并行执行
在串行语句块中,顺序执行;在并行语句块中,同时执行 在串行语句块中,执行没有先后之分,各条语句并行执行

三、timescale

  • 时间精度要小于等于时间单位
  • 只能是1、10、100这样的数
  • verilog是没有默认的timescale,没有声明的模块可能会错误的使用前面模块的定义
`timescale 时间单位/时间精度
`timescale 1ns/1ps

四、三态门的设计

三态门:既不是0,也不是1,电阻很大,相当于开路

always@(din or en)begin
	if(en)
		dout = din;
	else
		dout = 1'bz;
end

//或者assign赋值
assign dout = en ? din : 1'bz;

五、verilog模块编程原则

  • 时序电路建模时,用非阻塞赋值。
  • 锁存器电路建模时,用非阻塞赋值
  • 用always块建立组合逻辑模型时,用阻塞赋值。
  • 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。
  • 在同一个always块中不要既用非阻塞赋值又用阻塞赋值。
  • 不要在一个以上的 always 块中为同一个变量赋值。
  • $strobe系统任务来显示用非阻塞赋值的变量值。
  • 在赋值时不要使用#0延时。

你可能感兴趣的:(Verilog学习笔记,学习,verilog)