当前位置: 首页 > news >正文

海外网站免费建设seo技术中心

海外网站免费建设,seo技术中心,免费网站制作效果,wordpress在线阅读主题对于FPGA几个与LED相关的实验(包括按键点灯、流水灯、呼吸灯等)的记录,方便日后查看。这世界上就又多了一个FPGA点灯工程师了😏 成为一个FPGA点灯工程师分三步:一、按键点灯1、按键点灯程序2、硬件实现二、流水灯1、流…

对于FPGA几个与LED相关的实验(包括按键点灯、流水灯、呼吸灯等)的记录,方便日后查看。这世界上就又多了一个FPGA点灯工程师了😏

成为一个FPGA点灯工程师分三步:

        • 一、按键点灯
          • 1、按键点灯程序
          • 2、硬件实现
        • 二、流水灯
          • 1、流水灯程序
          • 2、仿真
          • 3、硬件实现
        • 三、呼吸灯
          • 1、先“吸”
          • 2、再“呼吸”
          • 3、最后大口地呼吸

一、按键点灯

按键点灯程序比较简单,就不搞仿真了,直接上机

1、按键点灯程序
module led(input wire key_1,output reg led_1);always@*led_1=!key_1;endmodule

由程序得到的RTL图:

请添加图片描述

2、硬件实现

(1)引脚分配与接线
引脚分配如下,记得引脚分配后再编译一次,不然可能没有现象。

请添加图片描述

上述引脚分配对应的接线:JX22连接到JP5,JX5连接到JP1。
为什么要这样接线可以参考《【FPGA实验2】二进制转为格雷码》中的【三、实验箱实验】➡️【3、引脚分配】。

在这里插入图片描述

(2)实验现象

具体的实验现象可观看下方的视频😏

二、流水灯

学了点状态机的内容,决定用状态机来写一下这个流水灯的代码。
感谢正点原子的视频,用了一个很好理解的例子讲了状态机是怎么样的一个东西,并总结了写状态机主要有四个步骤(也称四段论):
(1)状态空间定义(定义各个状态)
(2)状态跳转(告诉FPGA:你要跳转。让FPGA知道在什么条件下,你要从现在状态跳转到下一个状态)
(3)下个状态的判断(告诉FPGA:你要怎么跳。给FPGA一个地图,判断现在的情况是什么,然后根据地图确定下一个要跳转的状态)
(4)各个状态下的动作(我理解为状态对应信息的输出)

1、流水灯程序
module WaterLED(input wire clk,input wire rst_n,output wire [7:0]led_data);//空间状态定义parameter S1=8'b10000000;parameter S2=8'b01000000;parameter S3=8'b00100000;parameter S4=8'b00010000;parameter S5=8'b00001000;parameter S6=8'b00000100;parameter S7=8'b00000010;parameter S8=8'b00000001;reg [7:0]current_state;reg[7:0]next_state;//状态跳转always @(posedge clk or negedge rst_n) beginif(! rst_n)   current_state<=S1;  //复位,从状态S1开始else current_state<=next_state; //不是复位的情况下,到达时钟的上升沿就转到下一个状态end//状态判断always @(current_state) begincase(current_state) S1:next_state=S2;S2:next_state=S3;S3:next_state=S4;S4:next_state=S5;S5:next_state=S6;S6:next_state=S7;S7:next_state=S8;default:next_state=S1;endcaseend//各个状态下的动作assign led_data=current_state;endmodule

得到的RTL图如下:
在这里插入图片描述

2、仿真

流水灯的仿真程序如下:

`timescale 1ns/100ps
module tb_WaterLED;reg clk_1;reg rst_n_1;wire [7:0] led_data_1;parameter PERIOD=10;always #(PERIOD/2) clk_1=~clk_1;initial beginclk_1=0;#200  $stop;endtask task_rst;begin rst_n_1=0;repeat(2) @(negedge clk_1);//两个时钟负跳变之后rst_n_1=1;endendtaskWaterLED WD_1(.clk(clk_1),.rst_n(rst_n_1),.led_data(led_data_1));initial begintask_rst;$display("task_rst ok!!!");endendmodule

【如何将仿真程序加入到工程中以及如何仿真可以看上一篇《【FPGA实验0】Quartus建立工程文件以及仿真》)】

仿真结果如下:
在两个时钟下降沿之后,复位线RST置高;之后随着每一个时钟上升沿的到来,开始状态的转换。

在这里插入图片描述

3、硬件实现

在实际的硬件实现中,需要注意两个点:

(1)时钟信号
在仿真中,两个状态之间的切换是在时钟信号的上升沿,因而,每个状态保持的时间是一个时钟信号周期(在上的仿真中,一个时钟信号的周期是10ns)。而如果在实际中要实现流水灯的效果,这样的间隔太小了,由于眼睛的暂存作用,我们看懂的现象是8个LED灯一直在同时亮着,没有流水灯的效果,因而我们必须将时钟周期改得大一点。
请添加图片描述

选择实验箱最大时钟12MHz(接线的话将左侧12M对应的时钟和右侧的任意一个引脚接起来即可),定义一个计数器,计数2400000个时钟周期,一个时钟频率为12MHz,一个时钟周期为83.33ns,2400000个时钟周期就是0.2秒。

	reg [23:0] counter;	//计数器对系统时钟计数,计时0.2秒always @(posedge clk or negedge rst_n) beginif (!rst_n)counter <= 24'd0;else if (counter < 24'd2400_000)  //仿真的时候可以改为 24'd0000_0010,下同counter <= counter + 1'b1;elsecounter <= 24'd0;end

同时,状态跳变部分增加一个条件,修改为:

//状态跳转
always @(posedge clk or negedge rst_n) beginif(! rst_n)   current_state<=S1;  //复位,从状态S1开始else if (counter==24'd2400_000) current_state<=next_state; //不是复位的情况下,到达时钟的上升沿就转到下一个状态else   ;
end

(2)复位键如何使用

复位键一开始需要置1(打到开的位置);
之后置0(下降沿产生出发条件;同时!rst=0,状态为初始状态S1);
完成复位后置1(使此刻的状态在触发之后能跳转到下一个状态)。

整个硬件实现的程序:

module WaterLED(input wire clk,input wire rst_n,output wire [7:0]led_data);//空间状态定义parameter S1=8'b10000000;parameter S2=8'b01000000;parameter S3=8'b00100000;parameter S4=8'b00010000;parameter S5=8'b00001000;parameter S6=8'b00000100;parameter S7=8'b00000010;parameter S8=8'b00000001;reg [7:0]current_state;reg[7:0]next_state;reg [23:0] counter;//计数器对系统时钟计数,计时0.2秒always @(posedge clk or negedge rst_n) beginif (!rst_n)counter <= 24'd0;else if (counter < 24'd2400_000)  //仿真的时候可以改为 24'd0000_0010,下同counter <= counter + 1'b1;elsecounter <= 24'd0;end//状态跳转always @(posedge clk or negedge rst_n) beginif(! rst_n)   current_state<=S1;  //复位,从状态S1开始else if (counter==24'd2400_000) current_state<=next_state; //不是复位的情况下,到达时钟的上升沿就转到下一个状态else   ;end//状态判断always @(current_state) begincase(current_state) S1:next_state=S2;S2:next_state=S3;S3:next_state=S4;S4:next_state=S5;S5:next_state=S6;S6:next_state=S7;S7:next_state=S8;default:next_state=S1;endcaseend//各个状态下的动作assign led_data=~current_state;//灯为0时亮起,为1时变暗endmodule

对应的RTL图:
请添加图片描述

引脚分配与接线:
请添加图片描述

按之前的接线即可,key8为复位键。

上述引脚分配对应的接线:JX22连接到JP5,JX5连接到JP1。
为什么要这样接线可以参考《【FPGA实验2】二进制转为格雷码》中的【三、实验箱实验】➡️【3、引脚分配】。

时钟引脚:左侧的12M时钟引脚接到右侧任意一个引脚即可。总的接线图如下:

在这里插入图片描述

具体现象可以看文末的视频😏

三、呼吸灯

呼吸灯,就是灯的亮度由暗变亮再由亮变暗,像人的呼吸一样。

1、先“吸”

(1)代码

module PWM(           input wire clk,output wire[9:0] pwma,output wire pwmb);reg [3:0]counter1=0,counter2=0;reg [9:0]pwm_1=10'b0000_0000_00;reg[0:0] pwm_2;always@(posedge clk) beginif(counter2==4'd9)  beginif(counter1==4'd9)  begincounter1=0;pwm_1=10'b0000_0000_00;					endelse  counter1=counter1+1;							pwm_1[counter1]=1;counter2=0;endelse counter2=counter2+1;pwm_2=pwm_1[counter2];endassign pwma=pwm_1;assign pwmb=pwm_2;endmodule

(2)仿真文件:

`timescale 1ns/100ps
module tb_PWM;reg clk;wire [9:0]pwma;wire [0:0]pwmb;parameter PERIOD=10;always #(PERIOD/2) clk=~clk;initial beginclk=0;# 3000 $stop;endPWM PWM_1(.clk(clk),.pwma(pwma), .pwmb(pwmb));endmodule

