前言

  终于有时间折腾这块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学习过程(一)的更多相关文章

  1. FPGA学习过程(二)

    项目:数码管动态显示时间 首先建立一个计时一秒的模块,作为数码管显示的需要 module timer_s( input wire clk, input wire rst_n, output wire ...

  2. 学习FPGA过程中的理论知识

    学习FPGA,先要有数电知识,最好有点C语言,,学好硬件描述语言,verilog或者vhdl.在有这些基础上,做一些小的模块不断积累.这里不再赘述. 下面介绍一下关于FPGA学习过程中的一些理论知识. ...

  3. 基于Verilog的偶数、奇数、半整数分频以及任意分频器设计

    在FPGA的学习过程中,最简单最基本的实验应该就是分频器了.由于FPGA的晶振频率都是固定值,只能产生固定频率的时序信号,但是实际工程中我们需要各种各样不同频率的信号,这时候就需要对晶振产生的频率进行 ...

  4. FPGA学习之基本结构

    如何学习FPGA中提到第一步:学习.了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程.既然要开始学习FPGA,那么就应该从其基本结构开始.以下内容是我 ...

  5. FPGA学习之路——一路走来

    既然选择了远方,便不顾风雨兼程,一路走下去. —韩彬 在看bingo的书时,看到这样写到.做什么事情都不容易,学习也是,所以一个词很重要不忘初心.作为一名大二的学生,我很高兴能够将自己学习FPGA的过 ...

  6. 基于FPGA的HDMI高清显示接口驱动

    HDMI是(High Definition Multimedia Interface)的缩写,意思是高清晰度多媒体接口,是一种数字化视频/音频接口技术,适合影像传输的专用型数字化接口,可同时传送音频和 ...

  7. 基于FPGA的Cordic算法实现

    CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲线.指数.对数的 ...

  8. 【转载】FPGA算法设计随笔

    FPGA设计算法依次需要完成MATLAB浮点仿真 MATLAB定点仿真 verilogHDL定点运算以及数据对比的流程.其中浮点到定点的转换尤为重要,需要在数据表示范围和精度之间做出权衡.另外掌握定点 ...

  9. 基于FPGA的DDS设计(一)

    最近在学习基于FPGA的DDS设计,借此机会把学习过程记录下来,当作自己的学习笔记也希望能够帮助到学习DDS的小伙伴. DDS(Direct Digital Synthesizer)直接数字合成器,这 ...

随机推荐

  1. Codeforces Round#704 Div2 题解(A,B,C,D,E)

    FST ROUND !!1 A Three swimmers: 直接整除一下向上取整就好了: #include <bits/stdc++.h> using namespace std; t ...

  2. 如何搭建一个简易的 Web Terminal(一)

    前言 在介绍本篇文章的时候,先说一下本篇文章的一些背景.笔者是基于公司的基础建设哆啦 A 梦(Doraemon)一些功能背景写的这篇文章,不了解.有兴趣的同学可以去 袋鼠云 的 github 下面了解 ...

  3. c语言:sprintf() 数字转字符赋值给数组

    //sprintf() //sprintf 最常见的应用之一是把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa /* 缓冲区溢出 第一个参数的长度太短了,没的说,给个大点的地方 ...

  4. C语言:FILE p和FILE *p

    FILE p和FILE *p大概可以这么理解:1 . 前一个p指文件型变量,后一个p指文件地址型变量.2 . 前一个p的内存地址已定,后一个p内存地址未定. 前一个是声明类对象,后一个是声明一个可指向 ...

  5. c++ 进制转换源代码

    #include<stdio.h> int main() { char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C ...

  6. 深度解析CSS中的单位以及区别

    css中有几个不同的单位表示长度,使用时数字加单位.如果长度为0,则可以省略单位. 长度单位可分为两种类型:相对和绝对. 绝对长度 绝对长度单位是一个固定的值,反应真实的物理尺寸,不依赖于显示器.分辨 ...

  7. 浅析vue-cli脚手架命令的执行过程

    上一篇文章,已经大致了解脚手架是什么以及脚手架是如何工作的.接下来,稍微深入一下脚手架的工作过程(以vue-cli为例).首先抛出3个问题: 1.明明全局安装的是@vue/cli,最后执行的命令却是v ...

  8. 北京大公司二面:了解Redis持久化机制吗?

    今日总结 Redis持久化机制:RDB和AOF RDB持久化:定时任务,BGSAVE命令 fork一个子进程生成RDB文件(二进制) AOF持久化:根据配置将写命令存储至日志文件中,顺序写&& ...

  9. 【剑指offer】73.数组中出现次数超过一半的数字

    73.数组中出现次数超过一半的数字 知识点:数组:哈希:占领地思想: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4 ...

  10. 用Nextcloud在树莓派上布置你的个人网盘“NAS”

    用Nextcloud在树莓派上布置你的个人网盘"NAS" 这次用的是目前最新的 Raspbian Stretch 系统,基于 Debian 9. 软件程序是 Nextcloud 1 ...