当前位置:文档之家› 广东工业大学eda课程设计报告

广东工业大学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);input clk,auto,rst_n; //时钟输入,自动演奏,键盘输入input [7:0] key;wire [7:0] key; //键盘输入信号output [6:0] tone_7s; //数码管显示音调output reg speaker;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; //控制分频比参数reg clk4;reg[3:0] high,mid,low,tone; //高中低音信号和键盘音调信号reg[13:0] divider,origin; //自动演奏分频系数和初始值reg carry;reg musicout; //乐谱输出信号reg [19:0] count20;reg[7:0] counter;reg [23:0] clk_cnt;assign Led[0]=(~key[0]); //led高电平有效,assign Led[1]=(~key[1]);assign Led[2]=(~key[2]);assign Led[3]=(~key[3]);assign Led[4]=(~key[4]);assign Led[5]=(~key[5]);assign Led[6]=(~key[6]);assign Led[7]=(~key[7]);parameter zero=~8'b10000000,one=~8'b01000000,two=~8'b00100000,three=~8'b00010000,four=~8'b00001000,five=~8'b00000100,six=~8'b00000010,seven=~8'b00000001;always @( posedge clk or negedge rst_n)if (!rst_n)clk_cnt <= 24'd0;elseclk_cnt <= clk_cnt + 1'b1;wire clk6m = (clk_cnt[2]||(clk_cnt[1]&&clk_cnt[0]));// 50M降为6M,用于方便控制音调always @(posedge clk6m) //通过置数,改变分频比。

