跪求帮忙改VHDL的错误,大虾们帮帮我啊

来源:百度知道 编辑:UC知道 时间:2024/06/28 09:22:40
跪求帮忙改VHDL的错误,大虾们帮帮我啊
--CTRL.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CTRL IS
PORT (DATA_N: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DATA_F: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
FLAG_N: IN STD_LOGIC;
FLAG_F: IN STD_LOGIC;
CLK: IN STD_LOGIC;
ENLOCK: OUT STD_LOGIC; --1: LOCK, 0: UNLOCK
DATA_BCD: OUT STD_LOGIC_VECTOR (15 DOWNTO 0));
END ENTITY CTRL ;
ARCHITECTURE ART OF CTRL IS
SIGNAL ACC, REG: STD_LOGIC_VECTOR (15 DOWNTO 0);
--ACC用于暂存键盘输入的信息,REG用于存储输入的密码
SIGNAL NC: STD_LOGIC_VECTOR (2 DOWNTO 0);
SIGNAL QA, QB: STD_LOGIC;
-- SIGNAL R1, R0: STD_LOGIC;
BEGIN
PROCESS(CLK) --按键输入存储,移位 **
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF FLAG_N'EVENT AND FLAG_N = '1' THEN
IF

我觉得这句有问题:IF FLAG_N'EVENT AND FLAG_N = '1' THEN
因为这样的写法,综合器会编译成时钟信号,这样就会造成同时与CLK一样成为两个时钟的上升沿来处理,有可能产生了冲突。此外,FLAG_N作为输入信号,理应在敏感列表里啊。修改下捕获FLGA_N上升沿后在调试。

IF CLK'EVENT AND CLK='1' THEN
IF FLAG_N'EVENT AND FLAG_N = '1' THEN
这句是错的,不能在一个进程中使用两个上升沿触发。