首页 > 其他分享 >关于VHDL中Loop State error...loop must terminate within 10,000 iterations错误解决方法

关于VHDL中Loop State error...loop must terminate within 10,000 iterations错误解决方法

时间:2024-05-11 22:10:20浏览次数:24  
标签:std ... use VHDL parity logic ieee check loop

关于VHDL中Loop State error...loop must terminate within 10,000 iterations错误解决方法

首先比较下面两段代码:(使用while循环描述偶校验位产生电路)

代码一

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity parity_check is
port(
  	datain: in std_logic_vector(7 downto 0);
    y: out std_logic
	);
end parity_check;

architecture rtl of parity_check is
begin
    process(datain)
    	variable tmp: std_logic:='0';		;不同点
		variable i: integer:= 0;			;不同点
    begin
        while i<8 loop
        	tmp:=tmp xor datain(i);
			i:= i + 1;
        end loop
        y <= tmp;
    end datain;
end rtl;

代码二

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity parity_check is
port(
  	datain: in std_logic_vector(7 downto 0);
    y: out std_logic
	);
end parity_check;
    
architecture rtl of parity_check is
begin
    process(datain)
    	variable tmp: std_logic;		;不同点
		variable i: integer;			;不同点
    begin
        tmp:='0';						;不同点
		i:=0;							;不同点
        while i<8 loop
        	tmp:=tmp xor datain(i);
			i:= i + 1;
        end loop
        y <= tmp;
    end datain;
end rtl;

代码二在编码过程中没有报错,而代码一却在编译过程中报错,出现题目所述错误。同样是赋值,原因到底在哪里呢?

在进程中,说明语句只执行一次,即变量的声明部分只执行一次,由于代码二中进程的主体部分开头每次都对变量i进行赋值操作,相当于每次都会对其进行清零操作,显然循环过程不会发生错误;而代码一中,当进程被触发的次数不止一次时,loop循环就会发生错误。所以平时应该养成代码二的编程习惯。

标签:std,...,use,VHDL,parity,logic,ieee,check,loop
From: https://www.cnblogs.com/wangxiaobin/p/18187222

相关文章

  • mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nona
    官方解释:ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode,通过这个sql_mode来保证,SQL语句“分组求最值”合法性的检查.这种模式采用了与Oracle、DB2等数据库的处理方式。即不允许selecttargetlist中出现语义不明确的列.对于用到GROUPBY的select语句,查出......
  • Connecting to github.com (github.com)|20.205.243.166|:443... failed: Connection
    今天使用ubuntu虚拟机编译buidroot代码时出现一些压缩包无法从github下载,如下图: 可是拷贝上图log中的下载链接到windows浏览器进行打开会自动进行下载成功,如粘贴该链接 https://github.com/winshining/nginx-http-flv-module/archive/v1.2.8/nginx-http-flv-......
  • 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...
    华为是大企业,是不是很难进去啊?”“在华为做软件测试,能得到很好的发展吗?一进去就有9.5K,其实也没有想的那么难”直到现在,心情都还是无比激动!本人211非科班,之前在字节和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到华为可以再给我一次机会,还是挺开心的。本来以为有个机......
  • SystemVerilog -- 3.4 SystemVerilog forever loop
    SystemVerilogforeverloop循环永远运行,或者无限时间运行。foreverSyntaxforever//Singlestatementforeverbegin//Multiplestatementsend循环类似于下面Verilog中所示的代码。两者都运行无限的仿真时间,并且在它们内部有一个延迟元件很重要。foreverAn......
  • SystemVerilog -- 3.3 SystemVerilog for loop
    SystemVerilogforloopSystemVerilog中的循环多次重复一组给定的语句,直到不满足给定的表达式。与所有其他过程块一样,循环中需要多个语句被for和forbeginend关键字括起来。SyntaxFor循环使用三步方法控制其语句的执行:初始化影响循环运行次数的变量在执行循环之前,请检查条......
  • SystemVerilog -- 3.2 SystemVerilog foreach loop
    SystemVerilogforeachloopSystemVerilog数组是允许在单个变量中存储多个值的数据结构。循环仅用于遍历此类数组,并且是执行此操作的最简单和最简单的方法。foreachSyntax循环从0开始循环访问每个索引。如果循环中有多个语句,则必须像所有其他过程块一样用foreach和foreachbegi......
  • SystemVerilog -- 3.1 SystemVerilog while and do-while loop
    SystemVerilogwhileanddo-whileloop两者都是循环构造,只要给定条件为真,就会执行给定的语句集。whiledowhile循环首先检查条件是否为true,如果条件为true,则执行语句。如果条件被证明是假的,则循环就在哪里结束。while循环首先执行一次语句,然后检查条件是否为true。如果条件为......
  • SystemVerilog -- 3.0 SystemVerilog Loops
    SystemVerilogLoopsWhatareloops?loop是一段不断执行的代码。条件语句通常包含在循环中,以便在条件变为真时终止。如果loop永远运行,那么模拟将无限期挂起。下表给出了SystemVerilog中不同类型的循环构造。\\foreverRunsthegivensetofstatementsforever......
  • python教程2:if...else...+循环
    一、if判断有单分支、双分支、多分支,下面就是一个多分支的案例:二、缩进三、for循环四、while循环 五、其他random模块 string模块 ......
  • IfcLoopHeadToTail
    IfcLoopHeadToTail函数定义如果对于输入边循环的边,每条边的结束顶点与其后续边的开始顶点相同,则此函数返回TRUE。IFC2x2中的新功能 EXPRESSSpecificationFUNCTIONIfcLoopHeadToTail(ALoop:IfcEdgeLoop):LOGICAL;LOCALN:INTEGER;P:LOGICAL:=TRU......