国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

EDA數(shù)字鐘

這篇具有很好參考價(jià)值的文章主要介紹了EDA數(shù)字鐘。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

Verilog、Xilinx ISE 13.4、BASYS2、EDA、數(shù)字鐘

一、設(shè)計(jì)內(nèi)容

利用實(shí)驗(yàn)板設(shè)計(jì)實(shí)現(xiàn)一個能顯示時(shí)分秒的多功能電子鐘。
1.具有“秒”、“分”、“時(shí)”計(jì)時(shí)的功能,小時(shí)計(jì)數(shù)器按24小時(shí)制;
2.具有校時(shí)功能,能對“分”和“時(shí)”進(jìn)行調(diào)整;
3.具有手動輸入設(shè)置定時(shí)鬧鐘的功能,亮1分鐘;
4.可實(shí)現(xiàn)時(shí)鐘復(fù)位功能:00:00:00;
5.報(bào)整點(diǎn):幾點(diǎn)亮幾下。

二、模塊結(jié)構(gòu)

EDA數(shù)字鐘

三、代碼編寫

1.頂層模塊_module top

頂層模塊包含:
分頻模塊:獲得1HZ脈沖,供計(jì)時(shí)模塊使用;
校時(shí)模塊:對時(shí)分、分秒、鬧鐘置數(shù);
計(jì)時(shí)模塊:含時(shí)、分、秒三個子模塊,用于計(jì)時(shí);
鬧鐘模塊:用于整點(diǎn)報(bào)時(shí)和定時(shí)鬧鐘;
取數(shù)模塊:決定當(dāng)前顯示的內(nèi)容(4位),并送到掃描模塊;
掃描模塊:將取到的數(shù)分成4份(1位),分時(shí)送到譯碼模塊;
譯碼模塊:將數(shù)字轉(zhuǎn)化為數(shù)碼管引腳電平,并判斷是否顯示小數(shù)點(diǎn)。

//頂層模塊
module top(
	input cp,//20ns脈沖
	input reset,//復(fù)位按鍵BTN0
	input set,//置數(shù)按鍵BTN1
	input apply,//移位按鍵BTN2
	input inc,//增加按鍵BTN3
	input set_enable,//校時(shí)撥碼SW7
	input alarm_enable,//鬧鐘撥碼SW6	
	input hour_show,//時(shí)分顯示撥碼SW5
	input sec_show,//分秒顯示撥碼SW4
	input count_enable,//計(jì)時(shí)撥碼SW3
	output [3:0] loc,//數(shù)碼管位置
	output [7:0] pin,//數(shù)碼管引腳電平
	output hour_alarm,//整點(diǎn)報(bào)時(shí)LD2	
	output alarm,//鬧鐘LD1
	output sec//秒針LD0
    );
	wire [23:0] counter_num;//當(dāng)前時(shí)間
	wire [15:0] set_num;//校時(shí)時(shí)間
	wire [15:0] alarm_num;//鬧鐘時(shí)間
	wire [15:0] show_num;//顯示內(nèi)容
	wire [3:0] scan_num;//譯碼內(nèi)容
	wire [3:0] set_loc;//置數(shù)位置
	//分頻模塊
	Clock P13(
	.cp(cp),
	.clock(clock)
	);
	//校時(shí)模塊
	Seter P14(
	.enable(set_enable),
	.inc(inc),
	.apply(apply),
	.set_num(set_num),
	.set_loc(set_loc)
	);
	//計(jì)時(shí)模塊
	Counter P1(
	.cp(clock),
	.enable(count_enable),
	.reset(reset),
	.set(set && !alarm_enable && !set_enable),
	.set_num(set_num),
	.sec_show(sec_show),
	.hour_show(hour_show),
	.counter_num(counter_num),
	.hour(hour),
	.sec(sec)
	);
	//鬧鐘模塊
	Alarm P19(
	.cp(clock),
	.enable(alarm_enable),
	.set(set && !set_enable),
	.set_num(set_num),
	.hour(hour),
	.counter_num(counter_num),
	.alarm(alarm),
	.hour_alarm(hour_alarm),
	.alarm_num(alarm_num)
	);
	//取數(shù)模塊
	Select P20(
	.cp(cp),
	.counter_num(counter_num),
	.set_num(set_num),
	.alarm_num(alarm_num),
	.set_enable(set_enable),
	.alarm_enable(alarm_enable),
	.hour_show(hour_show),
	.sec_show(sec_show),
	.show_num(show_num)
	);
	//掃描模塊
	Scan P5(
	.cp(cp),
	.set_enable(set_enable),	
	.num(show_num),
	.loc(loc),
	.set_loc(set_loc),
	.point(point),
	.scan_num(scan_num)
	);
	//譯碼模塊
	Trans P6(
	.scan_num(scan_num),
	.point(point),
	.pin(pin)
	);
endmodule

2. 分頻模塊_module Clock

