学生时代用 VHDL 语言设计比较多,目前一直用 Verilog 。为方便查询语法,也为其他学者提供便利的学习通道,特意写此教程,如果你对 C 语言有一定的了解,有助于 Verilog 的快速上手。需要说明的是:
(1) 教程内容是以自己曾经的学习角度进行撰写的,学习起来可能会容易些。其中有不妥之处还望指出,一起交流进步。
(2) 当用 Verilog 设计完成数字模块后进行仿真时,需要在外部添加激励,激励文件叫 testbench。有时 testbench 设计可能比数字模块本身都复杂。所以前面在介绍 Verilog 基本语法时,几乎没有仿真。后面介绍行为级和时序级相关知识时,会多用仿真说明。
第一个 Verilog 设计:4 位宽 10 进制计数器:
module counter10(
//端口定义
input rstn, //复位端,低有效
input clk, //输入时钟
output [3:0] cnt, //计数输出
output cout); //溢出位
reg [3:0] cnt_temp ; //计数器寄存器
always@(posedge clk or negedge rstn) begin
if(! rstn)begin //复位时,计时归0
cnt_temp <= 4'b0 ;
end
else if (cnt_temp==4'd9) begin //计时10个cycle时,计时归0
cnt_temp <=4'b000;
end
else begin //计时加1
cnt_temp <= cnt_temp + 1'b1 ;
end
end
assign cout = (cnt_temp==4'd9) ; //输出周期位
assign cnt = cnt_temp ; //输出实时计时器
endmodule