counter
非阻塞赋值的 shift register 实现
不希望综合成 latch,所以要在每个 always 块的时候赋予新的值,不然 reg 可能变成 latch 导致错误
Memory
https://www.runoob.com/w3cnote/verilog-data-type.html
memory 使用的是数组
在 Verilog 中允许声明 reg, wire, integer, time, real 及其向量类型的数组。
数组维数没有限制。线网数组也可以用于连接实例模块的端口。数组中的每个元素都可以作为一个标量或者向量,以同样的方式来使用,形如:<数组名>[<下标>]。对于多维数组来讲,用户需要说明其每一维的索引。例如:
1 | integer flag [7:0] ; //8个整数组成的数组 |
下面显示了对数组元素的赋值操作:
1 | flag [1] = 32'd0 ; //将flag数组中第二个元素赋值为32bit的0值 |
memory 就是 reg 的数组
reg [15:0] ram [0:63];
宽度 16,深度 64
1 | module spram (input clk, en, we, |
FSM
finite state machine,只拥有有限的 state
比如 increment counter 就是 FSM
We can indicate conditions for transition on the transition arrows