將20ns的電路板脈沖50000000分頻,輸出1s的脈沖,作為計(jì)時(shí)cp。

//分頻模塊
module Clock(
	input cp,
	output clock
	);
	parameter i = 25000000;//下載(計(jì)時(shí)頻率1Hz)
	//parameter i = 5;//調(diào)試程序
	reg [31:0] counter = 0;
	reg clock_temp = 0;
	always @(posedge cp)//上升沿觸發(fā)
		begin
			if (counter >= i-1)
			begin
				counter = 0;
				clock_temp = ~clock_temp;//取反
			end
			else
				counter = counter+1;
		end
		assign clock = clock_temp;
endmodule

3. 校時(shí)功能模塊_module Seter

校時(shí)模塊由4個n進(jìn)制計(jì)數(shù)器(n=10)子模塊組成,set_loc用于記錄操作哪一位計(jì)數(shù)器,set_num用于記錄校時(shí)的值。在enable撥碼為1時(shí),apply按鍵每按下一次,指針向右移一位;inc按鍵每按下一次,當(dāng)前計(jì)數(shù)器獲得一個cp,即值加1。在enable撥碼為0時(shí),該模塊不起作用。

//校時(shí)功能模塊
module Seter(
	input enable,
	input inc,
	input apply,
	output [15:0] set_num,
	output [3:0] set_loc
	);
	//中間變量
	reg [3:0] set_loc_temp = 4'b1000;//修改的位
	always @(posedge apply)
	begin
		if (enable)
		begin
			set_loc_temp[0] <= set_loc_temp[1];
			set_loc_temp[1] <= set_loc_temp[2];
			set_loc_temp[2] <= set_loc_temp[3];
			set_loc_temp[3] <= set_loc_temp[0];//移位
		end
	end
	Count_n P15(
	.cp(set_loc_temp[0] && enable && inc),
	.reset(0),
	.set(0),
	.set_num(0),
	.n(10),//十進(jìn)制
	.countn_num(set_num[3:0]),
	.countn_co()//輸出懸空
	);
	Count_n P16(
	.cp(set_loc_temp[1] && enable && inc),
	.reset(0),
	.set(0),
	.set_num(0),
	.n(10),
	.countn_num(set_num[7:4]),
	.countn_co()
	);
	Count_n P17(
	.cp(set_loc_temp[2] && enable && inc),
	.reset(0),
	.set(0),
	.set_num(0),
	.n(10),
	.countn_num(set_num[11:8]),
	.countn_co()
	);
	Count_n P18(
	.cp(set_loc_temp[3] && enable && inc),
	.reset(0),
	.set(0),
	.set_num(0),
	.n(10),
	.countn_num(set_num[15:12]),
	.countn_co()
	);
	assign set_loc = set_loc_temp;
endmodule

4. n進(jìn)制計(jì)數(shù)器模塊_module Count_n

計(jì)數(shù)器的進(jìn)制n與計(jì)數(shù)脈沖cp由輸入給定,輸出當(dāng)前計(jì)數(shù)值和進(jìn)位。具有清零和置數(shù)的功能。

//n進(jìn)制計(jì)數(shù)器模塊
module Count_n(
	input cp,
	input reset,
	input set,
	input [3:0] set_num,//置數(shù)值
	input [3:0] n,//進(jìn)制
	output [3:0] countn_num,//計(jì)數(shù)值
	output countn_co//進(jìn)位
	);
	//中間變量
	reg [3:0] counter = 0;
	reg countn_co_temp = 0;
	always @(posedge cp, posedge reset, posedge set)
	begin
		//計(jì)數(shù)
		if (reset)//高電平清零
		begin
			counter = 0;
			countn_co_temp = 0;		
		end
		else 
		begin
			if (set)//高電平置數(shù)
			begin
			if (set_num < n)
				begin
					counter = set_num;
					countn_co_temp = 0;
				end
			end
			else
			begin		
				counter = counter+1;//阻塞賦值,順序執(zhí)行	
				if (counter >= n)
				begin
					counter = 0;	
					countn_co_temp = 1;
				end
				else
					countn_co_temp = 0;	
			end
		end
	end
	assign countn_num = counter;
	assign countn_co = countn_co_temp;
endmodule

5. 計(jì)時(shí)功能模塊_module Counter

計(jì)時(shí)功能模塊含秒、分、時(shí)三個子模塊,串行連接,秒針cp由分頻模塊給出,分針cp由秒進(jìn)位給出,時(shí)針cp由分針進(jìn)位給出。輸出當(dāng)前時(shí)間、秒針LED電平、分針進(jìn)位(供鬧鐘整點(diǎn)報(bào)時(shí)使用)。具有清零和置數(shù)功能。
計(jì)時(shí)功能:當(dāng)enable撥碼為1時(shí),將cp給秒針模塊;否則不進(jìn)行計(jì)數(shù)。
清零功能:reset按鍵按下,時(shí)分秒全部清零。
置數(shù)功能:當(dāng)sec_show(顯示分秒)或hour_show(顯示時(shí)分)撥碼為1時(shí),set按鍵按下,將置數(shù)值賦給分秒/時(shí)分;否則置數(shù)功能不起作用。

