FPGA基于Vivado开发,设计顶层文件Top.v

这篇具有很好参考价值的文章主要介绍了FPGA基于Vivado开发,设计顶层文件Top.v。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一通废话

首先得承认,我并不是主动拥抱顶层文件这套思路的,原因很简单,能用就行干嘛费劲搞那么多东西。起初知识点亮一个LED灯,整一个半加器的简单模拟,也确实根本用不上。后边工程有一定的负责度,例如设计数字时钟,LCD1602驱动设计等等,这个时候我就发现了层次化设计的一个便捷之处,在于他们方便复用,只需要定义好一个功能Module,可以在仿真 – 下板之间无缝衔接,增加了自己开发的效率,减少不必要的注释,感兴趣可以接着往下看。

另外自己上述两个工程博客连接:

为什么需要层次化设计

一图胜千言,引用野火开发板他们家的资料(文末备注)里说明复用的思想在哪个地方。举个例子,比如我现在定义了一个橙色的模块,我现在第一层(绿色)的需求是设计一个数字时钟,那么第二层拆分开就是定时1秒(蓝色),定时1分钟(橙色)、定时1小时(红色)。接着蓝色的定时1秒,我再通过其他小模块继续拆分。那么大家有没有想过一个问题,都是同样的计数/计时,秒钟/分钟/时钟不都是一样的吗,只不过一个是定时1秒,一个是60秒,一个是3600秒。是的,我们完全可以统一写一个定时模块(比如第三层蓝色功能模块1_1),改变定时的值(1/6/3600)即可。

也就是说,层次化的设计思想,其实就是拆分需求,减少重复代码统一集成一个公用的模块,这就达到了Module复用的功能。说起来非常高端,我们通过一个简单例子来说明下如何使用吧,时间才是检验真理的唯一标准。
vivado顶层文件,# FPGA开发,嵌入式硬件开发,fpga开发

怎么使用

首先要申明一点,目前入门FPGA的阶段属于非常非常,所有工程代码、工程逻辑都可能存在错误,希望各位同学老师能够指出,同时也参考了大量的互联网上优质内容,在这里一并感谢,基于这个原因也决定将核心逻辑进行共享。请勿做一切商业用途。接下来会以我在数字时钟那篇的博客,讲一讲大概的逻辑,具体实操大家可以移步数字时钟的那篇博客。

这里是引用

带大家看三个文件,第一个是功能模块长什么样;第二个是理解顶层文件Top.v长什么样,到底是怎么复用的;第三个是了解testbench文件是如何设计的,和顶层文件有什么区别。

clock1.v文件:

//数字时钟模块
module clock1(
    sec,
    min,
    hour,
    rst,
    sys_clk_p,
    sys_clk_n,
    clk_out1,
    led_out1,
    led_out2
    );
       
input      rst;
input      sys_clk_p;            // Differential input clock 200Mhz
input      sys_clk_n;            // Differential input clock 200Mhz
output     clk_out1;  
output [7:0]  sec,min;
output [7:0]  hour;
output    led_out1;
output    led_out2;
reg    [7:0]  sec=0;
reg    [7:0]  min=0;
reg    [7:0]  hour=0;
reg    [32:0] cnt;
reg    clk_div;
reg    led_out1;
reg    led_out2;


//分频部分  50MHz - 1Hz
always @ ( posedge clk_out1 or posedge rst)begin
	篇幅原因略去代码
end

// 秒钟部分
always @ ( posedge clk_div  or posedge rst)begin
	篇幅原因略去代码
end

//分钟部分
always @ ( posedge clk_div or posedge rst)begin
	篇幅原因略去代码
end

// 时钟部分
always @ ( posedge clk_div or posedge rst)
	篇幅原因略去代码
end

endmodule

这个模块该有的功能全都有,篇幅原因省去的代码其实都基本一个样。需要关注到的是这个module里边详细定义了secminhour这三个变量,并且都是output类型。因为我们是对顶层设计的举例子,代码详细功能不在这里讲解。接下来一并看剩下两个文件。

Top.v文件

module TOP(
    input rst,
    input sys_clk_p,
    input sys_clk_n,
    output clk_out1,
    output led_out1,
    output led_out2
    );
//***********差分时钟50MHz *****************************************
wire   sys_clk_p;
wire   sys_clk_n;
wire   rst;
wire   clk_out1; 
//***********数字时钟****************************************
wire   led_out1;
wire   led_out2;

