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

Verilog實(shí)現(xiàn)按鍵計(jì)數(shù)器

這篇具有很好參考價(jià)值的文章主要介紹了Verilog實(shí)現(xiàn)按鍵計(jì)數(shù)器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Verilog實(shí)現(xiàn)按鍵計(jì)數(shù)器

一、簡(jiǎn)介

計(jì)數(shù)器我們都知道,這里我們旨在使用Verilog HDL 來(lái)實(shí)現(xiàn)按鍵計(jì)數(shù)器的操作,功能有:

1、按下一個(gè)鍵,計(jì)數(shù)加一(+1);

2、按下另一個(gè)鍵,計(jì)數(shù)減一(-1);

3、按下復(fù)位鍵,則計(jì)數(shù)清零。

4、最多計(jì)數(shù)60次。

Verilog實(shí)現(xiàn)按鍵計(jì)數(shù)器

二、 代碼實(shí)現(xiàn)

我們使用了兩個(gè)模塊,第一個(gè)是按鍵消抖模塊,第二個(gè)是實(shí)現(xiàn)計(jì)數(shù)器的功能。因?yàn)椋覀兌贾?,用按鍵,必消抖。

1、按鍵消抖模塊:

// ********************************************************************
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ********************************************************************
// File name    : debounce.v
// Module name  : debounce
// Author       : STEP
// Description  : 
// Web          : www.stepfpga.com
// 
// --------------------------------------------------------------------
// Code Revision History : 
// --------------------------------------------------------------------
// Version: |Mod. Date:   |Changes Made:
// V1.0     |2017/03/02   |Initial ver
// --------------------------------------------------------------------
// Module Function:按鍵消抖
 
