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

北郵22級信通院數(shù)電:Verilog-FPGA(11)第十一周實驗(1)用JK觸發(fā)器實現(xiàn)8421碼十進制計數(shù)器

這篇具有很好參考價值的文章主要介紹了北郵22級信通院數(shù)電:Verilog-FPGA(11)第十一周實驗(1)用JK觸發(fā)器實現(xiàn)8421碼十進制計數(shù)器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

北郵22信通一枚~

跟隨課程進度更新北郵信通院數(shù)字系統(tǒng)設計的筆記、代碼和文章

持續(xù)關注作者 迎接數(shù)電實驗學習~

獲取更多文章,請訪問專欄:

北郵22級信通院數(shù)電實驗_青山如墨雨如畫的博客-CSDN博客

北郵22級信通院數(shù)電:Verilog-FPGA(11)第十一周實驗(1)用JK觸發(fā)器實現(xiàn)8421碼十進制計數(shù)器,北郵22級信通院數(shù)電實驗,fpga開發(fā)

目錄

一.代碼部分

1.1? JK_8421.v

1.2? JK_ff.v

1.3? debounce.v

二.管腳分配

三.實驗效果


一.代碼部分

1.1? JK_8421.v

module JK_8421
(
	input clk,rst,btn,set,
	output [3:0] Q,
	output [8:0] seg_led
);

	reg [8:0] seg [9:0];
	
	debounce debounce_1
	(
		.clk(clk),
		.rst(rst),
		.key(btn),
		.key_pulse(btn_dbs)
	);
	
	JK_ff JK1
	(
		.j(1),
		.k(1),
		.clk(btn_dbs),
		.rst(rst),
		.set(set),
		.q_out(Q[0])
	);
	
	JK_ff JK2
	(
		.j(~Q[3]),
		.k(~Q[3]),
		.clk(Q[0]),
		.rst(rst),
		.set(set),
		.q_out(Q[1])
	);
	
	JK_ff JK3
	(
		.j(1),
		.k(1),
		.clk(Q[1]),
		.rst(rst),
		.set(set),
		.q_out(Q[2])
	);
	
	JK_ff JK4
	(
		.j(Q[2]&Q[1]),
		.k(Q[3]),
		.clk(Q[0]),
		.rst(rst),
		.set(set),
		.q_out(Q[3])
	);
	initial
		begin 
			seg[0] = 9'h3f;
			seg[1] = 9'h06;
			seg[2] = 9'h5b;
			seg[3] = 9'h4f;
			seg[4] = 9'h66;
			seg[5] = 9'h6d;
			seg[6] = 9'h7d;
			seg[7] = 9'h07;
			seg[8] = 9'h7f;
			seg[9] = 9'h6f;
		end	
	assign seg_led = seg[Q];
	
endmodule	
	
	

1.2? JK_ff.v

module JK_ff
(
	input j,k,clk,rst,set,
	output reg q_out
);

	always @ (negedge clk or negedge rst or negedge set)
		begin 
			if(!rst)
				begin q_out <= 0; end
			else if(!set)
				begin q_out <= 1; end 
			else 
				begin 
					case({j,k})
						2'b00:q_out <= q_out;
						2'b01:q_out <= 0;
						2'b10:q_out <= 1;
						2'b11:q_out <= ~q_out;
					endcase
				end
		end
		
endmodule
						

1.3? debounce.v

module debounce (clk,rst,key,key_pulse);
 
        parameter       N  =  1;         //要消除的按鍵的數(shù)量
 
	input             clk;
        input             rst;
        input 	[N-1:0]   key;          //輸入的按鍵					
	output  [N-1:0]   key_pulse;        //按鍵動作產(chǎn)生的脈沖	
 
        reg     [N-1:0]   key_rst_pre;  //定義一個寄存器型變量存儲上一個觸發(fā)時的按鍵值
        reg     [N-1:0]   key_rst;      //定義一個寄存器變量儲存儲當前時刻觸發(fā)的按鍵值
 
        wire    [N-1:0]   key_edge;      //檢測到按鍵由高到低變化是產(chǎn)生一個高脈沖
 
        //利用非阻塞賦值特點,將兩個時鐘觸發(fā)時按鍵狀態(tài)存儲在兩個寄存器變量中
        always @(posedge clk  or  negedge rst)
          begin
             if (!rst) begin
                 key_rst <= {N{1'b1}}; //初始化時給key_rst賦值全為1,{}中表示N個1
                 key_rst_pre <= {N{1'b1}};
             end
             else begin
                 key_rst <= key;       //第一個時鐘上升沿觸發(fā)之后key的值賦給key_rst,
                                       //同時key_rst的值賦給key_rst_pre
                 key_rst_pre <= key_rst;    //非阻塞賦值。
                                            //相當于經(jīng)過兩個時鐘觸發(fā),
                                            //key_rst存儲的是當前時刻key的值,
                                            //key_rst_pre存儲的是前一個時鐘的key的值
             end    
           end
 
        assign  key_edge = key_rst_pre & (~key_rst);//脈沖邊沿檢測。
                                                    //當key檢測到下降沿時,
                                                    //key_edge產(chǎn)生一個時鐘周期的高電平
 
        reg	[17:0]	  cnt;                       //產(chǎn)生延時所用的計數(shù)器,系統(tǒng)時鐘12MHz,
                                                 //要延時20ms左右時間,至少需要18位計數(shù)器     
 
        //產(chǎn)生20ms延時,當檢測到key_edge有效是計數(shù)器清零開始計數(shù)
        always @(posedge clk or negedge rst)
           begin
             if(!rst)
                cnt <= 18'h0;
             else if(key_edge)
                cnt <= 18'h0;
             else
                cnt <= cnt + 1'h1;
             end  
 
        reg     [N-1:0]   key_sec_pre;                //延時后檢測電平寄存器變量
        reg     [N-1:0]   key_sec;                    
 
 
        //延時后檢測key,如果按鍵狀態(tài)變低產(chǎn)生一個時鐘的高脈沖。如果按鍵狀態(tài)是高的話說明按鍵無效
        always @(posedge clk  or  negedge rst)
          begin
             if (!rst) 
                 key_sec <= {N{1'b1}};                
             else if (cnt==18'h3ffff)
                 key_sec <= key;  
          end
       always @(posedge clk  or  negedge rst)
          begin
             if (!rst)
                 key_sec_pre <= {N{1'b1}};
             else                   
                 key_sec_pre <= key_sec;             
         end      
       assign  key_pulse = key_sec_pre & (~key_sec);     
 
endmodule

二.管腳分配

北郵22級信通院數(shù)電:Verilog-FPGA(11)第十一周實驗(1)用JK觸發(fā)器實現(xiàn)8421碼十進制計數(shù)器,北郵22級信通院數(shù)電實驗,fpga開發(fā)

三.實驗效果

前4位LED燈顯示輸入的二進制計數(shù)。4位二進制控制的LED中,低電平有效。

北郵22級信通院數(shù)電:Verilog-FPGA(11)第十一周實驗(1)用JK觸發(fā)器實現(xiàn)8421碼十進制計數(shù)器,北郵22級信通院數(shù)電實驗,fpga開發(fā)?文章來源地址http://www.zghlxwxcb.cn/news/detail-754005.html

到了這里,關于北郵22級信通院數(shù)電:Verilog-FPGA(11)第十一周實驗(1)用JK觸發(fā)器實現(xiàn)8421碼十進制計數(shù)器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包