Verilog硬件语法描述的硬件结构
Verilog与其他高级语言本质的区别在于它是一种硬件描述语言,其所有的变量和语法结构应该与实际数字电路相互映射,孤立的使用Verilog语法去完成一定的逻辑结构不利于深入对FPGA的了解以及开发。
if/else if/else结构
例如常用定时用法:
reg [22:0] cnt_100ms;
always@(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
cnt_100ms <= 0;
else if(cnt_100ms == CNT_MAX)
cnt_100ms <= 0;
else
cnt_100ms <= cnt_100ms+23'b1;
其对应的数字电路结构如下:22位加法器、两输入MUX、22位寄存器和比较器的级联。
用一个23bit的寄存器作为cnt_100ms变量,将其与CNT_MAX比较后作为MUX的选择端SEL。SEL为1时cnt_100ms每个时钟周期+1并输出,SEL为0时MUX输出0。