//計(jì)時(shí)功能模塊
module Counter(
	input cp,
	input reset,
	input enable,
	input set,
	input [15:0] set_num,//置數(shù)值
	input sec_show,//顯示分秒
	input hour_show,//顯示時(shí)分
	output [23:0] counter_num,//當(dāng)前時(shí)間
	output hour,//分針進(jìn)位
	output sec//秒針LED
	);
	//中間變量
	wire co_sec;//秒進(jìn)位
	wire co_min;//分進(jìn)位
	wire [7:0]sec_num;//秒
	wire [7:0]min_num;//分
	wire [7:0]hour_num;//時(shí)
	wire sec_temp;
	reg [23:0] set_num_temp = 0;
	reg [2:0] set_temp = 0;
	//置數(shù)判斷
	always @(set)
	begin
		if (set)
		begin
			if (hour_show)
			begin
				set_num_temp[23:8] = set_num;
				set_temp = 3'b110;
			end
			else
				if (sec_show)
				begin
					set_num_temp[15:0] = set_num;
					set_temp = 3'b011;
				end
		end
		else
			set_temp = 0;
	end
	//秒針		
	Sec_counter P2(
	.cp(cp),
	.reset(reset),
	.set(set_temp[0]),
	.set_num(set_num_temp[7:0]),
	.enable(enable),
	.sec_num(sec_num),
	.co_sec(co_sec),
	.sec(sec_temp)
	);
	assign sec = sec_temp;
	//分針
	Min_counter P3(
	.cp(co_sec),
	.reset(reset),
	.set(set_temp[1]),
	.set_num(set_num_temp[15:8]),
	.co_min(co_min),
	.min_num(min_num)
	);
	//時(shí)針
	Hour_counter P4(
	.cp(co_min),
	.reset(reset),
	.set(set_temp[2]),
	.set_num(set_num_temp[23:16]),
	.hour_num(hour_num)
	);
	assign hour = co_min;
	assign counter_num[23:16] = hour_num;
	assign counter_num[15:8] = min_num;
	assign counter_num[7:0] = sec_num;
endmodule

6. 秒針模塊_module Sec_counter

秒針模塊包含兩個n進(jìn)制計(jì)數(shù)器子模塊(個位n=10,十位n=6),串行連接,個位進(jìn)位接到十位cp上。cp、set、reset、置數(shù)值由父模塊給定。輸出秒LED電平、秒針數(shù)值、秒針進(jìn)位。由于當(dāng)計(jì)數(shù)使能為0時(shí),計(jì)數(shù)停止,秒LED應(yīng)不再閃爍,因此LED電平不能由分頻模塊直接提供。

//秒針模塊
module Sec_counter (
	input cp,
	input reset,
	input set,
	input [7:0] set_num,
	input enable,
	output [7:0] sec_num,//秒針數(shù)值
	output co_sec,//進(jìn)位
	output sec//秒LED
	);
	//中間變量
	wire [1:0] co_sec_temp;
	wire enable_h;
	wire [7:0] sec_num_temp;
	reg sec_temp = 0;
	//10進(jìn)制計(jì)數(shù)器計(jì)個位
	Count_n P7(
	.cp(cp && enable),
	.reset(reset),
	.set(set),
	.set_num(set_num[3:0]),
	.n(10),
	.countn_num(sec_num_temp[3:0]),
	.countn_co(co_sec_temp[0])
	);
	//6進(jìn)制計(jì)數(shù)器計(jì)十位
	assign enable_h = co_sec_temp[0];
	Count_n P8(
	.cp(enable_h),
	.reset(reset),
	.set(set),
	.set_num(set_num[7:4]),
	.n(6),
	.countn_num(sec_num_temp[7:4]),
	.countn_co(co_sec_temp[1])
	);
	assign co_sec = co_sec_temp[1];
	//采取秒針LED電平
	always @(sec_num_temp)
	begin
		if (sec_num_temp[0])
			sec_temp = 1;
		else
			sec_temp = 0;
	end
	assign sec = sec_temp;
	assign sec_num = sec_num_temp;
endmodule

7. 分針模塊_module Min_counter

原理同秒針模塊,不再贅述。

//分針模塊
module Min_counter(
	input cp,
	input reset,	
	input set,
	input [7:0] set_num,
	output co_min,
	output [7:0] min_num
	);
	//中間變量
	wire [1:0] co_min_temp;
	wire [7:0] min_num_temp;
	wire enable_h;
	//10進(jìn)制計(jì)數(shù)器計(jì)個位
	Count_n P9(
	.cp(cp),
	.reset(reset),
	.set(set),
	.set_num(set_num[3:0]),
	.n(10),
	.countn_num(min_num_temp[3:0]),
	.countn_co(co_min_temp[0])
	);
	//6進(jìn)制計(jì)數(shù)器計(jì)十位
	assign enable_h = co_min_temp[0];
	Count_n P10(
	.cp(enable_h),
	.reset(reset),
	.set(set),
	.set_num(set_num[7:4]),
	.n(6),
	.countn_num(min_num_temp[7:4]),
	.countn_co(co_min_temp[1])
	);
	assign min_num = min_num_temp;
	assign co_min = co_min_temp[1];
