計數器是一種能夠記錄脈沖數目的裝置,是數字電路中最常用的邏輯部件。計數器在數字系統中主要是對脈沖的個數進行計數,以實現測量、計數和控制的功能,同時兼有分頻功能。計數器由基本的計數單元和一些控制門所組成,計數單元則由一系列具有存儲信息功能的各類觸發器構成。計數器在數字系統中應用廣泛,如在電子計算機的控制器中對指令地址進行計數。本文為大家帶來六種10進制計數器設計方案。
10進制計數器設計方案一:JK觸發器實現的同步十進制加法計數器
同步十進制加法計數器邏輯圖
在上圖所示的同步十進制加法計數器中:
將這些關系代入各JK觸發器的特性方程,則得計數器的狀態方程為:
設計數器初始狀態為0000,第1個計數脈沖來到后,
即計數器的狀態為0001。可以算得,第2個計數脈沖來到后,其狀態為0010。以下類推,可以得到如表Z1503所示的狀態表。但需注意,在第9個脈沖來到后,亦即計數器處于1001態時,的低電平封住了F2的置1端,Q1的高電平又使K4=1,故第十個計數脈沖來到后,F2、F3狀態不變,F1、F4同時置0,計數器跳過多余的6個狀態,完成一次十進制計數循環。結合計數脈沖的觸發方式,可以斷定該計數器是同步十進制加法計數器。
同步十進制加法計數器狀態表
10進制計數器設計方案二:CD54HC160異步復位的BCD同步十進制計數器
CD54HC160是具有異步復位的BCD同步十進制計數器。其引腳圖如圖2-30所示。其中,CLR為計數器復位端,CLR=0時,QDQCQBQA=0000;LOAD是計數器的預置端,DCBA是預置數據輸入端。當LOAD=0時,在CLK的上升沿作用下,QDQCQBQA=DCBA;ENP和ENT是計數器的功能控制端,ENP和ENT均為高電平時計數器才能計數,它們中有任何一個為低電平時,計數器的裝備不會發生變化,而是處于保持狀態。RCO是計數器的進位輸出,RCO=ENT× QDQA。
CD54HC160引腳圖
步驟
1.根據十進制計數器的原理和特點,利用VHDL語言的基本描述語句編寫出十進制計數器的VHDL語言程序。
2.對所設計的十進制計數器的VHDL程序進行編譯,然后利用波形編輯器對其進行仿真,初步驗證程序設計的正確性。
3.利用開發工具軟件,選擇所用可編程邏輯器件,并對十進制計數器進行管腳配置。
4.通過下載電纜將編譯后的*.sof文件下載到目標器件之中,并利用實驗開發裝置對其進行硬件驗證。
程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CD54HC160 IS
PORT(
CLK,D,C,B,A, CLR, LOAD,ENP,ENT: IN STD_LOGIC;
QD,QC,QB,QA,RCO: BUFFER STD_LOGIC);
END CD54HC160;
ARCHITECTURE behave OF CD54HC160 IS
SIGNAL EN: STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL D_SIGNAL: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL Q_SIGNAL: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(LOAD,D,C,B,A,CLK,CLR, ENP,ENT)
BEGIN
EN<=(ENP&ENT);
D_SIGNAL<=(D&C&B&A);
IF (CLR=‘0’) THEN
Q_SIGNAL<=(OTHERS=>‘0’);
ELSE IF CLK‘EVENT AND CLK=’1‘ THEN
IF (LOAD=’0‘) THEN Q_SIGNAL<=D_SIGNAL;
ELSIF (EN=“11”) THEN
IF Q_SIGNAL<“1001” THEN
Q_SIGNAL<=Q_SIGNAL+1;
ELSE
Q_SIGNAL<=(OTHERS=>’0‘);
END IF;
ELSE
Q_SIGNAL<=Q_SIGNAL;
END IF;
END IF;
END IF;
QD<=Q_SIGNAL(3);
QC<=Q_SIGNAL(2);
QB<=Q_SIGNAL(1);
QA<=Q_SIGNAL(0);
RCO<=ENT AND QD AND QA;
END PROCESS;
END behave;
10進制計數器設計方案三:74LS161的六位十進制計數器設計
仿真電路(如上圖)脈沖信號首先進入74LS161的CLK端,其QA~QD端接入74LS47A~D后B端和D端接邏輯與非門,當74LS161計數到1010使該芯片進位,并產生一個脈沖,到下一個74LS161的CLK端如此循環完成0-999999的計數功能。用開關控制鎖存完成鎖存功能,其中CLK為數據輸入端,QA~QD為數據輸出端可以用來驅動74LS47芯片完成正常譯碼。開關控制CLK和CLR,當CLK和CLR為高電平時,OA---OG為正常邏輯狀態,可以用來驅動顯示器使其完成0—9的正常顯示,當CL為低電平時,即不驅動顯示器,但內部的邏輯操作不受影響。CET和CEP為鎖存允許端。
10進制計數器設計方案四:verilog設計十進制計數器
設計要求:
1、每當計數器值為4’b001時,自動回到4’b0000
2、每個時鐘沿計數器值加1
3、進位輸出carry應該與4‘b1001同周期輸出
4、異步復位
? ? ? ?實驗程序:
module cnt10 ( clk, rst_n, carry, cnt );
input clk, rst_n;
output carry;
output [3:0] cnt;
reg carry;
reg [3:0] cnt;
always @( posedge clk or negedge rst_n )
begin
if ( ~rst_n )
begin
cnt 《= 4‘b0000;
end
else if ( cnt == 4‘b1001 )
begin
cnt 《= 4‘b0000;
end
else
begin
cnt 《= cnt + 4‘b0001;
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
carry 《= 1‘b0;
end
else if(cnt == 4‘b1000)
begin
carry 《= 1‘b1;
end
else
carry《= 1‘b0;
end
endmodule
View Code
測試程序:
`timescale 1ns/1ps
module cnt10_tb();
reg clk, rst_n;
wire carry;
wire [3:0] cnt;
always #10 clk = ~clk;
cnt10 cnt10_tb(
.clk(clk),
.rst_n(rst_n),
.carry(carry),
.cnt(cnt)
?。?
initial
begin
clk = 1‘b0;
rst_n = 1‘b1;
#10 rst_n = 1‘b0;
#10 rst_n = 1‘b1;
end
endmodule
? ? ? ?波形圖
? ? ? 在這個十進制計數器中,唯一要注意的一點就是進位位carry變化的時刻,如果是為了使下一級能正確接收到前一級的進位位標識,要在計數到九時使進位位有效;如上圖波形所示。
10進制計數器設計方案五:74191設計成兩位十進制計數器
功能:U1的D0 D1 D2 D3 輸出的個位 ,U2的D0 D1 D2 D3 輸出的十位 。加一鍵按下數據加一,清零鍵按下數據清零。該單位電路實現的記錄“加一”按鍵按下次數,清零按鍵清零的功能。
? ? ? ?工作原理:利用四位制計數器74191設計成兩位十進制。個位、十位74191計數器的D0 D1 D2 D3腳接低電平,S、M腳接低電平。個位74191計數器CP腳接按鍵,十位74191計數器CP腳接來自個位計數器的進位信號,這樣個位,十位都處于計數工作狀態。個位計數器由Q3Q2Q1Q0(0000)2增加到(1001)2時產生進位信號,進位信號接傳給個位計數器和十位計數器,分別實現了各位清零十位加一的功能。
10進制計數器設計方案六:基于MAX+PLUSⅡ的十進制計數器的設計
詳細電路設計方案:基于MAX+PLUSⅡ的十進制計數器的設計
本設計采用的七段譯碼器電路由7447和外部共陰極數碼管構成,7447七段譯碼器將BCD8421碼譯成數碼管所需的七段數顯碼。
(1)圖形設計輸入:MAX+PLUSⅡ的圖形設計輸入較其他軟件更容易使用,因為MAX+PLUSⅡ提供豐富的庫單元供設計者調用,尤其是在 MAX+PLUSⅡ里提供的mf庫幾乎包含了所有的74系列的器件,在prim庫里提供了數字電路中所有的分離器件。因此只要具有數字電路的知識,幾乎不需要過多的學習就可以利用MAX+PLUSⅡ進行CPLD/FPGA的設計。
?。?)文本編輯輸入:MAX+PLUSⅡ的文本輸入和編譯系統支持AHDL語言、VHDL語言、VERILOG語言三種輸入方式。
?。?)波形輸入方式:如果知道輸入、輸出波形,也可以采用波形輸入方式。
?。?)混合輸入方式:MAX+PLUSⅡ設計開發環境,支持圖形設計輸入、文本編輯輸入、波形編輯輸入的混合編輯。
評論
查看更多