今日进行了数字逻辑实验,完成了一个最简单的FPGA设计,即流水灯设计。

此处记录我们的指导文件以及实验报告,同时记录遇到的问题及解决方法。

一、vivado工程源文件编写

counter.v文件

  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 2020/10/08 12:01:18
  7. // Design Name:
  8. // Module Name: counter
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21.  
  22. module counter(
  23. input clk,
  24. input rst,
  25. output clk_bps
  26. );
  27. reg[13:0]cnt_first,cnt_second;
  28. always@(posedge clk or posedge rst)
  29. if(rst)
  30. cnt_first<=14'd0;
  31. else if (cnt_first == 14'd10000)
  32. cnt_first<=14'd0;
  33. else cnt_first <=cnt_first + 1'b1;
  34. always@(posedge clk or posedge rst)
  35. if(rst)
  36. cnt_second <= 14'd0;
  37. else if (cnt_second == 14'd10000)
  38. cnt_second<=14'd0;
  39. else if (cnt_first == 14'd10000)
  40. cnt_second <= cnt_second + 1'b1;
  41. assign clk_bps = cnt_second == 14'd10000 ? 1'b1 : 1'b0;
  42. endmodule

flash_led_ctl.v

  1. `timescale 1ns / 1ps
  2.  
  3. //////////////////////////////////////////////////////////////////////////////////
  4.  
  5. module flash_led_ctl(
  6. input clk,
  7. input rst,
  8. input dir,
  9. input clk_bps,
  10. output reg[15:0]led
  11. );
  12. always @( posedge clk or posedge rst )
  13. if( rst )
  14. led <= 16'h8000;
  15. else
  16. case( dir )
  17. 1'b0: //从左向右
  18. if( clk_bps )
  19. if( led != 16'd1 )
  20. led <= led >> 1'b1;
  21. else
  22. led <= 16'h8000;
  23. 1'b1: //从右向左
  24. if( clk_bps )
  25. if( led != 16'h8000 )
  26. led <= led << 1'b1;
  27. else
  28. led <= 16'd1;
  29. endcase
  30. endmodule

flash_top_led.v

  1. `timescale 1ns / 1ps
  2.  
  3. module flash_led_top(
  4. input clk,
  5. input rst_n,
  6. input sw0,
  7. output [15:0]led
  8. );
  9. wire clk_bps;
  10. wire rst;
  11. assign rst = ~rst_n;
  12.  
  13. counter counter(
  14. .clk( clk ),
  15. .rst( rst ),
  16. .clk_bps( clk_bps )
  17. );
  18. flash_led_ctl flash_led_ctl(
  19. .clk( clk ),
  20. .rst( rst ),
  21. .dir( sw0 ),
  22. .clk_bps( clk_bps ),
  23. .led( led )
  24. );
  25. endmodule

flash_top_led_tb.v

  1. module flash_led_top_tb;
  2. reg clk,rst,sw0;
  3. wire [15:0] led;
  4. initial begin
  5. clk = 1'b0;
  6. rst = 1'b1;
  7. sw0 = 1'b0;
  8. #10 rst = 1'b0;
  9. #10 rst = 1'b1;
  10. #1000000000 //6ms后改变位移方向
  11. #1000000000
  12. #1000000000
  13. #1000000000
  14. #1000000000
  15. #1000000000
  16. sw0 = 1'b1;
  17. end
  18. always #5 clk <= ~clk;
  19. flash_led_top flash_led_top(
  20. .clk( clk ),
  21. .rst_n( rst ),
  22. .sw0( sw0 ),
  23. .led( led )
  24. );
  25. endmodule

二、工程流程设计

给出流水灯仿真结果截图,对波形进行简要解释:

1、  初始条件下,流水灯从led[15]开始向右移动

2、  6ms后移动至led10亮,改变位移方向向左移动。

给出板子运行结果照片,以及你的操作过程:

灯向左移动

按下sw0后反向

counter模块的作用是什么?

计时模块

三、实验总结

遇到的问题

1、仿真时波形与预期不相同,排查结果后发现是”Set as top”设置错误。

【在编写源文件的过程中,应该注意到flash_led_top.v文件是应该放到最上方的】

2、无法生成bit流文件,参照csdn上的博客,添加tcl文件代码如下

【set_property
SEVERITY {Warning} [get_drc_checks NSTD-1]

set_property
SEVERITY {Warning} [get_drc_checks UCIO-1]

set_property
SEVERITY {Warning} [get_drc_checks RTSTAT-1]】

右键click左下方的generate bitstream——添加tcl文件。

体会

多查,网上有很多的解决方案,不断排查问题才能得到正确解决方案。

Verilog基础入门——Vivado流水灯工程(四)(实验报告)的更多相关文章

  1. Verilog基础入门——Vivado工程创建(三)

    Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...

  2. 实验四实验报告————Android基础开发

    实验四实验报告----Android基础开发 任务一 关于R类 关于apk文件 实验成果 任务二 活动声明周期 实验成果 任务三 关于PendingIntent类 实验成果 任务四 关于布局 实验成果 ...

  3. 20145120 《Java程序设计》实验四实验报告

    20145120 <Java程序设计>实验四实验报告 实验名称:Android开发基础 实验目的与要求: 用SDK成功编译出HelloWorld 实验内容.步骤 PSP 步骤 耗时 百分比 ...

  4. 20145328 《Java程序设计》实验四实验报告

    20145328 <Java程序设计>实验四实验报告 实验名称 Andoid开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android ...

  5. 20145227 《Java程序设计》实验四实验报告

    20145227 <Java程序设计>实验四实验报告 实验内容 安装Andriod Studio并配置软件 使用Andriod Studio软件实现Hello World的小程序 实验步骤 ...

  6. 20145315 《Java程序设计》实验四实验报告

    20145315 <Java程序设计>实验四实验报告 第一步 安装Android Studio 按教程安装即可,安装过程中需要配置JAVA_HOME环境变量为jdk安装目录. 第二步 在I ...

  7. # 20155337 《Android程序设计》实验四实验报告

    20155337 <Android程序设计>实验四实验报告 实验一 实验内容 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPU ...

  8. 20145314郑凯杰 《Java程序设计》实验四 实验报告

    20145314郑凯杰 <Java程序设计>实验四 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  9. 《Java程序设计》实验四 实验报告

    实验四 Android开发基础 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 ...

随机推荐

  1. [Java]取得当前代码所在函数的函数名

    要取得当前运行代码的函数名,可以用: Thread.currentThread().getStackTrace()[1].getMethodName(); 但是,这行代码有些过长,嵌入业务代码稍显突兀 ...

  2. java多版本管理

    背景 java版本的升级也比较频繁, 每年一个版本或更多 虽然java环境变量的配置无技术性可言, 但对于频繁切换也是比较枯燥的 java版本管理工具 sdkman: https://sdkman.i ...

  3. linux:apache-配置基于域名的虚拟机主机

    一个http服务要配置多个站点,就需要用到虚拟机主机. 虚拟机主机一般有三类:1.基于域名 2.基于端口 3.基于ip 举例操作基于域名配置三个站点: 域名 站点目录 www.eejind.com   ...

  4. [补题]找到原序列长度k的子序列中字典序最小的那个(单调栈)

    题意 题目如题,输入序列只包含小写字母,数据范围0<k<=len<=500000. 例: 输入:helloworld 输出:ellld 题解 使用单调栈.当已删掉n-k个字符,输出栈 ...

  5. 1. spring5源码 -- Spring整体脉络 IOC加载过程 Bean的生命周期

    可以学习到什么? 0. spring整体脉络 1. 描述BeanFactory 2. BeanFactory和ApplicationContext的区别 3. 简述SpringIoC的加载过程 4. ...

  6. 基于JavaScript的表格设计:按序添加或删除班级的学生信息

    目的: 制作一个表格,显示班级的学生信息 功能: 鼠标移到不同行,背景色发生改变,离开恢复原背景色 添加.删除按钮,可添加,可删除. 程序流程: 首先先建立绑定事件函数. 其次建立鼠标移动改变背景色函 ...

  7. Ansible基础认识及安装(1)

    Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量 ...

  8. k8s运行容器之Job(四)

    Job 容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序, ...

  9. 使用swagger遇到的问题

    1.定义全局的请求参数时, defaultValue不能是中文,不然一直是请求中 ParameterBuilder userName = new ParameterBuilder(); Paramet ...

  10. Mysql-Innodb : 从一个字节到整个数据库表了解物理存储结构和逻辑存储结构

    首先要从Innodb怎么看待磁盘物理空间说起   一块原生的(Raw)物理磁盘,可以把他看成一个字节一个字节单元组成的物理存储介质   如果要在这块原生物理空间中插入一条记录,不能单单只插入数据,还需 ...