此代码仅适用于4x4元素。 没有合成。 即使很小的初始部分也没有模拟
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.numeric_std.ALL;
use work.mypackage.ALL;
entity histo_two is
port( H_c: out hist_array);
end histo_two;
architecture Behavioral of histo_two is
constant my_hist:hist_array:=((0,1,2,3), (0, 2, 2, 0), (3, 3, 1, 3), (2, 3, 0, 2));
begin
p0: process
variable h: h_vector:= (0,0,0,0);
variable gp: integer;
variable temp: integer;
variable H_c: h_vector;
variable A: integer;
variable T: h_vector;
for i in my_hist'left(1) to my_hist'right(1) loop
for j in my_hist'left(2) to my_hist'right(2) loop
gp := my_hist(i,j);
temp:= h(gp) + 1;
h(gp) := temp;
end loop;
end loop;
-- Form the cumulative image histogram Hc:
H_c(0) := H(0);
for p in h'left(1)+1 to h'right(1) loop
A := H_c(p-1) + H(p);
H_c(p) := A;
end loop;
end process;
end behavioral;
这些是我的警告。这是我的大模块的一部分。
输出应为H:4,2,5,5(这是内部信号值)和H_c:(4,6,11,16)
No sensitivity list and no wait in the process
WARNING:Xst:1306 - Output <H_c<1>> is never assigned.
WARNING:Xst:1306 - Output <H_c<2>> is never assigned.
WARNING:Xst:1306 - Output <H_c<3>> is never assigned.
WARNING:Xst:1306 - Output <H_c<0>> is never assigned.
包裹文件
library IEEE;
use IEEE.STD_LOGIC_1164.all;
包 包mypackage是
type hist_array is array (0 to 3,0 to 3) of integer;
type h_vector is array (0 to 3) of integer;
end mypackage;
谢谢!
答案 0 :(得分:2)
让您分析包装声明的第一行:
包裹包mypackage
变为:
package mypackage is
(请注意,您的问题中的代码格式不正确。)
begin
:第一个顺序语句(第一个for循环):
p0: process
variable h: h_vector:= (0,0,0,0);
variable gp: integer;
variable temp: integer;
variable H_c: h_vector;
variable A: integer;
variable T: h_vector;
for i in my_hist'left(1) to my_hist'right(1) loop
for j in my_hist'left(2) to my_hist'right(2) loop
前面应该有begin
:
p0:
process
variable h: h_vector:= (0,0,0,0);
variable gp: integer;
variable temp: integer;
variable H_c: h_vector;
variable A: integer;
variable T: h_vector;
begin
for i in my_hist'left(1) to my_hist'right(1) loop
for j in my_hist'left(2) to my_hist'right(2) loop
添加等待状态以允许进程暂停,模拟时间提前到时间'HIGH并且模拟完成:
end process;
end behavioral;
添加了wait
:
wait;
end process;
end behavioral;
在模拟时添加的等待语句之前添加两个报告语句
ghdl -r histo_two
histo_two.vhdl:45:9:@ 0ms :(报告单):h =(4,2,5,5)
histo_two.vhdl:50:9:@ 0ms :(报告说明):H_c =(4,6,11,16)
所以你缺少的是流程开始,流程中的等待声明以及包的正确代码示例。
标准(IEEE Std 1076-2008)描述了4.7包声明中的包声明。
11.3流程陈述中的流程陈述,BNF中begin
的要求(在附录C之外是规范性的)。有关基于敏感性列表的隐式等待语句,请参阅第4段。
进程在等待语句中挂起并恢复,否则它们将在模拟期间捕获线程执行。某些VHDL模拟器可能会在没有显式或隐式等待语句的情况下反对进程。
如何从敏感性列表构造wait语句以及wait语句的作用也在10.2 Wait语句及其在14.7.5模型执行中如何影响模拟中得到解决。
报告语句在10.4报告语句中描述,并且通常在了解属性使用方面很有用(参见16.2预定义属性)。
这三个错误中有两个是基本语法问题(两个Package package
保留字是问题格式错误),缺少begin
纯粹是语法错误。缺少敏感列表或等待语句是VHDL创作错误。
这些是基本的VHDL编码错误。