6M降频到3M beginif(divider==16383 ) // 16383begincarry<=1; //carry的周期根据origin的值到16383的距离而改变divider<=origin; //初始值控制endelsebegindivider<=divider+1'd1;carry<=0;endendalways @(posedge carry) //3Mbeginmusicout<=~musicout; //2分频产生方波信号 //因为carry 周期是随时改变,musicout的周期也随时改变endalways @(posedge clk6m)beginif(auto)speaker<=musicout; //如果automusic为真,输出乐谱elsebegin //否则判断键盘key的输入case(key)zero: beginspeaker<=0;tone=4'b0000;i<=0;endone: beginif(i>=5736)beginspeaker=!speaker;tone=4'b0001; //sperker翻转就会出声,i是用于控制音调i<=0;endelsei<=i+1'd1;endtwo: beginif(i>=5111)beginspeaker=!speaker;tone=4'b0010;i<=0;endelsei<=i+1'd1;endthree: beginif(i>=4552)beginspeaker=!speaker;tone=4'b0011;i<=0;endelsei<=i+1'd1;endfour: beginif(i>=4298)beginspeaker=!speaker;tone=4'b0100;i<=0;endelsei<=i+1'd1;endfive: beginif(i>=3827)beginspeaker=!speaker;tone=4'b0101;i<=0;endelsei<=i+1'd1;endsix: beginif(i>=3409)beginspeaker=!speaker;tone=4'b0110;i<=0;endelsei<=i+1'd1;endseven: beginif(i>=3036)beginspeaker=!speaker;tone=4'b0111;i<=0;endelsei<=i+1'd1;enddefault: beginspeaker<=0;tone=4'b0000;i<=0;endendcaseendendalways @(posedge clk6m) //从6Mhz得到4hz,6M除以2除以4.控制音乐拍子beginif(!auto)begincount20<=20'd0;clk4<=0;endelse if(count20==20'd750000) //3000000%4begincount20<=20'd0;clk4<=~clk4;endelse count20<=count20+20'd1;end//reg[3:0] high,mid,low,tone; //高中低音信号和键盘音调信号always @(posedge clk4) //分频比预置begincase({high,mid,low})'h001:origin<=4933;'h002:origin<=6179;'h003:origin<=7294;'h004:origin<=7787;'h005:origin<=8730;'h006:origin<=9565;'h007:origin<=10310;//低音'h010:origin<=10647;'h020:origin<=11272;'h030:origin<=11831;'h040:origin<=12085;'h050:origin<=12556;'h060:origin<=12974;'h070:origin<=13347;//中音'h100:origin<=13515;'h200:origin<=13830;'h300:origin<=14107;'h400:origin<=14236;'h500:origin<=14470;'h600:origin<=14678;'h700:origin<=14865;//高音endcaseendalways @(posedge clk4)beginif(counter==49)counter<=0; //计时,以实现循环演奏elsecounter<=counter+1'd1;case(counter) //记谱0: {high,mid,low}<='h050;1: {high,mid,low}<='h050;2: {high,mid,low}<='h100;3: {high,mid,low}<='h060;4: {high,mid,low}<='h060;5: {high,mid,low}<='h050;6: {high,mid,low}<='h050;7: {high,mid,low}<='h050;8: {high,mid,low}<='h050;9: {high,mid,low}<='h030;10: {high,mid,low}<='h050;11: {high,mid,low}<='h060;12: {high,mid,low}<='h100;13: {high,mid,low}<='h050;14: {high,mid,low}<='h050;15: {high,mid,low}<='h050;16: {high,mid,low}<='h050;17: {high,mid,low}<='h060;18: {high,mid,low}<='h060;19: {high,mid,low}<='h050;20: {high,mid,low}<='h030;21: {high,mid,low}<='h020;22: {high,mid,low}<='h020;23: {high,mid,low}<='h020;24: {high,mid,low}<='h020;25: {high,mid,low}<='h030;26: {high,mid,low}<='h030;27: {high,mid,low}<='h050;28: {high,mid,low}<='h030;29: {high,mid,low}<='h020;30: {high,mid,low}<='h030;31: {high,mid,low}<='h010;32: {high,mid,low}<='h010;33: {high,mid,low}<='h060;34: {high,mid,low}<='h060;35: {high,mid,low}<='h050;36: {high,mid,low}<='h050;37: {high,mid,low}<='h060;38: {high,mid,low}<='h060;39: {high,mid,low}<='h050;40: {high,mid,low}<='h030;41: {high,mid,low}<='h030;42: {high,mid,low}<='h060;43: {high,mid,low}<='h060;44: {high,mid,low}<='h050;45: {high,mid,low}<='h050;46: {high,mid,low}<='h030;47: {high,mid,low}<='h020;48: {high,mid,low}<='h010;49: {high,mid,low}<='h010; endcaseendled_7s u1(high,high_7s); //高音音符显示led_7s u2(mid,mid_7s); //中音音符显示led_7s u3(low,low_7s); //低音音符显示led_7s u4(tone,tone_7s); //键盘输入音调显示endmodulemodule led_7s(datain,ledout); //7段数码管译码显示模块input [3:0] datain;output reg[6:0] ledout;alwaysbegincase(datain)0:ledout<=~(7'b1000000);1:ledout<=~(7'b1111001);2:ledout<=~(7'b0100100);3:ledout<=~(7'b0110000);4:ledout<=~(7'b0011001);5:ledout<=~(7'b0010010);6:ledout<=~(7'b0000010);7:ledout<=~(7'b1111000);8:ledout<=~(7'b0000000);9:ledout<=~(7'b0010000);default:ledout<=~(7'b1000000);endcaseendendmoduleUcf文件代码:NET "clk" LOC = K19;NET "speaker" LOC = F16; //in yonghushouce page 39NET "rst_n" LOC = K20;NET "tone_7s<0>" LOC = A16;NET "tone_7s<1>" LOC = C17; //the board have 4 shumaguan,zhe shi shu ma guan de 8 ge duanNET "tone_7s<2>" LOC = A17;NET "tone_7s<3>" LOC = V11;NET "tone_7s<4>" LOC = W11;NET "tone_7s<5>" LOC = D7;NET "tone_7s<6>" LOC = D8;NET "key<0>" LOC = C6;NET "key<1>" LOC = D6;NET "key<2>" LOC = A5;NET "key<3>" LOC = B6;NET "key<4>" LOC = A6;NET "key<5>" LOC = C7;NET "key<6>" LOC = A7;NET "key<7>" LOC = B8;NET "Led<0>" LOC = A8;NET "Led<1>" LOC = C9;NET "Led<2>" LOC = A9;NET "Led<3>" LOC = C11;NET "Led<4>" LOC = A11;NET "Led<5>" LOC = B12;NET "Led<6>" LOC = A12;NET "Led<7>" LOC = C13;NET "auto" LOC = A15;NET "LED_AN<0>" LOC = D11;NET "LED_AN<1>" LOC = C10;NET "LED_AN<2>" LOC = D10;NET "LED_AN<3>" LOC = C8;三、硬件测试:红色飓风开发板上电,并把verilog程序载入开发板上,通过人为按顺序按下按键,可以听到较为准确的do,re,mi,fa,sol,la,si七个音,此时数码管按顺序显示1~7。

相关主题