longtim 发表于 2010-6-26 00:46:00

程序怎么改:输入有两个时钟信号:gate:1Hz方波,clk:40MHz;另一输入是使能信号:en

现想实现如下功能:
输入有两个时钟信号:gate:1Hz方波,clk:40MHz;另一输入是使能信号:en。
输出:对40MHz方波进行分频输出方波:dataout。
要求:在en=1时,dataout=0;在en=0时,等gate的上升沿来时,dataout开始输出方波,以后等每个gate的上升沿对输出复位一次,使输出与gate的上升沿同步。
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY KEYSCAN IS
PORT (
   clk      : IN std_logic;
gate       : IN std_logic;
en      : IN std_logic;
dataout   : OUT std_logic);
END KEYSCAN;

ARCHITECTURE arch OF KEYSCAN IS
SIGNAL div_cnt : std_logic_vector(3 downto 0);
SIGNAL dataout_tmp : std_logic;
SIGNAL start : std_logic;
BEGIN

dataout<=dataout_tmp;

PROCESS(en,clk,gate)

BEGIN

IF (en= '1') THEN
   dataout_tmp<='0';
   div_cnt <= "0000";
   start<='1';
elsif(en= '0') then
IF (gate'EVENT AND gate = '1') THEN
    dataout_tmp<='1';
    div_cnt <= "0000";
    start<='0';
end if;
end if;
   IF(start<='0' and (clk'EVENT AND clk = '1'))then   
    div_cnt <= div_cnt + 1;
   IF (div_cnt="0111") THEN
    dataout_tmp<='0';
   ELSIF (div_cnt="1111") THEN
    dataout_tmp<='1';
   end if;
end if;

END PROCESS;
END arch;

提示如下错误:

怎么改正,请指点,谢谢!

Error (10629): VHDL error at KEYSCAN.vhd(42): can't synthesize logic for statement with conditions that test for the edges of multiple clocks

usb 发表于 2010-6-26 00:53:37

应该是多时钟驱动问题

HANG 发表于 2010-6-26 01:45:42

那怎样实现上述功能呢?

ups 发表于 2010-6-26 03:14:25

多时钟源不能在一个process里面实现,如果真的需要多时钟源的话,最好分开写<br>
建议采用一个时钟,另一个作为控制信号
页: [1]
查看完整版本: 程序怎么改:输入有两个时钟信号:gate:1Hz方波,clk:40MHz;另一输入是使能信号:en