For loop 如何在过程中使用for循环
我需要在过程中使用for循环来影响信号的所有位,否则代码将非常庞大 我的代码如下所示:For loop 如何在过程中使用for循环,for-loop,vhdl,procedure,For Loop,Vhdl,Procedure,我需要在过程中使用for循环来影响信号的所有位,否则代码将非常庞大 我的代码如下所示: FSM : process(CLK, RST) procedure Reset is begin triplet_check_vec <= (others=>'0'); end Reset; procedure triplet_check is begin for k in 0 to 19 loop
FSM : process(CLK, RST)
procedure Reset is
begin
triplet_check_vec <= (others=>'0');
end Reset;
procedure triplet_check is
begin
for k in 0 to 19 loop
triplet_check_vec(k) <= (DATA_IN(3*k+0) and DATA_IN(3*k+1) and DATA_IN(3*k+2)) or (not(DATA_IN(3*k+0)) and not(DATA_IN(3*k+1)) and not(DATA_IN(3*k+2)));
end loop;
end triplet_check;
begin
if RST = '1' then
Reset;
elsif rising_edge(CLK) then
-- some stuff
-- ...
triplet_check;
-- ...
-- some stuff
end if;
end process FSM;
FSM:过程(时钟、RST)
程序重置为
开始
三元组检查向量“0”);
结束复位;
程序三元组检查为
开始
对于0到19循环中的k
triplet_check_vec(k)一个过程的参数列表定义了它的输入和输出,有点像一个微型模块。它可以是信号或常量,但与模块不同,它也可以是变量。欲知详情
创建过程的基本语法是
procedure <procedure_name> (signal|variable|constant <name1> : in|out|inout <type>;
signal|variable|constant <name2> : in|out|inout <type>;
... ) is
<signal_constant_or_variable_declarations_for_use_within_the_procedure>
begin
<code_performed_by_the_procedure_here>
end procedure;
程序(信号|变量|常数:输入|输出|输入;
信号|变量|常数:输入|输出|输入;
…)是
开始
结束程序;
以你为例
procedure triplet_check (constant DATA_IN : in std_logic_vector(59 downto 0);
variable triplet_check_vec : out std_logic_vector(19 downto 0)) is
begin
for k in 0 to 19 loop
triplet_check_vec(k) <= (DATA_IN(3*k+0) and DATA_IN(3*k+1) and DATA_IN(3*k+2)) or (not(DATA_IN(3*k+0)) and not(DATA_IN(3*k+1)) and not(DATA_IN(3*k+2)));
end loop;
end triplet_check;
procedure triplet\u check(常量数据\u IN:标准逻辑\u向量(59向下至0);
变量三元组校验向量:输出标准逻辑向量(19向下至0))为
开始
对于0到19循环中的k
triplet_check_vec(k)一个过程的参数列表定义了它的输入和输出,有点像一个微型模块。它可以是信号或常量,但与模块不同,它也可以是变量。欲知详情
创建过程的基本语法是
procedure <procedure_name> (signal|variable|constant <name1> : in|out|inout <type>;
signal|variable|constant <name2> : in|out|inout <type>;
... ) is
<signal_constant_or_variable_declarations_for_use_within_the_procedure>
begin
<code_performed_by_the_procedure_here>
end procedure;
程序(信号|变量|常数:输入|输出|输入;
信号|变量|常数:输入|输出|输入;
…)是
开始
结束程序;
以你为例
procedure triplet_check (constant DATA_IN : in std_logic_vector(59 downto 0);
variable triplet_check_vec : out std_logic_vector(19 downto 0)) is
begin
for k in 0 to 19 loop
triplet_check_vec(k) <= (DATA_IN(3*k+0) and DATA_IN(3*k+1) and DATA_IN(3*k+2)) or (not(DATA_IN(3*k+0)) and not(DATA_IN(3*k+1)) and not(DATA_IN(3*k+2)));
end loop;
end triplet_check;
procedure triplet\u check(常量数据\u IN:标准逻辑\u向量(59向下至0);
变量三元组校验向量:输出标准逻辑向量(19向下至0))为
开始
对于0到19循环中的k
三元组检查向量(k)triplet检查向量
是如何声明的?什么是CLK
?它有上升的优势吗?什么是一些东西?什么是
中的数据?你是对的,我没有提供足够的细节。CLK是一种标准逻辑,它有上升的边缘。triplet_check_vec是一个标准逻辑向量(19向下到0)DATA_IN是一个标准逻辑向量(19向下到0)我首先做的是在triplet_check过程中一点一点地影响triplet_check_vec,它起作用了。现在唯一的区别是循环,它不再工作了。例如,对于k=19
,您正在访问(3*k+2)
中的数据,这是数据(57+2)
这是数据(59)
,它不存在。计算这些索引的方式有问题。是否在过程范围内未重新定义“triplet\u check\u vec”?你能用定义的in和output参数来完成这个过程吗?对不起,我说了一个错误,DATA_in是std_logic_vector(59向下到0)如何声明三重态检查向量?什么是CLK
?它有上升的优势吗?什么是一些东西?什么是
中的数据?你是对的,我没有提供足够的细节。CLK是一种标准逻辑,它有上升的边缘。triplet_check_vec是一个标准逻辑向量(19向下到0)DATA_IN是一个标准逻辑向量(19向下到0)我首先做的是在triplet_check过程中一点一点地影响triplet_check_vec,它起作用了。现在唯一的区别是循环,它不再工作了。例如,对于k=19
,您正在访问(3*k+2)
中的数据,这是数据(57+2)
这是数据(59)
,它不存在。计算这些索引的方式有问题。是否在过程范围内未重新定义“triplet\u check\u vec”?你能用定义的in和output参数来完成这个过程吗?对不起,我说了一个错误,数据是std逻辑向量(59到0)