endmodule

8. 時(shí)針模塊_module Hour_counter

十位為3進(jìn)制,個位進(jìn)制由十位數(shù)值決定,當(dāng)十位為0或1時(shí),個位為10進(jìn)制;當(dāng)十位為2時(shí),個位為4進(jìn)制。其余原理同分、秒模塊。

//時(shí)針模塊
module Hour_counter(
	input cp,
	input reset,
	input set,
	input [7:0] set_num,
	output [7:0] hour_num
	);
	//中間變量
	wire [1:0] co_hour_temp;
	wire [7:0] hour_num_temp;
	reg [3:0] n_low = 10;
	wire enable_h;
	//10-4進(jìn)制計(jì)數(shù)器計(jì)個位
	Count_n P11(
	.cp(cp),
	.reset(reset),
	.set(set),
	.set_num(set_num[3:0]),
	.n(n_low),
	.countn_num(hour_num_temp[3:0]),
	.countn_co(co_hour_temp[0])
	);
	assign enable_h = co_hour_temp[0];
	//3進(jìn)制計(jì)數(shù)器計(jì)十位
	Count_n P12(
	.cp(enable_h),
	.reset(reset),
	.set(set),
	.set_num(set_num[7:4]),
	.n(3),
	.countn_num(hour_num_temp[7:4]),
	.countn_co(co_hour_temp[1])
	);
	//控制個位進(jìn)制
	always @(hour_num_temp[7:4])
		begin
			case(hour_num_temp[7:4])
				2:	n_low = 4;		
				default: n_low = 10;
			endcase	
		end
	assign hour_num = hour_num_temp;
endmodule

9. 鬧鐘功能模塊_module Alarm

鬧鐘模塊有整點(diǎn)報(bào)時(shí)和定時(shí)鬧鐘兩個功能:
整點(diǎn)報(bào)時(shí):當(dāng)產(chǎn)生分進(jìn)位信號時(shí),根據(jù)當(dāng)前時(shí)針數(shù)值(由計(jì)時(shí)模塊給定)決定LED閃爍次數(shù),(閃爍頻率由分頻模塊給定)。
定時(shí)鬧鐘: 置數(shù)方式與計(jì)時(shí)模塊相似,當(dāng)alarm_show(顯示鬧鐘)撥碼為1時(shí),set按鍵按下,將置數(shù)值賦給鬧鐘;否則置數(shù)功能不起作用。當(dāng)前時(shí)間與鬧鐘數(shù)值相同時(shí),鬧鐘LED常亮一分鐘。

//鬧鐘功能模塊
module Alarm(
	input cp,
	input enable,
	input set,
	input [15:0] set_num,
	input hour,//進(jìn)位信號
	input [23:0] counter_num,
	output alarm,//定時(shí)鬧鐘
	output hour_alarm,//整點(diǎn)報(bào)時(shí)
	output [15:0] alarm_num//鬧鐘時(shí)間
	);
	//中間變量
	reg [7:0] hour_num = 0;//時(shí)針時(shí)間
	reg [15:0] alarm_num_temp = 0;
	reg hour_alarm_temp = 0;
	reg alarm_temp = 0;
	reg switch = 1;//控制閃爍
	always @(posedge cp)
	begin
		//整點(diǎn)報(bào)時(shí)
		if (hour && (counter_num[15:0] == 0))//裝入初值,不斷減一,直到為0
			hour_num = counter_num[23:20]*10 + counter_num[19:16];
		else
		begin
			if (hour_num > 0)
			begin
				if (switch)
				begin
					hour_num = hour_num - 1;
					hour_alarm_temp = 1;
					switch = ~switch;
				end
				else 
				begin
					hour_alarm_temp = 0;
					switch = ~switch;
				end
			end
			else
				hour_alarm_temp = 0;
		end
		//定時(shí)鬧鐘
		if (alarm_num == counter_num[23:8])
			alarm_temp = 1;
		else
			alarm_temp = 0;			
	end
	assign hour_alarm = hour_alarm_temp;
	assign alarm = alarm_temp;
	//定時(shí)
	always @(posedge set)
	begin
		if (enable)
			alarm_num_temp = set_num;
	end
	assign alarm_num = alarm_num_temp;
endmodule

10. 取數(shù)模塊_module Select

