《EDA技术及应用》朱正伟-三,四,五章部分课后题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章
3-5设计一个4选1多路选择器,当选择输入信号分别取“00”、“01”、“10”和“11”时,输出信号分别与一路输入信号相连。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MAX4_1 IS
PORT(A,B,C,D,S1,S2 : IN STD_LOGIC;
Y : OUT STD_LOGIC);
END ENTITY MAX4_1;
ARCHITECTURE HF1 OF MAX4_1 IS
SIGNAL SS : STD_LOGIC_VECTOR (0 TO 1);
BEGIN
SS<=S2&S1;
PROCESS(SS)
BEGIN
CASE SS IS
WHEN "00" => Y<=A;
WHEN "01" => Y<=B;
WHEN "10" => Y<=C;
WHEN "11" => Y<=D;
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END HF1;
3-6设计一个7人表决电路,参加表决者7人,同意为1,不同意为0,同意者过半则表决通过,绿指示灯亮;表决不通过则红指示灯亮。
设计思路:根据7人表决电路设计要求,7人中至少有4个通过才可以表决通过,故可以在程序中设置一个变量TEMP,使其在表决电路中遇1则加1,遇0则加0(设计中1表示通过,0表示不通过)。
当TEMP>=4时,表示表决通过,当TEMP<4时表决不通过。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY VOTE7 IS
PORT (MEN:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
OUTPUT: OUT BIT);
END VOTE7;
ARCHITECTURE BEHA VE OF VOTE7 IS
BEGIN
PROCESS(MEN)
V ARIABLE TEMP: INTEGER RANGE 0 TO 7;
BEGIN
TEMP:=0;
FOR I IN 0 TO 6 LOOP
IF(MEN(I)='1')THEN
TEMP:=TEMP+1;
ELSE
TEMP:=TEMP;
END IF;
END LOOP;
CASE TEMP IS
WHEN 0 TO 3 =>OUTPUT<='0';
WHEN 4 TO 7 =>OUTPUT<='1';
END CASE ;
END PROCESS;
END BEHA VE;
第四章
4-6试写出4选1多路选择器VHDL描述。
选择控制信号为S1和S0,输入信号为A,B,C,D,输出信号为Y。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX41A IS
PORT (A,B,C,D,S0,S1:IN STD_LOGIC; --输入信号
Y:OUT STD_LOGIC); --输出信号
END ENTITY MUX41A;
ARCHITECTURE ONE OF MUX41A IS
SIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
S<=S0&S1; --并置操作,获得二维矢量数据类型
PROCESS(S0,S1,A,B,C,D) --敏感信号
BEGIN
CASE S IS
WHEN"00"=> Y<=A;
WHEN"01"=> Y<=B;
WHEN"10"=> Y<=C;
WHEN"11"=> Y<=D;
WHEN OTHERS=>NULL; --其它情况为空值
END CASE; --CASE语句结束
END PROCESS; --PROCESS进程语句结束
END ARCHITECTURE ONE;
4-7使给出1位全减器的VHDL描述,要求:首先设计1位半减器,然后用例化语句将它们连接起来。
设X为被减数,Y为减数,SUB_IN是借位输入,DIFF是输出差,SUB_OUT是借位输出。
(1.1):实现1位半减器H_SUBER(DIFF=X-Y;S_OUT=1,X<Y)
LIBRARY IEEE; --半减器描述(1):布尔方程描述方法
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY H_SUBER IS
PORT( X,Y: IN STD_LOGIC;
DIFF,S_OUT: OUT STD_LOGIC);
END ENTITY H_SUBER;
ARCHITECTURE HS1 OF H_SUBER IS
BEGIN
DIFF <= X XOR (NOT Y);
S_OUT <= (NOT X) AND Y;
END ARCHITECTURE HS1;
--解(1.2):采用例化实现图4-20的1位全减器
LIBRARY IEEE; --1位二进制全减器顺层设计描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY F_SUBER IS
PORT(XIN,YIN,SUB_IN: IN STD_LOGIC;
SUB_OUT,DIFF_OUT: OUT STD_LOGIC);
END ENTITY F_SUBER;
ARCHITECTURE FS1 OF F_SUBER IS
COMPONENT H_SUBER --调用半减器声明语句
PORT(X, Y: IN STD_LOGIC;
DIFF,S_OUT: OUT STD_LOGIC);
END COMPONENT;
SIGNAL A,B,C: STD_LOGIC; --定义1个信号作为内部的连接线。
BEGIN
U1:H_SUBER PORT MAP(X=>XIN,Y=>YIN, DIFF=>A, S_OUT=>B); U2:H_SUBER PORT MAP(X=>A, Y=>SUB_IN, DIFF=>DIFF_OUT,S_OUT=>C);
SUB_OUT <= C OR B;
END ARCHITECTURE FS1;
二进制全加器,元件声明与元件例化(COMPONENT,PORT MAP)
//或门
LIBRARY IEEE; ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY OR2A IS
PORT(A,B : IN STD_LOGIC;
C : OUT STD_LOGIC);
END OR2A;
ARCHITECTURE ART1 OF OR2A IS
BEGIN
C<=A OR B;
END ART1;
//半加器;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY H_ADDER IS
PORT(A,B : IN STD_LOGIC;
CO,SO: OUT STD_LOGIC);
END H_ADDER;
ARCHITECTURE ART2 OF H_ADDER IS
BEGIN
SO <= A XOR B;
CO <= A AND B;
END ART2;
1位二进制全加器顶层设计:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164。
ALL;
ENTITY F_ADDER IS
PORT(AIN,BIN,CIN : IN STD_LOGIC;
COUT,SUM : OUT STD_LOGIC);
END F_ADDER;
ARCHITECTURE ART3 OF F_ADDER IS
COMPONENT H_ADDER //元件声明;
PORT(A,B : IN STD_LOGIC;
CO,SO: OUT STD_LOGIC);
END COMPONENT;
COMPONENT OR2A
PORT(A,B : IN STD_LOGIC;
C : OUT STD_LOGIC);
END COMPONENT;
SIGNAL D,E,F : STD_LOGIC;
BEGIN
U1:H_ADDER PORT MAP(AIN,BIN,D,E); //元件例化;
U2:H_ADDER PORT MAP(A=>E,B=>CIN,CO=>F,SO=>SUM);
U3:OR2A PORT MAP(D,F,COUT);
END ART3;
第五章
5-1.试说明实体端口模式BUFFER和INOUT的不同之处?
答: BUFFER端口:缓冲模式,具有读功能的输出模式,即信号输出到实体外部,但同时也在内部反馈使用,不允许作为双向端口使用。
而INOUT端口:双向模式,即信号的流通是双向的,既可以对此端口赋值,也可以通过此端口读入数据。
5-2.VHDL的数据对象有哪几种?它们之间有什么不同?
答:VHDL的数据对象有三种:信号、变量、常量。
它们之间的的区别如下:
信号赋值至少有Δ延时,而变量和常量没有;信号除当前值外,有许多相关信息,变量只有当前值,常量的值在设计实体中始终不变;进程对信号敏感而对变量及常量不敏感;信号可以是多个进程的全局信
号,变量只在定义它们的顺序域可见,而常量的使用范围取决于它被定义的位置;信号是硬件连线的抽象描述信号赋值,赋值符号 <= 而变量和常量的赋值符号 :=。
5-3.说明下列各定义的意义:
SIGNAL a , b , c : BIT : =’0’;
CONSTANT TIME1 , TIME2 : TIME : 20ns ;
VARIABLE x , y , z : STD_LOGIC :=’x’;
答:○1定义3个位数据类型的信号A、B、C,它们取值为0;
○2定义2个时间数据类型的常量TIME1、TIME2,它们值为20NS; ○3定义3个标准逻辑位 STD_LOGIC数据类型的变量X、Y、Z,它们的值是强未知的。
5-4.什么是重载函数?重载运算符有何用处?如何调用重载运算符函数?
答:为了方便各种不同数据类型间的运算,VHDL允许用户对原有的基本操作符重新定义,赋予新的含义和功能,从而建立一种新的操作符,这就是重载操作符,定义这种操作符的函数成为重载函数。
重载运算符的作用是为了方便各种不同的数据类型间的运算。
要调用重载运算符函数,先要在程序包中进行函数体的定义,调用的格式如下:X <=函数名(参数1,参数2,····)参数个数和类型与所定义的函数要保持一致。
5-5.数据类型BIT \ INTEGER \ BOOLEAN分别定义在哪个库中?哪些库和程序包总是可见的?
答:数据类型BIT \ INTEGER \ BOOLEAN均定义在STD库中。
IEEE 库和程序包STD_LOGIC.1164 、STD_LOGIC_UNSIGNED、STD_LOGIC_SIGNED、STD_LOGIC_ARITH等总是可见的。
5-6.函数和过程有什么区别?
答:子程序有两种类型,即过程(PROCEDURE)和函数(FUNCTION)。
它们的区别在于:过程的调用可以通过其界面获得多个返回值,而函数只能返回一个值;在函数入口中,所有参数都是输入参数,而过程有输入参数、输出参数和双向参数;过程一般被看作一种语句结构,而函数通常是表达式的一部分;过程可以单独存在,而函数通常作为语句的一部分调用。
5-7.若在进程中加入WAIT语句,应注意哪几个方面的问题?
答:应注意以下问题:○1已列出敏感信号的进程中不能使用任何形式的WAIT语句;○2一般情况下,只有WAIT UNTIL格式的等待语句可以被综合器所接受,其余语句格式只能在VHDL仿真器中使用;○3在使用WAIT ON语句的进程中,敏感信号量应写在进程中的WAIT ON语句后面;○4在不使用WAIT ON语句的进程中,敏感信号量应在开头的关键词PROCESS后面的敏感信号表中列出。
5-8.哪些情况下需用到程序包STD_LOGIC_UNSIGNED?试举一例。
答:○1调用数据类型变换函数或重载运算符函数时;○2定义UNSIGNED 类型的数据时。
举例如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
·
·
IF TEMP="11111111"THEN TEMP:= "00000000";
ELSE TEMP:=TEMP+16;END IF;···
5-9.为什么说一条并行赋值语句可以等效为一个进程?如果是这样的话,怎样实现敏感信号的检测?
答:因为信号赋值语句的共同点是赋值目标必须都是信号,所有赋值语句与其它并行语句一样,在结构体内的执行是同时发生的,与它们的书写顺序没有关系,所以每一信号赋值语句都相当于一条缩写的进程语句。
由于这条语句的所有输入信号都被隐性地列入此缩写进程的敏感信号表中,故任何信号的变化都将相关并行语句的赋值操作,这样就实现了敏感信号的检测。
5-10.比较CASE语句和WITH_SELECT语句,叙述它们的异同点?答:相同点:CASE语句中各子句的条件不能有重叠,必须包容所有的条件;WITH_SECLECT语句也不允许选择值有重叠现象,也不允许选择值涵盖不全的情况。
另外,两者对子句各选择值的测试都具有同步性,都依赖于敏感信号的变化。
不同点:CASE语句只能在进程中使用,至少包含一个条件语句,可以有多个赋值目标;WITH_SECLECT 语句根据满足的条件,对信号进行赋值,其赋值目标只有一个,且必须是信号。
5-11.将以下程序段转换为WHEN_ELSE语句:
PROCESS (a , b ,c ,d)
BEGIN
IF a=’0’AND b=’1’THEN NEXT1 <="1101";
ELSEIF a=’0’THEN NEXT1 <=d;
ELSEIF b=’1’THEN NEXT1 <=c;
ELSE NEXT1 <="1011";
END IF;
END PROCESS;
原程序转换如下:
ARCHITECTURE one OF mux IS
BEGIN
PROCESS (a , b ,c ,d)
BEGIN
NEXT1 <="110"1WHEN a=’0’AND b=’1’ELSE
d WHEN a=’0’ELSE
c WHEN b=’1’ELSE
"1011";
END one;
END PROCESS;
5-12使给出一位全减器的算法描述、数据流描述、结构描述和混合描述。
数据流描述:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY F_SUB1 IS
PORT(
A,B :IN STD_LOGIC;
CIN :IN STD_LOGIC;
DIFF,COUT : OUT STD_LOGIC
);
END;
ARCHITECTURE A OF F_SUB1 IS
SIGNAL S :STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
S<=CIN&A&B;
PROCESS(A,B,CIN)
BEGIN
CASE S IS
WHEN "000" => DIFF<='0';COUT<='0';
WHEN "001" => DIFF<='1';COUT<='1';
WHEN "010" => DIFF<='1';COUT<='0';
WHEN "011" => DIFF<='0';COUT<='0';
WHEN "100" => DIFF<='1';COUT<='1';
WHEN "101" => DIFF<='0';COUT<='1';
WHEN "110" => DIFF<='0';COUT<='0';
WHEN "111" => DIFF<='1';COUT<='1';
WHEN OTHERS=> DIFF<='X';COUT<='X';
END CASE;
END PROCESS;
END A;
行为描述:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY F_SUB4 IS
PORT(
A,B,CIN : IN STD_LOGIC;
DIFF,COUT : OUT STD_LOGIC
);
END;
ARCHITECTURE A OF F_SUB4 IS
BEGIN
DIFF<=A XOR B XOR CIN;
COUT<=(NOT A AND B) OR (NOT A AND CIN) OR (B AND CIN); END A;
5-13用VHDL描述下列器件的功能:
(1)十进制——BCD码编码器,输出使能为低电平有效。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BIN_BCD IS
PORT(
BIN : IN INTEGER RANGE 0 TO 20;
--ENA : IN STD_LOGIC;
BCD_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END;
ARCHITECTURE A OF BIN_BCD IS
BEGIN
BINARY_BCD : BLOCK
BEGIN
BCD_OUT <= "00000000" WHEN BIN = 0 ELSE
"00000001" WHEN BIN = 1 ELSE
"00000010" WHEN BIN = 2 ELSE
"00000011" WHEN BIN = 3 ELSE
"00000100" WHEN BIN = 4 ELSE
"00000101" WHEN BIN = 5 ELSE
"00000110" WHEN BIN = 6 ELSE
"00000111" WHEN BIN = 7 ELSE
"00001000" WHEN BIN = 8 ELSE
"00001001" WHEN BIN = 9 ELSE
"00010000" WHEN BIN = 10 ELSE
"00010001" WHEN BIN = 11 ELSE
"00010010" WHEN BIN = 12 ELSE
"00010011" WHEN BIN = 13 ELSE
"00010100" WHEN BIN = 14 ELSE
"00010101" WHEN BIN = 15 ELSE
"00010110" WHEN BIN = 16 ELSE
"00010111" WHEN BIN = 17 ELSE
"00011000" WHEN BIN = 18 ELSE
"00011001" WHEN BIN = 19 ELSE
"00100000" WHEN BIN = 20 ELSE
"00000000";
END BLOCK;
END A;
(2)时钟(可控)RS触发器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FFRS IS
PORT(S,R: IN STD_LOGIC;
Q,QB: OUT STD_LOGIC);
END FFRS;
ARCHITECTURE RTL OF FFRS IS
SIGNAL QN,NQN: STD_LOGIC;
BEGIN
QN<= R NOR NQN;
NQN<= S NOR QN;
Q<=QN;
QB<=NQN;
END RTL;
(3)带复位端、置位端、延迟为15NS的响应CP下降沿触发的JK触发器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY JKFF IS
PORT(
J,K,RST,CLR : IN BIT;
CLK : IN BIT;
Q,NQ : OUT BIT
);
END;
ARCHITECTURE A OF JKFF IS
SIGNAL Q_S,NQ_S : BIT;
BEGIN
PROCESS(J,K,RST,CLR,CLK)
BEGIN
IF RST='1' THEN
Q_S<='1';
NQ_S<='0';
ELSIF CLK'EVENT AND CLK='0' THEN
IF CLR='1' THEN
Q_S<='0';
NQ_S<='1';
ELSIF J='0' AND K='1' THEN
Q_S<='0';
NQ_S<='1';
ELSIF J='1' AND K='0' THEN
Q_S<='1';
NQ_S<='0';
ELSIF J='1' AND K='1' THEN
Q_S<=NOT Q_S;
NQ_S<=NOT NQ_S;
END IF;
ELSE
NULL;
END IF;
Q<=Q_S;
NQ<=NQ_S;
END PROCESS;
END A;
(4)集成计数器74161
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4 IS
PORT(
CLK,LDN,CLRN : IN STD_LOGIC;
D,C,B,A : IN STD_LOGIC;
CARRY : OUT STD_LOGIC;
QD,QC,QB,QA : OUT STD_LOGIC
);
END;
ARCHITECTURE A OF CNT4 IS
SIGNAL DATA_IN: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
DATA_IN<=D&C&B&A;
PROCESS(DATA_IN,CLK,LDN,CLRN)
V ARIABLE CNT:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLRN='0' THEN
CNT:=(OTHERS=>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF LDN='0' THEN
CNT:=DATA_IN;
ELSE
CNT:=CNT+1;
END IF;
END IF;
CASE CNT IS
WHEN "1111"=> CARRY<='1';
WHEN OTHERS=> CARRY<='0';
END CASE;
QA<=CNT(0);
QB<=CNT(1);
QC<=CNT(2);
QD<=CNT(3);
END PROCESS;
END A;
5-14用VHDL描述一个三态输出的双4选一的数据选择器,其地址信号共用,且各有一个低电平有效的使能端。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DUAL_MUX_41 IS
PORT(
A,B,C,D : IN STD_LOGIC;
ENA_N,ENB_N : IN STD_LOGIC;
S : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
OUTA,OUTB : OUT STD_LOGIC
);
END;
ARCHITECTURE A OF DUAL_MUX_41 IS
SIGNAL P,Q : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
P<=ENA_N & S;
Q<=ENB_N & S;
WITH P SELECT
OUTA<=A WHEN "000",
B WHEN "001",
C WHEN "010",
D WHEN "011",
'Z' WHEN OTHERS;
WITH Q SELECT
OUTB<=A WHEN "000",
B WHEN "001",
C WHEN "010",
D WHEN "011",
'Z' WHEN OTHERS;
END A;
5-15试用并行信号赋值语句分别描述下列器件的功能:
(1)3-8译码器
(2) 8选1数据选择器
(1)功能描述如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY decoder38 IS
PORT(a,b,c,g1,g1a,a2b:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END decoder38;
ARCHITECTURE behave38 OF decoder38 IS
SIGNAL inda: STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
inda<=c&b&a;
PROCESS(indata,g1,g2a,g2b)
BEGIN
IF(g1='1' AND g2a='0' AND g2b='0') THEN
CASE inda IS
WHEN "000"=>q<="11111110";
WHEN "001"=>q<="11111101";
WHEN "010"=>q<="11111011";
WHEN "011"=>q<="11110111";
WHEN "100"=>q<="11101111";
WHEN "101"=>q<="11011111";
WHEN "110"=>q<="10111111";
WHEN "111"=>q<="01111111";
WHEN OTHERS =>q<="XXXXXXXX";
END CASE;
ELSE
q<="11111111";
END IF;
END PROCESS;
END behave38;
(2)功能描述如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux8 IS
PORT(d0,d1,d2,d3,d4,d5,d6,d7:IN STD_LOGIC_VECTOR(7 DOWNTO
0);
s0,s1,s2:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END mux8;
ARCHITECTURE behave OF mux8 IS
SIGNAL s: STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
s <=s2&s1&s0;
WITH s SECLECT
d <=d0 WHEN "000",
d1 WHEN "001",
d2 WHEN "010",
d3 WHEN "011",
d4 WHEN "100",
d5 WHEN "101",
d6 WHEN "110",
d7 WHEN "111",
‘X’WHEN OTHERS;
END behave;
5-16利用生产语句描述一个由n个一位全减器构成的n位减法器,n 的默认值为4。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY F_SUB4_2 IS
GENERIC (N : INTEGER := 4);
PORT(
A,B : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
CIN : IN STD_LOGIC;
DIFF: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0);
COUT: OUT STD_LOGIC
);
END;
ARCHITECTURE A OF F_SUB4_2 IS
COMPONENT F_SUB1 IS
PORT(
A,B,CIN : IN STD_LOGIC;
DIFF,COUT : OUT STD_LOGIC
);
END COMPONENT;
SIGNAL C :STD_LOGIC_VECTOR(N DOWNTO 0);
BEGIN
C(0)<=CIN;
N1: FOR I IN 0 TO N-1 GENERATE
U1: F_SUB1 PORT MAP(A(I),B(I),C(I),DIFF(I),C(I+1));
END GENERATE;
COUT<=C(N);
END A;
5-17用VHDL语言设计实现输出占空比为50%的1000分频器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DIV_1000 IS
PORT(
CLK ,CLR: IN STD_LOGIC;
DIV : OUT STD_LOGIC
);
END;
ARCHITECTURE A OF DIV_1000 IS
SIGNAL Q : STD_LOGIC;
BEGIN
DIV<=Q;
PROCESS(CLK,CLR)
V ARIABLE CNT : INTEGER RANGE 0 TO 499; BEGIN
IF CLR='1' THEN
CNT:=0; Q<='0';
ELSIF RISING_EDGE(CLK) THEN
IF CNT=499 THEN
CNT:=0;
Q<=NOT Q;
ELSE
CNT:=CNT+1;
END IF;
END IF;
END PROCESS;
END A;。