首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

移相的问题

移相的问题

要用一片FPGA做一个移相器。输入20M晶振作为信号源,输出N路同频信号,每相临两路相位差360/N度。输入端控制输出其中的某一路。 我用VHDL编的计数延时程序在MAXPLUS里仿真波形不对,又用AFTER语句也不行(不能综合)。我直接写一个小程序将输入的时钟输出,波形居然有延时。我是初学者,请问各位高手有什么解决办法?
20M信号都是ns级的,延时也只延时几ns,一般的硬件固有的延时也有几ns吧?这样是不是太不精确?
我写了个计数的,你看看
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity move72 is
port(clk20:in std_logic_vector(4 downto 0);
clk:in std_logic;
control:in std_logic_vector(2 downto 0);
sut std_logic);
end;
architecture move of move72 is
signal q1:integer ;
signal q2:integer ;
signal q3:integer ;
signal q4:integer ;
signal y:std_logic_vector(4 downto 0);
begin
y(0)<=clk20(0);

process(clk)
begin

if(clk'event and clk='1')then
q1<=q1 +1;
end if;
if q1>=1 then
y(1)<=clk20(1);
else y(1)<='0';
end if;
end process;
process(clk)
begin

if(clk'event and clk='1')then
q2<=q2 +1;
end if;
if q2>=2 then
y(2)<=clk20(2);
else y(2)<='0';
end if;
end process;
process(clk)
begin

if(clk'event and clk='1')then
q3<=q3 +1;
end if;
if q3>=3 then
y(3)<=clk20(3);
else y(3)<='0';
end if;
end process;
process(clk)
begin

if(clk'event and clk='1')then
q4<=q4 +1;
end if;
if q4>=4 then
y(4)<=clk20(4);
else y(4)<='0';
end if;
end process;
process(control)
begin
case control is
when "000"=>s<=y(0);
when "001"=>s<=y(1);
when "010"=>s<=y(2);
when "011"=>s<=y(3);
when "100"=>s<=y(4);
when others=>s<='0';
end case;
end process;
end;

CLK每跳一下输出一个CLK20。看看问题出在哪?

主要看你需要输出多大的频率,如果小于20M的1/N的话,那就可以产生360/N的信号,如果大于则肯定不可以的,这个也比较好理解了。直接将输入始终输出肯定会有延时的,因为期间是有相应时间的。

在交流中前进,共同实现nios的应用。
写错了,器件是有响应时间的
在交流中前进,共同实现nios的应用。
返回列表