【verilog】1. 流水灯例程


文章目录

  • 前言
  • 一、定义概念 + 缩写
    • 1. verilog
  • 二、性质
  • 三、代码分解释
  • 四、完整代码
  • 参考文献


前言

数电课设


一、定义概念 + 缩写

1. verilog

  • Verilog 是一种以代码形式来描述数字系统和电路的硬件描述语言 (HDL)。它由 Gateway Design Automation 在 20 世纪 80年代中期开发,后来被Cadence Design Systems 收购。

二、性质

Verilog是一种硬件描述语言(HDL),用于描述和设计数字系统。它具有以下一些关键性质:

  1. 硬件并行性:Verilog能够描述并行硬件结构,这是它与许多传统的编程语言的主要区别。在Verilog中,多个操作可以同时发生,而不需要像在顺序执行的编程语言中那样等待前一个操作完成。

  2. 模块化:Verilog支持模块化设计,允许设计者将复杂的系统分解成较小的、可重用的模块。每个模块可以独立设计和测试,然后实例化到更大的系统中。

  3. 层次化:Verilog设计可以是层次化的,这意味着模块可以嵌套,即一个模块可以包含其他模块的实例。

  4. 并发和顺序建模:Verilog提供了并发(如always块和initial块)和顺序(如过程赋值语句和任务)建模的机制。

  5. 丰富的数据类型:Verilog提供了多种数据类型,包括线网类型(wire)、寄存器类型(reg)、参数(parameter)、整数(integer)、实数(real)、时间(time)等。

  6. 事件驱动和时钟驱动:Verilog的行为可以由事件(如信号的边沿)或时钟(通过always块)驱动。

  7. 时序控制:Verilog允许设计者精确地控制信号的时序,这对于设计同步数字电路至关重要。

  8. 可综合和仿真:Verilog代码可以用于两种主要的硬件设计流程:综合(将Verilog代码转换为门级网表)和仿真(在软件环境中测试Verilog代码的行为)。

  9. 可预测性:Verilog的设计和行为是可预测的,这使得设计者可以确信硬件在实际制造之前的行为。

  10. 广泛的工具支持:Verilog有着广泛的工具支持,包括综合工具、仿真工具、调试工具和验证工具。

  11. 标准化:Verilog是一种广泛接受的行业标准,由IEEE(电气和电子工程师协会)维护和更新。

  12. 可扩展性:Verilog允许设计者定义自己的数据类型和原语,以满足特定的设计需求。

这些性质使得Verilog成为设计复杂数字系统的强大工具,特别是在集成电路和FPGA设计领域。

三、代码分解释

  • 模块声明,端口,类似 C 的结构体
// 模块声明和端口
module lamp(  //文件名input clk,  //50MHz, 20ns周期input rst_n,  //复位按键,低电平output reg [7:0] led  //8个led,低电平亮
);  //端口声明最后一行没有逗号
  • 定义计数器
// 注释说明
// 程序功能说明
// 让8个led以每秒一次改变状态,循环32个不同的状态
// 需要产生一个周期1s,频率为1Hz的信号控制8个led的状态改变
// 由50MHz产生1Hz信号,需要设计计数器作为分频器,那么该计数器的模值是?
// 50000000Hz/1Hz=50000000,需要多少位二进制数来实现该模值计数器?// 定义计数器和1Hz信号
reg [31:0] count;  //定义计数器位数为32位
reg clk_1hz;  //定义一个1Hz的输出信号
  • 分频器
// 分频器逻辑
// 编写分频代码,产生clk_1hz信号
always@(posedge clk or negedge rst_n)//clk上升沿,rst_n下降沿
beginif (!rst_n)  //当rst_n为低电平时复位begincount <= 32'd0;clk_1hz <= 1'b0;endelse if (count < 32'd49999999)begincount <= count + 1'b1;clk_1hz <= 1'b0;endelse  // count = 32'd49999999begincount <= 32'd0;  //返回到初始状态 0clk_1hz <= 1'b1;end
end
  • LED控制状态逻辑