按優(yōu)先級排列如下:
當(dāng)set_enable(置數(shù)使能)撥碼為1時(shí),輸出置數(shù)內(nèi)容;
當(dāng)alarm_enable(顯示鬧鐘)撥碼為1時(shí),輸出鬧鐘內(nèi)容;
當(dāng)hour_show(顯示時(shí)分)撥碼為1時(shí),輸出時(shí)分內(nèi)容;
當(dāng)sec_show(顯示分秒)撥碼為1時(shí),輸出分秒內(nèi)容。

//取數(shù)模塊
module Select(
	input cp,
	input [23:0] counter_num,
	input [15:0] set_num,
	input [15:0] alarm_num,
	input set_enable,
	input alarm_enable,
	input hour_show,
	input sec_show,
	output [15:0] show_num
    );
	reg [15:0] show_num_temp = 0;
	always @(posedge cp)
		begin
			if(set_enable)
				show_num_temp <= set_num;
			else if (alarm_enable)
				show_num_temp <= alarm_num;
			else if (hour_show)
				show_num_temp <= counter_num[23:8];
			else if (sec_show)
				show_num_temp <= counter_num[15:0];			
			else			
				show_num_temp <= 0;
		end
		assign show_num = show_num_temp;
endmodule

11. 掃描模塊_module Scan

將取數(shù)模塊輸出值分時(shí)送到譯碼模塊。掃描頻率的計(jì)算方法與模六十計(jì)數(shù)器相同,但由于是對4個數(shù)碼管進(jìn)行動態(tài)顯示,分頻數(shù)應(yīng)是模六十計(jì)數(shù)器的一半,即2的18次方。

//掃描模塊
module Scan(
	input cp,
	input [15:0] num,
	input set_enable,	
	input [3:0] set_loc,
	output [3:0] loc,
	output [3:0] scan_num,
	output point
	);
	//中間變量
	parameter j = 18;//控制掃描速率,仿真時(shí)取1;下載時(shí)取18(掃描頻率100Hz)
	reg [33:0] scan_counter = 0;
	reg [3:0] loc_temp = 4'b1111;
	reg [3:0] scan_num_temp = 0;
	reg point_temp = 1;
	wire [15:0] num_temp;
	assign num_temp = num;
	always @(posedge cp)//上升沿觸發(fā)
	begin
			scan_counter <= scan_counter+1;
	end
	always @(scan_counter[j])
	begin
		case(scan_counter[j+1:j])
			2'b00:
				begin
					loc_temp <= 4'b1110;
					scan_num_temp <= num_temp[3:0];
					point_temp <= set_loc[0];
				end
			2'b01:
				begin
					loc_temp <= 4'b1101;
					scan_num_temp <= num_temp[7:4];
					point_temp <= set_loc[1];
				end
			2'b10:
				begin
					loc_temp <= 4'b1011;
					scan_num_temp <= num_temp[11:8];
					point_temp <= set_loc[2];
				end			
			2'b11:
				begin
					loc_temp <= 4'b0111;
					scan_num_temp <= num_temp[15:12];
					point_temp <= set_loc[3];
				end
		endcase
		if (set_enable == 0)
			point_temp <= 0;
	end
	assign loc = loc_temp;
	assign point = point_temp;
	assign scan_num = scan_num_temp;
endmodule

12. 譯碼模塊_module Trans

將掃描模塊輸入的數(shù)字轉(zhuǎn)化成對應(yīng)的數(shù)碼管電平輸出,與模六十計(jì)數(shù)器相同。但由于置數(shù)時(shí)需要用小數(shù)點(diǎn)來顯示設(shè)置的位置,當(dāng)set_enable(置數(shù)使能)撥碼為1時(shí),根據(jù)置數(shù)位置來確定是否顯示小數(shù)點(diǎn);當(dāng)set_enable(置數(shù)使能)撥碼為0時(shí),不顯示小數(shù)點(diǎn)。

//譯碼模塊
module Trans(
	input [3:0] scan_num,
	input point,
	output [7:0] pin
	);
	//中間變量
	wire [3:0] scan_num_temp;
	assign scan_num_temp = scan_num;
	reg [7:0] pin_temp;
	always @(scan_num_temp, point)
	begin
		case(scan_num_temp)
			0: pin_temp[7:1] = 7'b0000001;
			1: pin_temp[7:1] = 7'b1001111;
			2: pin_temp[7:1] = 7'b0010010;
			3: pin_temp[7:1] = 7'b0000110;
			4: pin_temp[7:1] = 7'b1001100;
			5: pin_temp[7:1] = 7'b0100100;
			6: pin_temp[7:1] = 7'b0100000;
			7: pin_temp[7:1] = 7'b0001111;
			8: pin_temp[7:1] = 7'b0000000;
			9: pin_temp[7:1] = 7'b0000100;
			default: pin_temp = 7'b0110000;//其他狀態(tài)顯示E
		endcase
			pin_temp[0] = !point;
	end
	assign pin = pin_temp;
endmodule

四、測試文件

	仿真代碼如下:
module Test_Top;
	// Inputs
	reg cp;
	reg reset;
	reg set;
	reg apply;
	reg inc;
	reg set_enable;
	reg alarm_enable;
	reg hour_show;
	reg sec_show;
	reg count_enable;

	// Outputs
	wire [3:0] loc;
	wire [7:0] pin;
	wire alarm;
	wire hour_alarm;
	wire sec;

	// Instantiate the Unit Under Test (UUT)
	top uut (
		.cp(cp), 
		.reset(reset), 	
		.set(set), 
		.apply(apply), 
		.inc(inc), 
		.set_enable(set_enable), 
		.alarm_enable(alarm_enable), 
		.hour_show(hour_show), 
		.sec_show(sec_show),
		.count_enable(count_enable),
		.loc(loc),
		.pin(pin),
		.alarm(alarm),
		.hour_alarm(hour_alarm),
		.sec(sec)
	);
	
	//時(shí)鐘周期20ns
	parameter PERIOD = 20;
	
	//時(shí)鐘信號
	always begin
		cp = 1'b0;
		#(PERIOD/2)cp = 1'b1;
		#(PERIOD/2);
	end
		
	initial begin
		// Initialize Inputs
		cp = 0;
		reset = 1;
		set = 0;
		apply = 0;
		inc = 0;
		set_enable = 0;
		alarm_enable = 0;
		hour_show = 0;
		sec_show = 0;
		count_enable = 0;
		
		// Wait 100 ns for global reset to finish
		#100;
 		reset = 0;
		
		// Add stimulus here
//////////////////////////////////////////////使能撥碼測試
		//開始計(jì)數(shù)
		#100;count_enable=1;
		//顯示分秒
		#100;sec_show=1;
		//顯示時(shí)分
		#100;hour_show=1;
		//鬧鐘模式
		#100;alarm_enable=1;
		//置數(shù)模式
		#100;set_enable=1;
//////////////////////////////////////////////鬧鐘置數(shù)測試
		//鬧鐘置數(shù)1200
		#100;inc=1; #20;inc=0;//1
		#100;apply=1; #20;apply=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;//2
		#100;set_enable=0;
		#100;set=1; #20;set=0;
//////////////////////////////////////////////時(shí)鐘置數(shù)測試
		//時(shí)分置數(shù)1100
		set_enable=1;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;//1
		#100;set_enable=0;alarm_enable=0;//1
		#100;set=1; #20;set=0;
		//分秒置數(shù)5949
		set_enable=1;
		#100;apply=1; #20;apply=0; #100;apply=1; #20;apply=0; #100;apply=1; #20;apply=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0;//5
		#100;apply=1; #20;apply = 0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;//9
		#100;apply=1; #20;apply = 0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; //4
		#100;apply=1; #20;apply=0;			
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;//9
		#100;set_enable=0;hour_show=0;
		#100;set=1; #20;set=0;
		#500;
//////////////////////////////////////////////清零測試
		//清零
		#100;reset=1;#20;reset=0;
//////////////////////////////////////////////計(jì)時(shí)使能撥碼測試
		//停止計(jì)時(shí)
		#100;count_enable=0;
//////////////////////////////////////////////進(jìn)位測試
		//分秒置數(shù)5949
		#100;set=1; #20;set=0;
		//時(shí)分置數(shù)2359	
		set_enable=1;
		#100;apply=1; #20;apply=0;//9
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #100;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0;//2
		#100;apply=1; #20;apply=0;
		#100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0; #100;inc=1; #20;inc=0;
		#100;inc=1; #20;inc=0;//3
		#100;apply=1; #20;apply=0;
		#100;inc=1; #20;inc=0;//5
		#100;set=1; #20;set=0;//空置數(shù)(當(dāng)置數(shù)使能為0時(shí),inc按鍵不應(yīng)起作用)
		#100;set_enable=0;	
		#100;sec_show=0; #100;set=1; #20;set=0;//空置數(shù)	
		#100;hour_show=1; #100;set=1; #20;set=0;//時(shí)分置數(shù)
		//恢復(fù)計(jì)時(shí)
		#100;count_enable=1;
	end
endmodule

五、波形仿真

  1. 變量名稱說明
    EDA數(shù)字鐘

cp:電路板脈沖(20ns);
clock:分頻模塊產(chǎn)生脈沖,仿真時(shí)為10分頻;
reset:清零按鍵;
set:置數(shù)按鍵;
inc:加一按鍵,在置數(shù)模式下對選定位加一;
apply:移位按鍵,在置數(shù)模式下改變選定的位置;
set_enable:置數(shù)使能撥碼;
alarm_enable:顯示鬧鐘撥碼;
hour_show:顯示時(shí)分撥碼;
sec_show:顯示分秒撥碼;
count_enable:計(jì)時(shí)使能撥碼;
set_num:置數(shù)內(nèi)容:為觀察方便,采用16進(jìn)制顯示,下同;
alarm_num:鬧鐘時(shí)間;
count_num:計(jì)時(shí)時(shí)間;
show_num:數(shù)碼管顯示內(nèi)容;
loc:掃描位置;
scan_num:掃描數(shù)字,初始值為X,因?yàn)槭侵虚g變量,不會對引腳電平產(chǎn)生影響;
pin:數(shù)碼管引腳電平,最后一位為小數(shù)點(diǎn);
sec:秒LED;
hour_alarm:整點(diǎn)報(bào)時(shí)LED;
alarm:鬧鐘LED。
2. 使能撥碼測試
EDA數(shù)字鐘

