1、verilog语法——模块的结构

这篇具有很好参考价值的文章主要介绍了1、verilog语法——模块的结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、什么是模块

二、模块的内容

1.I/O声明的格式

2.内部信号的声明

3.功能定义

三、模块的调用(例化)

要点注意



前言

本次的学习内容是verilog的基本设计单元:模块(module)


一、什么是模块

模块(module)是verilog设计基本单元。一共由两部分组成:一部分是描述接口,另一部分描述逻辑功能。下面将举个例子说明模块的基本构成:

module mux2_1(a,b,sel,mux_out);
    input a,b;                //****************//
    input sel;                //****端口描述****//
    output mux_out;           //***************//
    
    assign mux_out = (sel==1)?a:b; //**逻辑功能描述**//
endmodule

例1.1

这段代码实现的功能是二选一多路选择器,其中

●a,b,sel作为输入端口,mux_out作为输出端口,第2-4行的代码就完成了端口的描述。

●通过三目运算符的操作,第5行代码完成逻辑功能的描述。

●mux2_1为用户自定义模块名,整个模块以module开头endmodule结尾

二、模块的内容

1.I/O声明的格式

module 模块名(端口名1,...,端口名m+n+k);

        input [信号位宽-1:0] 端口名1;

                         .

                         .               //**i个输入**//

                         . 

        input [信号位宽-1:0] 端口名m;

        output [信号位宽-1:0] 端口名m+1;

                         .

                         .             //**n个输出**//

                         . 

        output [信号位宽-1:0] 端口名m+n;

        inout [信号位宽-1:0] 端口名m+n+1;

                          .

                          .              //**k个双向口**//

                          . 

        inout [信号位宽-1:0] 端口名m+n+k;

也可以定义成如下格式:

module 模块名(

        input [信号位宽-1:0] 端口名1,

                             .

                             .            //**i个输入**//

                             . 

        input [信号位宽-1:0] 端口名m,

        

        output [信号位宽-1:0] 端口名1,

                              .

                              .           //**n个输出**//

                              . 

        output [信号位宽-1:0] 端口名n,

        inout [信号位宽-1:0] 端口名,

                               .

                               .         //**k个双向口**//

                               . 

        inout [信号位宽-1:0] 端口名k

);

注意两种定义的区别:

第一种是在括号结束后进行定义,因此每个语句用分号 结束。

第二种是在括号内部进行的定义,因此每个语句用逗号 连接。

2.内部信号的声明

当某些信号不是作为输入或输出信号,而是作为中间信号被我们所用到,那么就需要声明。

格式如下:

wire [信号位宽-1:0] W变量1;

reg [信号位宽-1:0] R变量1;

                .

                .

                . 

这里的wire与reg是数据类型,下一节展开讲。

3.功能定义

模块中最重要的部分就是逻辑功能定义部分,由以下三种方法来产生逻辑:

(1)用assign语句,如例1.1中:assign mux_out = (sel==1)?a:b;

        assign只适用于组合逻辑,且描述只需assign后面接一个方程式即可。

(2)用实例元件,如:and U0(out, a, b);

        该方法就是调用库原件,键入元件名和相应的引脚即可。其中and就是元件名与门,U1是用户定义模块名,a,b为输入,out为输出。

        注:要求模块名必须是唯一的,目的是区分调用的多个相同元件

(3)用always块,如:

always@(posedge clk or posedge rst) 

        begin

                 if(rst)

                        out <= 0;

                else

                       out <= out + 1;

        end

always块既可描述组合逻辑,又可描述时序逻辑。

三、模块的调用(例化)

模块调用语句格式如下:

module_name instance_name(port_associations);

其中module_name是被调用模块的模块名,instance_name是用户定义的引用名,port_associations是现模块与原模块之间信号端口的关联方式。而关联方式的格式有如下两种:

(1)在引用时用“.”符号表明是原模块定义的端口名,()里表示的是现模块的端口,如:

mux2_1 M0(

        .a(A),

        .b(B),

        .sel(Sel),

        .out(Out),

);

相当于把这2选1多路选择器调用到现在这个模块,现在这个模块有A,B,Sel,Out这些信号端口,将A与原模块中的a对应,B与原模块中的b对应,Sel与原模块中的sel对应,Out与原模块中的out对应。意义就是把现模块的A,B,Sel分接入到二选一多路选择器的输入端,那么Out输出的就是Sel选择A,B的结果。

(2)引用时,严格按照原模块端口顺序连接,无需标注原模块端口名称,如:

mux2_1 M0(A,B,Sel,Out);

一个完整的verilog设计模块,verilog基础语法,fpga开发

表3.1 端口关联关系

模块调用注意事项:

        (1)两种关联格式不能混用,即不可这样写:mux2_1 M0(A,.b(B),Sel,Out);

        (2)不能以循环方式嵌套模块,即不能在always语句里调用模块。