// LED状态控制逻辑
// 前面产生了1hz的信号,下面用1hz的信号产生控制8个led的状态计数器
// 假设8个led有32种状态变化,需要设计一个模值为32的计数器
reg [4:0] cnt;  //定义一个5位的状态信号
always@(posedge clk_1hz or negedge rst_n)
beginif (!rst_n)cnt <= 5'd0;elsecnt <= cnt + 1'b1;   //5位二进制加法计数器//用cnt状态控制8个led灯的显示状态case (cnt)  //cnt有32个状态,从0~315'd0: led <= 8'b0111_1111; //实验板上led灯是低电平亮5'd1: led <= 8'b1011_1111; //5'd2: led <= 8'b1101_1111;5'd3: led <= 8'b1110_1111;5'd4: led <= 8'b1111_0111;5'd5: led <= 8'b1111_1011;5'd6: led <= 8'b1111_1101;5'd7: led <= 8'b1111_1110;5'd8: led <= 8'b1111_1110;5'd9: led <= 8'b1111_1101;5'd10:led <= 8'b1111_1011;5'd11:led <= 8'b1111_0111;5'd12:led <= 8'b1110_1111;5'd13:led <= 8'b1101_1111;5'd14:led <= 8'b1011_1111;5'd15:led <= 8'b0111_1111;5'd16:led <= 8'b0111_1110; //两边灯亮5'd17:led <= 8'b1011_1101;5'd18:led <= 8'b1101_1011;5'd19:led <= 8'b1110_0111;5'd20:led <= 8'b1101_1011;5'd21:led <= 8'b1011_1101;5'd22:led <= 8'b0111_1110;5'd23:led <= 8'b0011_1111; //从左向右依次点亮led5'd24:led <= 8'b0001_1111;5'd25:led <= 8'b0000_1111;5'd26:led <= 8'b0000_0111;5'd27:led <= 8'b0000_0011;5'd28:led <= 8'b0000_0001;5'd29:led <= 8'b0000_0000; //8个led灯全亮5'd30:led <= 8'b0101_0101; //间隔亮5'd31:led <= 8'b1111_1111; //8个led灯全灭 endcase
end
  • 结束模块
// 模块结束
endmodule

四、完整代码


// 模块声明和端口
module lamp(  //文件名input clk,  //50MHz, 20ns周期input rst_n,  //复位按键,低电平output reg [7:0] led  //8个led,低电平亮
);  //端口声明最后一行没有逗号// 注释说明
// 程序功能说明
// 让8个led以每秒一次改变状态,循环32个不同的状态
// 需要产生一个周期1s,频率为1Hz的信号控制8个led的状态改变
// 由50MHz产生1Hz信号,需要设计计数器作为分频器,那么该计数器的模值是?
// 50000000Hz/1Hz=50000000,需要多少位二进制数来实现该模值计数器?// 定义计数器和1Hz信号
reg [31:0] count;  //定义计数器位数为32位
reg clk_1hz;  //定义一个1Hz的输出信号// 分频器逻辑
// 编写分频代码,产生clk_1hz信号
always@(posedge clk or negedge rst_n)//clk上升沿,rst_n下降沿
beginif (!rst_n)  //当rst_n为低电平时复位begincount <= 32'd0;clk_1hz <= 1'b0;endelse if (count < 32'd49999999)begincount <= count + 1'b1;clk_1hz <= 1'b0;endelse  // count = 32'd49999999begincount <= 32'd0;  //返回到初始状态 0clk_1hz <= 1'b1;end
end// LED状态控制逻辑
// 前面产生了1hz的信号,下面用1hz的信号产生控制8个led的状态计数器
// 假设8个led有32种状态变化,需要设计一个模值为32的计数器
reg [4:0] cnt;  //定义一个5位的状态信号
always@(posedge clk_1hz or negedge rst_n)
beginif (!rst_n)cnt <= 5'd0;elsecnt <= cnt + 1'b1;   //5位二进制加法计数器//用cnt状态控制8个led灯的显示状态case (cnt)  //cnt有32个状态,从0~315'd0: led <= 8'b0111_1111; //实验板上led灯是低电平亮5'd1: led <= 8'b1011_1111; //5'd2: led <= 8'b1101_1111;5'd3: led <= 8'b1110_1111;5'd4: led <= 8'b1111_0111;5'd5: led <= 8'b1111_1011;5'd6: led <= 8'b1111_1101;5'd7: led <= 8'b1111_1110;5'd8: led <= 8'b1111_1110;5'd9: led <= 8'b1111_1101;5'd10:led <= 8'b1111_1011;5'd11:led <= 8'b1111_0111;5'd12:led <= 8'b1110_1111;5'd13:led <= 8'b1101_1111;5'd14:led <= 8'b1011_1111;5'd15:led <= 8'b0111_1111;5'd16:led <= 8'b0111_1110; //两边灯亮5'd17:led <= 8'b1011_1101;5'd18:led <= 8'b1101_1011;5'd19:led <= 8'b1110_0111;5'd20:led <= 8'b1101_1011;5'd21:led <= 8'b1011_1101;5'd22:led <= 8'b0111_1110;5'd23:led <= 8'b0011_1111; //从左向右依次点亮led5'd24:led <= 8'b0001_1111;5'd25:led <= 8'b0000_1111;5'd26:led <= 8'b0000_0111;5'd27:led <= 8'b0000_0011;5'd28:led <= 8'b0000_0001;5'd29:led <= 8'b0000_0000; //8个led灯全亮5'd30:led <= 8'b0101_0101; //间隔亮5'd31:led <= 8'b1111_1111; //8个led灯全灭 endcase
end// 模块结束
endmodule
matlab代码块
c代码块