初始化時(shí)關(guān)閉所有撥碼,數(shù)碼管顯示0000;逐步打開撥碼,數(shù)碼管顯示對應(yīng)內(nèi)容,如黃線所示,此時(shí)hour_show撥碼打開,顯示時(shí)分,counter_num內(nèi)容為000001,故show_num為0000。
3. 鬧鐘置數(shù)測試
EDA數(shù)字鐘

通過inc和apply按鍵使置數(shù)值達(dá)到1200,關(guān)閉set_enable,此時(shí)alarm_enable優(yōu)先級最高,按下set按鍵,如黃線所示,alarm_num由0000變?yōu)?200。
4. 時(shí)鐘置數(shù)測試
EDA數(shù)字鐘

用同樣的方法,先后使時(shí)鐘的時(shí)分置1100,分秒置5949,如黃線所示。
5. 清零測試
EDA數(shù)字鐘

如黃線所示,reset按下后,counter_num清零。
6. 計(jì)時(shí)使能撥碼測試
EDA數(shù)字鐘

如黃線所示,count_enable撥碼置0后,不再計(jì)數(shù),count_num保持不變。
7. 進(jìn)位測試
EDA數(shù)字鐘

將時(shí)間置到235949,進(jìn)位正常,由235959到000000,如黃線所示。

總結(jié)

從電路角度去想問題
不要像我這么復(fù)雜文章來源地址http://www.zghlxwxcb.cn/news/detail-475179.html

