If statement 比较if()条件vhdl中的std_逻辑_向量
我试图将计数值(标准逻辑向量)与定义的十六进制值进行比较。但我并没有像下面那样得到结果If statement 比较if()条件vhdl中的std_逻辑_向量,if-statement,hex,vhdl,intel-fpga,If Statement,Hex,Vhdl,Intel Fpga,我试图将计数值(标准逻辑向量)与定义的十六进制值进行比较。但我并没有像下面那样得到结果 signal count : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000"; --res_bits =16 signal round : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000"; signal cnt : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000"; -
signal count : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000"; --res_bits =16
signal round : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000";
signal cnt : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000"; --res_bits =16
process(clk_50)
begin
if (falling_edge(clk_50)) then
t(1)<=t(0);
t(0)<=A;
t(3)<=t(2);
t(2)<=B;
case (temp) is
when "0001" => cnt<= cnt + '1';
when "0010" => cnt<= cnt - '1';
when "1000" => cnt<= cnt + '1';
when "1011" => cnt<= cnt - '1';
end case;
count <= cnt;
if (count = x"0320") then --if count 800
round <= round + '1';
cnt <= x"0000"; -- reset cnt
count <= x"0000"; -- reset count
end if;
end if;
end process;
信号计数:标准逻辑向量(res_位-1降到0):=x“0000”--res_位=16
信号轮:标准逻辑向量(res_位-1向下至0):=x“0000”;
信号cnt:STD_逻辑_向量(res_位-1向下至0):=x“0000”--res_位=16
工艺(clk_50)
开始
如果(下降沿(clk_50)),则
首先:你认为标准逻辑向量是什么std\U逻辑\U向量
是std\U逻辑
的数组<代码>标准逻辑
是一个已解决的标准逻辑
std_ulogic
是一种定义数字电路中电线状态的类型。但更重要的是:std\u逻辑[\u向量]
不是一种整数类型
如果要使用+
和-
运算符进行算术运算,应该使用算术类型<代码>有符号的和无符号的
(在数字标准
中定义)最适合于此。因此,不要使用使用ieee.std\u logic\u arith.all
(非标准),而是使用使用ieee.numeric\u std.all
(在标准中定义)
接下来,一些信息包括重置信号。如果您决定将
res\u位设置为17,该怎么办?然后
signal count : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000";
这是行不通的。因此,使用others
将所有位设置为“0”,以获得最大的灵活性。即
signal count : UNSIGNED(res_bits-1 DOWNTO 0) := (others => '0');
现在让我们看看这个过程。。。嗯。有许多分配给temp
。。。但您从未定义temp
。我帮不了你
然后看案例陈述<代码>案例(临时)为…
。我看到了1,2,4,7,8等的时间。。。但是当temp
为例如0时会发生什么?您需要为所有可能性定义一个when
。但是如果你不想为这些案子做任何事情呢。。。只需执行null
!例如
case (temp) is
when "0001" => cnt<= cnt + '1';
[...]
when "1110" => cnt<= cnt + '1';
when others => null; -- <== required
end case;
然后是信号分配。应用于信号的值在下一个增量循环之前不会应用。但这个增量循环直到过程完成后才会发生。例如:
- 想象一下,当过程开始时,cnt=799=x“031F”和
=0001”temp
- 在
语句中,case
是一个已解决的cnt第一件事:你认为标准逻辑向量是什么
是std\U逻辑\U向量
的数组<代码>标准逻辑std\U逻辑
标准逻辑
是一种定义数字电路中电线状态的类型。但更重要的是:std_ulogic
不是一种整数类型 如果要使用std\u逻辑[\u向量]
和+
运算符进行算术运算,应该使用算术类型<代码>有符号的和-
(在无符号的
中定义)最适合于此。因此,不要使用数字标准
(非标准),而是使用使用ieee.std\u logic\u arith.all
(在标准中定义)使用ieee.numeric\u std.all
接下来,一些信息包括重置信号。如果您决定将
。我看到了1,2,4,7,8等的时间。。。但是当res\u位设置为17,该怎么办?然后
这是行不通的。因此,使用signal count : STD_LOGIC_VECTOR(res_bits-1 DOWNTO 0):= x"0000";
将所有位设置为“0”,以获得最大的灵活性。即others
signal count : UNSIGNED(res_bits-1 DOWNTO 0) := (others => '0');
现在让我们看看这个过程。。。嗯。有许多分配给
。。。但您从未定义temp
。我帮不了你 然后看案例陈述<代码>案例(临时)为…temp
为例如0时会发生什么?您需要为所有可能性定义一个temp
。但是如果你不想为这些案子做任何事情呢。。。只需执行when
!例如null
case (temp) is when "0001" => cnt<= cnt + '1'; [...] when "1110" => cnt<= cnt + '1'; when others => null; -- <== required end case;
然后是信号分配。应用于信号的值在下一个增量循环之前不会应用。但这个增量循环直到过程完成后才会发生。例如:- 想象一下,当过程开始时,cnt=799=x“031F”和
=0001”temp
- 在
语句中,case
cnt请编辑您的问题,使其具有并提供更好的问题解释。您确实意识到不同大小的std_逻辑_向量上的相等运算符定义为始终返回false,对吗?不,您没有添加其余代码。请提供一份报告。你要求任何能帮助你击中移动目标的人以渐进的方式提供更多信息。去掉count,使用cnt并与799进行比较。我已回滚您的最新编辑。在你问了最初的问题几周后,请不要对代码进行大的编辑。阅读你能做和不能做的事情。如果你对一段新代码还有疑问,可以问一个新问题。你能解释一下你最近的编辑吗???这对这个问题没有任何价值。。。你为什么要这么做?请编辑你的问题,让它有更好的解释问题。你知道不同大小的std_逻辑_向量上的相等运算符定义为总是返回false,对吗?不,你没有添加其余的代码。请提供一份报告。你要求任何能帮助你击中移动目标的人以渐进的方式提供更多信息。去掉count,使用cnt并与799进行比较。我已回滚您的最新编辑。在你问了最初的问题几周后,请不要对代码进行大的编辑。阅读你能做和不能做的事情。如果你对一段新代码还有疑问,可以问一个新问题。你能解释一下你最近的编辑吗???这对这个问题没有任何价值。。。为什么要这么做?当然,过程中的变量不会失去值,但如果使用时没有先赋值,确实会推断出闩锁,这可能被认为是有害的。“过程结束时变量会失去值”;你可以推断你是谁
- 想象一下,当过程开始时,cnt=799=x“031F”和