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 单元滤波器(4)中的VHDL信号输出[3]连接到以下多个驱动器:_Loops_Concurrency_Compiler Errors_Vhdl - Fatal编程技术网

Loops 单元滤波器(4)中的VHDL信号输出[3]连接到以下多个驱动器:

Loops 单元滤波器(4)中的VHDL信号输出[3]连接到以下多个驱动器:,loops,concurrency,compiler-errors,vhdl,Loops,Concurrency,Compiler Errors,Vhdl,我有一个并发循环,它有两个错误。这是文件中唯一的代码: 我收到以下错误。我将非常感谢你的帮助。我该如何解决这个问题 单元滤波器(4)中的信号输出连接到以下多个驱动器: 单元滤波器(4)中的信号标志连接到以下多个驱动器: 从OP创建的最小完整且可验证的示例 ieee库; 使用ieee.std_logic_1164.all; --使用IEEE.STD_LOGIC_ARITH.ALL; --使用IEEE.std_logic_unsigned.ALL; 实体ex_案例为 端口(输出:输出标准逻辑向量(3

我有一个并发循环,它有两个错误。这是文件中唯一的代码: 我收到以下错误。我将非常感谢你的帮助。我该如何解决这个问题

单元滤波器(4)中的信号输出连接到以下多个驱动器:

单元滤波器(4)中的信号标志连接到以下多个驱动器:


从OP创建的最小完整且可验证的示例

ieee库;
使用ieee.std_logic_1164.all;
--使用IEEE.STD_LOGIC_ARITH.ALL;
--使用IEEE.std_logic_unsigned.ALL;
实体ex_案例为
端口(输出:输出标准逻辑向量(3到0));
结束实体ex_案;
--信号标志1:布尔值:='0';--这个声明不属于这里
ex_案例的架构a1为
信号标志1:std_ulogic:=“0”;--是错误的布尔类型
开始
循环1:
对于0到3中的j,生成——用于循环输出数据

flag1输出上存在推断锁存的问题。这是由于 并发信号分配中存在的条件,在合成中报告。我们想避免插销

因此,通过一个最小、完整且可验证的示例,我们可以修改该示例,以便在嵌套for generate语句生成的所有进程中为所有
flag1
驱动程序提供组合OR(14.5.5其他并发语句所有并发信号分配语句和并发断言语句的详细说明包括等效过程语句的构建,然后是等效过程语句的详细说明。)

我们还希望提供一个选择器来指定指定的生成循环语句的外部和内部
output(j)
有助于
output

library ieee;
use ieee.std_logic_1164.all;

entity ex_case is
    port ( output: out std_ulogic_vector(3 downto 0) );
end entity ex_case;
architecture foo of ex_case is
    signal flag1: std_ulogic := '0';
    constant n: natural := 4;
    function reduce_or (input: std_logic_vector) return std_logic is
        variable retval: std_logic;
    begin  -- MAY BE replace by "or" -2008, or by different reduction function
        retval := '0';
        for i in input'range loop
            retval := retval or input(i);
        end loop;
        return retval;
    end function;
    function firstflag (iflag: std_logic_vector) return integer is
    begin
        for i in iflag'range loop
            if To_bit(iflag(i)) = '1' then
                return i;
            end if;
        end loop;
        return iflag'LEFT; -- This will park on iflag' when no flag is set
    end function;
    signal iflag: std_logic_vector(0 to n - 1);
    subtype iflag_subtype is std_logic_vector(iflag'range);
begin

loop1: 
    for j in 0 to n - 1 generate 
        type output_array is array (0 to n - 1) of std_logic;
        signal ioutput: output_array;
        signal jselect: natural range 0 to n - 1;
    begin
        -- flag1 <= '0'; -- REMOVED  -- reset the flag, same as output_ready
loop2: 
        for i in 0 to n - 1 generate 
            signal iflag: std_logic_vector (0 to n - 1);
        begin
            ioutput(j) <= '1' when  i >= j and iflag(j) = '0' else 
                          '0';
            iflag(i) <=  '1' when  i >= j else 
                         '0'; -- output when valid data is available
            iflag(j) <= reduce_or(iflag);
        end generate loop2;
        output(j) <= ioutput(firstflag(iflag)); -- A Multiplexer
    end generate loop1;  

    flag1 <= '1' when iflag /= iflag_subtype'(others => '0') else
             '0'; 
end architecture foo;
ieee库;
使用ieee.std_logic_1164.all;
实体ex_案例为
端口(输出:输出标准逻辑向量(3到0));
结束实体ex_案;
ex_案例的架构foo是
信号标志1:std_ulogic:=“0”;
常数n:自然值:=4;
函数reduce_或(输入:std_逻辑_向量)返回std_逻辑为
变量retval:std_逻辑;
begin--可以用“或”-2008或不同的缩减功能替换
retval:=“0”;
对于输入范围循环中的i
返回值:=返回值或输入值(i);
端环;
返回返回;
末端功能;
函数firstflag(iflag:std_logic_vector)返回的整数为
开始
对于iflag范围循环中的i
如果To_位(iflag(i))='1',则
返回i;
如果结束;
端环;
return iflag'LEFT;--当未设置任何标志时,它将停在iflag'上
末端功能;
信号iflag:标准逻辑向量(0到n-1);
子类型iflag_子类型是标准逻辑向量(iflag’范围);
开始
循环1:
对于0到n-1中的j,生成
类型输出_数组是标准_逻辑的数组(0到n-1);
信号输出:输出_阵列;
信号jselect:自然范围0至n-1;
开始

--flag1您有n个并发信号分配到
输出(j)
和n x n并发信号分配到
标志
。参见IEEE Std 1076-2008 11.8生成语句、14.5.3生成语句、14.5.2块语句、14.5.5其他并发语句所有并发信号分配语句和并发断言语句的详细说明包括等效语句的构造流程语句,然后是等效流程语句的细化。您有多个流程驱动输出(j)和标志。在此测试用例中提供一个.n=4。不,真的,请提供一个,并且这次请不要删除您的问题(),已删除的问题可以在60天内重新出现,并且问题可以编辑。显示完整的错误陈述。错误消息的微小图片很难阅读,底部的两个陈述也不完整。而且您的示例还不完整。@user1155120非常感谢您的帮助和指导。我在昨天的帖子中很好地记住了!PeR无论如何,是的。如果你的例子中有地址,我会模拟它。
library ieee;
use ieee.std_logic_1164.all;

entity ex_case is
    port ( output: out std_ulogic_vector(3 downto 0) );
end entity ex_case;
architecture foo of ex_case is
    signal flag1: std_ulogic := '0';
    constant n: natural := 4;
    function reduce_or (input: std_logic_vector) return std_logic is
        variable retval: std_logic;
    begin  -- MAY BE replace by "or" -2008, or by different reduction function
        retval := '0';
        for i in input'range loop
            retval := retval or input(i);
        end loop;
        return retval;
    end function;
    function firstflag (iflag: std_logic_vector) return integer is
    begin
        for i in iflag'range loop
            if To_bit(iflag(i)) = '1' then
                return i;
            end if;
        end loop;
        return iflag'LEFT; -- This will park on iflag' when no flag is set
    end function;
    signal iflag: std_logic_vector(0 to n - 1);
    subtype iflag_subtype is std_logic_vector(iflag'range);
begin

loop1: 
    for j in 0 to n - 1 generate 
        type output_array is array (0 to n - 1) of std_logic;
        signal ioutput: output_array;
        signal jselect: natural range 0 to n - 1;
    begin
        -- flag1 <= '0'; -- REMOVED  -- reset the flag, same as output_ready
loop2: 
        for i in 0 to n - 1 generate 
            signal iflag: std_logic_vector (0 to n - 1);
        begin
            ioutput(j) <= '1' when  i >= j and iflag(j) = '0' else 
                          '0';
            iflag(i) <=  '1' when  i >= j else 
                         '0'; -- output when valid data is available
            iflag(j) <= reduce_or(iflag);
        end generate loop2;
        output(j) <= ioutput(firstflag(iflag)); -- A Multiplexer
    end generate loop1;  

    flag1 <= '1' when iflag /= iflag_subtype'(others => '0') else
             '0'; 
end architecture foo;