when S3 =>
NS<=S5;
Rd_ack<='0';
if (u=0) then
send:=u;
NS<=S4;
end if;
if (v=0) then
send:=u;
NS<=S4;
end if;
when S4 =>
如何将u和v与0和u进行比较? 我想要以下陈述
if( v= u) then. ....
if( u= 0) then
u and v are signa
信号u,v:std_logic_vector(0到31);
在VHDL中,我可以使用send来存储值吗? send是一个变量。 如果我们进入状态s4,我们想要在发送中获取数据并将其分配给信号。
答案 0 :(得分:1)
在没有提供数字文字的类型信息的情况下,您已经让某人回答了问题。
如果你真的想要针对整数类型测试std_logic_vector,你可以编写一个执行比较的相等运算符("="
)函数:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity fum is
end entity;
architecture foo of fum is
signal u,v: std_logic_vector (31 downto 0);
signal NS,S4: std_logic;
function "=" (a:std_logic_vector; b: natural) return BOOLEAN is
variable as_slv: std_logic_vector(a'range);
begin
as_slv := std_logic_vector(to_unsigned(b,as_slv'length));
for i in a'range loop
if a(i) /= as_slv(i) then
return FALSE;
end if;
end loop;
return TRUE;
end function;
begin
SOME_PROCESS:
process(u,v,S4)
variable send: std_logic_vector (u'range);
begin
if u = 0 then
send := u;
NS <= S4;
end if;
if v = 0 then
send := u;
NS <= S4;
end if;
end process;
end architecture;
这个示例代码分析,阐述和模拟(尽管没有做任何有趣的事情)。
请注意,这个使用自然作为类型,std_logic_vector本质上是未签名的,它是一个比特包。
如果您只对测试所有&#39; 0&#39;而感兴趣?值:
architecture fee of fum is
signal u,v: std_logic_vector (31 downto 0);
signal NS,S4: std_logic;
constant ZERO: std_logic_vector (u'range) := (others => '0');
begin
SOME_PROCESS:
process(u,v,S4)
variable send: std_logic_vector (u'range);
begin
if u = ZERO then
send := u;
NS <= S4;
end if;
if v = ZERO then
send := u;
NS <= S4;
end if;
end process;
end architecture;
与建筑费有关的人也会在不做任何有趣的事情的同时进行分析,阐述和模拟。
表达式中不允许使用常量ZERO
而不是等效的X"00000000"
,(others => '0')
。
此示例代码中变量send
的范围仅限于声明性区域,在本例中仅限于流程语句SOME_PROCESS
。假设有一个人用一个关于状态值的case语句充实了这个过程,send
可以用来在那个过程中分配一个信号。
在比较数字文字时,您可以使用类型转换,而不是编写新的运算符"="
函数:
architecture fie of fum is
signal u,v: std_logic_vector (31 downto 0);
signal NS,S4: std_logic;
begin
SOME_PROCESS:
process(u,v,S4)
variable send: std_logic_vector (u'range);
begin
if unsigned (u) = 0 then
send := u;
NS <= S4;
end if;
if unsigned(v) = 0 then
send := u;
NS <= S4;
end if;
v <= send;
end process;
end architecture;
模拟时有一个缺点:
david_koontz @ Macbook:ghdl -r fum
../../../src/ieee/numeric_std-body.v93:1710:7:@0ms:(assertion
警告):NUMERIC_STD。&#34; =&#34;:检测到元数值,返回FALSE
../../../src/ieee/numeric_std-body.v93:1710:7:@0ms:(assertion
警告):NUMERIC_STD。&#34; =&#34;:检测到元数值,返回FALSE
david_koontz @ Macbook:
数值域中的比较(使用包numeric_std&#39; s&#34; =&#34;)对元值敏感。