要点注意

       1. 如果assign、例化元件、always三者在同一模块中,这三种逻辑功能描述是同时进行的。也就是说,无论这三个描述代码先后顺序如何,他们都是并行的。

        2.但是对于always块来说,逻辑是按照指定顺序执行的,因此always也称为过程块。

        总的来说,verilog中的所有过程块、连续赋值语句(assign)、实例引用都是并行的.

参考资料:

一个完整的verilog设计模块,verilog基础语法,fpga开发文章来源地址https://www.toymoban.com/news/detail-717262.html

到了这里,关于1、verilog语法——模块的结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Verilog设计入门——时序模块及其Verilog表述

    目录 1.边沿触发型触发器及其Verilog表述 2.电平触发型锁存器及其Verilog表述  3.含异步复位/时钟使能型触发器及其Verilog表述 4.同步复位型触发器及其Verilog表述  5.异步复位型锁存器及其Verilog表述 6.Verilog的时钟过程表述的特点和规律   7.异步时序模块的Verilog表述  8.4位二进制

    2024年02月07日
    浏览(31)
  • 【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计

    学习新语法,争做新青年 计数器实验升级,让8个LED灯每个0.5s的速率循环闪烁,流水灯ahh好久不见~ 去年光这个就把我折磨够呛。。我肉眼可见的脱发就是从那时候开始的。。在那两个月我直接掉了10斤啊喂~ (没节食、没运动、没失恋哈哈哈 产生0.5s周期的计数器 为了避免仿

    2024年02月11日
    浏览(31)
  • FPGA_学习_04_Verilog基础语法和Modelsem仿真

    前言:对于以前学过C/C++/C#的作者来讲,Verilog的基础语法算是 特别简单 的。本文主要介绍Verilog的基础语法和Modelsem仿真。 FPGA开发是以模块为基础的,每个可 综合 的.v文件都是一个模块,模块由 module 和 endmodule 来声明。在这两个的内部,完成模块功能的实现。 在Vi

    2024年02月05日
    浏览(35)
  • Verilog基础语法(4)之模块和端口及其例化和处理

    Verilog进行FPGA/IC设计值,通常划分为各个子模块,木模块之间可能相互例化,并在顶层统一例化,并连接成一个顶层模块文件。 基本的模块模板: 如果模块内的变量位宽参数化,则模块模板为: 例化带参数的模块: 端口类型/端口描述 input 设计模块只能使用其input端口从外部

    2024年02月13日
    浏览(24)
  • FPGA学习笔记:verilog基础代码与modelsim仿真(六)——vga显示模块

    VGA显示 目标:实现屏幕红、橙、黄、绿、青、蓝、紫、黑、白、灰条形显示 1. 模块框图与波形图 vga_colorbar是实现目标功能的总体模块框图,为了实现对应的输出,我们使用三个具体功能模块实现功能。 (1) clk_gen——使用pll锁相环实现时钟分频 (2)vga_ctrl——图像控制与输出模

    2024年02月04日
    浏览(33)
  • 【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:加法器   ​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月15日
    浏览(36)
  • 【Verilog实现FPGA上的信号延迟】—— 用Verilog代码实现将信号延迟N拍,这是FPGA中非常重要的一个操作,可以使数据在不同模块之间精确同步。

    【Verilog实现FPGA上的信号延迟】—— 用Verilog代码实现将信号延迟N拍,这是FPGA中非常重要的一个操作,可以使数据在不同模块之间精确同步。 模块是FPGA中最基本的构建模块。通常一个模块代表一个电路,包括输入、输出和处理逻辑。模块中包含的处理逻辑被称为时序逻辑。

    2024年02月04日
    浏览(62)
  • FPGA设计Verilog基础之Verilog的运算符

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus FPGA设计Verilog基础之Verilog的运算符 Verilog是一种硬件描述语言,支持多种运算符,包括算术运算符、比较(关系)运算符、逻辑运算符、条件

    2024年02月03日
    浏览(33)
  • FPGA设计Verilog基础之Verilog全局变量和局部变量定义

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   在Verilog中,变量可以分为全局变量和局部变量两种类型。全局变量在整个模块中都可以使用,而局部变量只能在某个特定的代码块中使用。

    2024年02月15日
    浏览(28)
  • 【FPGA第一天】Verilog基础与简易流水灯设计

    有关更多细节,请参考: verilog语法基础 1.1 新建文件夹用来存放项目文件,请注意你的文件夹路径不要有中文,不过系统自带的桌面和文档这些路径除外。 1.2 新建项目文件 prj 项目文件 rtl 寄存器转换级,用来描述各级寄存器,用来存放.v文件 tb 仿真文件 tcl tool command langu

    2024年02月01日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包