module debounce_button (clk,rst,key,key_pulse);
 
        parameter       N  =  1;                      //要消除的按鍵的數(shù)量
 
	input             clk;
        input             rst;
        input 	[N-1:0]   key;                        //輸入的按鍵					
	output  [N-1:0]   key_pulse;                  //按鍵動(dòng)作產(chǎn)生的脈沖	
 
        reg     [N-1:0]   key_rst_pre;                //定義一個(gè)寄存器型變量存儲(chǔ)上一個(gè)觸發(fā)時(shí)的按鍵值
        reg     [N-1:0]   key_rst;                    //定義一個(gè)寄存器變量?jī)?chǔ)存儲(chǔ)當(dāng)前時(shí)刻觸發(fā)的按鍵值
 
        wire    [N-1:0]   key_edge;                   //檢測(cè)到按鍵由高到低變化是產(chǎn)生一個(gè)高脈沖
 
        //利用非阻塞賦值特點(diǎn),將兩個(gè)時(shí)鐘觸發(fā)時(shí)按鍵狀態(tài)存儲(chǔ)在兩個(gè)寄存器變量中
        always @(posedge clk  or  negedge rst)
          begin
             if (!rst) begin
                 key_rst <= {N{1'b1}};                //初始化時(shí)給key_rst賦值全為1,{}中表示N個(gè)1
                 key_rst_pre <= {N{1'b1}};
             end
             else begin
                 key_rst <= key;                     //第一個(gè)時(shí)鐘上升沿觸發(fā)之后key的值賦給key_rst,同時(shí)key_rst的值賦給key_rst_pre
                 key_rst_pre <= key_rst;             //非阻塞賦值。相當(dāng)于經(jīng)過(guò)兩個(gè)時(shí)鐘觸發(fā),key_rst存儲(chǔ)的是當(dāng)前時(shí)刻key的值,key_rst_pre存儲(chǔ)的是前一個(gè)時(shí)鐘的key的值
             end    
           end
 
        assign  key_edge = key_rst_pre & (~key_rst);//脈沖邊沿檢測(cè)。當(dāng)key檢測(cè)到下降沿時(shí),key_edge產(chǎn)生一個(gè)時(shí)鐘周期的高電平
 
        reg	[17:0]	  cnt;                       //產(chǎn)生延時(shí)所用的計(jì)數(shù)器,系統(tǒng)時(shí)鐘12MHz,要延時(shí)20ms左右時(shí)間,至少需要18位計(jì)數(shù)器     
 
        //產(chǎn)生20ms延時(shí),當(dāng)檢測(cè)到key_edge有效是計(jì)數(shù)器清零開(kāi)始計(jì)數(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;                //延時(shí)后檢測(cè)電平寄存器變量
        reg     [N-1:0]   key_sec;                    
 
 
        //延時(shí)后檢測(cè)key,如果按鍵狀態(tài)變低產(chǎn)生一個(gè)時(shí)鐘的高脈沖。如果按鍵狀態(tài)是高的話說(shuō)明按鍵無(wú)效
        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

2、按鍵計(jì)數(shù)器的模塊:

module btncounter(clk,rst, btn1, btn2,seg_led_1,seg_led_2);
	input clk;
	input rst;
	input btn1;
	input btn2;
	
//	input [3:0] seg_data_1;						
	//數(shù)碼管需要顯示0~9十個(gè)數(shù)字,所以最少需要4位輸入做譯碼
//	input [3:0] seg_data_2;			
			
	output [8:0] seg_led_1;						
	//在小腳丫上控制一個(gè)數(shù)碼管需要9個(gè)信號(hào) MSB~LSB=DIG、DP、G、F、E、D、C、B、A
	output [8:0] seg_led_2;						
	//在小腳丫上第二個(gè)數(shù)碼管的控制信號(hào)  MSB~LSB=DIG、DP、G、F、E、D、C、B、A
	reg [8:0] seg [9:0];                                            
	//定義了一個(gè)reg型的數(shù)組變量,相當(dāng)于一個(gè)10*9的存儲(chǔ)器,存儲(chǔ)器一共有10個(gè)數(shù),每個(gè)數(shù)有9位寬
	
	wire key_pulse1;
	wire key_pulse2;
	reg [5:0] counting = 2'd00;
	reg [3:0] seg_data_1= 1'd0;
	reg [3:0] seg_data_2= 1'd0;
	
	initial                                                         
	//在過(guò)程塊中只能給reg型變量賦值,Verilog中有兩種過(guò)程塊always和initial
		begin
			seg[0] = 9'h3f;                                           
			//對(duì)存儲(chǔ)器中第一個(gè)數(shù)賦值9'b00_0011_1111,相當(dāng)于共陰極接地,DP點(diǎn)變低不亮,7段顯示數(shù)字  0
	      seg[1] = 9'h06;                                           
			//7段顯示數(shù)字  1
	      seg[2] = 9'h5b;                                           
			//7段顯示數(shù)字  2
	      seg[3] = 9'h4f;                                           
			//7段顯示數(shù)字  3
	      seg[4] = 9'h66;                                           
			//7段顯示數(shù)字  4
	      seg[5] = 9'h6d;                                           
			//7段顯示數(shù)字  5
	      seg[6] = 9'h7d;                                           
			//7段顯示數(shù)字  6
	      seg[7] = 9'h07;                                           
			//7段顯示數(shù)字  7
	      seg[8] = 9'h7f;                                           
			//7段顯示數(shù)字  8
	      seg[9] = 9'h6f;                                           
			//7段顯示數(shù)字  9
       end
	 debounce_button  u1 (                               
                       .clk (clk),
                       .rst (rst),
                       .key (btn1),
                       .key_pulse (key_pulse1)
                       );
	//按鍵1對(duì)應(yīng)于加一
							  
	 debounce_button  u2 (                               
                       .clk (clk),
                       .rst (rst),
                       .key (btn2),
                       .key_pulse (key_pulse2)
                       );
	//按鍵2對(duì)應(yīng)于減一
	
	always@(posedge clk or negedge rst)
		begin
			if(~rst)
			begin
				counting <= 0;
			end
			
			else
			begin
				if(key_pulse1)
				begin
					counting <= (counting + 1) % 60;
				end
				else 
				begin
					if(key_pulse2)
					begin
						counting <= (counting -1 + 60) % 60;
					end
					else
					begin
						counting <= counting;
					end
				end
				
				seg_data_1 <= counting / 10;
				if(counting % 10 == 0)
				begin 
					seg_data_2 <= 0;
				end
				else
				begin 
					seg_data_2 <= counting - 10 * seg_data_1;
				end
			end
		end
		 
	assign seg_led_1 = seg[seg_data_1];                         
   assign seg_led_2 = seg[seg_data_2];
endmodule

然后進(jìn)行,設(shè)置引腳以及燒錄:
Verilog實(shí)現(xiàn)按鍵計(jì)數(shù)器
Verilog實(shí)現(xiàn)按鍵計(jì)數(shù)器

三、效果

我們使用如下所示的視頻來(lái)展示具體的效果:

https://www.bilibili.com/video/BV1f34y1R7Wm?spm_id_from=333.999.0.0

按鍵計(jì)數(shù)器的視頻

以上就是使用Verilog HDL來(lái)實(shí)現(xiàn)計(jì)數(shù)器的功能的基本操作了,如果有幫助的話就點(diǎn)個(gè)贊吧,謝謝大家的閱讀與支持了啦,(づ ̄3 ̄)づ╭?~。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-445076.html

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

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

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

相關(guān)文章

  • Verilog基礎(chǔ)之十、計(jì)數(shù)器實(shí)現(xiàn)

    Verilog基礎(chǔ)之十、計(jì)數(shù)器實(shí)現(xiàn)

    目錄 一、前言 二、工程設(shè)計(jì) 2.1?設(shè)計(jì)代碼 2.2 綜合結(jié)果 ?2.3 仿真結(jié)果 ????計(jì)數(shù)器是較為基礎(chǔ)的邏輯,很多其他邏輯可依靠計(jì)數(shù)器實(shí)現(xiàn),如控制器,分頻。原理為通過(guò)統(tǒng)計(jì)時(shí)鐘脈沖的個(gè)數(shù)來(lái)輸出計(jì)數(shù)值。 工程設(shè)計(jì)以計(jì)數(shù)20的計(jì)數(shù)器為例 測(cè)試代碼 綜合后的網(wǎng)表可知,6位的計(jì)

    2024年02月09日
    瀏覽(25)
  • verilog手撕代碼5——計(jì)數(shù)器(置位、加減、環(huán)形、扭環(huán)形、格雷碼計(jì)數(shù)器實(shí)現(xiàn))

    verilog手撕代碼5——計(jì)數(shù)器(置位、加減、環(huán)形、扭環(huán)形、格雷碼計(jì)數(shù)器實(shí)現(xiàn))

    2023.5.12 編寫(xiě)一個(gè)十六進(jìn)制計(jì)數(shù)器模塊,計(jì)數(shù)器輸出信號(hào)遞增每次到達(dá)0,給出指示信號(hào) zero ,當(dāng)置位信號(hào) set 有效時(shí),將當(dāng)前輸出置為輸入的數(shù)值 set_num 。 注意 :這里zero=1和num=0是同一拍輸出的,按道理如果根據(jù)num=0,然后去輸出zero=1應(yīng)該延遲一拍。所以這里考慮將number延遲一

    2024年02月07日
    瀏覽(20)
  • 通過(guò)verilog實(shí)現(xiàn)??勺冇?jì)數(shù)器的設(shè)計(jì)

    實(shí)驗(yàn)要求: ???????? (一) 實(shí)驗(yàn)?zāi)康?(1)掌握組合邏輯電路和時(shí)序電路的?FPGA實(shí)現(xiàn)方法; (2)熟悉EDA開(kāi)發(fā)板和開(kāi)發(fā)軟件的使用方法; (3)學(xué)習(xí)靜態(tài)數(shù)碼管的使用和7段數(shù)碼顯示譯碼器設(shè)計(jì); (4)掌握時(shí)鐘在時(shí)序電路中的作用; (5)掌握分頻電路的實(shí)現(xiàn)方法。 (二)

    2024年02月05日
    瀏覽(19)
  • Verilog語(yǔ)言實(shí)現(xiàn)FPGA上的計(jì)數(shù)器

    Verilog語(yǔ)言實(shí)現(xiàn)FPGA上的計(jì)數(shù)器 計(jì)數(shù)器是數(shù)字電路中經(jīng)常使用的基本元素之一,它用于生成指定脈沖數(shù)量或者指定計(jì)數(shù)范圍內(nèi)的計(jì)數(shù)信號(hào)。在現(xiàn)代數(shù)字電路設(shè)計(jì)中,F(xiàn)PGA(Field Programmable Gate Array)作為一種可編程邏輯器件被廣泛應(yīng)用,可以通過(guò)Verilog語(yǔ)言來(lái)實(shí)現(xiàn)計(jì)數(shù)器模塊。 在V

    2024年02月05日
    瀏覽(23)
  • verilog中幾種實(shí)現(xiàn)計(jì)數(shù)器的方法

    module counter ( input clk, output reg [3:0] count ); always @(posedge clk) begin if (count == 4’hF) begin count = 4’h0; end else begin count = count + 4’b1; end end endmodule integer ?????i ; reg [3:0] ???counter2 ; initial begin ????counter2 = \\\'b0 ; ????for (i=0; i=10; i=i+1) begin ????????#10 ; ????????counter2 = coun

    2024年02月03日
    瀏覽(22)
  • 【FGPA】Verilog:移位寄存器 | 環(huán)形計(jì)數(shù)器 | 4bit移位寄存器的實(shí)現(xiàn) | 4bit環(huán)形計(jì)數(shù)器的實(shí)現(xiàn)

    【FGPA】Verilog:移位寄存器 | 環(huán)形計(jì)數(shù)器 | 4bit移位寄存器的實(shí)現(xiàn) | 4bit環(huán)形計(jì)數(shù)器的實(shí)現(xiàn)

    ? 目錄 Ⅰ. 理論部分 0x00 移位寄存器(Shift Register) 0x01 環(huán)形計(jì)數(shù)器(Ring Counter)

    2024年02月05日
    瀏覽(64)
  • FPGA開(kāi)發(fā)] 使用Verilog實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器

    計(jì)數(shù)器是數(shù)字電路中常見(jiàn)的元件之一,它能夠按照一定的規(guī)律進(jìn)行計(jì)數(shù)。在FPGA開(kāi)發(fā)中,我們可以使用硬件描述語(yǔ)言Verilog來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器。本文將為您詳細(xì)介紹如何使用Verilog編寫(xiě)一個(gè)基于FPGA的計(jì)數(shù)器,并提供相應(yīng)的源代碼。 首先,我們需要定義計(jì)數(shù)器的功能和規(guī)格

    2024年02月03日
    瀏覽(23)
  • (數(shù)字邏輯筆記)用Verilog實(shí)現(xiàn)4位計(jì)數(shù)器。(時(shí)序邏輯)

    (數(shù)字邏輯筆記)用Verilog實(shí)現(xiàn)4位計(jì)數(shù)器。(時(shí)序邏輯)

    實(shí)驗(yàn)描述: 輸入: Clock:如果計(jì)數(shù)器enable信號(hào)為1,那么在時(shí)鐘上升沿,count加1 Enable:如果enable為1,那么在時(shí)鐘上升沿,count加1;如果enable為0,count保持不變 Reset:重置信號(hào),如果reset為0,count重置為0 輸出: Count[3:0]:4位計(jì)數(shù)信號(hào),范圍:4‘b0000 – 4’b1111 實(shí)現(xiàn)代碼: Tes

    2024年02月11日
    瀏覽(21)
  • OUC數(shù)字邏輯Verilog實(shí)驗(yàn)二 用Verilog實(shí)現(xiàn)4位計(jì)數(shù)器(時(shí)序邏輯)

    OUC數(shù)字邏輯Verilog實(shí)驗(yàn)二 用Verilog實(shí)現(xiàn)4位計(jì)數(shù)器(時(shí)序邏輯)

    clk為模擬的脈沖,reset為重置信號(hào),如果reset為0,則把init的值作為初始值賦值給out,enable為使能端,如果enable為1,則在上升沿根據(jù)mode的值,如果mode為1,為加計(jì)數(shù),mode為0,為減計(jì)數(shù)。 仿真圖像中, 第1個(gè)脈沖,reset為0,為out賦值輸入的初始值0010。 第2~6個(gè)脈沖,enable為1,

    2024年01月17日
    瀏覽(25)
  • verilog計(jì)數(shù)器

    verilog計(jì)數(shù)器

    (1) 深入了解計(jì)數(shù)器原理 (2) 學(xué)習(xí)使用 Verilog 實(shí)現(xiàn)同步計(jì)數(shù)器 ( 模八) 計(jì)數(shù)器的功能是記憶脈沖個(gè)數(shù),它是數(shù)字系統(tǒng)中應(yīng)用最為廣泛的時(shí)序邏輯構(gòu)件。 下圖為設(shè)計(jì) 計(jì)數(shù)器從0開(kāi)始每隔25_000_000個(gè)時(shí)鐘周期(0.25秒)數(shù)碼管末位顯示加一,最大值為7,7后復(fù)0值 ? ? ???????? 這

    2024年02月05日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包