带你了解FPGA(4) | 您所在的位置:网站首页 › verilog中感叹号 › 带你了解FPGA(4) |
基本语法
1. 模块类声明类语法2. 端口声明3. 参数定义4. 信号类型5. 多语句定义6. 比较语句7. 循环语句8. 任务定义9. 连续赋值10. always模块11. 运算操作符12. 赋值符号
1. 模块类声明类语法
module···endmodule 在Verilog中都会出现这个语法,这是一个固定的语法,所有的功能实现语法最终都包含在···中。module的语法如下所示: module my_first_prj(···) endmodulemodule后面的my_first_prj为该module的命名,随后的括号内罗列出该模块的所有的输入/输出端口信号名 2. 端口声明input,output,inout 对于本地module而言,这些信号无非可以归为3类,即输入信号(input),输出信号(output),双向信号(inout),最常见的3中端口声明实例如下: input clk; input wire rst_cn; input [7:0] data_in第一个声明表示1bit的名称为clk的输入信号端口,第2个声明表示wire类型的1bit的名称为rst_n的输入信号,第3个声明表示8bit的名称为data_in的输入信号。 3. 参数定义parameter 一个基本的module如下: module (,,...) //输入端口声明 input; input wire; input[:]; ... //输出端口声明 output; output[:]; output reg[:]; ... //双向端口声明 inout; inout[:]; ... //参数定义 parameter=; parameter[:]=; ... //具体功能逻辑代码 ... endmodule 4. 信号类型wire,reg等 如下图所示就是reg和wire的示例图,reg就是两个寄存器,而wire就是两个reg之间直接连接的线。 begin…end 通俗地说,begin…end就是C语言里的“{}”,用于单个语法的多个语句定义,其使用示例如下: //含有命名的begin语句 begin: //可选声明部分 //具体逻辑 end //基本的begin语句 begin //可选声明部分 //具体逻辑 end 6. 比较语句if…else, case…default…endcase 判断语法,if…else及case语句是最常用的功能语法,其基本的使用示例如下: //if判断语句 if() begin //具体逻辑 end //if...else判断语句 if() begin //具体逻辑 end else begin //具体逻辑 end //if...else if ...else判断语句 if() begin //具体逻辑 end else if() begin //具体逻辑 end else begin //具体逻辑 end //case语句 case() : : : defualt: endcase 7. 循环语句for循环语句用得也比较少,但是也会在一些特定的设计中使用它,其示例如下: //for语句 for(=;;=) begin //具体逻辑 end 8. 任务定义task…endtask task更像是C语言中的子函数,task中可以有input,output和inout端口作为出入口参数,他可以用于实现一个时序控制。task没有返回值,因此不可以用在表达式中,其基本用法如下: task: //可选声明部分,如本地变量声明 begin //具体逻辑 end endtask 9. 连续赋值assign和问号表达式(?) assign用于直接互联不通的信号或直接给wire变量赋值: assign=;问号表达式就是简单的if…else语句,但更多地用在组合逻辑中: (判断条件)?(判断条件为真时的逻辑处理):(判断条件为假时的逻辑处理) 10. always模块always 敏感表可以为电平,沿信号posedge/negedge;通常和@连用,在组合逻辑电路中,用法如下: always@(*) begin //具体逻辑 endalways后若有沿信号(上升沿posedge,下降沿negedge),则多位时序逻辑,基本用法如下: //单个沿触发的时序逻辑 always@(沿变化) begin //具体逻辑 end //多个沿触发的时序逻辑 always@(or) begin //具体逻辑 end 11. 运算操作符Verilog中绝大多数运算操作符都是可综合的,其列表如下: =和 |
CopyRight 2018-2019 实验室设备网 版权所有 |