求高手解释一个VHDL分频程序

程序为libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOG... 程序为
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity d3 is
port (clk: in std_logic;
out1: out std_logic);
end d3;

architecture Behavioral of d3 is
signal division2,division4 :std_logic:='0';
signal temp1,temp2:integer range 0 to 10;
begin
p1:process(clk)
begin
if rising_edge(clk) then
temp1 <=temp1+1;
if temp1=1 then
division2<='1';
elsif temp1=2 then
division2<='0';
temp1<=0;
end if;
end if;
end process p1;
p2:process(clk)
begin
if clk'event and clk='0' then
temp2<=temp2+1;
if temp2=1 then
division4<='1';
elsif temp2=2 then
division4<='0';
temp2<=0;
end if;
end if;
end process p2;

p3:process(division2,division4)
begin
out1<=division2 or division4;
end process p3;

end Behavioral;
展开
 我来答
百度网友3112165ed
2011-10-08 · TA获得超过111个赞
知道答主
回答量:58
采纳率:0%
帮助的人:24.5万
展开全部
这个程序就是为了得到一个占空比为3/4的方波,波形仿真一下,把division2、division4和out1的波形调出来就可以了。或者根据程序自己画波形分析一下就OK了。
追问
能具体解释下每步是什么意思吗,就是注释程序
追答
不好意思,上面我的分析是有问题的,我忘记了信号量不能够立即赋值的,这是一个三分频的程序,我服了一张仿真图,你仔细的分析一下看看。
p1:process(clk)
begin
if rising_edge(clk) then
temp1 <=temp1+1; //这条语句执行后我们可能会认为temp1的值已经加一了,其实不是的,因为temp1为signal类型的,它的值只有在PROCESS执行完毕以后才会发生变化。若要使将temp1定义为局部变量,那么它的值就是立即变化的。下面的那些if语句就不用解释了吧。
if temp1=1 then
division2<='1';
elsif temp1=2 then
division2<='0';
temp1<=0;
end if;
end if;
end process p1;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式