跑马灯实验

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

4.1 实验目的

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

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

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

4.2 实验原理及芯片

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

跑马灯实验,数字逻辑,fpga开发

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

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

        仿真结果:

跑马灯实验,数字逻辑,fpga开发

        真值表:

跑马灯实验,数字逻辑,fpga开发

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的亮度逐渐增加,最后达到全亮状态。

        实验结果:

跑马灯实验,数字逻辑,fpga开发

 

5 实验总结与反思

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

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

到了这里,关于跑马灯实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • flutter开发实战-实现marquee根据文本长度显示文本跑马灯效果

    flutter开发实战-实现marquee文本跑马灯效果 最近开发过程中需要marquee文本跑马灯效果,这里使用到了flutter的插件marquee 效果图如下 1.1 引入marquee 在pubspec.yaml中引入marquee 1.2 marquee使用 marquee使用也是非常方便的。比如直接指定文本text 或者设置更多属性值 根据Text文本的大小判断

    2024年02月13日
    浏览(46)
  • 【正点原子STM32连载】第十章 跑马灯实验 摘自【正点原子】APM32E103最小系统板使用指南

    1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 跑马灯程序是嵌入式开发的一个经典程序,类似于学习C语言时,编写的“Hello World”程序。跑马灯本

    2024年02月02日
    浏览(51)
  • 单片机(3)跑马灯,按钮控制的跑马灯(2种编程)

     先上电路图(图示的是高电平点亮的跑马灯)  这个是程序截图(keil5):我的建议是是先自己打一遍,边打边试着理解程序的意思。 下面的是没有注释的代码 下一个是另外一种编程思路  

    2024年02月11日
    浏览(38)
  • STM32F407ZGT6正点原子F4探索者开发板 -- 跑马灯例程

    LED0 - PF9 LED1 - PF10 PF9 = 0, LED0 亮,PF9 = 1,LED0 灭 PF10 = 0, LED1 亮,PF10 = 1,LED1 灭

    2024年02月15日
    浏览(56)
  • Android --- 跑马灯效果

    跑马灯效果主要使用的控件为TextView,其中涉及的几个标签如下所示: android:ellipsize If set, causes words that are longer than the view is wide to be ellipsized instead of broken in the middle. You will often also want to set scrollHorizontally or singleLine as well so that the text as a whole is also constrained to a single line in

    2023年04月08日
    浏览(77)
  • 3.跑马灯

    推挽模式输出:因为LED0和LED1阳极都是3.3V,需要将阴极设置为低电平才可以点亮LED; 操作io口时,必须引入源文件和头文件; 关于时钟的文件存放在rcc中; void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 作用:初始化一个或多个io口(同一组)的工作方式和速度, 该函数

    2024年02月10日
    浏览(43)
  • CSS按钮-跑马灯边框

    思路很简单,实现方法有很多很多。但是大体思路与实现方法都类似:渐变色 + 动画,主要区别在动画的具体实现

    2024年02月11日
    浏览(47)
  • CSS 之 跑马灯边框

    一、简介 ​ 之前有做过渐变色边框的样式,然后某天刷抖🎵,看到某个老师在讲跑马灯的样式效果,于是就自己尝试实现一下跑马灯样式的边框,虽然这种样式并不常见(基本没卵用),其使用场景我至今没想到,但是它足够花里胡哨,玩的就是花活。CSS才是前端最难精通

    2024年01月17日
    浏览(41)
  • Android 实现跑马灯效果

    Android中实现跑马灯效果有多种方式,本篇简单介绍下: 1: TextView属性实现 这里需要注意下: 需要限制textview的宽度,不能设置为wrap_content 启动跑马灯效果需要获取焦点requestFocus(). 2: 代码实现 3: 自定义 view实现 这里可以使用动画的效果实现. 4: 实现竖直效果的跑马灯

    2024年01月18日
    浏览(58)
  • Vue跑马灯简单案列

    套在自己的vue模板里面即可 content是显示的内容,shouldMove是否滚动(如果大于了文本框才滚动,否则禁止不懂),showResult是否显示滚动条 效果

    2024年02月22日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包