//时钟模块初始化
clock1 clock(
    .led_out1(led_out1),
    .led_out2(led_out2),
    .rst(rst),
    .sys_clk_p(sys_clk_p        ),
    .sys_clk_n(sys_clk_n        ),
    .clk_out1(clk_out1        )
    );

//PLL分频的代码

endmodule

Testbench文件

`timescale 1ns / 1ns

module clock1_tb();

//***********??????*****************************************
reg   sys_clk_p;
wire  sys_clk_n;
reg     rst;
wire    clk_out1; 
//***********??????*****************************************
wire [7:0]   sec;
wire [7:0]   min;
wire [7:0]   hour;
wire   led_out1;
wire   led_out2;

//初始化系统时钟
initial begin
    sys_clk_p = 1'b0;
	略去代码
end

//数字时钟初始化
clock1 clock(
    .led_out1(led_out1),
    .led_out2(led_out2),
    .sec(sec),
    .min(min),
    .hour(hour),
    .rst(rst),
    .sys_clk_p(sys_clk_p        ),
    .sys_clk_n(sys_clk_n        ),
    .clk_out1(clk_out1        )
    );    
    
//PLL时钟分频

endmodule

可以看两个文件夹,代码基本都是一模一样的,定义好端口(input/output/wire/reg等),初始化clock模块如何结束。

  • 区别1:Top.v顶层文件没有申明sec/min/hour这几个端口,但testbench文件申明了;
  • 区别2:testbench文件需要初始化相关的值、时钟等,但Top.v文件不需要;

这里重点关注第一点,我们这里并不需要把secminhour这三个寄存器变量输出(需要制定引脚),所以我们在Top.v文件里边不声明他的输入输出类型,但实际下板却并不影响clock功能的实现,因为模块的功能实现与否,和你是否声明并无关系。你申明了,他就展示出来,不声明他就不展示出来,但功能一直都在实现。

这样写的一个好处就是,我们只需要写好一个module文件,在仿真测试,以及下板验证的时候都能够很快、很简单地实现,而不用大量复制代码,在两头切换。

补充

在testbench文件我们对他进行声明了,当然了,因为我们仿真的时候需要这个变量来看看,初步确认他的功能是好的,实际下板我们并不需要把秒、分、时都输出出来(设想一个寄存器变量占8位,3个就是24位,并没有这么多引脚给你占用)。当然如果你有意为之,你也可以如下设置这三个变量,那么你便需要设置相关引脚并进行下一步。

此时的Top.v文件

module TOP(
    output sec,
    output min,
    output hour,
	…………
	同上
    );

wire [7:0]   sec;
wire [7:0]   min;
wire [7:0]   hour;

//***********差分时钟50MHz *****************************************
同上

//***********数字时钟****************************************
同上

//时钟模块初始化
同上

//PLL分频的代码
同上

endmodule

不声明,但功能实现时候,引脚的截图:

vivado顶层文件,# FPGA开发,嵌入式硬件开发,fpga开发

不声明,功能也实现时候,引脚的截图:
vivado顶层文件,# FPGA开发,嵌入式硬件开发,fpga开发

总结

  • 本文稍微介绍了下什么是层次化设计,举了个数字时钟的例子
  • 以数字时钟为例,讲了如何在顶层文件Top.v复用定义好的module(Testbench也可以理解为一种顶层文件);
  • 顶层文件选择性地不声明相关引脚,减少引脚使用;仿真申明引脚以便查看功能完整性和正确性;

参考

  • FPGA Verilog 开发实战指南 – 基于 Xilinx Artix7,野火(非常推荐这本书和他们家的白嫖资料);
  • 基于FPGA的数字时钟(使用vivado)
  • 基于FPGA的简易时钟(含verilog源码)

以上。

如果你觉得这篇文章对你有帮助,请为我点个赞谢谢🌹🌹
如果有遇到其他问题,也请在评论区留言🌹🌹文章来源地址https://www.toymoban.com/news/detail-715980.html

到了这里,关于FPGA基于Vivado开发,设计顶层文件Top.v的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Vivado中的COE文件:FPGA开发指南

    COE文件是Vivado软件中用于初始化存储器内容的一种常见文件格式。在FPGA开发过程中,我们经常需要对存储器进行初始化,以存储初始数据或者程序代码。COE文件提供了一种简单而灵活的方式来定义存储器的初始内容。本文将介绍COE文件的使用方法,并提供相应的示例代码。

    2024年02月06日
    浏览(41)
  • 【FPGA】Vivado开发流程(基于2018.3版本)

    基本流程:①设计定义 ②设计输入 ③分析综合 ④功能仿真 ⑤布局布线 ⑥分析性能   双击 Vivado图标即可启动 Vivado 软件。 ①Quick Start 组包含有 Create Project(创建工程) Open Project(打开工程)OpenExample Project(打开实例工程)。 ②Tasks 组包含有 Manage IP(管理 IP) Open Hardw

    2024年02月14日
    浏览(29)
  • 基于FPGA的脉冲压缩设计(Matlab+vivado)

    前言: 本科学了四年机械,后面转头去了电子信息读研,以FPGA的脉压入手,在从零开始的路上CSDN对我的帮助很大,现整理所学,与诸君共勉。本文不少代码均是参考CSDN上的前辈们一步一步理解做出来的,如有冒犯之处,烦请谅解。 目录 一:脉冲压缩原理介绍 1.我们简单了

    2024年01月19日
    浏览(30)
  • Vivado仿真数据导出至.txt文件——FPGA开发

    在FPGA开发过程中,仿真是验证设计的重要环节。在Vivado设计套件中,我们可以使用仿真工具来验证设计的功能和性能。本文将介绍如何将Vivado仿真数据导出至.txt文件,以方便后续分析和处理。 步骤如下: 打开Vivado设计套件并创建一个新的工程。 在工程中添加设计文件和约

    2024年02月05日
    浏览(123)
  • 【Vivado】基于FPGA的出租车计价表设计

    学校FPGA设计结课课设 主要做了出租车计价表,一个比较旧的课题,代码如下: 分模块编程,按照价目表写代码,具体注释见代码。 在module里新加一个 input 变量 key_stage ,用 key_stage 表示不同车流量段,用以计数 在module里新增一个变量 state 来限定是在白天还是夜间

    2024年02月04日
    浏览(41)
  • 基于vivado+Verilog FPGA开发 — GT收发器

    代码规范:Verilog 代码规范_verilog代码编写规范-CSDN博客 开发流程:FPGA基础知识----第二章 FPGA 开发流程_fpga 一个项目的整个流程-CSDN博客   源码下载:GitHub - Redamancy785/FPGA-Learning-Record: 项目博客:https://blog.csdn.net/weixin_51460407 零、低速通信接口的缺陷 1、同步通信要求传输数据

    2024年04月17日
    浏览(47)
  • 【FPGA】基于vivado FPGA设计过程中时序报红的分析及解决办法

    本文基于vivado的FPGA,对 时序报红 问题分析方法进行说明,并提供常见问题的解决办法。 (1)前提 先将工程进行综合和布局布线。 (2)方法1 IMPLEMENTION - Report Timing Summary 参数设置: Maximum number of paths per clock or path group:每个时钟路径或者时钟组显示的最大路径数,想要查

    2024年02月05日
    浏览(30)
  • 【FPGA基础】基于PWM脉宽调制的呼吸灯设计(Vivado)

    软件:Vivado2019.1 硬件:Zynq7010 仿真:Vivado Simulator 众所周知,灯的亮度和加在其两端的电压有关。电压越高,亮度越亮,反之越暗。 于是,设计一个呼吸灯就变得很简单了。让IO的输出电平由低到高,再有高到底有规律的变化,就能达到呼吸效果。 现在问题来了,IO的输出电

    2024年02月07日
    浏览(60)
  • “FPGA开发中Vivado生成bit文件遇到的错误解决方案“

    “FPGA开发中Vivado生成bit文件遇到的错误解决方案” FPGA开发是现在工业界中越来越广泛使用的技术,但是在开发过程中难免会出现一些问题。其中,Vivado生成bit文件报错是一个比较常见的问题。下面,我将详细介绍这个问题以及如何彻底解决。 一、问题描述 当我们进行FPGA项

    2024年02月04日
    浏览(46)
  • 基于vivado+Verilog FPGA开发 — 基于AD9767高速DAC的DDS信号发生器

    目录  一、功能定义 二、设计输入  1、主模块 2、DDS模块 3、 按键消抖模块 三、功能仿真  四、综合优化 五、布局布线 六、时序仿真 七、板级调试  代码规范:Verilog 代码规范_verilog代码编写规范-CSDN博客 开发流程:FPGA基础知识----第二章 FPGA 开发流程_fpga 一个项目的整个

    2024年03月18日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包