跑马灯实验

4.1 实验目的

        1.熟悉龙芯实验开发板、熟悉 VIVADO 的编译环境及操作流程。

        2.掌握 FPGA 编程入门知识、利用门级方法实现简单逻辑电路。

        3.继续学习 Verilog HDL 语法、掌握跑马灯的设计、熟悉调试过程。

4.2 实验原理及芯片

        本次实验用 Verilog HDL 语言来描述 6 个不同的 2 输入逻辑门电路,其中包括:与、或、与非、或非、异或和同或门,并给出仿真测试代码和约束文件代码,可通过仿真波形图和龙芯实验板卡验证其功能,同时完成跑马灯(点亮实验台上 16 个 led 灯)实验。门电路是数字电路中最基本的元件,它能实现最基本的逻辑功能。

4.3 实验内容

        1.FPGA 编程使用入门,在 VIVADO 环境下完成对简单电路工作情况的仿真模拟,掌握基本流程。

        2.利用 Verilog 编程实现基本逻辑门电路,完成配置程序的下载,并在实验台上对程序进行最终验证。

        3.点亮实验台上 16 个 led 灯。

        4.利用 Verilog 编程实现组合逻辑功能,实现跑马灯的设计 (例如:1 秒钟流水显示)。

4.4 实验步骤

        4.4.1 输入逻辑门电路验证

        逻辑关系文件:

module gates2 ( 
input a,
input b,
output [5:0] y
); 
assign y[0] = a & b; //与
assign y[1] = a |b; //或
assign y[2] = ~(a & b); //与非
assign y[3] =~(a | b); //或非
assign y[4] = a ^ b; //异或
assign y[5] = a ~^ b; //同或
endmodule

        仿真文件:

module gates2_test ( 
); 
reg a,b;
wire [5:0] y;
gates2 test_gates2(a,b,y);
initial begin
a = 0; b =0; #100; //时间常量,#100 表示延迟 100 个时间单位
a=0; b =1; #100; 
a = 1; b =0; #100; 
a = 1; b =1; #100;
end
endmodule

         实验具体步骤与对应关系不再一一阐述(群文件里都有),在这只对比输入逻辑门电路验证结果。

        仿真结果:

        真值表:

4.4.2 跑马灯实验设计

        逻辑关系文件:

module led_test (
   input sys_clk,
   input rst_n,
   output reg [15:0] led
);
   reg [31:0] timer;
   reg [15:0] led_counter;

   always @(posedge sys_clk or negedge rst_n) begin
      if (~rst_n) begin
         timer <= 32'd0;
         led_counter <= 4'b0000;
      end 
      else if (timer == 32'd199_999_999 )begin
         timer <= 32'd0;  // 计时器达到 4 秒(50M*4-1=199999999),清零计时器
         led_counter <= led_counter +1'b1;
      end
      else
         timer <= timer + 1'b1;  // 计时器加一
   end

   always @(posedge sys_clk or negedge rst_n) begin
      if (~rst_n)
         led <= 16'b0000_0000_0000_0000;  // 复位信号有效时,将 LED 清零
      else begin
        case (led_counter)
            4'b0000: led <= 16'b0000_0000_0000_0001;
            4'b0001: led <= 16'b0000_0000_0000_0011;
            4'b0010: led <= 16'b0000_0000_0000_0111;
            4'b0011: led <= 16'b0000_0000_0000_1111;
            4'b0100: led <= 16'b0000_0000_0001_1111;
            4'b0101: led <= 16'b0000_0000_0011_1111;
            4'b0110: led <= 16'b0000_0000_0111_1111;
            4'b0111: led <= 16'b0000_0000_1111_1111;
            4'b1000: led <= 16'b0000_0001_1111_1111;
            4'b1001: led <= 16'b0000_0011_1111_1111;
            4'b1010: led <= 16'b0000_0111_1111_1111;
            4'b1011: led <= 16'b0000_1111_1111_1111;
            4'b1100: led <= 16'b0001_1111_1111_1111;
            4'b1101: led <= 16'b0011_1111_1111_1111;
            4'b1110: led <= 16'b0111_1111_1111_1111;
            4'b1111: led <= 16'b1111_1111_1111_1111;
            default: led <= 16'b0000_0000_0000_0000;
            endcase
         end
   end
endmodule

        实验思路:

        本次实验要实现跑马灯的效果,设置一个计时器(timer)和一个LED计数器(led_counter)。计时器每个时钟周期加一,直到达到4秒(199,999,999个时钟周期),然后计时器清零,并且LED计数器加一。

        在第一个always块中,根据时钟信号和复位信号来控制计时器和LED计数器的行为。当复位信号有效时,计时器和LED都被清零。当计时器达到4秒时,计时器清零并且LED计数器加一。其他情况下,计时器继续加一。

        在第二个always块中,根据LED计数器的值来设置LED的输出。根据LED计数器的不同值,LED的输出会依次从1到全亮(16位二进制数)。整个模块的功能是实现一个LED计时器,每4秒LED的亮度逐渐增加,最后达到全亮状态。

        实验结果:

 

5 实验总结与反思

        两次实验中,第一次验证输入逻辑门电路较为简单,由于有老师提供的代码,自己理解起来也比较容易,按照实验步骤的指导一步步做下来,自己也是顺利的完成了第一次实验。

        在第二次实验中,由于没有老师提供的代码,在自己的摸索下,自己写出了一个跟同学不一样的跑马灯代码,通过设置一个计时器(timer)和一个LED计数器(led_counter)来实现跑马灯的效果,通过此次实验,自己也发现对Verilog HDL的理解还是不够熟悉,只停留在课本方面,没有运用到实际中,这让我看到了自己的差距,在下步的实验中,我将在课下继续努力,熟练掌握Verilog HDL语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262049.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Security】打造安全无忧的Web应用--进阶篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.导入相关配置 1.pom 2.ym…

redis基本用法学习(C#调用NRedisStack操作redis)

redis官网文档中推荐C#中使用NRedisStack包连接并操作redis&#xff0c;本文学习C#调用NRedisStack操作redis的基本方式。   新建Winform项目&#xff0c;在Nuget包管理器中搜索并安装NRedisStack包&#xff0c;如下图所示&#xff1a; 主要调用StackExchange.Redis命名空间下…

Navicat里放大、缩小字体的快捷方法

我是偶然误触键盘把字体缩小了&#xff0c;研究以后发现的这个快捷键&#xff0c;分享给大家。 方法&#xff1a;按住【CtrlShift】组合键&#xff0c;再拖动鼠标滚轮&#xff0c;就可以缩放字体了。 缩小效果&#xff1a; 放大效果&#xff1a;

看懂PL/SQL执行计划

看懂PL/SQL执行计划 一&#xff1a;什么是Oracle执行计划&#xff1f; 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二&#xff1a;怎样查看Oracle执行计划&#xff1f; 因为我一直用的PLSQL远程连接的公司数据库&#xff0c;所以这里以PLSQL为例&#xff1…

第4章Netty第二节入门案例+channel,future,promise介绍

需求 开发一个简单的服务器端和客户端 客户端向服务器端发送 hello, world服务器仅接收&#xff0c;不返回 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.39.Final</version> </d…

TrustZone之可信操作系统

有许多可信内核&#xff0c;包括商业和开源的。一个例子是OP-TEE&#xff0c;最初由ST-Ericsson开发&#xff0c;但现在是由Linaro托管的开源项目。OP-TEE提供了一个功能齐全的可信执行环境&#xff0c;您可以在OP-TEE项目网站上找到详细的描述。 OP-TEE的结构如下图所示&…

通杀无限 debugger,目前只有 1% 的人知道!

前言 相信很多小伙伴在进行 web 逆向的时候&#xff0c;都遇到过无限 debugger。最简单的方法&#xff0c;在 debugger 位置&#xff0c;点击行号&#xff0c;右键 Never pause here&#xff0c;永远不在此处断下即可。但是这种方法就妄想通杀&#xff0c;显然是不大可能的&am…

电子科技大学《高级算法设计与分析》期末复习汇总

&#x1f389; 博主相信&#xff1a; 有足够的积累&#xff0c;并且一直在路上&#xff0c;就有无限的可能&#xff01;&#xff01;&#xff01; &#x1f468;‍&#x1f393;个人主页&#xff1a; 青年有志的博客 &#x1f4af; 说明&#xff1a; 本文中前大部分来自简言之大…

Ubuntu 常用命令之 sudo 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 sudo命令在Ubuntu系统中是一个非常重要的命令&#xff0c;它允许系统管理员赋予某些用户&#xff08;或用户组&#xff09;以系统管理员的身份运行一些或全部的命令。sudo代表“superuser do”&#xff0c;即以超级用户的身份执行…

SQL Server 安装教程

安装数据库 1、启动SQL Server2014安装程序&#xff0c;运行setup.exe文件&#xff0c;打开”SQL Server安装中心“对话框&#xff0c;单击左侧 的导航区域中的”安装“选项卡。 2、选择”全新SQL Server独立安装或向现有安装添加功能“&#xff0c;启动SQL Server2014安装向导…

【虹科分享】使用Allegro网络万用表进行网络分析

文章速览&#xff1a; Allegro网络万用表在公用事业公司的应用领域Allegro网络万用表 VS. WiresharkAllegro 200和Allegro 500&#xff1a;作为标准配置 传统企业成为互联网服务提供商&#xff0c;如何利用数字工具实现现代化转型&#xff1f;本期文章&#xff0c;我们分享一家…

C++初阶-模板进阶

模板进阶 一、非类型模板参数1.1 引出1.2 非类型模板参数 二、array类2.1 array类的介绍与价值2.2 array的特性2.2.1 array和vector的区别2.2.2 大小不一样2.2.3 array与vector的区别2.2.4 总结 三、模板的特化3.1 概念3.2 函数模板的特化3.3 类模板的特化3.3.1 全特化3.3.2 偏…

ansible远程操作主机功能(2)

command模块 一般用于执行Linux的命令&#xff0c;不支持管道符和重定向。 2&#xff0c;shell模块相当于command的升级版&#xff0c;也可以执行Linux命令。支持管道符和重定向 3&#xff0c;Cron在远程主机生成定时任务 分 时 日 月 周 Minute hour day month …

搅拌站智能上料系统,无人值守,均匀布撒!

搅拌站中的骨料上料系统&#xff0c;遇上最新的人工智能技术&#xff0c;会碰撞出怎样的新发展和新突破&#xff1f;今天和砼行们分享一个现场案例&#xff0c;这是思伟软件在某数字化搅拌站中的应用。 上料无人值守 后场上料配合无人地磅系统&#xff0c;仅需1名操作员在控制…

上市十年 这家互联网服务平台窥见汽车市场“沧海桑田”

十年&#xff0c;对于一家上市公司而言意味着什么&#xff1f;以中概股为例&#xff0c;十年里的高低起伏&#xff0c;折射出不同公司和行业的各异命运。 新浪在2021年私有化退市&#xff0c;曾经名声在外的聚美优品在2020年遭遇同样命运。再往前数&#xff0c;还有离开美股回…

985等高校急速开设“鸿蒙班”,引领IT就业新时代

​根据澎湃新闻记者了解到&#xff0c;华为以及鸿蒙系软件厂商都在积极培养鸿蒙开发人才。其中产学联动、产教融合来培养鸿蒙生态人才是重要的一条路径&#xff0c;目前已有 23 家 985 高校、46 家 211 高校已开设或即将开设HarmonyOS 相关课程。 其中南京大学已经将 HarmonyOS…

版本化数据库管理工具Flyway介绍和Spring Boot集成使用

文章目录 核心功能如何使用 Flyway最佳实践Spring Boot使用 Flyway 是一个版本化数据库管理工具&#xff0c;用于跟踪、管理和应用数据库的变化。它非常适合在团队开发环境中使用&#xff0c;其中多个人员可能会在数据库结构进行更改。Flyway 通过版本控制可以帮助你确保所有人…

使用MyBatis操作数据库及单元测试

目录 一.MyBatis介绍 二.MyBatis操作数据库步骤 三.单元测试 idea上生成测试 配置mybatis日志 动态参数 一.MyBatis介绍 MyBatis是⼀款优秀的持久层框架&#xff0c;⽤于简化JDBC的开发。 JDBC来操作数据库太复杂了,使用MyBatis 是因为它可以帮助我们更⽅便、更快速的操作…

判断单链表是否有环?中点如何判断?入环点如何判断?

首先我们需要克服我们一种错误的认知&#xff0c;链表有环&#xff0c;并不是有“死节”&#xff0c;如下所示&#xff0c;左侧的这种链表结构是不存在的&#xff0c;因为在相交的那个节点不可能有两个指针&#xff0c;只有像右侧这种结构才是存在的 判断链表是否有环的方法&am…

AI代码翻译神器,用AI翻译代码,轻松学习不同编程语言,已开源!

体验地址&#xff0c;github地址和部署地址在文章底部 AI代码翻译器的优势 近年来&#xff0c;随着技术的快速进步&#xff0c;人工智能技术展现出了在各个领域发挥作用的巨大潜力。AI代码翻译器作为一项创新技术&#xff0c;为开发者带来了全新的可能性。这项技术运用人工智…