参考文献

[1]


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程控制(一)

1. 进程创建 &#xff08;一&#xff09;认识fork函数 从已存在进程中创建一个新进程&#xff08;新进程为子进程&#xff0c;而原进程为父进程&#xff09; 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a; 分配新的内存块和内核数…

JVM 调优篇1 类的加载器与加载过程

一 基本知识 1.1 JIT&AOT JIT: Just Time compilation 即时编译器 在程序运行时将字节码或中间表示转换为机器代码。 AOT: Ahead of Tmie Compilation &#xff1a; 预编译 在程序运行之前将高级语言代码完全编译成机器代码。 1.2 字面量和符号引用* 字面量&am…

逻辑代数的基本规则

目录 逻辑代数的基本规则 带入规则 反演规则 对偶规则 逻辑代数的基本规则 带入规则 将逻辑等式两边的某一变量均用同一个逻辑函数代替&#xff0c;等式仍然成立。 可以用A非代替A&#xff0c;也可以用C代替B。 也可使用BC这样一个整体代替B。 反演规则 可以把与换或&#x…

Mysql高级教程

1.安装部署 安装依赖性&#xff1a; [rootmysql-node10 ~]# dnf install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el7_4.x86_64.rpm rpcgen.x86_64 下载并解压源码包 [rootmysql-node10 ~]# tar zxf mysql-boost-5.7.44.tar.gz [rootmysql-no…

Java项目——苍穹外卖(一)

Entity、DTO、VO Entity&#xff08;实体&#xff09; Entity 是表示数据库表的对象&#xff0c;通常对应数据库中的一行数据。它通常包含与数据库表对应的字段&#xff0c;并可能包含一些业务逻辑。 DTO&#xff08;数据传输对象&#xff09; 作用&#xff1a;DTO 是用于在…

AutosarMCAL开发——基于EB Gpt驱动

目录 1.Gpt原理2.EB配置以及接口应用2.1 EB配置2.2 接口应用 3.总结 1.Gpt原理 autosar GPT模块&#xff08;General Purpose Timer&#xff0c;通用定时器&#xff09;主要用于汽车ECU中的时间测量、计数和产生定时中断。它支持单次性和周期性定时器&#xff0c;可以在达到预…

Bitvise——进入服务器的快捷方式

第一步&#xff1a;在连接进服务器后&#xff0c;点击左侧的保存配置文件&#xff0c;保存至桌面。 第二步&#xff1a;将保存的配置文件&#xff08;后缀为 .tlp&#xff09;打开方式改为bitvise。 第三步&#xff1a;双击配置文件&#xff08;后缀为 .tlp&#xff09;&#…

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理&#xff0c;在有一定基础认识的前提下&#xff0c;通过阅读kubelet源码&#xff0c;对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管…