(3)仿真结果:
在这里插入图片描述

2、再“呼吸”

(1)代码

module PWM(input wire clk,output wire[9:0] pwma,output wire pwmb);reg [4:0]counter1=0;reg [3:0]counter2=0;reg [9:0]pwm_1=10'b0000_0000_00;reg[0:0] pwm_2;always@(posedge clk) beginif(counter2==4'd9)  beginif(counter1==5'd17)   counter1=0;else  counter1=counter1+1;	$display("counter1:   ",counter1);case(counter1)5'd0  : pwm_1=10'b0000_0000_01;5'd1  : pwm_1=10'b0000_0000_11;5'd2  : pwm_1=10'b0000_0001_11;5'd3  : pwm_1=10'b0000_0011_11;5'd4  : pwm_1=10'b0000_0111_11;5'd5  : pwm_1=10'b0000_1111_11;5'd6  : pwm_1=10'b0001_1111_11;5'd7  : pwm_1=10'b0011_1111_11;5'd8  : pwm_1=10'b0111_1111_11;5'd9  : pwm_1=10'b1111_1111_11;5'd10  : pwm_1=10'b0111_1111_11;5'd11  : pwm_1=10'b0011_1111_11;5'd12  : pwm_1=10'b0001_1111_11;5'd13  : pwm_1=10'b0000_1111_11;5'd14  : pwm_1=10'b0000_0111_11;5'd15  : pwm_1=10'b0000_0011_11;5'd16  : pwm_1=10'b0000_0001_11;5'd17  : pwm_1=10'b0000_0000_11;endcase$display("pwm_1:  ",pwm_1);counter2=0;endelse counter2=counter2+1;pwm_2=pwm_1[counter2];endassign pwma=pwm_1;assign pwmb=pwm_2;endmodule

(2)tb文件:

`timescale 1ns/100ps
module tb_PWM;reg clk;wire [9:0]pwma;wire [0:0]pwmb;parameter PERIOD=10;always #(PERIOD/2) clk=~clk;initial beginclk=0;# 3000 $stop;endPWM PWM_1(.clk(clk),.pwma(pwma), .pwmb(pwmb));endmodule

(3)仿真结果:

在这里插入图片描述

3、最后大口地呼吸

呼吸灯的硬件实现,和流水灯的硬件实现一样原理,如果每个亮度的时间跟仿真的时候一样的话,那我们是看不出亮度变化,所以在硬件实现的时候需要在每一个亮度延长一定的时间。具体的实现如下:

(1)代码:

module PWM(input wire clk,output wire led0,output wire led1,output wire led2,output wire led3,output wire led4,output wire led5,output wire led6,output wire led7);reg [4:0]counter1=0;reg [3:0]counter2=0;reg [9:0]pwm_1=10'b0000_0000_00;reg[0:0] pwm_2;reg [20:0] cnt_base;parameter T_6ms = 21'd2000_000;always @(posedge clk ) beginif(cnt_base < T_6ms - 1'b1)begincnt_base <= cnt_base + 1'b1;pwm_2<=pwm_1[cnt_base%10];endelse begincnt_base <= 21'd0;if(counter1==5'd17)   counter1=0;else  counter1=counter1+1;	case(counter1)5'd0  : pwm_1=10'b0000_0000_01;5'd1  : pwm_1=10'b0000_0000_11;5'd2  : pwm_1=10'b0000_0001_11;5'd3  : pwm_1=10'b0000_0011_11;5'd4  : pwm_1=10'b0000_0111_11;5'd5  : pwm_1=10'b0000_1111_11;5'd6  : pwm_1=10'b0001_1111_11;5'd7  : pwm_1=10'b0011_1111_11;5'd8  : pwm_1=10'b0111_1111_11;5'd9  : pwm_1=10'b1111_1111_11;5'd10  : pwm_1=10'b0111_1111_11;5'd11  : pwm_1=10'b0011_1111_11;5'd12  : pwm_1=10'b0001_1111_11;5'd13  : pwm_1=10'b0000_1111_11;5'd14  : pwm_1=10'b0000_0111_11;5'd15  : pwm_1=10'b0000_0011_11;5'd16  : pwm_1=10'b0000_0001_11;5'd17  : pwm_1=10'b0000_0000_11;endcaseendendassign led0=pwm_2;assign led1=pwm_2;assign led2=pwm_2;assign led3=pwm_2;assign led4=pwm_2;assign led5=pwm_2;assign led6=pwm_2;assign led7=pwm_2;endmodule

(2)对应的RTL图:
请添加图片描述
(3)引脚分配与接线
请添加图片描述
接线同上流水灯的接线。

(4)实验现象:
具体实验现象可以看文末😏

FPGA点灯工程师养成记

Forever young,always tearful. 😏


文章转载自:
http://dinncomany.bkqw.cn
http://dinncoreviewable.bkqw.cn
http://dinncocaracul.bkqw.cn
http://dinncovexillum.bkqw.cn
http://dinncoaleppo.bkqw.cn
http://dinncokhalifat.bkqw.cn
http://dinncoboswellian.bkqw.cn
http://dinncomonochord.bkqw.cn
http://dinncomishear.bkqw.cn
http://dinncoliveware.bkqw.cn
http://dinncosymplectic.bkqw.cn
http://dinncoalnico.bkqw.cn
http://dinncoversification.bkqw.cn
http://dinncoingush.bkqw.cn
http://dinncotacloban.bkqw.cn
http://dinncomorpheme.bkqw.cn
http://dinncoimpish.bkqw.cn
http://dinncosol.bkqw.cn
http://dinncomods.bkqw.cn
http://dinncoprintseller.bkqw.cn
http://dinncocavernous.bkqw.cn
http://dinncoteth.bkqw.cn
http://dinncoseismometer.bkqw.cn
http://dinncocatskin.bkqw.cn
http://dinncoschrod.bkqw.cn
http://dinncomonorail.bkqw.cn
http://dinncoiridocapsulitis.bkqw.cn
http://dinncocerulean.bkqw.cn
http://dinncobrainpower.bkqw.cn
http://dinncohelen.bkqw.cn
http://dinncoambassadorial.bkqw.cn
http://dinncocystitis.bkqw.cn
http://dinncotagus.bkqw.cn
http://dinncocenturied.bkqw.cn
http://dinncodignity.bkqw.cn
http://dinncoimaret.bkqw.cn
http://dinncoflexual.bkqw.cn
http://dinncobarstool.bkqw.cn
http://dinncocollywobbles.bkqw.cn
http://dinncoaddend.bkqw.cn
http://dinncodisannex.bkqw.cn
http://dinncomultilist.bkqw.cn
http://dinncopowderless.bkqw.cn
http://dinncosulphonation.bkqw.cn
http://dinncoseismonasty.bkqw.cn
http://dinncosolingen.bkqw.cn
http://dinncotoshiba.bkqw.cn
http://dinncoenugu.bkqw.cn
http://dinncosubterrestrial.bkqw.cn
http://dinncogulfy.bkqw.cn
http://dinncorocklet.bkqw.cn
http://dinncoruffianize.bkqw.cn
http://dinncowoodwaxen.bkqw.cn
http://dinncocarburetor.bkqw.cn
http://dinncodispose.bkqw.cn
http://dinncoeuploid.bkqw.cn
http://dinncounneighbourly.bkqw.cn
http://dinncolampoonist.bkqw.cn
http://dinncoalabandite.bkqw.cn
http://dinncobalkh.bkqw.cn
http://dinncoexcentric.bkqw.cn
http://dinncogunport.bkqw.cn
http://dinncosirgang.bkqw.cn
http://dinncogelati.bkqw.cn
http://dinncotransfinalization.bkqw.cn
http://dinncounset.bkqw.cn
http://dinncohammering.bkqw.cn
http://dinncoescallonia.bkqw.cn
http://dinncoplerocercoid.bkqw.cn
http://dinncoisaac.bkqw.cn
http://dinncowatercourse.bkqw.cn
http://dinncosubereous.bkqw.cn
http://dinncoantiheroine.bkqw.cn
http://dinncoplaten.bkqw.cn
http://dinncointentional.bkqw.cn
http://dinncolivetrap.bkqw.cn
http://dinncoantirheumatic.bkqw.cn
http://dinncofeatherbrain.bkqw.cn
http://dinncomythomania.bkqw.cn
http://dinncoflorescent.bkqw.cn
http://dinncounwatchful.bkqw.cn
http://dinncogenerically.bkqw.cn
http://dinncohepaticoenterostomy.bkqw.cn
http://dinncounweave.bkqw.cn
http://dinncoantilles.bkqw.cn
http://dinncotriniscope.bkqw.cn
http://dinncoerroneous.bkqw.cn
http://dinncosemiologist.bkqw.cn
http://dinncocontinue.bkqw.cn
http://dinncosubterconscious.bkqw.cn
http://dinncocerebratmon.bkqw.cn
http://dinncoululation.bkqw.cn
http://dinncoakkra.bkqw.cn
http://dinncoactinide.bkqw.cn
http://dinncoatraumatically.bkqw.cn
http://dinncoprinceton.bkqw.cn
http://dinncobir.bkqw.cn
http://dinncoimbower.bkqw.cn
http://dinncodelouser.bkqw.cn
http://dinncoantewar.bkqw.cn
http://www.dinnco.com/news/88060.html

相关文章:

  • 北京软件开发培训机构长沙seo计费管理
  • redis 在网站开发中怎么用友情链接交换网站
  • 申请备案 关网站360排名检测
  • 做织带的网站百度关键词排名手机
  • 长春做公司网站上海单个关键词优化
  • 做h5的网站有哪些南宁哪里有seo推广厂家
  • 微信小程序做网站sem是什么意思的缩写
  • 宿州网站制作怎么自己做网址
  • 网站开发视频教程百度网盘自媒体论坛交流推荐
  • b2c典型电子商务平台有哪些网站关键词优化技巧
  • wordpress调用指定菜单网站seo检测工具
  • 南昌个人做网站推广公司主要做什么
  • 湛江建站费用ip反查域名网站
  • 做建筑机械网站那个网站好中国新闻最新消息
  • 博客类网站建设百度竞价托管代运营
  • 电商公司网站建设财务核算50个市场营销经典案例
  • 西安最大的互联网公司优化大师官方免费
  • 网站开发师培训seo网站推广是什么意思
  • 做北京会所网站哪个好新网站怎么推广
  • 看优秀摄影做品的网站网络建站流程
  • 网站的盈利方法网页设计页面
  • b2c平台网站建设什么软件可以发布广告信息
  • 公司网站企业文化怎么做杭州seo技术培训
  • 手机网站建设设计6seo技术培训班
  • ppt网站建设的目的百度网盘客户端
  • 做网站需要走公司吗抚顺网络推广
  • cms网站建设方案今日国际新闻
  • 软件开发公司简介范文网络seo是什么工作
  • 网站换空间上怎么办啊百度指数免费查询
  • 重庆智能建站模板重庆seo技术博客