Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 我的VHDL标志需要终止_Loops_Vhdl - Fatal编程技术网

Loops 我的VHDL标志需要终止

Loops 我的VHDL标志需要终止,loops,vhdl,Loops,Vhdl,我有VHDL代码,它应该执行以下操作:当按下键(0)(重置)时,下一个上升的时钟开始该过程(50MHz)。它设置status_标志,一个新进程查看status_标志,并且每1000000(+const)clk周期更新一个称为DAC的值。我想随着clk cntr的更新,它需要几个时钟周期,因此是常数。(我使用了一个数据记录器,我可以看到一个~20.02ms)在第二个过程的底部,clk cntr被重置为零。目标是在按下键(0)后完成第二个过程,并等待下一次按键。可以看到,我已经注释掉了status_

我有VHDL代码,它应该执行以下操作:当按下键(0)(重置)时,下一个上升的时钟开始该过程(50MHz)。它设置status_标志,一个新进程查看status_标志,并且每1000000(+const)clk周期更新一个称为DAC的值。我想随着clk cntr的更新,它需要几个时钟周期,因此是常数。(我使用了一个数据记录器,我可以看到一个~20.02ms)在第二个过程的底部,clk cntr被重置为零。目标是在按下键(0)后完成第二个过程,并等待下一次按键。可以看到,我已经注释掉了status_标志,因为编译器的响应是“无法解析多个常量驱动程序”。如何重置状态标志或类似标志以使代码等待键(0)?我使用的是实时响应,而不是模拟

  -- ---------------------------------------------------------------------
    -- Global signals ------------------------------------------------------
    -- ---------------------------------------------------------------------
    CLK   : in std_logic;
    RESET : in std_logic;


);
结束实体测试

test_top的体系结构rtl是

 shared variable status_flag  : std_logic;
 signal clk_cntr        : unsigned(31 downto 0);
 signal DAC             : std_logic_vector(11 downto 0);
开始

DAC输出上升沿:进程(CLK)
开始
如果上升沿(CLK),则
如果重置='1',则--KEY(0)开关
状态标志:='1';--编码器在时钟上升沿触发
如果结束;
如果结束;
结束过程;
伺服程序:过程(CLK)
开始
如果上升沿(CLK),则--
如果(状态标志='1'),则
clk_cntr“多个恒定驱动因素”错误是SE中经常提出的问题。如果你把它放在搜索框里,你会得到175个答案

它们的解决方案都是一样的:将所有作业移到一个流程中

if RESET = '1' then 
    status_flag := '1'; // start 
else
    if clk_cntr > 18000000 then
        status_flag := '0'; // stop 
    end if;

如果结束

老大,谢谢你。昨天晚上,我确实研究了许多类似的解决方案,但没有找到一个我理解清楚的答案。你的回答“把所有的作业都放到一个过程中”是如此清晰和简洁,这将是一个我会记住很长时间的短语。我甚至把它放在了你提供的VHDL注释中。再次感谢。
if RESET = '1' then 
    status_flag := '1'; // start 
else
    if clk_cntr > 18000000 then
        status_flag := '0'; // stop 
    end if;