FPGA学习过程(一)
前言
终于有时间折腾这块fpga开发板了,不知不觉又熬夜了。
正文
实现一个呼吸灯的项目
打开quartus ii 建立工程 步骤就不讲了
新建一个pwm.v文件内容
module PWM (
input sys_clk,
input sys_rst_n,
input [WIDTH-1:0] duty_cycle,
//output ports
output wire pwm
);
//reg define
reg pwm_out;
reg [19:0] counter; // 最大值 1048575,PWM频率最低可以设置到 48HZ
//parameter define
parameter WIDTH = 7;
/*
设PWM频率为 f,晶振频率为F
则计数器的最大值为 counter_max = (1/f)/(1/F) = F/f = 50M / 2K = 25*10^3
*/
parameter PWM_FREQUENCY = 2_000; //2K
parameter OSC_FREQUENCY = 50_000_000; //50M
parameter COUNTER_MAX = OSC_FREQUENCY/PWM_FREQUENCY;
// 主程序
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0)
counter <= 20'b0;
else if (counter>=COUNTER_MAX)
counter <= 20'b0;
else
counter <= counter + 20'b1;
end
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0) begin
pwm_out <= 1'b0;
end
else if (counter <= COUNTER_MAX*duty_cycle/100)
pwm_out <= 1'b1;
else
pwm_out <= 1'b0;
end
assign pwm = !pwm_out;
endmodule
建立LED.V设为顶层文件
module LED
(
input wire clk ,
input wire rst_n ,
output wire led
); wire [6:0] dyc; reg [6:0] dyc_value;
reg [25:0] cnt;
reg state; initial dyc_value = 0;
initial state = 0; parameter delay_ms = 50_000 * 10; always @(posedge clk or negedge rst_n)begin
if(! rst_n)begin
cnt <= 0;
dyc_value <= 0;
state <= 0;
end else begin if(cnt == delay_ms -1)begin
cnt <= 0;
if(state == 0)
dyc_value <= dyc_value + 1;
else
dyc_value <= dyc_value - 1;
end else begin
cnt <= cnt + 1;
end if(dyc_value == 100)
state <= 1;
else if(dyc_value == 0)
state <= 0;
end
end assign dyc = dyc_value; PWM U_PWM(
.sys_clk(clk),
.sys_rst_n(rst_n),
.duty_cycle(dyc),
.pwm(led)
); endmodule
FPGA学习过程(一)的更多相关文章
- FPGA学习过程(二)
项目:数码管动态显示时间 首先建立一个计时一秒的模块,作为数码管显示的需要 module timer_s( input wire clk, input wire rst_n, output wire ...
- 学习FPGA过程中的理论知识
学习FPGA,先要有数电知识,最好有点C语言,,学好硬件描述语言,verilog或者vhdl.在有这些基础上,做一些小的模块不断积累.这里不再赘述. 下面介绍一下关于FPGA学习过程中的一些理论知识. ...
- 基于Verilog的偶数、奇数、半整数分频以及任意分频器设计
在FPGA的学习过程中,最简单最基本的实验应该就是分频器了.由于FPGA的晶振频率都是固定值,只能产生固定频率的时序信号,但是实际工程中我们需要各种各样不同频率的信号,这时候就需要对晶振产生的频率进行 ...
- FPGA学习之基本结构
如何学习FPGA中提到第一步:学习.了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程.既然要开始学习FPGA,那么就应该从其基本结构开始.以下内容是我 ...
- FPGA学习之路——一路走来
既然选择了远方,便不顾风雨兼程,一路走下去. —韩彬 在看bingo的书时,看到这样写到.做什么事情都不容易,学习也是,所以一个词很重要不忘初心.作为一名大二的学生,我很高兴能够将自己学习FPGA的过 ...
- 基于FPGA的HDMI高清显示接口驱动
HDMI是(High Definition Multimedia Interface)的缩写,意思是高清晰度多媒体接口,是一种数字化视频/音频接口技术,适合影像传输的专用型数字化接口,可同时传送音频和 ...
- 基于FPGA的Cordic算法实现
CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲线.指数.对数的 ...
- 【转载】FPGA算法设计随笔
FPGA设计算法依次需要完成MATLAB浮点仿真 MATLAB定点仿真 verilogHDL定点运算以及数据对比的流程.其中浮点到定点的转换尤为重要,需要在数据表示范围和精度之间做出权衡.另外掌握定点 ...
- 基于FPGA的DDS设计(一)
最近在学习基于FPGA的DDS设计,借此机会把学习过程记录下来,当作自己的学习笔记也希望能够帮助到学习DDS的小伙伴. DDS(Direct Digital Synthesizer)直接数字合成器,这 ...
随机推荐
- Nacos实战一:架构及部署
2018年,阿里巴巴开源 Nacos,由此成为继 Eureka.Consul.Apollo 等服务注册发现&配置的又一开源框架,到如今2021年,Nacos 已经历了 0.01->1.4 ...
- WPF教程三:学习Data Binding把思想由事件驱动转变为数据驱动
之前大家写代码都喜欢用事件驱动,比如说鼠标输入的click事件.初始化的内容全部放在窗体加载完毕的load事件,等等,里面包含了大量的由事件触发后的业务处理代码.导致了UI和业务逻辑高度耦合在一个地方 ...
- ESP32-使用ADC笔记
基于ESP-IDF4.1 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "freertos/FreeRT ...
- C语言:预定义的宏
预定义宏就是已经预先定义好的宏,我们可以直接使用,无需再重新定义.ANSI C 规定了以下几个预定义宏,它们在各个编译器下都可以使用: __LINE__:表示当前源代码的行号: __FILE__:表示 ...
- vs2013:asp.net网站发布
1."生成"菜单"生成网站" 2."发布网站" 3.配置文件--自定义,名称 4.发布方法:文件系统,确定目标位置(另外的) 5.配置选择r ...
- maven添加阿里云镜像
apache的maven服务器国内访问太慢了,用阿里的镜像会好很多. 1.maven的配置文件有两个,安装目录conf文件夹下settings.xml和用户目录.m2文件夹下的settings.xml ...
- debian9 python环境设置
file /usr/bin/python which python2 which python3 mv /usr/bin/python /usr/bin/python_bk ln -s /usr/bi ...
- HSDB工具类使用探索jvm
本文是引用https://club.perfma.com/article/2261053 有人问了个小问题,说: public class Test { static Test2 t1 = new T ...
- VS2013导入新项目时,连接数据库问题。
用VS2013导入项目进行学习时,导入数据库会报数据库登陆不上的错误... 解决方法: 1.将其自带的数据库连接先删除,使用自己的sql server数据库将项目数据库先附加进去, 2.附加进去后,再 ...
- Python实用案例,Python脚本,Python实现每日更换“必应图片”为“桌面壁纸”
往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 前言: 今天我们就利用python脚本实现每日更换"必应图片& ...