EDA实验(Quartus Ⅱ+fpga) (三)"/>
EDA实验(Quartus Ⅱ+fpga) (三)
前言:
本文主要介绍了EDA原理与应用这门课程的相关实验及代码。使用的软件是Quartus Ⅱ,该实验使用fpga芯片为cycloneⅤ 5CSEMA5F31C6。
(一)实验目的
掌握序列发生和检测的工作原理;
掌握时序电路中状态机的应用;
掌握用Verilog语言实现复杂时序电路的设计过程。
(二)实验要求
设计序列发生和检测器:
(1)先实现串行序列发生器的设计,产生序列0111010011011010;再设计检测器,若检测到串行序列11010则输出为“1”,否则输出为“0”,并对其进行仿真和硬件测试,选择实验电路验证功能;
(2)下载程序后,可通过一个led灯串行输出序列信号,另用五个led灯来观测待检测序列,当11010五个全部出现在led上时,标识位灯M亮起,说明检测到“11010” 的信号,即符合设计要求。
产生的序列和检测的序列值可任选。
发生器和检测器最好异步,以确保能检测到,可以将时钟经非门后再接入检测器。
(三)实验代码
①先设计产生序列的模块
module v2(clk1,clr1,en,ld,f); input clk1,clr1,ld,en; //ld-赋值序列给信号,高电平启用output reg f; //输出序列reg[15:0] wo;parameter [15:0]xulie=16'b0111010011011011;//要产生的序列always @(posedge clk1 ,negedge clr1)if(~clr1) beginf<=0; //清产生序列wo<=xulie;endelse if(ld) wo<=xulie; //赋值序列给信号else if(en)begin wo[0]<=wo[15]; f<=wo[15]; //f-15即第一个wo[15:1]<=wo[14:0];//并行转串行--右移一位end
endmodule
②再接着设计检测序列模块
module v3(clk1,clr2,en,f,m,s);input clk1,clr2,en;input f; //当前序列输出output m; //指示灯output [4:0] s;reg m;parameter [4:0] q1=5'b11011;//b11010; //要检测的序列reg[2:0] q2;reg[4:0] z,s;always @(negedge clk1 ,negedge clr2)beginif(~clr2) q2<=0; //清除检测序列else if(en)case(q2)0:if(f==q1[4]) begin q2<=1;m<=0;end else begin q2<=0;m<=0;end //1 //11:if(f==q1[3]) begin q2<=2;m<=0;end else begin q2<=0;m<=0;end //1 //12:if(f==q1[2]) begin q2<=3;m<=0;end else begin q2<=2;m<=0;end //0 //13:if(f==q1[1]) begin q2<=4;m<=0;endelse begin q2<=0;m<=0;end //1 //04:if(f==q1[0]) begin q2<=2;m<=1;end else begin q2<=0;m<=0;end //1 //1 状态转移default: q2<=0;endcaseendalways @(negedge clk1 or negedge clr2)if(!clr2) beginz<=0;s<=0;endelse if(en)beginz[4:1]=z[3:0];z[0]=f;s<=z; //转换为并行输出end
endmodule
最后设计顶层模块调用这两个模块
module v(clk,clr,ld,en,m,s,f);input clk,clr,ld;input en;output m,f;//reg clk1; //分频时钟,慢时钟,跑仿真时注释掉,但是导入到板子就把注释去掉,下面遇到clk_1s都做如此处理reg [30:0]cnt; //计数output [4:0] s;//分频器//仿真always @(posedge clk)begin cnt=cnt+1;if(cnt>1) begin clk1=1'b1; cnt=0;endelse clk1=1'b0;end//跑板子,50MHZ-49999999/*always @(posedge clk)begin cnt=cnt+1;if(cnt>49999999) begin clk1=1'b1; cnt=0;endelse clk1=1'b0;end*/v2 U1(.clk1(clk1), .clr1(clr),.en(en),.ld(ld), .f(f)); // module v2(clk1,clr1,ld,f);v3 U2(.clk1(clk1), .clr2(clr),.en(en),.f(f), .m(m), .s(s)); // module v3(clk1,clr2,f,m,s);endmodule
(四)管脚分配
Input
clk1 AF14 clr2 AC12 en AB12 f AF9
Output
m Y21 s led4-0
更多推荐
EDA实验(Quartus Ⅱ+fpga) (三)
发布评论