Android终端如何快速接入GB28181平台实现实时音视频回传

技术背景 GB28181是由中国国家标准委员会发布的基于IP网络的安防视频监控标准。Android平台GB28181设备对接模块&#xff0c;主要涉及到视频监控领域&#xff0c;可实现不具备国标音视频能力的 Android终端&#xff0c;通过平台注册接入到现有的GB/T28181—2016服务&#xff0…

Ifream实现微前端效果

记得有人曾问过我&#xff0c;老旧的项目内容很多&#xff0c;项目卡&#xff0c;想要改造成类似微前端&#xff0c;领导想要快速&#xff0c;又不想系统重构、而且是不同子系统的协同&#xff0c;要怎么做&#xff1f;对方不想做太大的改造&#xff0c;所以想用ifream的方式动…

如何打造高效办公楼物业管理系统?Java SpringBoot+Vue架构详解,实现智能化管理,提升工作效率

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片那是获取资料的入口&#xff01; 【全网最全】2024年数学建模国赛A题30页完整建模文档17页成品论文保奖matla代码可视化图表等&#xff08;后续会更新&#xff09;「首先来看看目前已有的资料&#xff0…

Bat的退役前

我们很讨厌bat 语法这版的命令形式后缀尽管古老&#xff0c;可是在涉及细微VS 项目op 时候&#xff0c;它起到了不可忽视且非它不行的效应 我们不想替历史背上厚重的学习包袱&#xff0c;可是我们能忽视BAT 吗 如若进入到 无window时代&#xff0c;我们几乎得全然依仗BAT专家。…

Hiredis的使用

Hiredis的使用 &#x1f4f8;这里安利一个github仓库介绍 图片生成 Socialify 一键生成专业 GitHub 仓库简介图 一、Hiredis的安装与使用 1、下载hiredis软件包&#xff0c; https://github.com/redis/hiredis.git 或者使用git下载到本地 git clone https://github.com/redi…

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员开发出了“商业数据仓库”。本质上&#xff0c;数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库&#xff08;Data Warehouse&#xff09;的标准定义&a…

51单片机-DS1302(RTC实时时钟芯片)

数据手册在主页资源免费贡献 开发板芯片数据手册 https://www.alipan.com/s/nnkdHhMGjrz 提取码: 95ik 点击链接保存&#xff0c;

算法分享——《双指针》

文章目录 ✅[《移动零》](https://leetcode.cn/problems/move-zeroes/)&#x1f339;题目描述&#xff1a;&#x1f697;代码实现&#xff1a;&#x1f634;代码解析&#xff1a; ✅[《复写零》](https://leetcode.cn/problems/duplicate-zeros/)&#x1f339;题目描述&#xf…

Grafana 可视化配置

Grafana 是什么 Grafana 是一个开源的可视化和监控工具&#xff0c;广泛用于查看和分析来自各种数据源的时间序列数据。它提供了一个灵活的仪表盘&#xff08;dashboard&#xff09;界面&#xff0c;用户可以通过它将数据源中的指标进行图表化展示和监控&#xff0c;帮助分析趋…

Linux概述、远程连接、常用命令

Linux介绍 Linux操作系统介绍 Linux操作系统的特点 开源免费安全稳定可移植性好 Linux可以安装在不同的设备上 高性能 Linux的使用领域 应用服务器数据库服务器网络服务器虚拟化云计算嵌入式领域个人PC移动手机 Linux文件系统和目录 /&#xff1a;根目录&#xff0c;唯一/h…

flinkcdc 问题记录篇章

startupOptions 讲解 startupOptions 有三个参数initial、earliest、latest initial&#xff1a;因为binlog中不一定包含所有的数据&#xff0c;那么需要全表扫描所有的表&#xff0c;形成快照。常用于历史数据 earliest&#xff1a;从最早的变更日志开始读取&#xff08;仅增…