实习Word格式.docx
《实习Word格式.docx》由会员分享,可在线阅读,更多相关《实习Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
//27位带复位计数器
//WhentheFPGAdrivesalogic0,thecorrespondingLEDturnson
//VIRTEX2PRO开发板上的LED的阳极通过电阻接到电源上,阴极作为输出控制级
//当输出低电平“0”时,LED点亮。
assignled_0=~cnt[23];
assignled_1=~cnt[24];
assignled_2=~cnt[25];
assignled_3=~cnt[26];
endmodule
本实验采用的分频计数器的位宽时27位(cnt【26:
0】)的各位所对应频率如下所示:
cnt[25]=1.49HZ;
cnt[24]=2.98HZ;
cnt[23]=5.96HZ
要求如下;
LD0=cnt[23]=5.96HZ
LD1=cnt[24]=2.98HZ;
LD2=cnt[25]=1.49HZ;
LD3=cnt[26]=0.745HZ;
并用RST按键进行复位控制。
实验设备
Pc主机、XilinxISE开发软件、Polestar实验平台中的LED灯。
实验步骤
(1)建立Project
(2)VerilogHDL语言输入
(3)XST综合设计
(4)建立ucf用户约束文件
(5)建立下载配置文件下载调试
实验结果与分析
实验板下载配置好之后,LED0、LED1、LED2、LED3分别以5.96HZ、1.49HZ、2.98HZ、0.745HZ闪烁,结果和预期完全相同。
实验二、键盘扫描码
实验目的:
1、了解矩阵式键盘原理
2、熟悉ISE设计流程
实验器材
Polestar实验箱上的矩阵键盘
实验内容
建立ISE工程,添加软件代码文件,进行管脚约束。
按下矩阵键盘的按键,在LED七段数码管显示数值。
VerilogHDL程序
`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
//Company:
//Engineer:
//
//CreateDate:
13:
19:
1610/24/2011
//DesignName:
//ModuleName:
key_scan
//ProjectName:
//TargetDevices:
//Toolversions:
//Description:
//
//Dependencies:
//Revision:
//Revision0.01-FileCreated
//AdditionalComments:
modulekey_scan(clk_sys,rst_n,c,r,data,en,clk_test);
inputclk_sys,rst_n;
input[4:
0]r;
output[3:
0]c;
output[7:
0]data;
0]en;
outputclk_test;
reg[7:
reg[26:
0]count1;
regclk_scan;
reg[3:
0]c_tmp;
reg[4:
0]r_tmp;
0]data_shi;
0]data_ge;
0]en_tmp;
//初始化
initial
begin
c_tmp<
=4'
b1110;
en_tmp<
data_shi<
=8'
hff;
data_ge<
count1<
d10000;
end
//分频给行扫描
always@(posedgeclk_sys)
if(!
begin
count1<
end
if(count1==27'
d000000)
clk_scan<
=~clk_scan;
else
=count1-1;
end
assignclk_test=clk_scan;
//c0-c3按照扫描时钟输出扫描信号
always@(posedgeclk_scan)
begin
={c_tmp[2:
0],c_tmp[3]};
//输出行扫描信号
assignc=c_tmp[3:
0];
//读取列扫描信号
always@(negedgeclk_scan)
r_tmp<
=r;
//根据行列信号,判定按键的位置,给数码管赋值
case({c_tmp[3:
0],r_tmp})
9'
b110111110:
begindata_shi<
h03;
data_ge<
end//00
b110111101:
h9f;
end//01
b110111011:
h25;
end//02
b110110111:
h0d;
end//03
b110101111:
h99;
end//04
b101111110:
h49;
end//05
b101111101:
h41;
end//06
b101111011:
h1f;
end//07
b101110111:
h01;
end//08
b101101111:
h09;
end//09
b011111110:
end//10
b011111101:
end//11
b011111011:
end//12
b011110111:
end//13
b011101111:
end//14
b111011110:
end//15
b111011101:
end//16
b111011011:
end//17
b111010111:
end//18
b111001111:
end//19
endcase
//输出数码管使能信号EN
={en_tmp[2:
0],en_tmp[3]};
assignen=en_tmp;
//显示按键值
case(en_tmp)
4'
b1011:
data<
=data_shi;
b1101:
=data_ge;
default:
实验结果
本实验通过矩阵键盘扫描原理对按键进行扫描,如果有按键按下,那么在7段数码管上显示按键的数值。
实验三、蜂鸣器播放音乐
1、学习蜂鸣器发音原理
2、掌握FPGA的ISE开发流程
Polestar试验平台上的蜂鸣器
利用无源蜂鸣器,演奏乐曲《北京欢迎你》
VerilogHDL程序
10:
24:
2410/25/2011
fengmingqi
modulefengmingqi(clk_sys,key_pp_c,key_pp_r,sound_out);
//系统时钟clk_sys,播放/暂停键key_play_pause-->
key_pp,声音输出sound_out
inputclk_sys;
inputkey_pp_r;
outputkey_pp_c;
outputsound_out;
parameterpet=26'
d25000000;
//500ms为一个拍长
parameterh1c=16'
d47822;
//高音1m1=(100MHz/523.3)/2
parameterh2c=16'
d42562;
//高音2m1=(100MHz/523.3)/2
parameterh3c=16'
d37920;
//高音3m1=(100MHz/523.3)/2
parameterh4c=16'
d35792;
//高音4m1=(100MHz/523.3)/2
parameterh5c=16'
d31886;
//高音5m1=(100MHz/523.3)/2
parameterh6c=16'
d28407;
//咭?
m1=(100MHz/523.3)/2
parameterh7c=16'
d25302;
//高音7m1=(100MHz/523.3)/2
parameterh1=8'
d01;
parameterh2=8'
d02;
parameterh3=8'
d03;
parameterh4=8'
d04;
parameterh5=8'
d05;
parameterh6=8'
d06;
parameterh7=8'
d07;
parameterm1=8'
d08;
//中音1m1=(100MHz/523.3)/2
parameterm2=8'
d09;
//中音2m1=(100MHz/523.3)/2
parameterm3=8'
d10;
//中音3m1=(100MHz/523.3)/2
parameterm4=8'
d11;
//中音4m1=(100MHz/523.3)/2
parameterm5=8'
d12;
//中音5m1=(100MHz/523.3)/2
parameterm6=8'
d13;
//中音6m1=(100MHz/523.3)/2
parameterm7=8'
d14;
//中音7m1=(100MHz/523.3)/2
parameterl1=8'
d15;
//低音1m1=(100MHz/523.3)/2
parameterl2=8'
d16;
//低音2m1=(100MHz/523.3)/2
parameterl3=8'
d17;
//低音3m1=(100MHz/523.3)/2
parameterl4=8'
d18;
//低音4m1=(100MHz/523.3)/2
parameterl5=8'
d19;
//低音5m1=(100MHz/523.3)/2
parameterl6=8'
d20;
//低音6m1=(100MHz/523.3)/2
parameterl7=8'
d21;
//低音7m1=(100MHz/523.3)/2
wireclk_pp;
wirekey_pp_c;
regclk_LUT;
regkey_reg;
reg[15:
0]FLA;
//FLAisshortfor:
FrequentLUTAddress
0]fre_reg;
reg[25:
0]pet_reg;
0]count_reg;
regsout;
FLA=16'
h0000;
count_reg=16'
count1=16'
//key_pp的行线置0,为了下面读取是否有按键按下
assignkey_pp_c=1'
b0;
//判断key_pp是否按下
if(key_pp_r==0)
key_reg=!
key_reg;
//key_pp控制时钟的通断
assignclk_pp=clk_sys&
&
key_reg;
//拍长发生器模块,产生固定的节拍时间
always@(posedgeclk_pp)
if(pet_reg==27'
d00000)
pet_reg=pet;
clk_LUT=~clk_LUT;
pet_reg=pet_reg-1;
//频率查找表,产生查找乐谱的地址
//always@(posedgeclk_LUT)
//begin
//if(FLA==16'
hfff0)
//begin
//FLA=16'
d000;
//end
//else
//FLA=FLA+1;
//
//end
//分频值查找表,存放乐谱用
always@(posedgeclk_LUT)
case(FLA)
16'
d000:
fre_reg<
=m5;
d001:
=m3;
d002:
d003:
=h1;
d004:
d005:
=m6;
d006:
d007:
d008:
d009:
d010:
=m1;
d011:
=m2;
d012:
d013:
d014:
d015:
d016:
d017:
d018:
d019:
d020:
d021:
d022:
=m7;
d023:
d024:
d025:
d026:
d027:
d028:
d029:
16'
d030:
=m4;
d031:
d032:
d033:
d034:
d035:
d036:
d037:
d038:
d039:
d040:
d041:
d042:
d043:
d044:
d045:
d046:
d047:
d048:
d049:
d050:
d051:
d052:
d053:
d054:
d055:
d056:
d057:
d058:
d059:
d060:
d061:
d062:
d063:
d064:
d065:
d066:
d067:
d068:
d069:
d070:
if(FLA==16'
d71)
FLA=16'
FLA=FLA+1;
//依据分频值查找表判断送给频率发生器的计数值
case(fre_reg)
h1:
count_reg<
=h1c;
h2:
count_r