转自https://www.cnblogs.com/jian-jia/archive/2019/11/24/11924371.html
module a(b, c, d,...z);//module: 模块头 a:模块名 (b,c,d,...z):端口列表 input b;//输入声明 input wire c;//输入声明线网类型用wire,wire可省略 input wire [7:0] d;//[7:0]:输入总线位宽0~7所以是8bit总线 output e;//输出声明 output [7:0] f;//输出总线位宽说明,默认为wire类型,此处省略wire output reg [7:0] f;//输出总线寄存器类型用reg ...//为了篇幅小一些省略e~y的声明,实际代码中不可省略 assign d = a & b;//assign语句也叫数据流建模语句也叫连续赋值语句,后面接的是组合逻辑 assign e = (f < g)? 1 : 0;//三目运算符 always @ (posedge a or negedge b or posedge c...)//always语句,posedge为上升沿触发,negedge为下降沿触发,后面接信号表示当这个信号上升沿或下降沿时执行下面的程序 begin //begin...end 相当于() if(!b)//if语句 begin h <= 4'b0000;//非阻塞赋值语句用<=,4'b0000表示位宽为4,二进制表示的数0000 i <= 32'haabbccdd;//此处表示32位宽,16进制表示的数aabbccdd end else//else表示分支 case(j)//case语句 0 : k <= k + 1'b1;//verilog中没有自加的表示,所以用k = k + 1'b1 1 : if(k<m) begin l <= 8'd7;j <= 2; end// j <= 2表示下一个时钟沿触发后跳到2:语句 2 : m < = 4'b0001 << 2;//<<移位符号 default: j <=0; //default语句表示当j取值不是上面列出的0,1,2时走这条语句 endcase //case多路分支语句结束标志 end//整个always循环结束标志 endmodule//整个模块结束标志