VHDL中的直方图均衡

时间:2016-04-29 02:05:33

标签: arrays matrix vhdl

此代码仅适用于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; 

谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 让您分析包装声明的第一行:

    包裹包mypackage

  2. 变为:

    package mypackage is
    

    (请注意,您的问题中的代码格式不正确。)

    1. 您的P0流程缺少begin
    2. 第一个顺序语句(第一个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编码错误。