这程序是一个等精度频率计,能够正常仿真,但是下爱到CPLD中后,CPLD中没有sta信号输出,单片机给定的GATE,CLR都正常,CPLD型号为EPM240T100C5,程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY clk_ent IS
PORT(bclk:IN STD_LOGIC; --标准频率(40HZ)时钟信号
xclk:IN STD_LOGIC; --待测频率信号
gate:IN STD_LOGIC; --预置门控制信号
sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);--数据读出控制
clr:IN STD_LOGIC; --清零和初始化信号
sta:OUT STD_LOGIC; --计数结束标志信号
databus:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--计数器输出
END clk_ent;
ARCHITECTURE counter OF clk_ent IS
SIGNAL bz_count,dc_count:STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL bz_ena,dc_ena:STD_LOGIC;--允许计数使能信号
BEGIN
PROCESS(sel) --读计数值进程
BEGIN
CASE sel(1 DOWNTO 0)IS
WHEN"00"=>databus<=bz_count(15 DOWNTO 0);--标准频率信号计数器值(低16位)
WHEN"01"=>databus<=bz_count(31 DOWNTO 16); --标准频率信号计数器值(高16位)
WHEN"10"=>databus<=dc_count(15 DOWNTO 0); --被测频率信号计数器值(低16位)
WHEN"11"=>databus<=dc_count(31 DOWNTO 16); --被测频率信号计数器值(高16位)
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
bzcounter:PROCESS(bclk,clr,gate) --标准频率计数器进程
BEGIN
IF clr = '1' THEN bz_count<=(OTHERS=>'0');
ELSIF bclk'EVENT AND bclk='1' THEN
IF bz_ena='1' THEN bz_count<=bz_count+1;
END IF;
END IF;
END PROCESS;
dccounter:PROCESS(xclk,clr,gate) --被测频率计数器进程
BEGIN
IF clr = '1' THEN dc_count<=(OTHERS=>'0');
ELSIF xclk'EVENT AND xclk='1' THEN
IF dc_ena='1' THEN dc_count<=dc_count+1;
END IF;
END IF;
END PROCESS;
DQ:PROCESS(xclk,clr) --预置门控制进程
BEGIN
IF clr = '1' THEN dc_ena<='0';
ELSIF xclk'EVENT AND XCLK='1' THEN
dc_ena<=gate;
END IF;
END PROCESS;
bz_ena<=dc_ena;
sta<=dc_ena;
END ARCHITECTURE;引脚配置如图所示:
先谢过各位了,谢谢!
|