Verilog 拾慧

语法

组合逻辑和时序逻辑

组合逻辑中,任何时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。

时序逻辑中,任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态。或者说还与以前的输入有关,因此时序逻辑必须具备记忆功能。

阻塞赋值和非阻塞赋值

阻塞赋值,如b = a;

计算RHS(right had side)并更新LHS(left right side)。在同一个always块中,后面的赋值在前面的赋值结束后才开始赋值。

非阻塞赋值,如b <= a;

赋值开始的时候,计算RHS,赋值结束的时候,计算LHS。在计算非阻塞赋值RHS和LHS时,允许其他非阻塞赋值同时计算。非阻塞赋值只能用于寄存器类型的变量进行赋值,因此只能用在initial和always等过程块中。

在描述组合逻辑的always块中用阻塞赋值,综合成组合逻辑的电路结构。这种电路结构只与输入电平的变化有关系。

在描述时序逻辑的always块中用非阻塞赋值<=,综合成时序逻辑的电路结构。这种电路结构往往于触发边沿有关系,只有在触发延时时才能发生赋值的变化。

在同一个always块中只用一种。

case语句

分支表达式的值互不相同

所有表达式的位宽必须相等,不能用 'bx 来代替 n'bx

casez:比较时,不考虑表达式中的高阻值

casex:不考虑高阻值 z 和 不定值 x

reg [7:0] sel;  //1100_0011
casez(sel)
	8'b1100_zzzz: command1
	8'b1100_xxzz: command2
endcase

状态机

image.png

有限状态机(FSM):在有限个状态之间按一定规律转换的时序电路。image-nsgv.png

状态机的两种模型image-vpnk.png

四段论:

状态空间定义

状态跳转(时序逻辑!)

下个状态判断(组合逻辑!)

各个状态下的动作

IP核

双端口RAM

存在读写冲突和写写冲突,编写程序时注意避免。

FIFO

FIFO,即先进先出,FIFO一般指的时对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存,或者高速异步数据的交互也即所谓的跨时钟域的信号传递。

同步FIFO:读写同一个时钟,在时钟沿来临时同时发生读写操作。

异步FIFO:读写时钟相互独立。

以太网

image-wyqe.pngMAC侧:对数据封包解包

PHY侧:模数转换

MDIO:数据管理输入输出接口,配置PHY通信方式和速率,读取PHY状态等

image-lbis.png

READ TA: 转向位,mac侧释放总线默认高阻态Z,由PHY侧将信号拉低。

image-vwev.png

PHY芯片在上升沿采样,则需要在MDC下降沿更新数据。

image-vnty.png基本控制寄存器

基本状态寄存器

PHY芯片特定状态寄存器

Q.E.D.