60進制計數器的文本編譯
『壹』 60 進制計數器怎麼算的
60進制計數器的演算法是滿60進1。
假設一個數是61,那麼60進制就是61/60=1。
由此可得61的60進制是11。
作用
在數字電子技術中應用的最多的時序邏輯電路。計數器不僅能用於對時鍾脈沖計數,還可以用於分頻、定時、產生節拍脈沖和脈沖序列以及進行數字運算等。但是並無法顯示計算結果,一般都是要通過外接LCD或LED屏才能顯示。
『貳』 用VHDL語言編寫BCD碼60進制加法計數器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter60 is
port(rst,en,clk:in std_logic;
co:out std_logic;
q1:out std_logic_vector (2 downto 0);
q0:out std_logic_vector (3 downto 0)
);
end counter60;
architecture beh of counter60 is
signal q1_temp:std_logic_vector (2 downto 0);
signal q0_temp:std_logic_vector (3 downto 0);
begin
p0:process (rst,en,clk,q0_temp)
begin
if rst='0' then
q0_temp<=(others=>'0');
elsif en='1' then
if (clk'event and clk='1')then
if q0_temp<"1001" then q0_temp<=q0_temp+1;
else q0_temp<=(others=>'0');
end if;
end if;
end if;
end process;
p1:process (rst,en,clk,q0_temp,q1_temp)
begin
if rst='0' then
q1_temp<=(others=>'0');
elsif en='1' then
if (clk'event and clk='1')then
if q0_temp="1001" then
if q1_temp="101" then
q1_temp<=(others=>'0');
else q1_temp<=q1_temp+1;
end if;
end if;
end if;
end if;
end process;
p2:process (q0_temp,q1_temp)
begin
if (clk'event and clk='1')then
if q0_temp="1001" and q1_temp="101" then
co<='1';
else
co<='0';
end if;
end if;
end process;
q0<=q0_temp;
q1<=q1_temp;
end beh;
『叄』 用VHDL語言編寫程序:可逆的60進制計數器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT60 IS
PORT(CH,CLK,EN:IN STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
COUT:OUT STD_LOGIC);
END ENTITY CNT60;
ARCHITECTURE ONE OF CNT60 IS
BEGIN
PROCESS(CLK,EN,CH)
VARIABLE dd: STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN
IF CH='1' THEN
IF dd<60 THEN dd:=dd+1;
ELSE dd:="000000";
END IF;
IF dd=60 THEN COUT<='1';
ELSE COUT<='0';
END IF;
ELSE IF dd>0 THEN dd:=dd-1;
ELSE dd:="111100";
END IF;
IF dd=0 THEN COUT<='1';
ELSE COUT<='0';
END IF;
END IF;
END IF;
END IF;
DOUT<=dd;
END PROCESS;
END ARCHITECTURE ONE;
--EN為使能信號,高電平有效,CH可以選擇,為1時進行加,為0時進行減。
『肆』 編程實現60進制的計數器,要求帶復位清零,用CLR表示,高電平有效,輸出帶進位端,用CO表示
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity counter60 is
port(clk,clr:in std_logic;
c:out std_logic;
bcd1:out std_logic_vector(3 downto 0);
bcd2:out std_logic_vector(3 downto 0));
end counter60;
architecture rtl of counter60 is
signal bcd1n:std_logic_vector(3 downto 0):="0000";
signal bcd2n:std_logic_vector(3 downto 0):="0000";
signal cn:std_logic:='1';
begin
bcd1<=bcd1n;
bcd2<=bcd2n;
c<=cn;
process(clk,clr)
begin
if(clr='1') then
bcd1n<="0000";
else
if(clk'event and clk='0') then
if(bcd1n="1001") then
bcd1n<="0000";
else bcd1n<=bcd1n+1;
end if;
end if;
end if;
end process;
process(clk,clr)
begin
if(clr='1') then
bcd2n<="0000";
else
if(clk'event and clk='0') then
if(bcd1n="1001") then
if(bcd2n="0101") then
bcd2n<="0000";
else bcd2n<=bcd2n+1;
end if;
end if;
end if;
end if;
end process;
process(clk)
begin
if(clk'event and clk='0') then
if(bcd1n="1001" and bcd2n="0101") then
cn<='0';
else cn<='1';
end if;
end if;
end process;
end rtl;
『伍』 用vhdl程序設計一個60進制(帶進位輸出)和12進制加法計數器(帶進位輸出)
這是60進制:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC );
END CNT10;
ARCHITECTURE behav OF CNT10 IS
BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST = '1' THEN CQI := (OTHERS =>'0') ; --計數器非同步復位
ELSIF CLK'EVENT AND CLK='1' THEN --檢測時鍾上升沿
IF EN = '1' THEN --檢測是否允許計數(同步使能)
IF CQI < 9 THEN CQI := CQI + 1; --允許計數, 檢測是否小於9
ELSE CQI := (OTHERS =>'0'); --大於9,計數值清零
END IF;
END IF;
END IF;
IF CLK'EVENT AND CLK='1' THEN
IF CQI = 9 THEN COUT <= '1'; --計數大於9,輸出進位信號
ELSE COUT <= '0';
END IF;
END IF;
CQ <= CQI; --將計數值向埠輸出
END PROCESS;
END behav;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT6 IS
PORT (CLK1,RST1,EN1 : IN STD_LOGIC;
CQ1: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
COUT1 : OUT STD_LOGIC );
END CNT6;
ARCHITECTURE behav OF CNT6 IS
BEGIN
PROCESS(CLK1, RST1, EN1)
VARIABLE CQI : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
IF RST1 = '1' THEN CQI := (OTHERS =>'0') ; --計數器非同步復位
ELSIF CLK1'EVENT AND CLK1='1' THEN --檢測時鍾上升沿
IF EN1 = '1' THEN --檢測是否允許計數(同步使能)
IF CQI < 5 THEN CQI := CQI + 1; --允許計數, 檢測是否小於5
ELSE CQI := (OTHERS =>'0'); --大於5,計數值清零 END IF;
END IF;
END IF;
IF CLK1'EVENT AND CLK1='1' THEN
IF CQI = 5 THEN COUT1 <= '1'; --計數大於5,輸出進位信號
ELSE COUT1 <= '0';
END IF;
END IF;
CQ1 <= CQI; --將計數值向埠輸出
END PROCESS;
END behav;
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY CNT60 IS
PORT ( CLK0,RST0,EN0 : IN STD_LOGIC;
COUT2: OUT STD_LOGIC;
LED1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
LED2 : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );
END ;
ARCHITECTURE one OF CNT60 IS
COMPONENT CNT10
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC );
END COMPONENT ;
COMPONENT CNT6
PORT (CLK1,RST1,EN1 : IN STD_LOGIC;
CQ1: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
COUT1 : OUT STD_LOGIC );
END COMPONENT ;
SIGNAL COUT0:STD_LOGIC;
BEGIN
u1:CNT10 PORT MAP
(CLK=>CLK0,
RST=>RST0,
EN=>EN0,
COUT=>COUT0,
CQ=>LED1);
u2:CNT6 PORT MAP
(CLK1=>COUT0,
RST1=>RST0,
EN1=>EN0,
COUT1=>COUT2,
CQ1=>LED2);
END ARCHITECTURE one;
這是12進制:
LIBRARY IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT12 IS
PORT(clk9,reset,en9:IN STD_LOGIC;
ut:out STD_LOGIC_VECTOR(5 DOWNTO 0));
END ENTITY CNT12;
ARCHITECTURE fun OF CNT12 IS
SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
ut<=count;
PROCESS(clk9,reset,en9)
BEGIN
IF(reset='1')THEN count<="000000"; --若reset=1,則非同步清零
ELSIF(clk9'event and clk9='1')THEN --否則,若clk上升沿到
IF en9='1' THEN
IF(count(3 DOWNTO 0)="1001")THEN --若個位計時恰好到"1001"即
IF(count<16#11#)THEN --11進制
count<=count+7; --若到11D則
else
count<="000000"; --復0
END IF;
ELSIF (count<16#11#)THEN --若未到11D,則count進1
count<=count+1;
ELSE --否則清零
count<="000000";
END IF;
END IF; --END IF(count(3 DOWNTO 0)="1001")
END IF; --END IF(reset='1')
END PROCESS;
END fun;