ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EDA实验(Quartus Ⅱ+fpga) (二)---时序电路的设计-模可变计数器设计

2022-01-23 21:01:58  阅读:231  来源: 互联网

标签:count cnt EDA fpga Quartus 数码管 output clk1 reg


前言:
本文主要介绍了EDA原理与应用这门课程的相关实验及代码。使用的软件是Quartus Ⅱ,该实验使用fpga芯片为cycloneⅤ 5CSEMA5F31C6。
(一)实验目的
(1)进一步熟悉EDA开发板和QuartusⅡ软件的使用方法。
(2)学习静态数码管的使用和7段数码显示译码器设计;
(3)掌握时钟在时序电路中的作用;
(4)掌握分频电路的实现方法。
(二)实验要求
设计模可变计数器,可任选模的大小(例模15、模115),实验要求:
(1)设置一位控制位M,要求M=0:模X计数;M=1:模Y计数;
(2)计数结果用3位数码管显示,显示BCD码;
(3)给出此项设计的仿真波形;
(4)选择实验电路验证此计数器的功能。
设置涉及2个开关和一个按键,一个开关控制改变模值,另一开关作为使能控制,按键作为异步清0。
(三)实验程序

module   CNT(
            input             rst,	  //异步置位-低电平起效
            input             en,     //使能
            input             m,      //模转换
            input             clk,   
            
            output   reg   [6:0]  SG0,      //数码管
            output   reg   [6:0]  SG1,
            output   reg   [6:0]  SG2,
            output   reg   [6:0]  cnt_count,
				output reg led
);

wire  [3:0]    bw;                          //百位
wire  [3:0]    sw;                          //十位
wire  [3:0]    gw;                          //个位

assign   bw = cnt_count / 100;
assign   sw = cnt_count % 100 / 10;
assign   gw  = cnt_count  % 10;

reg [30:0] cnt;
reg clk1;

//分频器
//仿真
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
*/



//计数
always   @(negedge clk1 or negedge  rst) 
	begin
		if(!rst)
			cnt_count <= 7'd0;  
		else if (en) 
			begin 
				if(m) //m=1-120模值
					begin 
						if(cnt_count <7'd120)
							begin
								cnt_count <= cnt_count + 7'd1;
								led<=1'b0;
							end
						else
						begin
							cnt_count <= 7'd0;
							led<=1'b1;
							end
					end
				else  //m=0-20模值
					begin
						 if(cnt_count <7'd20)
						 begin
							cnt_count <= cnt_count + 7'd1;
							led<=1'b0;
							end
						else
							begin
								cnt_count <= 7'd0;    
								led<=1'b1;
							end
					end
			end
	end
//数码管显示
always  @(posedge clk1 or negedge rst) 
	begin
		if(!rst) 
			begin
				SG0 <= 7'b1000000;
				SG1 <= 7'b1000000;
				SG2 <= 7'b1000000;
			end
		else 
			begin
				case (gw)
						0:SG0<=7'b1000000; 1:SG0<=7'b1111001;
						2:SG0<=7'b0100100; 3:SG0<=7'b0110000;
						4:SG0<=7'b0011001; 5:SG0<=7'b0010010;
						6:SG0<=7'b0000010; 7:SG0<=7'b1111000;
						8:SG0<=7'b0000000; 9:SG0<=7'b0010000; 
						default: SG0<=7'b1111111;    
				endcase
				case (sw)
						0:SG1<=7'b1000000; 1:SG1<=7'b1111001;
						2:SG1<=7'b0100100; 3:SG1<=7'b0110000;
						4:SG1<=7'b0011001; 5:SG1<=7'b0010010;
						6:SG1<=7'b0000010; 7:SG1<=7'b1111000;
						8:SG1<=7'b0000000; 9:SG1<=7'b0010000; 
						default: SG1<=7'b1111111;        
				endcase
				case (bw)
						0:SG2<=7'b1000000; 1:SG2<=7'b1111001;
					default : SG2<=7'b1111111;     
				endcase
			end 
	end
endmodule

(四)管脚分配
Input
clk AF14 en AB12-S0
m AF9-S2 rst AC12-S1
Output
cnt_led1 数码管0 cnt_led3 数码管2
cnt_led2 数码管1 led Y21-led9

标签:count,cnt,EDA,fpga,Quartus,数码管,output,clk1,reg
来源: https://blog.csdn.net/fishcanfly233/article/details/122656070

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有