到了這里,關(guān)于EDA數(shù)字鐘的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 年輕人的第一個數(shù)字鐘!適用于FPGA的數(shù)字鐘Verilog實(shí)現(xiàn)

    因?yàn)殚e。 當(dāng)然也不是很閑,初衷是因?yàn)楸究茣r(shí)上過的數(shù)電實(shí)驗(yàn)課最后的大作業(yè)就是在 FPGA 上實(shí)現(xiàn)一個數(shù)字鐘,這個作業(yè)當(dāng)時(shí)困擾了我們班的諸多同學(xué)(難以置信,我們只是學(xué)材料的弱小可憐又無助{{{(_)}}}。最終,大部分同學(xué)在 拷貝一位學(xué)長的代碼 一位學(xué)長的幫助下順利通過

    2024年02月11日
    瀏覽(24)
  • 【verilog】多功能數(shù)字鐘的設(shè)計(jì)

    【verilog】多功能數(shù)字鐘的設(shè)計(jì)

    掌握數(shù)字鐘的工作原理。 掌握計(jì)數(shù)器級聯(lián)構(gòu)成更大模值計(jì)數(shù)器的方法。? 能用verilog描述簡單的時(shí)序邏輯電路。 ????????多功能數(shù)字鐘應(yīng)該具有的基本功能有:顯示時(shí)-分-秒、整點(diǎn)報(bào)時(shí)、小時(shí)和分鐘可調(diào)等。首先要知道鐘表的工作機(jī)理,整個鐘表的工作應(yīng)該是在1Hz信號的

    2024年02月04日
    瀏覽(32)
  • 基于Basys2的數(shù)碼管動態(tài)掃描module(verilog)的模塊化設(shè)計(jì)

    基于Basys2的數(shù)碼管動態(tài)掃描module(verilog)的模塊化設(shè)計(jì)

    ? ? 目錄 一、數(shù)碼管工作原理 ?二、Verilog模塊設(shè)計(jì) 1、原理 (1)動態(tài)掃描的優(yōu)點(diǎn): (2)動態(tài)掃描原理簡介: 2、Verilog模塊的設(shè)計(jì) (1)分頻器: ?2、譯碼器模塊: 3、動態(tài)掃描模塊: 4、頂層模塊: 三、寫在最后: 在大二下學(xué)期學(xué)習(xí)《Verilog與FPGA實(shí)現(xiàn)》的時(shí)候鯤鯤給我們布

    2024年02月09日
    瀏覽(18)
  • 實(shí)驗(yàn) 7 數(shù)字鐘設(shè)計(jì)

    實(shí)驗(yàn) 7 數(shù)字鐘設(shè)計(jì)

    7.1 實(shí) 驗(yàn) 目 的 設(shè)計(jì)一個具有時(shí)功能和校的數(shù)字鐘。 7.2 實(shí) 驗(yàn) 儀 器 與 器 材 1. EDA 開發(fā)軟件 一 套 2.微機(jī) 一 臺 3.實(shí)驗(yàn)開發(fā)系統(tǒng) 一 臺 4.打印機(jī) 一 臺 5.其他器件與材料 若 干 7.3 實(shí) 驗(yàn) 說 明 用 數(shù)碼管顯示小時(shí) 、 分 鐘 和 秒鐘。 三 個 按鍵用于時(shí)鐘校準(zhǔn)。 K1 用 與切換

    2024年01月22日
    瀏覽(21)
  • 自動報(bào)時(shí)數(shù)字鐘

    設(shè)計(jì)任務(wù)和要求: 1、用數(shù)字顯示時(shí)、分、秒。12小時(shí)循環(huán)一次。 2、可以在任意時(shí)刻校準(zhǔn)時(shí)間,只用幾只按鈕開關(guān)實(shí)現(xiàn),切求可靠方便。 3、能以蜂鳴器自動正點(diǎn)報(bào)時(shí),在進(jìn)時(shí)來到后或來到前,進(jìn)行整點(diǎn)報(bào)時(shí)。 設(shè)計(jì)要求分析: ?? ? ?根據(jù)設(shè)計(jì)任務(wù)與要求,可初步將系統(tǒng)分為

    2024年02月08日
    瀏覽(43)
  • 【數(shù)字鐘實(shí)驗(yàn)1】logisim

    【數(shù)字鐘實(shí)驗(yàn)1】logisim

    數(shù)字邏輯大作業(yè)1.0,用logisim畫數(shù)字鐘(經(jīng)典實(shí)驗(yàn)了屬于是??) 開始做實(shí)驗(yàn)的時(shí)候也才剛剛學(xué)完時(shí)序邏輯那一章,計(jì)數(shù)器提都沒提過(笑死我懷疑老師是特意這么安排的),而且logisim完全不會用,隧道什么的根本不懂【這也就導(dǎo)致了我后面沒有力氣做外觀封裝了,累了???♀?

    2024年02月11日
    瀏覽(20)
  • 數(shù)字系統(tǒng)設(shè)計(jì)(FPGA)課程設(shè)計(jì): 多功能數(shù)字鐘

    數(shù)字系統(tǒng)設(shè)計(jì)(FPGA)課程設(shè)計(jì): 多功能數(shù)字鐘

    一、目的: 實(shí)現(xiàn)多功能數(shù)字鐘,具備下列功能: 1、數(shù)字鐘:能計(jì)時(shí),實(shí)現(xiàn)小時(shí)、分鐘、秒的顯示; 2、數(shù)字跑表:精度至0.01秒 比如顯示12.97秒; 3、鬧鐘: 可以設(shè)定鬧鐘,用試驗(yàn)箱上的蜂鳴器作為鬧鈴; 4、調(diào)時(shí):可以對時(shí)間進(jìn)行設(shè)定; 5、日期設(shè)定:能設(shè)定日期并顯示當(dāng)前

    2023年04月18日
    瀏覽(28)
  • 電子設(shè)計(jì)數(shù)字鐘,multisim仿真·

    電子設(shè)計(jì)數(shù)字鐘,multisim仿真·

    設(shè)計(jì)步驟(分模塊敘述,并附上各模塊與總體電路圖) 1.計(jì)時(shí)模塊,顯示模塊,調(diào)時(shí)模塊設(shè)計(jì) 計(jì)數(shù)器模塊由七片74LS160的芯片組成,兩片為“秒”,兩片為“分”,兩片為“時(shí)”,還有一片作為“星期”,七個數(shù)碼管顯示器用來顯示數(shù)字。‘秒’和‘分’采用60進(jìn)制。通過異步

    2024年02月11日
    瀏覽(26)
  • 基于FPGA的數(shù)字鐘設(shè)計(jì)

    這篇文章通過VHDL代碼實(shí)現(xiàn)數(shù)字鐘的功能,綁定引腳就可以看到實(shí)際的效果。 代碼運(yùn)行成功,就可以實(shí)現(xiàn)了計(jì)時(shí)(年月日/時(shí)分秒)、秒表、倒計(jì)時(shí)、鬧鐘的全部功能。

    2024年02月11日
    瀏覽(22)
  • 【基于51單片機(jī)的數(shù)字鐘】

    掌握單片機(jī) C 語言判斷語句、分支語句以及子程序調(diào)用等編程知識 此程序調(diào)試時(shí)間方式為先暫停再調(diào)時(shí),故有調(diào)秒的功能。 (1) 實(shí)現(xiàn)正確穩(wěn)定地顯示小時(shí)(兩位數(shù))、分鐘(兩位數(shù))、秒鐘(兩位數(shù)),同時(shí)數(shù) 碼管應(yīng)無閃爍問題 (2) 通過按鍵分別實(shí)現(xiàn)時(shí)、分、秒信息的調(diào)整,方便用戶

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包