求高手解释一个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; 展开
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; 展开
1个回答
展开全部
这个程序就是为了得到一个占空比为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;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询