前言:
本文主要介绍了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) begin f<=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) begin if(~clr2) q2<=0
; //清除检测序列 else if(en) case(q2) 0:if(f==q1[4]) begin q2<=1;m<=0;end else begin q
2<=0;m<=0;end //1 //1 1: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 //1
3:if(f==q1[1]) begin q2<=4;m<=0;end else begin q2<=0;m<=0;end //1 //0 4:if(f==q1
[0]) begin q2<=2;m<=1;end else begin q2<=0;m<=0;end //1 //1 状态转移 default: q2<=0;
endcase end always @(negedge clk1 or negedge clr2) if(!clr2) begin z<=0; s<=0;
endelse if(en) begin z[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;end else clk1=1'b0; end //跑板子,50MHZ-49999999 /* always @(
posedge clk) begin cnt=cnt+1; if(cnt>49999999) begin clk1=1'b1; cnt=0;end else
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

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信