集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2561|回复: 3

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

[复制链接]
longtim 发表于 2010-6-26 00:46:00 | 显示全部楼层 |阅读模式
现想实现如下功能:
输入有两个时钟信号: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 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-15 21:49 , Processed in 0.180272 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表