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
状态机
有限状态机(FSM):在有限个状态之间按一定规律转换的时序电路。
状态机的两种模型
四段论:
状态空间定义
状态跳转(时序逻辑!)
下个状态判断(组合逻辑!)
各个状态下的动作
IP核
双端口RAM
存在读写冲突和写写冲突,编写程序时注意避免。
FIFO
FIFO,即先进先出,FIFO一般指的时对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存,或者高速异步数据的交互也即所谓的跨时钟域的信号传递。
同步FIFO:读写同一个时钟,在时钟沿来临时同时发生读写操作。
异步FIFO:读写时钟相互独立。
以太网
MAC侧:对数据封包解包
PHY侧:模数转换
MDIO:数据管理输入输出接口,配置PHY通信方式和速率,读取PHY状态等
READ TA: 转向位,mac侧释放总线默认高阻态Z,由PHY侧将信号拉低。
PHY芯片在上升沿采样,则需要在MDC下降沿更新数据。
基本控制寄存器
基本状态寄存器
PHY芯片特定状态寄存器
Q.E.D.