clk循环中的VHDL变量检查
我试图比较clk循环中的两个值 例如:clk循环中的VHDL变量检查,vhdl,Vhdl,我试图比较clk循环中的两个值 例如: if(行驶边缘(clk))然后 如果(某些信号=其他),则 other如果没有一个最小的工作示例,我只能猜测您是通过不指定标志在other不是3时发生的情况来推断闩锁。为了防止这种情况,您需要指定任何决策树的所有案例 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY example IS PORT (some_signal : IN STD_LOGIC; ot
if(行驶边缘(clk))然后
如果(某些信号=其他),则
other如果没有一个最小的工作示例,我只能猜测您是通过不指定标志
在other
不是3时发生的情况来推断闩锁。为了防止这种情况,您需要指定任何决策树的所有案例
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY example IS
PORT (some_signal : IN STD_LOGIC;
other : IN STD_LOGIC;
clk : IN STD_LOGIC;
flag : OUT STD_LOGIC;
);
END example;
ARCHITECTURE minimal OF example IS
BEGIN
minexample:PROCESS(clk)
BEGIN
IF (clk'EVENT and clk='1') THEN
IF some_signal = other THEN
other <= other + '1';
ELSE other <= other;
END IF;
IF(other = '1') THEN
flag <= '1';
ELSE flag <= '0'; -- always specify all cases
END IF;
END IF;
END PROCESS minexample;
END minimal;
ieee库;
使用ieee.std_logic_1164.ALL;
实体示例是
端口(某些_信号:在标准_逻辑中;
其他:标准逻辑;
clk:标准逻辑中;
标志:输出标准逻辑;
);
结束示例;
示例的架构是
开始
Mine示例:过程(clk)
开始
如果(clk'事件和clk='1'),则
如果某个信号=其他,则
other我使用N8TRO代码并添加一个复位,在启动时将信号设置为零,并将信号other更改为整数(因为您喜欢检查值3)和上升沿(应该是更好的方法)
现在,复位设置为低后,信号标志应在4个时钟后升高至高。这是你期望的行为吗
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY example IS
PORT (some_signal : IN STD_LOGIC;
other : IN integer range 0 to 3; --this should be an integer 2 bit widht
clk : IN STD_LOGIC;
reset : IN STD_LOGIC;
flag : OUT STD_LOGIC;
);
END example;
ARCHITECTURE minimal OF example IS
BEGIN
minexample:PROCESS(clk,reset)
BEGIN
IF (reset = '1') then --i think a reset is a good idea
flag <= '0';
other <= 0;
ELSIF (rising_edge(clk)) THEN
IF some_signal = other THEN
other <= other + 1;
ELSE
other <= other;
END IF;
IF(other = 3) THEN --other is now an integer, so you can check on 3
flag <= '1';
ELSE
flag <= '0'; -- always specify all cases
END IF;
END IF;
END PROCESS minexample;
END minimal;
ieee库;
使用ieee.std_logic_1164.ALL;
实体示例是
端口(某些_信号:在标准_逻辑中;
其他:在0到3的整数范围内;--这应该是一个2位宽的整数
clk:标准逻辑中;
复位:在标准逻辑中;
标志:输出标准逻辑;
);
结束示例;
示例的架构是
开始
示例:进程(clk、重置)
开始
如果(reset='1'),那么——我认为reset是个好主意
flag请发布真实代码,而不是伪代码。听起来不错,但信号分配不应该是你是对的。。我现在不在编译器附近,我只是在转换一些旧代码。谢谢。我试着做同样的事情,但它仍然声明条件为真,即使我添加了其他条件。我认为问题在于,当它在值之间波动时,它也会得到3,并将标志设置为高,从而使条件变为真。我知道问题是什么,但我该如何解决它。@user3217602你需要重新思考你想做什么。如果某个_信号
为“3”,则标志将为真,否则标志将为假(在其他增量足以等于某个_信号之后)。。我建议在你的问题描述中加入更多细节。。以及更多的努力来做出一个有效的例子。
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY example IS
PORT (some_signal : IN STD_LOGIC;
other : IN integer range 0 to 3; --this should be an integer 2 bit widht
clk : IN STD_LOGIC;
reset : IN STD_LOGIC;
flag : OUT STD_LOGIC;
);
END example;
ARCHITECTURE minimal OF example IS
BEGIN
minexample:PROCESS(clk,reset)
BEGIN
IF (reset = '1') then --i think a reset is a good idea
flag <= '0';
other <= 0;
ELSIF (rising_edge(clk)) THEN
IF some_signal = other THEN
other <= other + 1;
ELSE
other <= other;
END IF;
IF(other = 3) THEN --other is now an integer, so you can check on 3
flag <= '1';
ELSE
flag <= '0'; -- always specify all cases
END IF;
END IF;
END PROCESS minexample;
END minimal;