在时钟分频实验中我们练习了如何处理时钟,接下来我们要学习如何利用时钟来完成时序逻辑。
====硬件说明====
实现是很常见的一个实验,虽然逻辑比较简单,但是里面也包含了实现时序逻辑的基本思想。要用实现有很多种方法,在这里我们会用两种不同的方法实现。
1,模块化设计:在之前的实验中我们做了3-8译码器和时钟分频,如果把这两个结合起来,我们就能搭建一个自动操作的流水LED显示。框图如下:
2,循环赋值:这是一种很简洁的实现效果逻辑,就是定义一个8位的变量,在每个时钟上升沿将最低位赋值给最高位,其他位右移一位,这就实现了循环赋值。这8位输出到LED就能实现流水灯。
====Verilog代码====
模块化设计是用硬件描述语言进行数字电路设计的精髓,代码可重复利用。而且模块化的设计使得程序的结构也很清晰。这里我们首先看看流水灯的模块化设计。利用了之前的3-8译码器和分频器,你需要把这两个程序也拷贝到一个工程。
// ******************************************************************** // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< // ******************************************************************** // File name : flashled.v // Module name : flashled // Author : STEP // Description : segment initial // Web : www.stepfpga.com // // -------------------------------------------------------------------- // Code Revision History : // -------------------------------------------------------------------- // Version: |Mod. Date: |Changes Made: // V1.0 |2017/03/02 |Initial ver // -------------------------------------------------------------------- // Module Function:流水灯的模块化设计 module flashled (clk,rst,led); input clk,rst; output [7:0] led; reg [2:0] cnt ; //定义了一个3位的计数器,输出可以作为3-8译码器的输入 wire clk1h; //定义一个中间变量,表示分频得到的时钟,用作计数器的触发 //例化module decode38,相当于调用 decode38 u1 ( .sw(cnt), //例化的输入端口连接到cnt,输出端口连接到led .led(led) ); //例化分频器模块,产生一个1Hz时钟信号 divide #(.WIDTH(32),.N(12000000)) u2 ( //传递参数 .clk(clk), .rst_n(rst), //例化的端口信号都连接到定义好的信号 .clkout(clk1h) ); //1Hz时钟上升沿触发计数器,循环计数 always @(posedge clk1h or negedge rst) if (!rst) cnt <= 0; else cnt <= cnt +1; endmodule
模块化设计结构清晰,verilog语言是很灵活的。对于流水灯还有一种很简洁的实现方法。
// ******************************************************************** // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< // ******************************************************************** // File name : flashled.v // Module name : flashled // Author : STEP // Description : segment initial // Web : www.stepfpga.com // // -------------------------------------------------------------------- // Code Revision History : // -------------------------------------------------------------------- // Version: |Mod. Date: |Changes Made: // V1.0 |2017/03/02 |Initial ver // -------------------------------------------------------------------- // Module Function:流水灯的模块化设计 module flashled (clk,rst,led); input clk,rst; output [7:0] led; wire clk1h; //定义一个中间变量,表示分频得到的时钟,用作计数器的触发 //例化分频器模块,产生一个1Hz时钟信号 divide #(.WIDTH(32),.N(12000000)) u2 ( //传递参数 .clk(clk), .rst_n(rst), //例化的端口信号都连接到定义好的信号 .clkout(clk1h) ); //1Hz时钟上升沿触发循环赋值 reg [7:0] led; always@(posedge clk1h or negedge rst) begin if(!rst) led <= 8'b11111110; // <=为非阻塞赋值 else led <= {led[0],led[7:1]}; //当时钟上升沿来一次,执行一次赋值,赋值内容是led[0]与led[7:1]重新拼接成8位赋给led,相当于循环右移 end
引脚分配
按照下面表格定义输入输出信号
信号 | 引脚 | 信号 | 引脚 |
---|---|---|---|
clk | J5 | led[3] | M12 |
rst | J9 | led[4] | L15 |
led[0] | N15 | led[5] | K12 |
led[1] | N14 | led[6] | L11 |
led[2] | M14 | led[7] | K11 |
配置好以后编译下载程序。可以调整例化分频器时传递的参数来调整流水灯的速度。
====小结====
掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计是非常重要的设计思想。在下一节我们会学习按键的另外用法按键消抖。
文章来源于:电子产品世界 原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关文章
新四化芯机遇 ——车规 “MCU + Power” 组合显身手(2022-06-20)
累计装车超过70万辆,主控MCU出货达到数百万颗,新增加小鹏P7、广汽传祺GS5以及奇瑞瑞虎8等知名畅销车型。2022年将加大现有转向流水灯/贯穿式尾灯方案推广力度,同时开发车灯LED驱动恒流专用芯片......
51单片机流水灯电路图大全(2023-10-10)
我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
51单片机流水灯电路图(三)
下图为主控芯片和流水灯......
80C51单片机-LED流水灯效果(2024-07-31)
80C51单片机-LED流水灯效果;本文将介绍一个基于8051单片机的跑马灯实验,通过编写代码实现LED流水灯效果。这个实验将使用8051单片机的P2口来控制8个LED灯,实现流水灯效果。
实验......
用51单片机控制的LED流水灯设计(2022-12-26)
用51单片机控制的LED流水灯设计; 1.引言
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以......
用单片机控制的LED流水灯设计(2022-12-21)
用单片机控制的LED流水灯设计;1.引言
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以......
使用74HC595驱动LED流水灯实验(2024-07-02)
使用74HC595驱动LED流水灯实验;本次实验系统环境
Matlab版本: 2021b
系统环境 :Win10专业版
模型与原理图
本次实验的simulink模型如图5.2所示,实验......
单片机控制花样流水灯原理图及程序(2023-06-06)
单片机控制花样流水灯原理图及程序; AT89C51单片机流水灯c语言程序
1、首先先在proteus画出仿真图,方便仿真程序
2、下面来编写程序,先来写入头函数
3、根据......
51单片机学习:LED流水灯实验(2023-02-07)
51单片机学习:LED流水灯实验;实验名称:LED流水灯实验接线说明:实验现象:下载程序后“LED模块”的D1-D8指示......
基于Microchip MCU的汽车流水转向灯方案(2023-10-06)
基于Microchip MCU的汽车流水转向灯方案;此方案的主要芯片选用汽车级MCU PIC16F15324-I/SLVAO,输出11个信道,每信道控制2颗LED,形成流水灯效果。LY E67F是......
proteus仿真51流水灯(汇编)(2024-08-02)
proteus仿真51流水灯(汇编);本文为《proteus仿真51流水灯和点阵(心形)》的后续文章,上文链接:https://www.cnblogs.com/xing-2/p/11147890......