广东工业大学eda课程设计报告.docx
《广东工业大学eda课程设计报告.docx》由会员分享,可在线阅读,更多相关《广东工业大学eda课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
广东工业大学eda课程设计报告
课程设计报告
课程名称EDA课程设计
学院信息工程学院
年级班别
学号
学生姓名
指导老师罗思杰
2017年12月09日
一、设计目的和要求:
3
二、EDA设计:
3
三、硬件测试:
15
四、设计和调试过程中遇到的问题及解决方法15
五、完成课程设计后的收获或体会:
15
六、设计参考文献:
15
一、设计目的和要求:
1、设计目的:
通过对FPGA(现场可编程门阵列)芯片的设计实践,使学生掌握一般的PLD(可编程逻辑器件)的设计过程、设计要求、设计内容、设计方法,能根据要求及工艺需要进行电子芯片设计并制定有关技术文件。
培养学生综合运用已学知识解决实际工程技术问题的能力、查阅图书资料和各种工具书的能力、撰写技术报告和编制技术资料的能力,接受一次电子设计自动化方面的基本训练。
培养学生利用EDA技术知识,解决电子设计自动化中常见实际问题的能力,使学生积累实际EDA编程经验。
通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力。
2、设计要求 :
(1)以EDA技术的基本理论为指导,将设计实验分为基本功能电路和较复杂的电子系统两个层次,要求利用数字电路或者EDA方法去设计并完成特定功能的电子电路的仿真、软硬件调试;
(2)熟悉掌握常用仿真开发软件,比如:
Quartus II或Xilinx ISE的使用方法。
(3)能熟练运用上述开发软件设计并仿真电路并下载到FPGA中进行调试;
(4)学会用EDA技术实现数字电子器件组成复杂系统的方法;学习电子系统电路的安装调试技术。
二、EDA设计:
(1)方案比较:
1、数字电子钟设计
设计一个时钟电路,包括时钟、分钟、秒钟的显示。
要求可对时钟、分钟进行预置和修改操作;可设置3组闹铃时间,时间到时给出10秒的报警声或音乐并给出灯光提示。
具体输入/输出要求如下:
①4位LED数码显示器,分别显示“小时:
分钟”或“分钟:
秒”时钟;根据需要选择几个LED发光二极管。
②3个按键,具体功能描述如下:
[MODE]键——模式转换键,具有“正常——小时(校准)——分钟(校准)——小时(闹铃)——分钟(闹铃)”等5种模式,每按一次,转换一种模式。
假设当前处于正常模式,按一下此键,“小时”闪烁,表示进入“小时”调校模式,再按一次,转入分钟模式,如此类推,正常模式下不闪烁。
还可以配合LED灯来显示不同的模式。
//状态机
[+]键——加“1”键,按下此键,被选中的项目加“1”
[-]键——减“1”键,按下此键,被选中的项目减“1”
③1路蜂鸣器,用于报警或按键声。
在设计时,学生可充分发挥自己的特长和想象力,自行扩充功能,如“秒表”功能,通信功能,整点报时功能等。
并可进一步将其设计为万年历。
2、简易电子琴设计
用实验装置提供的7个按键对应中音的7个音符,设计一个简易电子琴。
用数码管显示当前的音符,用LED灯显示节拍,并能演奏一段或多段预存的音乐。
3、简易十字路口的交通灯控制系统设计
用EDA技术设计一个十字路口的交通信号灯控制器,控制A、B两条交叉道路上的车辆通行,具体要求如下:
①每条道路设一组信号灯,每组信号灯由红黄绿3个灯组成,绿灯表示允许通行,红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通行,未过停车线的车辆停止通行。
②每条道路上每次通行的时间为25s。
③每次变换通行车道之前,要求黄灯先亮5s,才能变换通行车道。
④黄灯亮时,要求每秒钟闪烁一次。
4、其他。
经过本人查阅资料以及根据本人实际能力,最后本人选择了难度相对较小的第二个方案,利用Verilog语言实现简易电子琴的制作。
(2)Verilog代码编写:
Moduletop(LED_AN,key,clk,rst_n,Led,auto,speaker,tone_7s,high_7s,mid_7s,low_7s);
inputclk,auto,rst_n;//时钟输入,自动演奏,键盘输入
input[7:
0]key;
wire[7:
0]key;//键盘输入信号
output[6:
0]tone_7s;//数码管显示音调
outputregspeaker;
output[6:
0]high_7s;//显示乐曲高音音符
output[6:
0]mid_7s;//显示乐曲中音音符
output[6:
0]low_7s;//显示乐曲低音音符
output[7:
0]Led;//led灯显示
wire[7:
0]Led;
output[3:
0]LED_AN;//选择所要显示的数码
reg[3:
0]LED_AN=4'b1000;//初始化,并选择其中一个数码管
reg[20:
0]i;//控制分频比参数
regclk4;
reg[3:
0]high,mid,low,tone;//高中低音信号和键盘音调信号
reg[13:
0]divider,origin;//自动演奏分频系数和初始值
regcarry;
regmusicout;//乐谱输出信号
reg[19:
0]count20;
reg[7:
0]counter;
reg[23:
0]clk_cnt;
assignLed[0]=(~key[0]);//led高电平有效,
assignLed[1]=(~key[1]);
assignLed[2]=(~key[2]);
assignLed[3]=(~key[3]);
assignLed[4]=(~key[4]);
assignLed[5]=(~key[5]);
assignLed[6]=(~key[6]);
assignLed[7]=(~key[7]);
parameterzero=~8'b10000000,
one=~8'b01000000,
two=~8'b00100000,
three=~8'b00010000,
four=~8'b00001000,
five=~8'b00000100,
six=~8'b00000010,
seven=~8'b00000001;
always@(posedgeclkornegedgerst_n)
if(!
rst_n)
clk_cnt<=24'd0;
else
clk_cnt<=clk_cnt+1'b1;
wireclk6m=(clk_cnt[2]||(clk_cnt[1]&&clk_cnt[0]));//50M降为6M,用于方便控制音调
always@(posedgeclk6m)//通过置数,改变分频比。
6M降频到3M
begin
if(divider==16383)//16383
begin
carry<=1;//carry的周期根据origin的值到16383的距离而改变
divider<=origin;//初始值控制
end
else
begin
divider<=divider+1'd1;
carry<=0;
end
end
always@(posedgecarry)//3M
begin
musicout<=~musicout;//2分频产生方波信号//因为carry周期是随时改变,musicout的周期也随时改变
end
always@(posedgeclk6m)
begin
if(auto)
speaker<=musicout;//如果automusic为真,输出乐谱
else
begin//否则判断键盘key的输入
case(key)
zero:
begin
speaker<=0;tone=4'b0000;
i<=0;
end
one:
begin
if(i>=5736)
begin
speaker=!
speaker;tone=4'b0001;//sperker翻转就会出声,i是用于控制音调
i<=0;
end
else
i<=i+1'd1;
end
two:
begin
if(i>=5111)
begin
speaker=!
speaker;tone=4'b0010;
i<=0;
end
else
i<=i+1'd1;
end
three:
begin
if(i>=4552)
begin
speaker=!
speaker;tone=4'b0011;
i<=0;
end
else
i<=i+1'd1;
end
four:
begin
if(i>=4298)
begin
speaker=!
speaker;tone=4'b0100;
i<=0;
end
else
i<=i+1'd1;
end
five:
begin
if(i>=3827)
begin
speaker=!
speaker;tone=4'b0101;
i<=0;
end
else
i<=i+1'd1;
end
six:
begin
if(i>=3409)
begin
speaker=!
speaker;tone=4'b0110;
i<=0;
end
else
i<=i+1'd1;
end
seven:
begin
if(i>=3036)
begin
speaker=!
speaker;tone=4'b0111;
i<=0;
end
else
i<=i+1'd1;
end
default:
begin
speaker<=0;
tone=4'b0000;
i<=0;
end
endcase
end