FPGA学习之模式LED

来源:本站
导读:目前正在解读《FPGA学习之模式LED》的相关信息,《FPGA学习之模式LED》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《FPGA学习之模式LED》的详细说明。
简介:本文是关于FPGA学习之模式LED的理解。

模式LED灯,设置了三个按键,每次按下一个按键后,LED灯呈现对应的状态。一个左移,一个右移,一个当前状态翻转。

modulekey_led(clk,rst_n,key,led);inputclk;//时钟,50MHzinputrst_n;//复位,低电平有效input[3:1]key;//定义三个按键outputreg[7:0]led;//后面可以看到,led在赋值的左边,需要定义为reg型reg[19:0]cnt;//定义一个20位计数器,来得到计数1_000_000次,即20ms(20ns*1_000_000)//always@(posedgeclkornegedgerst_n)if(!rst_n)cnt<=20'd0;elseif(cnt<20'd999_999)cnt<=cnt+1'b1;elsecnt<=1'b0;//key[1]按下(为低电平时),灯左移;key[2]按下(为低电平时),灯右移;key[3]按下(为低电平时),当前灯状态翻转always@(posedgeclkornegedgerst_n)if(!rst_n)led<=8'b11111110;//初始8个灯的状态和每次按下复位键的状态elseif(cnt==20'd999_999)//当你按住按键的时候,每计数20ms,这里为了在仿真中运行时间短点,计数较小,实际中想要观察明显点,可以把计数次数修改大点if(!key[1])led<={led[6:0],led[7]};//左移elseif(!key[2])led<={led[0],led[7:1]};//右移elseif(!key[3])led<=~led;//状态翻转endmodule

下面为测试文件

`timescale1ns/1ns`defineclk_period20modulekey_led_tb;regclk;//将.v文件中的端口复制过来,input修改为reg,output修改为wireregrst_n;reg[3:1]key;wire[7:0]led;key_ledkey_led//将.v文件中的端口复制过来,加个例化名字,加个.,加个例化的端口(.clk(clk),.rst_n(rst_n),.key(key),.led(led));initialclk=1;always#(`clk_period/2)clk=~clk;//初始化时钟,开始为高电平,每隔10ns翻转一次,一个周期20nsinitialbeginrst_n=1'b0;key[1]=1;key[2]=1;key[3]=1;#(`clk_period*200)//这里加2使下面的rst_n复位与时钟的上升沿不同步了,间隔了50个时钟周期后key三个数每隔50个时钟周期变化一次,自然也就不和上升沿同步了,但是led的值是随着时钟上升沿变化的,自然跟上升沿同步rst_n=1'b1;#(`clk_period*50)key[1]=0;key[2]=1;key[3]=1;#(`clk_period*2000000)//此段的时间至少要有顶层文件中技术周期的两倍,否则不容易看出led的变化key[1]=1;key[2]=1;key[3]=1;#(`clk_period*50)key[1]=1;key[2]=0;key[3]=1;#(`clk_period*2000000)//此段的时间至少要有顶层文件中技术周期的两倍,否则不容易看出led的变化key[1]=1;key[2]=1;key[3]=1;#(`clk_period*50)key[1]=1;key[2]=1;key[3]=0;#(`clk_period*2000000)//此段的时间至少要有顶层文件中技术周期的两倍,否则不容易看出led的变化key[1]=1;key[2]=1;key[3]=1;#(`clk_period*50)$stop;endendmodule

FPGA学习之模式LED

话说图怎么插啊,看不清啊!有知道的大大麻烦告知一下!感激不尽!

提醒:《FPGA学习之模式LED》最后刷新时间 2024-03-14 00:56:01,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《FPGA学习之模式LED》该内容的真实性请自行鉴别。