电子说
8421码是中国大陆的叫法,8421码是BCD代码中最常用的一种。在这种编码方式中每一位二值代码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。由于代码中从左到右每一位的1分别表示8,4,2,1,所以把这种代码叫做8421代码。每一位的1代表的十进制数称为这一位的权。8421码中的每一位的权是固定不变的。
600,3/5,-7.99……看着这些耳熟能详的数字,你有没有想太多呢?其实这都是全世界通用的十进制,即1.满十进一,满二十进二,以此类推……2.按权展开,第一位权为10^0,第二位10^1……以此类推,第N位10^(N-1),该数的数值等于每位位的数值*该位对应的权值之和。
8421码十进制计数器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY GKY07P10 IS
PORT(clk,reset:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END GKY07P10;
ARCHITECTURE struc OF GKY07P10 IS
SIGNAL q_temp:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk‘EVENT AND clk=’1‘)THEN
IF reset=’1‘THEN q_temp《=“0000”;
ELSIF q_temp=“1001”THEN
q_temp《=“0000”;
ELSE
q_temp《=q_temp+1;
END IF;
END IF;
END PROCESS;
q《=q_temp;
END struc;
从状态‘0000’到状态‘1001’,然后再跳回‘0000’,异步复位要立即复位。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY GKY07P13 IS
PORT(clk,clear:IN STD_LOGIC;
clk_out:OUT STD_LOGIC);
END GKY07P13;
ARCHITECTURE struc OF GKY07P13 IS
SIGNAL temp:INTEGER RANGE 0 TO 11;
BEGIN
p1:PROCESS(clear,clk)
BEGIN
IF clear=‘0’ THEN
temp《=0;
ELSIF clk‘EVENT AND clk=’1‘ THEN
IF temp=11 THEN
temp《=0;
ELSE
temp《=temp+1;
END IF;
END IF;
END PROCESS p1;
p2:PROCESS(temp)
BEGIN
IF temp《6 THEN
clk_out《=’0‘;
ELSE
clk_out《=’1‘;
END IF;
END PROCESS p2;
END struc;
很重要的一个器件,但是设计难度并不很高,首先是模为12的计数,然后是占空比50%。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LED IS
PORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
b:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END LED;
ARCHITECTURE LEDarch OF LED IS
BEGIN
PROCESS(a)
BEGIN
CASE a IS
WHEN“0000” =》 b 《= “1111110”; --0
WHEN“0001” =》 b 《= “0110000”; --1
WHEN“0010” =》 b 《= “1101101”; --2
WHEN“0011” =》 b 《= “1111001”; --3
WHEN“0100” =》 b 《= “0110011”; --4
WHEN“0101” =》 b 《= “1011011”; --5
WHEN“0110” =》 b 《= “1011111”; --6
WHEN“0111” =》 b 《= “1110000”; --7
WHEN“1000” =》 b 《= “1111111”; --8
WHEN“1001” =》 b 《= “1111011”; --9
WHEN OTHERS =》 b 《=“0000000”;
END CASE;
END PROCESS;
END;
全部0条评论
快来发表一下你的评论吧 !