翻译一下这几个VHDL程序

请给程序做详细的注释 解释下每句话的意义和用法
不要无聊的引用网站或者没用的话
我只要有真才实学的人来详细解释 我要能自己弄 我就不提问了 同样无知的人请不要回答
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY BUFF IS
PORT
(
LD: IN STD_LOGIC;
AA: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
BB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END BUFF;
ARCHITECTURE a OF BUFF IS
SIGNAL BUFF1: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(LD)
BEGIN
IF LD='1' THEN BUFF1<=AA;
ELSE NULL;
END IF;
END PROCESS;
BB<=BUFF1;
END A;

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 a 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;
ELSE CQI:=(OTHERS=>'0');
END IF;
END IF;
END IF;
IF CQI=9 THEN COUT<='1';
ELSE COUT<='0';
END IF;
CQ<=CQI;
END PROCESS;
END a;
由于字数限制 本来是5个程序 其他2大 不分在
http://zhidao.baidu.com/question/100457868.html?quesup1
http://zhidao.baidu.com/question/100457989
如果都回答的话 我至少会附赠 50分-100分

和前面相同的我就不解释了

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;--不解释
ENTITY BUFF IS --buff实体定义
PORT
(
LD: IN STD_LOGIC;
AA: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
BB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);--ld AA为输入型号 bb为输出 其中AA BB 是4位信号
END BUFF;
ARCHITECTURE a OF BUFF IS 定义buff实体下的结构体a
SIGNAL BUFF1: STD_LOGIC_VECTOR(3 DOWNTO 0); 定义信号量buff1 共4位
BEGIN 开始
PROCESS(LD) 引入进程(LD为敏感信号) 一般敏感信号是你的输入端口
BEGIN 开始
IF LD='1' THEN BUFF1<=AA; 如果ld为高电平 则 AA的4位数据送入buff信号量 记住 只有 定义的信号量 采用“<=”这个符号 定义变量 符号为“:=”
ELSE NULL;--否则 不做任何事情
END IF;结束if
END PROCESS;结束进程
BB<=BUFF1; 把buff1的值送给外部端口BB
END A;结束A

另外说一句 信号量可以看成是内部电源线路 有硬件特性 是有先后顺序的,而变量 是可以随时改变的 如果不明白 可以查查C语言中的volatile关键字(VHDL里面没有这个关键字,但意思是一样的)

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;--不解释
ENTITY cnt10 IS --定义cnt10这个实体
PORT
(
clk,rst,en: IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC
); --端口定义 clk rst en为输入,cq 是4位输出 cout是输出
END CNT10;
ARCHITECTURE a OF CNT10 IS--定义cnt10实体下的a结构体
BEGIN-开始
PROCESS (clk,RST,EN)-进程开始 敏感信号 clk rst en
VARIABLE CQI: STD_LOGIC_VECTOR(3 DOWNTO 0);--定义变量 CQI 4位
BEGIN 开始
IF RST = '1' THEN CQI:=(OTHERS=>'0'); 如果RST为高电平 则 CQI全部是低电平 注意“:=”前面我说过
ELSIF (clk'EVENT AND clk = '1') THEN 否则 上升沿来的时候
IF EN = '1' THEN 外加en为高电平的时候
IF CQI<9 THEN CQI:=CQI+1; 然后CQI 小于9 这3个条件同时满足(有先后优先级顺序的)CQI 自加1
ELSE CQI:=(OTHERS=>'0'); 否则CQI清零
END IF;结束if
END IF;结束if
END IF;结束if
IF CQI=9 THEN COUT<='1';如果cqi=9 则cout输出高电平
ELSE COUT<='0'; 否则 cout一直为低电平
END IF;
CQ<=CQI; CQI的值传给CQ
END PROCESS;结束进程
END a; 结束

另外 一个实体可以有多个结构体 也就是说 一个cnt10可以有a这个结构体 比如上面这个程序 也可以有b,c,d....这些 所以要有一个begin...
这个程序每隔9个时钟周期输出一个高电平 可以看成分频程序
温馨提示:答案为网友推荐,仅供参考
相似回答