verilog - 半色调像素转换器输出未定义

标签 verilog

我正在编写 Verilog 代码以使用 Floyd-Stiengburg 算法将 8 位像素转换为半色调像素。下面是将 6 像素(8 位)转换为半色调像素的代码。我已经在 Modelsim 上成功地编译了这段代码,但是在模拟中,输出(半色调像素值)是 XXXXXX(未定义)。

  module half_tone(pixel,htpv);
  input [0:47]pixel;
  output reg [1:6]htpv;
  reg [8:1]error[1:6];
  reg [8:1]pixel_1;
  reg [9:0]cpv,cpv_round,e_av;
  parameter threshold =128;
  integer i=1;
  initial
   begin
   error[0]=8'b00;
   for(i=0;i<6;i=i+1)
   begin
   e_av=(2*error[i])>>4;
   cpv=pixel[(i*8)+:8]+e_av;
   cpv_round=(cpv<threshold)?0:255;
   htpv[i]=(cpv_round==0)?0:1;
   error[i]=cpv-cpv_round;
   #10;
   end
 end
 endmodule

我无法弄清楚为什么输出是 XXXXXX(未定义)。

最佳答案

当我使用 Incisive 模拟器编译您的代码时,我收到了这条警告消息:

   error[0]=8'b00;
       |
ncelab: *W,BNDMEM (./half_tone.v,11|7): Memory index out of declared bounds [4.2.2(IEEE)].

您需要正确初始化error。也许 error[1]=8'b00;

关于verilog - 半色调像素转换器输出未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379787/

相关文章:

verilog - 如何使用 don't cares 参数化 case 语句?

error-handling - 我写了一个verilog代码,但得到了不是常量或未知类型之类的错误

parameters - 在 verilog 中使用带有 for 循环的参数进行位选择

arrays - 在 Verilog 中使用常量值初始化可合成二维数组的方法

verilog - 我们可以有一系列自定义模块吗?

signal-processing - 将 for 循环转换为 FPGA 的最佳方法

hardware - 基于 FPGA 的 RTL 评估

verilog - ","和always@中的 "or"有什么区别?

verilog - 带 2 个复位的 D 触发器 : synthesis error

verilog - 如何在verilog中生成延迟以进行合成?