带你了解FPGA(4) 您所在的位置:网站首页 verilog中感叹号 带你了解FPGA(4)

带你了解FPGA(4)

2024-06-30 05:34| 来源: 网络整理| 查看: 265

基本语法 1. 模块类声明类语法2. 端口声明3. 参数定义4. 信号类型5. 多语句定义6. 比较语句7. 循环语句8. 任务定义9. 连续赋值10. always模块11. 运算操作符12. 赋值符号

1. 模块类声明类语法

module···endmodule 在Verilog中都会出现这个语法,这是一个固定的语法,所有的功能实现语法最终都包含在···中。module的语法如下所示:

module my_first_prj(···) endmodule

module后面的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之间直接连接的线。 在这里插入图片描述 作为input和output的信号端口只能是wire型,而output则可以是wire也可以是reg。wire和reg的一些常见用法示例如下:

//定义一个wire信号 wire; //给一个定义的wire信号直接连接赋值 //该定义等同于分别定义一个wire信号和使用assign语句进行赋值 wire=; //定义一个多bit的wire信号 wire[:]; //定义一个reg信号 reg; //定义一个赋初值的reg信号 reg = ; //定义一个多bit的reg信号 reg[:]; //定义一个多bit的赋初值的reg信号 reg[:]=; //定义一个二维的多bit的reg信号 reg[:][]; 5. 多语句定义

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 //具体逻辑 end

always后若有沿信号(上升沿posedge,下降沿negedge),则多位时序逻辑,基本用法如下:

//单个沿触发的时序逻辑 always@(沿变化) begin //具体逻辑 end //多个沿触发的时序逻辑 always@(or) begin //具体逻辑 end 11. 运算操作符

Verilog中绝大多数运算操作符都是可综合的,其列表如下: 在这里插入图片描述

12. 赋值符号

=和



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有