Loops 单元滤波器(4)中的VHDL信号输出[3]连接到以下多个驱动器:
我有一个并发循环,它有两个错误。这是文件中唯一的代码: 我收到以下错误。我将非常感谢你的帮助。我该如何解决这个问题 单元滤波器(4)中的信号输出连接到以下多个驱动器: 单元滤波器(4)中的信号标志连接到以下多个驱动器: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
从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;