1、Get清风FPGA实验代码FPGA实验+代码2021年EDA实验第一次实验:实验1:QII软件及实验板的使用;用图形输入法和语言输入法完成点灯实验用两个按键控制两个灯的亮灭:灯的状态随按键状态改变而改变。完成软件仿真。module simple_lightcon(input wire 1:0 key, output wire 1:0 led);assign led= key;endmodule实验2:联控点灯实验:用两个按键独立控制同一个灯亮灭,第三个按键同时控制该灯和另一个灯亮灭。module com_lightcon(input wire 2:0 key, output wire 1:0
2、led);assign led0= key0;assign led1= key0&( key2 key1);endmodule实验3:流水灯实验:完成一个8路流水灯控制实验,要求有以下3种花型:18路灯同时亮灭;2从左至右再从右至左逐个亮每次只有1路亮;38路灯每次4路灯亮,4路灯灭,且亮灭相间,交替亮灭。用3个按键控制3种花型。按下花型按键就一直显示相应花型,再按该键可暂停。可设置1个复位键关闭显示。/*-Author :BassonData : 2021-11-21Description : This file has the module of HDL top.Modification
3、History:Data by Version Change Description=14/11/21 Basson V1.0 Original-*/module water_light( input wire sys_sclk, /时钟信号输入信号 input wire srst_n, /复位信号输入信号 input wire2:0 key, /按键信号输入信号 output reg 3:0 ledlight /输出接8个led灯输出信号 );/消抖动-reg 2:0 key_reg; /用于存储现有按键always (posedge sys_sclk,negedge srst_n)begi
4、n if(srst_n=1b0) key_reg=3b111; else key_reg=key;endreg 2:0 key_reg_r; /用于存储前一按键always (posedge sys_sclk,negedge srst_n)begin if(srst_n=1b0) key_reg_r=3b111; else key_reg_r=key_reg; /用于存储前一按键end wire2:0 key_an=key_reg_r&(key_reg); /用于存储按键下降沿 /消抖时间设定为20ms左右- parameter CCNTWITHD=20; reg CCNTWITHD-1:0
5、ccnt; reg2:0 keyout;always (posedge sys_sclk,negedge srst_n)begin if(srst_n=1b0)ccnt=20b0;else if(key_an)ccnt=20b0; /按键有抖动就清零-消除抖动的计数器else ccnt=ccnt+1b1; /没有抖动,消除抖动的计数器开始加1,延时20ms。endreg 2:0 low_key; /用于记录消除抖动后的现有按键状态always (posedge sys_sclk,negedge srst_n)begin if(srst_n=1b0) low_key=3b111; else if
6、(ccnt=20hfffff) low_key=key; end /*消抖动结束*/ /*流水灯控制局部程序-*/ /可按键标志位- reg 2:0 low_key_r; /用于记录消除抖动后的下一按键状态 always (posedge sys_sclk,negedge srst_n)begin if(srst_n=1b0) low_key_r=3b111; else low_key_r=low_key; end wire 2:0 key_flag11=low_key_r&(low_key); /消逗后按键下降沿个数,作为标志位/标志位-reg2:0 key_flag1;always (po
7、sedge sys_sclk ,negedge srst_n)begin if(srst_n=1b0) begin key_flag1=3b000; end else /花型按键显示相应花型-有优先级电路设计代码 begin case(key_flag11) 3b001: begin key_flag1=2b00,key_flag10; /奇数显示相应花型,偶数暂停 end 3b010: begin key_flag1=1b0,key_flag11,1b0; /奇数显示相应花型,偶数暂停 end 3b100: begin key_flag1=key_flag12,2b00; /奇数显示相应花型
8、,偶数暂停 end endcase end end wire2:0 key_flag=key_flag1; /50MHZ div_frequence to 1Hz - parameter COUNTWIDTH = 24; regCOUNTWIDTH-1:0 ccount;/ reg sclk; wire ssclk; always (posedge sys_sclk, negedge srst_n) begin if(srst_n=1b0) begin ccountCOUNTWIDTH-1:0=d0;end else ccount=ccount+1b1; end assign ssclk=cc
9、ountCOUNTWIDTH-1; / 流水灯显示控制程序- reg7:0 s0; reg7:0 s1; reg7:0 s2; reg3:0 count; always (posedge ssclk ,negedge srst_n)begin if(srst_n=1b0) begin s0=4b0000;s1=4b1000;s2=4b1010;count=4b0; end else /花型按键显示相应花型-有优先级电路设计代码 begin case(key_flag) 3b001: begin ledlight=s0; /奇数显示相应花型,偶数暂停 s0=s0; end 3b010: begi
10、n if(count=4b0111) begin ledlight=s1; s1=s10,s13:1; /奇数显示相应花型,偶数暂停 count4b0111) begin ledlight=s1; s1=s12:0,s13; count=count+1; end end 3b100: begin ledlight=s2; /奇数显示相应花型,偶数暂停 s2=s2; end endcase end endendmodule第二次实验:实验4:数据分配器实验:用2个按键代表输入数据in2位,用2个按键代表选择控制数据位s1s0,用四组发光管每组2位代表四路数据输出out0-out3。当输入数据或控
11、制数据改变时,要求输出数据进行相应变化原理和真值表如下。s1s0out0out1out2out300inzzz01zinzz10zzinz11zzzinmodule mux_4(in, out0, out1, out2, out3, sel); input1:0 sel; input1:0 in; output reg1:0 out0; / output reg1:0 out1; / output reg1:0 out2; / output reg1:0 out3; / always (in or sel) case(sel) 2b00: begin out0 = in; out1 = 2bz
12、; out2 = 2bz; out3 = 2bz; end 2b01: begin out0 = 2bz; out1 = in; out2 = 2bz; out3 = 2bz; end 2b10: begin out0 = 2bz; out1 = 2bz; out2 = in; out3 = 2bz; end 2b11: begin out0 = 2bz; out1 = 2bz; out2 = 2bz; out3 = in; end default: begin out0 = 2bz; out1 = 2bz; out2 = 2bz; out3 = 2bz; end endcaseendmodu
13、le实验5:七段译码器实验:用一个按键代表数据输入,每按一次数据加一,从0开始到F,再到0,依次循环,相应数字在数码管上显示。module seg7_decode(a, b, c, d, e, f, g, dp, sel, out, keyin, clk); parameter COUNTWIDTH = 16; reg keyout; regCOUNTWIDTH-1:0 counter; wire clk_use; input keyin, clk; reg3:0 T; input2:0 sel; output 2:0 out; output reg a, b, c, d, e, f, g,
14、dp; assign clk_use = counterCOUNTWIDTH-1; always (posedge clk) counter = counter + 1b1; always (posedge clk_use) keyout = keyin; always (posedge keyout) begin T = T + 1b1; end always (T) begin case(T) 4d0: a, b, c, d, e, f, g, dp = 8b11111100;/0 4d1: a, b, c, d, e, f, g, dp = 8b01100000;/1 4d2: a, b
15、, c, d, e, f, g, dp = 8b11011010;/2 4d3: a, b, c, d, e, f, g, dp = 8b11110010;/3 4d4: a, b, c, d, e, f, g, dp = 8b01100110;/4 4d5: a, b, c, d, e, f, g, dp = 8b10110110;/5 4d6: a, b, c, d, e, f, g, dp = 8b10111110;/6 4d7: a, b, c, d, e, f, g, dp = 8b11100000;/7 4d8: a, b, c, d, e, f, g, dp = 8b111111
16、10;/8 4d9: a, b, c, d, e, f, g, dp = 8b11110110;/9 4d10: a, b, c, d, e, f, g, dp = 8b11101110;/a 4d11: a, b, c, d, e, f, g, dp = 8b00111110;/b 4d12: a, b, c, d, e, f, g, dp = 8b10011100;/c 4d13: a, b, c, d, e, f, g, dp = 8b01111010;/d 4d14: a, b, c, d, e, f, g, dp = 8b10011110;/e 4d15: a, b, c, d, e
17、, f, g, dp = 8b10001110;/f default: a, b, c, d, e, f, g, dp = 8b11111100; endcase end assign out = sel;endmodule第三次实验:实验6:数控分频器实验:用24MHz时钟分频,通过不同按键控制输出不同的频率信号,输出信号用LED指示。11Hz频率信号;20.5Hz频率信号。310Hz频率信号;module freque_div (input wire sys_clk, input wire sys_rst, output reg s_clkout_1Hz, output reg s_clk
18、out_10Hz, output reg s_clkout_01Hz ); reg30:0 count1;reg30:0 count10;reg30:0 count_01; always (posedge sys_clk, negedge sys_rst) begin if(sys_rst=1b0) begin count1=30d0; count10=30d0; count_01=30d0; s_clkout_1Hz =1b0; s_clkout_10Hz=1b0 ; s_clkout_01Hz=1b0; end else begin if(count=25d25000000) begin
19、s_clkout_1Hz = s_clkout_1Hz; count1=0; end/1Hzif(count=25d2500000) begin s_clkout_10Hz = s_clkout_10Hz; count10=0; end/10Hzif(count=25d2*0) begin s_clkout_01Hz = s_clkout_01Hz; count_01=0; endend end endmodule实验7:加法计数器实验在时钟信号选择1Hz作用下,通过使能端和复位信号完成加法计数器的计数。用2个按键分别表示使能和复位,用4个发光管表示计数的二进制结果。第四次实验:实验8:动态扫
20、描实验:用4个按键分别代表加、减、暂停、复位,四位数码管代表四位十进制数,从0000开始到9999循环,自动计数,数据显示时间不大于1秒。module dscnt(key,clk,sels,segs);/动态扫描代码模板input 3:0key;/按键input clk;/系统时钟output reg 2:0sels;/位选,即选择某个数码管reg 1:0sels0;/位选中间存放器变量,4个数码被用动态扫描output reg 6:0segs;/段选,即七段数码管reg 2:0 vkey;/记录按键被按下reg dataclk,bitclk;/段显示时钟和位扫描时钟reg 3:0disdat
21、a;/送入段显示数据。reg 15:0data;/四位十进制数据。reg 30:0cnt;/分频时钟计数器/按键局部代码-always(key)begin if(!key3)vkey=1; if(!key2)vkey=2; if(!key1)vkey=3; if(!key0)vkey=4;end/分频局部代码-always(posedge clk)begin cnt=cnt+1;end/段显示时钟assign dataclk=cnt?; /?表示根据系统时钟,设计者自行选取适宜的值/位扫描时钟assign bitclk=cnt?; /用于段显示的计算局部代码加,减计数,暂停,复位-always
22、(posedge dataclk)begin if(vkey=1) :data3:0 if(vkey=2) : if(vkey=3) : if(vkey=4) :/位选-always(posedge bitclk)begin sels0=sels0+1; sels=sels0;end/动态显示-always(sels or data)begin case(sels) 2b00:disdata=data15:12; 2b01:disdata=data11:8; 2b10:disdata=data7:4; 2b11:disdata=data3:0; endcaseendalways(disdata
23、)begin case(disdata) 4b0000:segs=7b1111110; 4b0001:segs=7b1111110; : : endcaseend第五次实验:实验9:序列检测实验:用一个按键代表时钟,一个按键代表输入数据,时钟和数据要用LED显示其电平或数值,当检测到1101序列时,蜂鸣器响动,指示灯点亮。实验10:表决器实验利用按键、指示灯和数码管完成一个7人表决器实验。用7个按键代表7个人高电平表示同意,低电平表示反对,用1个指示灯代表表决结果点亮表示通过,1位数码管显示通过的票数。第六次实验:实验11:交通灯实验:完成一个简单是交通灯控制器实验,交通灯显示用实验箱的交通灯模块和2个数码管显示。,各个信号显示灯显示时间设为:主干道绿灯60秒,红灯20秒,黄灯5秒
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1