FPGA学习笔记(1)简单的时序逻辑电路——流水灯
FPGA学习笔记(1)简单的时序逻辑电路——流水灯
编程语言为Verilog HDL
原理
(1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次。开发板上的晶振输出时钟频率为50MHz,即时钟周期为20ns。这样可以计算得出500ms = 500_000_000ns/20ns = 25_000_000,即需要计数器计数25_000_000次,也就是需要一个至少25位的计数器(225>25_000_000>224)。且每当计数次数达到需要清零并重新计数。
计数器的核心元件是触发器,基本功能是对脉冲进行计数,其所能记忆脉冲最大的数目称为该计数器的模/值。计数器常用在分频、定时等处。计数器的种类很多,按照计数方式的不同可以分为二进制计数器、十进制计数器以及任意进制计数器,按照触发器的时钟脉冲信号来源可分为同步计数器与异步计数器。按照计数增减可分为加法计数器、减法计数器以及可逆计数器。
Verilog HDL之所以被称为硬件电路描述语言,就是因为我们不是在类似C一样进行普通的编程,而是在编写一个实际的硬件电路,例如在上一讲Intel FPGA设计流程中设计的一个二选一选择器最后就是被综合称为一个真正的选择器。上面提到计数器即为加法器、比较器、寄存器以及选择器构成。
FPGA开发流程
以下是FPGA 开发的流程
- 创建Quartus Prime工程
- 编写计数器HDL描述文件
- 编写计数器测试脚本(testbench)
- 对计数器进行功能仿真
- 在Quartus Prime中执行布局布线
- 对计数器进行时序仿真
- 分配引脚并编译得到FPGA配置文件.sof
- 配置FPGA并运行
代码实现
module led_flash(clk_50m,rst_n,led);input clk_50m;input rst_n;output reg [3:0]led;reg [24:0]cnt;parameter cnt_max =25'd24_999_999;always@(posedge clk_50m or negedge rst_n)if(rst_n == 0)cnt <= 25'd0;//非阻塞赋值方式elseif(cnt == cnt_max)cnt<=25'd0;elsecnt<=cnt+1'b1;// always@(posedge clk_50m or negedge rst_n)
// if(rst_n == 0)
// led<=4'b1111;
// else if(cnt == cnt_max)
// led <= ~led;
// else
// led <= led;always@(posedge clk_50m or negedge rst_n)if(rst_n == 0)led<=4'b0111;else if(cnt == cnt_max)led <= {led[2:0],led[3]};elseled <= led;endmodule
前仿真
下图为注释段闪烁LED代码的前仿真
流水灯的第二种写法
将最开始定义的output reg [3:0]led;
修改为 output [3:0]led
reg [3:0]led_r;always@(posedge clk_50m or negedge rst_n)if(rst_n == 0)led_r<=4'b0001;else if(cnt == cnt_max)beginif(led_r == 4'b1000)led_r <= 4'b0001; //限制条件else led_r <= led_r << 1; //移位endelseled_r <= led_r;assign led = ~led_r;
以上就是第一次简单时序逻辑电路的学习笔记,具体代码和激励文件也已经上传。下为代码下载链接
https://download.csdn.net/download/m0_52040183/13139067
FPGA学习笔记(1)简单的时序逻辑电路——流水灯相关推荐
- FPGA学习-8:简单的时序电路
经过上一章的了解 组合电路的最大优势就是能直接根据输入进行输出 但其也有很多的缺点:占大量的电路资源,功耗较大,电路固定- 这一次我们来讲基本的时序电路,写一个简单的时序控制电路 再在此基础上将之前的 ...
- 小梅哥FPGA学习笔记
小梅哥FPGA学习笔记 一.38译码器 功能: 译码器其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,它是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等).38 ...
- FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真
系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...
- FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程
FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...
- FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析
系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...
- FPGA学习笔记——分频电路设计
FPGA学习笔记--分频电路设计 发布时间:2015-10-3023:29:52 分频就是用一个时钟信号通过一定的电路结构变成不同频率的时钟信号,这里介绍一下整数分频电路的设计方法.整数分频电路有偶数 ...
- FPGA学习笔记_UART串口协议_串口接收端设计
FPGA学习笔记 1. UART串口协议以及串口接收端设计 1 原理图 2 Verilog 代码 3 Modelsim仿真 4. FPGA板级验证 1.1 串口协议接收端设计 目标:FPGA接收其他设 ...
- python自训练神经网络_tensorflow学习笔记之简单的神经网络训练和测试
本文实例为大家分享了用简单的神经网络来训练和测试的具体代码,供大家参考,具体内容如下 刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第 ...
- VC学习笔记:简单绘图
VC学习笔记:简单绘图 SkySeraph Oct.29th 2009 HQU Email-zgzhaobo@gmail.com QQ-452728574 Latest Modified Date ...
最新文章
- 一些linux下的性能监测工具
- Area of Circles II(数论)
- 如何在excel 单元格中增加换行
- 云原生的本质_云原生2.0的逻辑之辩,如何让每个企业都成为新云原生企业
- Byte[]、Image、Bitmap 之间的相互转换
- 如何代理物联卡?需要什么流程认证?
- LeetCode之长度最小的子数组
- Atitit 学校模式之 天堂模式 目录 1.1. 宗旨,让学生们乐不思蜀 打造人间天堂	2 2. 组织结构	2 2.1. 娱乐事业部	2 2.2. 文艺事业部	2 2.3. 三大金山挖掘(教育 医
- 什么都不懂的人怎么样可以建立自己的网站
- 软件测试中学生选课用例表,软件测试选课系统测试用例(新).xls
- 线性组合(linear combinations), 生成空间(span), 基向量(basis vectors)——线性代数本质(二)
- stm32毕业设计 单片机火灾报警系统
- 新人如何快速融入团队
- 帆软连接好数据库,字段带有中文的显示乱码解决方案
- Python:照片墙设计,将爬虫获取的照片布局成爱心形状
- 【OpenCV学习】第6课:图像模糊(中值滤波,高斯双边滤波)
- google新操作系统Fuchsia
- python xlwings在Linux上报错XlwingsError:Your platform only supports the instantiation via xw.Book
- Java EasyExcel在Web网站中读写Excel的方法及示例代码
- 学习C/C++效率太慢?一份思维导图教你如何从零开始系统学好C/C++
热门文章
- Open_cv中常用函数的原型及参数解释(一)
- Kaldi的关键词搜索(Keyword Search,KWS)
- Java面对对象程序设计——面对对象
- java appdata_纯手写!!转移系统用户资料和更改AppData路径的方法 不接受反驳!...
- 计算机网络的简单实验
- 新的 systemctl 命令代替原来的 chkconfig、service 命令
- 计算机动画可分为二维和三维动画,二维动画与三维动画设计的区分
- Axure RP 基于母版实现页面框架/页眉/页脚/导航栏
- 商丘学院计算机基础,商丘学院
- 软件工程的起源与发展