使用Verilog HDL在FPGA上进行图像处理

这个 现场可编程门阵列 项目 旨在详细显示如何使用图像处理图像 Verilog 从在Verilog中读取输入位图图像(.bmp),进行处理并将处理后的结果写入Verilog中的输出位图图像。 的 full Verilog code for reading image, 图像处理,并提供书写图像。

使用Verilog HDL在FPGA上进行图像处理

在这个 现场可编程门阵列 Verilog 项目,在Verilog中实现了一些简单的处理操作,例如反转,亮度控制和阈值操作。通过“ 参数”文件选择图像处理操作,然后将处理后的图像数据写入位图图像output.bmp以进行验证。 The 图像读取 Verilog 代码可作为图像传感器/相机的Verilog模型运行,这对于实时进行功能验证非常有帮助 现场可编程门阵列 图像处理项目。当您想查看BMP格式的输出图像时,图像写入部分对于测试也非常有用。在这个项目中,我在阅读部分添加了一些简单的图像处理代码,以举例说明图像处理,但是您可以轻松地将其删除以获得原始图像数据。本文底部回答了学生提出的所有相关问题。

首先,Verilog无法 读取图像 直。 To read the .bmp image on in Verilog , the image is required to be converted from the bitmap format to the hexadecimal format. Below is a Matlab example code to convert a bitmap image to a .hex file. 的 input image size is 768x512 and the image .hex file includes R, G, B data of the bitmap image.
b=imread('kodim24.bmp'); % 24-bit BMP image RGB888 

k=1;
for i=512:-1:1 % image is written from the last row to the first row
for j=1:768
a(k)=b(i,j,1);
a(k+1)=b(i,j,2);
a(k+2)=b(i,j,3);
k=k+3;
end
end
fid = fopen('kodim24.hex', 'wt');
fprintf(fid, '%x\n', a);
disp('Text file write done');disp(' ');
fclose(fid);
% fpga4student.com   现场可编程门阵列 项目 s,  Verilog  projects, VHDL projects
要读取图像的十六进制数据文件,Verilog使用以下命令:$ readmemh或$ readmemb(如果图像数据位于二进制文本文件中)。读取图像.hex文件后,RGB图像数据将保存到内存中并读出以进行处理。

以下是图像读取和处理部分的Verilog代码:

/******************************************************************************/
/******************  Module for reading and processing image     **************/
/******************************************************************************/
`include "参数"       // Include definition file
// hzgifts.cn:   现场可编程门阵列 项目 s for students
//   现场可编程门阵列 项目 : Image processing in  Verilog 
module image_read
#(
  parameter     WIDTH  = 768,   // Image width
         HEIGHT  = 512,   // Image height
  INFILE  = "./img/kodim01.hex",  // image file
  START_UP_DELAY = 100, // Delay during start up time
  HSYNC_DELAY = 160,// Delay between HSYNC pulses 
  VALUE= 100, // value for Brightness operation
  THRESHOLD= 90, // Threshold value for Threshold operation
  SIGN=1         // Sign value using for brightness operation
  // SIGN = 0: Brightness subtraction           
  // SIGN = 1: Brightness addition
)
(
  input HCLK,          // clock     
  input HRESETn,         // Reset (active low)
  output VSYNC,        // Vertical synchronous pulse
 //  这个  signal is often a way to indicate that one entire image is transmitted.
 // Just create and is  没有 t used, will be used once a video or many images are transmitted.
  output reg HSYNC,        // Horizontal synchronous pulse
 // An HSYNC indicates that one line of the image is transmitted.
 // Used to be a horizontal synchronous signals for writing bmp file.
  output reg [7:0]  DATA_R0,  // 8 bit Red data (even)
  output reg [7:0]  DATA_G0,  // 8 bit Green data (even)
  output reg [7:0]  DATA_B0,  // 8 bit Blue data (even)
  output reg [7:0]  DATA_R1,  // 8 bit Red  data (odd)
  output reg [7:0]  DATA_G1,  // 8 bit Green data (odd)
  output reg [7:0]  DATA_B1,  // 8 bit Blue data (odd)
  // Process and transmit 2 pixels in parallel to make the process faster, you can modify to transmit 1 pixels or more if needed
  output     ctrl_done     // Done flag
);   
//-------------------------------------------------
// Internal Signals
//-------------------------------------------------
parameter sizeOfWidth = 8;   // data width
parameter sizeOfLengthReal = 1179648;   // image data : 1179648 bytes: 512 * 768 *3 
// local parameters for FSM
localparam  ST_IDLE  = 2'b00,// idle state
   ST_VSYNC = 2'b01,// state for creating vsync 
   ST_HSYNC = 2'b10,// state for creating hsync 
   ST_DATA  = 2'b11;// state for data processing 
reg [1:0] cstate,   // current state
nstate;    // next state   
reg start;         // start signal: trigger Finite state machine beginning to operate
reg HRESETn_d;   // delayed reset signal: use to create start signal
reg   ctrl_vsync_run; // control signal for vsync counter  
reg [8:0] ctrl_vsync_cnt; // counter for vsync
reg   ctrl_hsync_run; // control signal for hsync counter
reg [8:0] ctrl_hsync_cnt; // counter  for hsync
reg   ctrl_data_run; // control signal for data processing
reg [7 : 0]   total_memory [0 : sizeOfLengthReal-1];// memory to store  8-bit data image
// temporary memory to save image data : size will be WIDTH*HEIGHT*3
integer temp_BMP   [0 : WIDTH*HEIGHT*3 - 1];   
integer org_R  [0 : WIDTH*HEIGHT - 1];  // temporary storage for R component
integer org_G  [0 : WIDTH*HEIGHT - 1]; // temporary storage for G component
integer org_B  [0 : WIDTH*HEIGHT - 1]; // temporary storage for B component
// counting variables
integer i, j;
// temporary signals for calculation: details in the paper.
integer tempR0,tempR1,tempG0,tempG1,tempB0,tempB1; // temporary variables in contrast and brightness operation

integer value,value1,value2,value4;// temporary variables in invert and threshold operation
reg [ 9:0] row; // row index of the image
reg [10:0] col; // column index of the image
reg [18:0] data_count; // data counting for entire pixels of the image
//-------------------------------------------------//
// -------- Reading data from input file ----------//
//-------------------------------------------------//
initial begin
    $readmemh(INFILE,total_memory,0,sizeOfLengthReal-1); // read file from INFILE
end
// use 3 intermediate signals RGB to save image data
always@(start) begin
    if(start == 1'b1) begin
        for(i=0; i<WIDTH*HEIGHT*3 ; i=i+1) begin
            temp_BMP[i] = total_memory[i+0][7:0]; 
        end
        
        for(i=0; i<HEIGHT; i=i+1) begin
            for(j=0; j<WIDTH; j=j+1) begin
     // Matlab code writes image from the last row to the first row
     //  Verilog  code does the same in reading to correctly save image pixels into 3 separate RGB mem
                org_R[WIDTH*i+j] = temp_BMP[WIDTH*3*(HEIGHT-i-1)+3*j+0]; // save Red component
                org_G[WIDTH*i+j] = temp_BMP[WIDTH*3*(HEIGHT-i-1)+3*j+1];// save Green component
                org_B[WIDTH*i+j] = temp_BMP[WIDTH*3*(HEIGHT-i-1)+3*j+2];// save Blue component
            end
        end
    end
end
//----------------------------------------------------//
// ---Begin to read image file once reset was high ---//
// ---by creating a starting pulse (start)------------//
//----------------------------------------------------//
always@(posedge HCLK, negedge HRESETn)
begin
    if(!HRESETn) begin
        start <= 0;
  HRESETn_d <= 0;
    end
    else begin           //          ______     
        HRESETn_d <= HRESETn;       //        |  |
  if(HRESETn == 1'b1 && HRESETn_d == 1'b0)  // __0___| 1 |___0____ : starting pulse
   start <= 1'b1;
  else
   start <= 1'b0;
    end
end
//-----------------------------------------------------------------------------------------------//
// Finite state machine for reading RGB888 data from memory and creating hsync and vsync pulses --//
//-----------------------------------------------------------------------------------------------//
always@(posedge HCLK, negedge HRESETn)
begin
    if(~HRESETn) begin
        cstate <= ST_IDLE;
    end
    else begin
        cstate <= nstate; // update next state 
    end
end
//-----------------------------------------//
//--------- State Transition --------------//
//-----------------------------------------//
// IDLE . VSYNC . HSYNC . DATA
always @(*) begin
 case(cstate)
  ST_IDLE: begin
   if(start)
    nstate = ST_VSYNC;
   else
    nstate = ST_IDLE;
  end   
  ST_VSYNC: begin
   if(ctrl_vsync_cnt == START_UP_DELAY) 
    nstate = ST_HSYNC;
   else
    nstate = ST_VSYNC;
  end
  ST_HSYNC: begin
   if(ctrl_hsync_cnt == HSYNC_DELAY) 
    nstate = ST_DATA;
   else
    nstate = ST_HSYNC;
  end  
  ST_DATA: begin
   if(ctrl_done)
    nstate = ST_IDLE;
   else begin
    if(col == WIDTH - 2)
     nstate = ST_HSYNC;
    else
     nstate = ST_DATA;
   end
  end
 endcase
end
// ------------------------------------------------------------------- //
// --- counting for time period of vsync, hsync, data processing ----  //
// ------------------------------------------------------------------- //
always @(*) begin
 ctrl_vsync_run = 0;
 ctrl_hsync_run = 0;
 ctrl_data_run  = 0;
 case(cstate)
  ST_VSYNC:  begin ctrl_vsync_run = 1; end  // trigger counting for vsync
  ST_HSYNC:  begin ctrl_hsync_run = 1; end // trigger counting for hsync
  ST_DATA:  begin ctrl_data_run  = 1; end // trigger counting for data processing
 endcase
end
// counters for vsync, hsync
always@(posedge HCLK, negedge HRESETn)
begin
    if(~HRESETn) begin
        ctrl_vsync_cnt <= 0;
  ctrl_hsync_cnt <= 0;
    end
    else begin
        if(ctrl_vsync_run)
   ctrl_vsync_cnt <= ctrl_vsync_cnt + 1; // counting for vsync
  else 
   ctrl_vsync_cnt <= 0;
   
        if(ctrl_hsync_run)
   ctrl_hsync_cnt <= ctrl_hsync_cnt + 1; // counting for hsync  
  else
   ctrl_hsync_cnt <= 0;
    end
end
// counting column and row index  for reading memory 
always@(posedge HCLK, negedge HRESETn)
begin
    if(~HRESETn) begin
        row <= 0;
  col <= 0;
    end
 else begin
  if(ctrl_data_run) begin
   if(col == WIDTH - 2) begin
    row <= row + 1;
   end
   if(col == WIDTH - 2) 
    col <= 0;
   else 
    col <= col + 2; // reading 2 pixels in parallel
  end
 end
end
//-------------------------------------------------//
//----------------Data counting---------- ---------//
//-------------------------------------------------//
always@(posedge HCLK, negedge HRESETn)
begin
    if(~HRESETn) begin
        data_count <= 0;
    end
    else begin
        if(ctrl_data_run)
   data_count <= data_count + 1;
    end
end
assign VSYNC = ctrl_vsync_run;
assign ctrl_done = (data_count == 196607)? 1'b1: 1'b0; // done flag
//-------------------------------------------------//
//-------------  Image processing   ---------------//
//-------------------------------------------------//
always @(*) begin
 
 HSYNC   = 1'b0;
 DATA_R0 = 0;
 DATA_G0 = 0;
 DATA_B0 = 0;                                       
 DATA_R1 = 0;
 DATA_G1 = 0;
 DATA_B1 = 0;                                         
 if(ctrl_data_run) begin
  
  HSYNC   = 1'b1;
  `ifdef BRIGHTNESS_OPERATION 
  /**************************************/  
  /*  BRIGHTNESS ADDITION OPERATION */
  /**************************************/
  if(SIGN == 1) begin
  // R0
  tempR0 = org_R[WIDTH * row + col   ] + VALUE;
  if (tempR0 > 255)
   DATA_R0 = 255;
  else
   DATA_R0 = org_R[WIDTH * row + col   ] + VALUE;
  // R1 
  tempR1 = org_R[WIDTH * row + col+1   ] + VALUE;
  if (tempR1 > 255)
   DATA_R1 = 255;
  else
   DATA_R1 = org_R[WIDTH * row + col+1   ] + VALUE; 
  // G0 
  tempG0 = org_G[WIDTH * row + col   ] + VALUE;
  if (tempG0 > 255)
   DATA_G0 = 255;
  else
   DATA_G0 = org_G[WIDTH * row + col   ] + VALUE;
  tempG1 = org_G[WIDTH * row + col+1   ] + VALUE;
  if (tempG1 > 255)
   DATA_G1 = 255;
  else
   DATA_G1 = org_G[WIDTH * row + col+1   ] + VALUE;  
  // B
  tempB0 = org_B[WIDTH * row + col   ] + VALUE;
  if (tempB0 > 255)
   DATA_B0 = 255;
  else
   DATA_B0 = org_B[WIDTH * row + col   ] + VALUE;
  tempB1 = org_B[WIDTH * row + col+1   ] + VALUE;
  if (tempB1 > 255)
   DATA_B1 = 255;
  else
   DATA_B1 = org_B[WIDTH * row + col+1   ] + VALUE;
 end
 else begin
 /**************************************/  
 /* BRIGHTNESS SUBTRACTION OPERATION */
 /**************************************/
  // R0
  tempR0 = org_R[WIDTH * row + col   ] - VALUE;
  if (tempR0 < 0)
   DATA_R0 = 0;
  else
   DATA_R0 = org_R[WIDTH * row + col   ] - VALUE;
  // R1 
  tempR1 = org_R[WIDTH * row + col+1   ] - VALUE;
  if (tempR1 < 0)
   DATA_R1 = 0;
  else
   DATA_R1 = org_R[WIDTH * row + col+1   ] - VALUE; 
  // G0 
  tempG0 = org_G[WIDTH * row + col   ] - VALUE;
  if (tempG0 < 0)
   DATA_G0 = 0;
  else
   DATA_G0 = org_G[WIDTH * row + col   ] - VALUE;
  tempG1 = org_G[WIDTH * row + col+1   ] - VALUE;
  if (tempG1 < 0)
   DATA_G1 = 0;
  else
   DATA_G1 = org_G[WIDTH * row + col+1   ] - VALUE;  
  // B
  tempB0 = org_B[WIDTH * row + col   ] - VALUE;
  if (tempB0 < 0)
   DATA_B0 = 0;
  else
   DATA_B0 = org_B[WIDTH * row + col   ] - VALUE;
  tempB1 = org_B[WIDTH * row + col+1   ] - VALUE;
  if (tempB1 < 0)
   DATA_B1 = 0;
  else
   DATA_B1 = org_B[WIDTH * row + col+1   ] - VALUE;
  end
  `endif
         /**************************************/  
  /*  INVERT_OPERATION       */
  /**************************************/
  `ifdef INVERT_OPERATION 
   value2 = (org_B[WIDTH * row + col  ] + org_R[WIDTH * row + col  ] +org_G[WIDTH * row + col  ])/3;
   DATA_R0=255-value2;
   DATA_G0=255-value2;
   DATA_B0=255-value2;
   value4 = (org_B[WIDTH * row + col+1  ] + org_R[WIDTH * row + col+1  ] +org_G[WIDTH * row + col+1  ])/3;
   DATA_R1=255-value4;
   DATA_G1=255-value4;
   DATA_B1=255-value4;  
  `endif
  /**************************************/  
  /********THRESHOLD OPERATION  *********/
  /**************************************/
  `ifdef THRESHOLD_OPERATION
  value = (org_R[WIDTH * row + col   ]+org_G[WIDTH * row + col   ]+org_B[WIDTH * row + col   ])/3;
  if(value > THRESHOLD) begin
   DATA_R0=255;
   DATA_G0=255;
   DATA_B0=255;
  end
  else begin
   DATA_R0=0;
   DATA_G0=0;
   DATA_B0=0;
  end
  value1 = (org_R[WIDTH * row + col+1   ]+org_G[WIDTH * row + col+1   ]+org_B[WIDTH * row + col+1   ])/3;
  if(value1 > THRESHOLD) begin
   DATA_R1=255;
   DATA_G1=255;
   DATA_B1=255;
  end
  else begin
   DATA_R1=0;
   DATA_G1=0;
   DATA_B1=0;
  end  
  `endif
 end
end

endmodule
的 图像处理 operation is selected in the following "参数" file. To change the processing operation, just switch the comment line.
/***************************************/
 /****************** Definition file ********/ 
/************** **********************************************/ 
`define INPUTFILENAME "your_image.hex" // Input file name 
`define OUTPUTFILENAME "output.bmp" // Output file name 
// Choose the operation of code by delete 
// in the beginning of the selected line 
//`define BRIGHTNESS_OPERATION 
 `define INVERT_OPERATION 
//`define THRESHOLD_OPERATION
// hzgifts.cn   现场可编程门阵列 项目 s,  Verilog  projects, VHDL projects
的 "参数" file is also to define paths and names of the input and output file. 处理图像后,需要将处理后的数据写入输出图像以进行验证。 

的 following Verilog code is to write the processed image data to a bitmap image for verification:

/****************** Module for writing .bmp image *************/ 
/***********************************************************/ 
// hzgifts.cn   现场可编程门阵列 项目 s,   Verilog   projects, VHDL projects
//  Verilog  project: Image processing in  Verilog 
module image_write #(parameter 
WIDTH = 768, // Image width 
HEIGHT = 512, // Image height 
INFILE = "output.bmp", // Output image 
BMP_HEADER_NUM = 54 // Header for bmp image 
) 
( 
input HCLK, // Clock input 
HRESETn, // Reset active low 
input hsync, // Hsync pulse 
input [7:0] DATA_WRITE_R0, // Red 8-bit data (odd) 
input [7:0] DATA_WRITE_G0, // Green 8-bit data (odd) 
input [7:0] DATA_WRITE_B0, // Blue 8-bit data (odd) 
input [7:0] DATA_WRITE_R1, // Red 8-bit data (even) 
input [7:0] DATA_WRITE_G1, // Green 8-bit data (even) 
input [7:0] DATA_WRITE_B1, // Blue 8-bit data (even) 
output reg Write_Done 
); 
// hzgifts.cn   现场可编程门阵列 项目 s,  Verilog  projects, VHDL projects
//-----------------------------------// 
//-------Header data for bmp image-----// 
//-------------------------------------// 
// Windows BMP files begin with a 54-byte header
initial  begin 
BMP_header[ 0] = 66;BMP_header[28] =24; 
BMP_header[ 1] = 77;BMP_header[29] = 0; 
BMP_header[ 2] = 54;BMP_header[30] = 0; 
BMP_header[ 3] = 0;BMP_header[31] = 0;
BMP_header[ 4] = 18;BMP_header[32] = 0;
BMP_header[ 5] = 0;BMP_header[33] = 0; 
BMP_header[ 6] = 0;BMP_header[34] = 0; 
BMP_header[ 7] = 0;BMP_header[35] = 0; 
BMP_header[ 8] = 0;BMP_header[36] = 0; 
BMP_header[ 9] = 0;BMP_header[37] = 0; 
BMP_header[10] = 54;BMP_header[38] = 0; 
BMP_header[11] = 0;BMP_header[39] = 0; 
BMP_header[12] = 0;BMP_header[40] = 0; 
BMP_header[13] = 0;BMP_header[41] = 0; 
BMP_header[14] = 40;BMP_header[42] = 0; 
BMP_header[15] = 0;BMP_header[43] = 0; 
BMP_header[16] = 0;BMP_header[44] = 0; 
BMP_header[17] = 0;BMP_header[45] = 0; 
BMP_header[18] = 0;BMP_header[46] = 0; 
BMP_header[19] = 3;BMP_header[47] = 0;
BMP_header[20] = 0;BMP_header[48] = 0;
BMP_header[21] = 0;BMP_header[49] = 0; 
BMP_header[22] = 0;BMP_header[50] = 0; 
BMP_header[23] = 2;BMP_header[51] = 0; 
BMP_header[24] = 0;BMP_header[52] = 0; 
BMP_header[25] = 0;BMP_header[53] = 0; 
BMP_header[26] = 1; BMP_header[27] = 0; 
end
//---------------------------------------------------------//
//--------------Write .bmp file  ----------------------//
//----------------------------------------------------------//
initial begin
    fd = $fopen(INFILE, "wb+");
end
always@(Write_Done) begin // once the processing was done, bmp image will be created
    if(Write_Done == 1'b1) begin
        for(i=0; i<BMP_HEADER_NUM; i=i+1) begin
            $fwrite(fd, "%c", BMP_header[i][7:0]); // write the header
        end
        
        for(i=0; i<WIDTH*HEIGHT*3; i=i+6) begin
  // write R0B0G0 and R1B1G1 (6 bytes) in a loop
            $fwrite(fd, "%c", out_BMP[i  ][7:0]);
            $fwrite(fd, "%c", out_BMP[i+1][7:0]);
            $fwrite(fd, "%c", out_BMP[i+2][7:0]);
            $fwrite(fd, "%c", out_BMP[i+3][7:0]);
            $fwrite(fd, "%c", out_BMP[i+4][7:0]);
            $fwrite(fd, "%c", out_BMP[i+5][7:0]);
        end
    end
end
的 header data for the bitmap image is very important and it is published 这里 。如果没有标题数据,则无法正确显示写入的图像。在Verilog HDL中,$ fwrite命令用于将数据写入文件。

接下来,让我们编写一个测试平台Verilog代码以验证图像处理操作。

`timescale 1ns/1ps /**************************************************/ 
/******* Testbench for simulation ****************/
/*********************************************/ 
 // hzgifts.cn   现场可编程门阵列 项目 s,  Verilog  projects, VHDL projects
//  Verilog  project: Image processing in  Verilog 
`include "参数" // include definition file module tb_simulation; 
//------------------ // Internal Signals 
//------------------------------------------------- 
reg HCLK, HRESETn; 
wire vsync; 
wire hsync;
wire [ 7 : 0] data_R0; 
wire [ 7 : 0] data_G0; 
wire [ 7 : 0] data_B0; 
wire [ 7 : 0] data_R1; 
wire [ 7 : 0] data_G1; 
wire [ 7 : 0] data_B1; 
wire enc_done; 
image_read #(.INFILE(`INPUTFILENAME)) 
u_image_read 
( .HCLK (HCLK ), 
.HRESETn (HRESETn ),
 .VSYNC (vsync ), 
.HSYNC (hsync ), 
.DATA_R0 (data_R0 ),
 .DATA_G0 (data_G0 ), 
.DATA_B0 (data_B0 ), 
.DATA_R1 (data_R1 ), 
.DATA_G1 (data_G1 ), 
.DATA_B1 (data_B1 ), 
.ctrl_done (enc_done) 
); 
image_write #(.INFILE(`OUTPUTFILENAME)) 
u_image_write ( 
.HCLK(HCLK), 
.HRESETn(HRESETn),
 .hsync(hsync), 
.DATA_WRITE_R0(data_R0),
 .DATA_WRITE_G0(data_G0),
 .DATA_WRITE_B0(data_B0), 
.DATA_WRITE_R1(data_R1), 
.DATA_WRITE_G1(data_G1), 
.DATA_WRITE_B1(data_B1),
 .Write_Done()
 ); 
//------------- // Test Vectors 
//------------------------------------- 
initial 
begin 
HCLK = 0; 
forever #10 HCLK = ~HCLK; 
end 
initial 
begin 
HRESETn = 0; 
#25 HRESETn = 1; 
end endmodule
最后,我们可以进行仿真以验证图像处理代码。让我们使用以下图像作为输入位图文件:
 现场可编程门阵列  verilog上的图像处理
输入位图图像
运行仿真6ms,关闭仿真并打开输出图像以检查结果。以下是由parameter.v中的选定操作处理的输出图像:
 现场可编程门阵列  verilog上的图像处理
反转后输出位图图像

 现场可编程门阵列  verilog上的图像处理
阈值操作后输出位图图像

 现场可编程门阵列  verilog上的图像处理
减去亮度后输出位图图像
由于读取代码是为了模拟目的而对图像传感器/相机建模,因此建议不要合成代码。如果您真的要合成处理代码并直接在其上运行 现场可编程门阵列 ,您需要用块存储器(RAM)替换代码中的这些图像数组(total_memory,temp_BMP,org_R,org_B,org_G)和设计地址生成器,以从块存储器中读取图像数据。

在收到与该项目相关的许多问题之后,以下是对您问题的回答:
1.有关如何运行模拟的说明和教程:

2. 可以下载此图像处理项目的完整Verilog代码 这里 . 运行大约6毫秒的仿真并关闭仿真,然后您将能够看到输出图像。
3. 的 reading part operates as a Verilog model of an image sensor/camera (output RGB data, HSYNC, VSYNC, HCLK). 的 Verilog 图像读取 code is extremely useful for functional verification in real-time 现场可编程门阵列 image/video projects. 
4.在这个项目中,我添加了图像处理部分以制作图像增强示例。如果只想将图像传感器模型用于验证图像处理设计,则可以轻松删除处理部分以仅获取原始图像数据。
5.将图像保存到三个单独的RGB内存中:由于Matlab代码将图像的十六进制文件从最后一行写入到第一行,因此RGB保存代码(org_R,org_B,org_G)在读取temp_BMP内存以保存RGB方面的作用相同数据正确。如果您想以其他方式进行更改,则可以相应地进行更改。
6.如果要更改图像大小,可能会发现以下有关BMP标头的说明很有用:
图像大小= 768 * 512 * 3 = 1179648字节
BMP标头= 54字节
BMP文件大小=图像大小+ BMP标头= 1179702字节 
将其转换为十六进制数:十进制1179702 =十六进制120036
的n 4-byte size of BMP file: 00H, 12 in Hexa = 18 Decimal, 00H, 36 in Hexa = 54 Decimal
这就是我们获得以下值的方式:
BMP_header [2] = 54;
BMP_header [3] = 0;
BMP_header [4] = 18;
BMP_header [5] = 0;
图像宽度= 768 => In hexadecimal: 0x0300. 的 4 bytes of the image width are 0, 3, 0, 0. 这样便可以获取以下值:
BMP_header [18] = 0;
BMP_header [19] = 3;
BMP_header [20] = 0;
BMP_header [21] = 0; 
图像高度= 512 =>十六进制:0x0200。 图像宽度的4个字节为0、2、0、0。 这就是我们获得以下值的方式:
BMP_header [22] = 0;
BMP_header [23] = 2;
BMP_header [24] = 0;
BMP_header [25] = 0;
7. 您不应该合成此代码,因为它不是为在FPGA上运行而设计的, 而是出于功能验证的目的 如果您真的想合成此代码(读取和处理),并且 将图像加载到FPGA 要直接在FPGA上进行处理,请替换所有温度。通过块RAM变量(org_R,org_B,org_G,tmp_BMP = total_memory)并生成用于读取图像数据的地址(删除始终@(start)和所有“ for循环”-这些是出于仿真目的)。有两种方法:1.编写RAM代码,并使用$ readmemh将图像数据初始化到内存中; 2.使用Xilinx Core Generator或Altera MegaFunction生成块存储器,并将图像数据加载到内存的初始值(对于Xilinx Core Gen..coe文件,对于Altera MegaFunction.mif),然后从内存中读取图像数据并处理(FSM设计)。 
8.在此项目中,同时读取两个偶数和旧像素以加快处理速度,但是您可以根据设计更改要读取的像素数。   
9. 的 writing Verilog 代码对于测试目的也非常有帮助,因为您可以看到BMP格式的输出。
10。 如果要进行实时图像处理,可以检查以下内容以获取相机接口代码: Basys 3 现场可编程门阵列 OV7670摄像机

推荐的 Verilog projects:
2. FIFO存储器的Verilog代码
3. 用于16位单周期MIPS处理器的Verilog代码
4.  Verilog HDL中的可编程数字延迟计时器
5. 用于数字电路中基本逻辑组件的Verilog代码
6. 用于32位无符号除法器的Verilog代码
7. 用于定点矩阵乘法的Verilog代码
8.  Verilog HDL中的车牌许可证识别
9. 提前进位乘法器的Verilog代码
10。  微处理器的Verilog代码
11。  4x4乘法器的Verilog代码
12  停车场系统的Verilog代码
13  使用Verilog HDL在FPGA上进行图像处理
14。  如何使用Verilog HDL将文本文件加载到FPGA中
15  交通信号灯控制器的Verilog代码
16。   现场可编程门阵列 上的闹钟的Verilog代码
17。  比较器设计的Verilog代码
18岁  D触发器的Verilog代码
19  Full Adder的Verilog代码
20  带testbench的计数器的Verilog代码
21  16位RISC处理器的Verilog代码
22  用于在FPGA上反跳按钮的Verilog代码
23。  如何为双向/输入端口编写Verilog Testbench
28。  解码器的Verilog代码
29。  复用器的Verilog代码
 现场可编程门阵列   Verilog  VHDL课程

227条评论:

  1. 嗨范

    我叫珠宝。一世'来自印度的人,在Manipal大学获得B.tech学位。您使用verilog HDL进行图像处理的代码确实很有帮助。一世'm使用verilog HDL制作灰度图像的项目称为JPEG编码器。您能帮我提供有关此主题的代码吗?

    问候,
    珠宝DOMINIC SAVIO安东尼

    回复 删除
    回覆
    1. 范!
      如果您有与使用正向离散余弦变换进行JPEG压缩相关的代码,请发送给我,我的电子邮件ID为[email protected]

      删除
    2. 我可以得到完整的图像处理VHDL

      删除
  2. 回覆
    1. 给你发了电子邮件。请使用Verilog / VHDL fpga4student.com及时了解FPGA项目。谢谢

      删除
    2. 您好Van Loi Le,代码非常有用。谢谢。能否将完整的Verilog源代码和测试平台发送给我,并附带您在此处使用的图像
      提前致谢
      [email protected]

      删除
  3. 回覆
    1. You are welcome. Please help to like and share the site with your friends: //www.facebook.com/fpga4student and keep updates with coming projects.Thanks.

      删除
  4. 您好Van Loi Le,代码非常有用。谢谢。您能给我发送完整的Verilog源代码吗

    回复 删除
    回覆
    1. 请使用Verilog / VHDL fpga4student.com及时了解FPGA项目。谢谢

      删除
  5. 回覆
    1. 给你发了电子邮件。请使用Verilog / VHDL fpga4student.com及时了解FPGA项目。谢谢

      删除
    2. 你好,你也可以和我分享这个项目吗? [email protected]

      删除
  6. 嗨,代码非常有用,请给我发送完整的代码

    回复 删除
  7. 回覆
    1. 给你发了电子邮件。请使用Verilog / VHDL fpga4student.com及时了解FPGA项目。谢谢

      删除
  8. 您能将完整的Verilog源文件发送给我吗?我的邮件ID为[email protected]。它'd对我的图像处理项目非常有用。

    回复 删除
  9. 回覆
    1. 嗨,范,您能为我提供完整的源代码,我想学习这个项目,很多
      我的电子邮件:[email protected]

      删除
  10. 您能确定完整的Verilog源文件吗?我的电子邮件是[email protected]

    回复 删除
  11. 嗨,您的代码对我来说非常有用。请分享我的电子邮件项目:[email protected]
    谢谢。

    回复 删除
    回覆
    1. 给你发了电子邮件。请使用Verilog / VHDL fpga4student.com及时了解FPGA项目。谢谢

      删除
    2. 嗨,您能自由分享我的代码吗,因为我付不起钱。如果您愿意这样做,将非常有帮助。

      删除
  12. 嗨...我发现您的代码在我的项目中更有用。 。能否请你分享我。 。我的电子邮件:[email protected]

    回复 删除
  13. 回覆
    1. 优秀的实施。

      Can you please forward me the entire verilog file so that 我可以 use in my project,

      电子邮件:[email protected]

      我对使用的两个变量有疑问"total_memory" and "sizeOfLengthReal"。要输入什么值?

      删除
    2. 的se are size of the image memory. It depends on your image size.

      删除
  14. 嗨,我的电子邮件ID为:[email protected],请发送电子邮件给我源代码。

    回复 删除
  15. 使用Verilog HDL在FPGA上进行图像处理的精美教程。感谢您的分享。 色彩校正服务 在图像处理中起着至关重要的作用。

    回复 删除
  16. 你能分享这个代码吗?我的邮件ID是[email protected] .....
    提前致谢。

    回复 删除
  17. 非常有用的资源。我需要在fpga中加载视频文件。您能帮我解决我必须遵循的步骤吗?提前致谢。

    我的邮件ID是:[email protected]

    回复 删除
  18. 主席先生,自2016年以来,我一直关注您的博客,目前,我正在verilog上进行一个项目,以使用小波变换算法设计编解码器,先生,我需要您的帮助。您能帮我完成我的项目吗?

    回复 删除
  19. 很好!!我想使用您的代码。电子邮件[email protected]

    回复 删除
  20. 您好,如果您可以将代码分享到[email protected],我们将不胜感激。
    谢谢!

    回复 删除
  21. 请发送完整的代码给我们,我们是否需要zed-board来处理输出?我的电子邮件地址是[email protected]。提前致谢...

    回复 删除
  22. 太好了您做得很好,它将为像我这样的新学习者提供很多帮助。先生,您能和我分享代码,以便我练习吗。先生,请通过我的电子邮件地址[email protected]与我分享完整的代码
    提前致谢。祝你好运。

    回复 删除
  23. 请检查您的电子邮件。
    管理员

    回复 删除
  24. 我需要完整的fpga代码。可以吗?

    回复 删除
  25. 你的电子邮箱是什么?

    回复 删除
  26. 您能给我发送源代码吗?我的电子邮件地址是[email protected]。先感谢您!

    回复 删除
  27. 能否获取此过程的完整Verilog代码以在我的项目中使用?这对我会很有帮助。邮件:[email protected]

    回复 删除
  28. 你能把完整的Verilog代码发给我吗's对我的项目将非常有帮助。顺便说一下,作为一个新学习者,它将对我有很大的帮助。我的电子邮件:[email protected]

    回复 删除
  29. 您能否将完整的Verilog代码发送给我,我的电子邮件是:[email protected],非常感谢

    回复 删除
  30. 您能给我发送完整的Verilog代码吗?
    电子邮件:[email protected]
    谢谢

    回复 删除
  31. 你能给我发送完整的Verilog代码吗's对我的项目将非常有帮助。
    电子邮件:[email protected]
    谢谢

    回复 删除
  32. It'对我来说非常有用。您能给我完整的Verilog代码吗?
    我的电子邮件:okgreente[email protected]

    回复 删除
  33. 你好,

    我可以要求完整的Verilog代码,这太神奇了?一世'我做一个个人项目和完整的代码会帮助我,非常感谢。

    电子邮件:[email protected]

    回复 删除
  34. 请给我发密码。我的电子邮件ID为[email protected]

    回复 删除
  35. LOI LE VAN ...请尽快将完整代码寄给我'紧急...谢谢
    我的邮件编号是[email protected]

    回复 删除
  36. 可以获取此过程的完整Verilog代码以在我的项目中使用。这对我会很有帮助。邮件:[email protected]

    回复 删除
  37. 你能给我发送完整的代码吗[email protected]

    回复 删除
  38. 先生,我的工作很好,我很想看看完整的代码。

    请通过[email protected]通过电子邮件发送给我

    回复 删除
  39. 先生,辛苦了,您能给我发代码[email protected]谢谢

    回复 删除
  40. 很棒的项目,谢谢

    回复 删除
  41. Loi似乎非常有用,如果您发送完整的源代码[email protected],请不胜感激。

    回复 删除
  42. 我可以问你吗?
    我可以'不要使用verilog进行图像处理。那么如何用图像输入并用图像输出呢?

    回复 删除
  43. 您使用哪种语言?

    回复 删除
    回覆
    1. Verilog 公司
      的 challenge is to process the output from the vedio driver to fpga.Since I'm a beginner, 我可以'甚至看不到输入和输出。

      删除
  44. Please make it clear, 的 post showed how to read and write images.

    回复 删除
    回覆
    1. 谢谢,但是代码使我有所帮助。所以,请。

      删除
    2. 谢谢,但是代码使我有所帮助。所以,请。

      删除
  45. 您好,谢谢您提供信息,能否将源代码[email protected]发送给我,谢谢

    回复 删除
  46. 谢谢那个'太好了。但是,您在什么板上实施这些代码?

    回复 删除
  47. 请向我发送完整的代码,我的电子邮件ID为[email protected]

    回复 删除
  48. 您好,谢谢您提供信息,能给我发送源代码[email protected]谢谢

    回复 删除
  49. 您能发送完整的代码吗
    我的电子邮件[email protected]
    谢谢...

    回复 删除
  50. 你好,这段代码非常有用。
    请发送到代码
    [email protected]

    回复 删除
  51. 你好,范。
    您能将完整的Verilog源文件发送给我吗?
    对我来说将非常有用。
    谢谢。祝你今天愉快。
    我的电子邮件是[email protected]

    回复 删除
  52. 你好范
    你能给我发vhdl代码吗?谢谢
    [email protected]

    回复 删除
  53. 您好,谢谢您提供信息,也可以给我发送源代码[email protected]谢谢

    回复 删除
  54. 您好,有人可以给我该项目的完整代码吗,我的电子邮件是[email protected]

    回复 删除
  55. 嗨Lợi,您能寄给我该项目的完整代码吗?我有一个有关使用机器学习进行图像处理的项目,我不知道将文件读取到缓冲区并将数据从缓冲区传输到另一个缓冲区。我的电子邮件是[email protected]。非常感谢您的帮助!!!

    回复 删除
  56. 请给我完整的代码先生。我想以此作为我的项目。提前致谢。
    [email protected]

    回复 删除
  57. 您好先生,请您通过电子邮件将完整代码([email protected])发送给我,我'我试图做一个需要在fpga中加载图像以对其进行处理的项目,这对您获得完整的代码很有帮助。

    回复 删除
  58. 您能给我发电子邮件吗,源代码为[email protected]

    回复 删除
  59. 能否请您通过电子邮件将源代码发送给我[email protected]。我上次提供的电子邮件ID不正确。

    回复 删除
  60. 嗨...我发现您的代码在我的项目中更有用。 。能否请你分享我。 。我的电子邮件:[email protected]

    回复 删除
  61. 嗨,,,
    如果您有jpeg图像压缩的Verilog HDL代码,请给我,
    我的电子邮件ID为[email protected]

    回复 删除
  62. 好信息。
    我可以获取完整的源代码吗?
    我的电子邮件地址是[email protected]

    回复 删除
  63. 好信息。
    我可以获取完整的源代码吗?
    我的电子邮件地址是[email protected]

    回复 删除
  64. I'我无法执行您给出的代码,因为我没有'无法清楚地了解什么是输入和输出以及如何分配内存。你能帮我么...

    回复 删除
  65. 主席先生'我无法执行代码,因为我不知道总内存和SizeOflengthReal-1是多少。一世'我正在为此做一个项目。那么您能给我发代码吗?
    我的g电子邮件地址是:[email protected]

    回复 删除
  66. 的 provided code is a 好 start in 图像处理 on 现场可编程门阵列 . Spend some time to figure it out.
    总内存是从.hex文件读取图像数据的内存。
    SizeOflengthReal-1 is the size of the total memory. Image size is 768x512 pixels. Each pixel has 3 data (R-G-B). Each datum R or G or B has 8 bits. 的n you can calculate the total memory size.

    回复 删除
  67. 您的示例正是我所需要的。能否将源代码通过电子邮件发送至[email protected]谢谢。

    回复 删除
  68. 的 provided code is 好 enough for you to start an 图像处理 project on 现场可编程门阵列 . Spend some time to figure it out.

    回复 删除
  69. i和j值应该是什么。

    回复 删除
    回覆
    1. 你好谢谢。我更新了i和j代码值。基本上,i和j是要从图像的所有像素(R,G,B)读取或写入的存储器的索引。

      删除
  70. 教育岗位。喜欢并欣赏它。继续继续分享。

    回复 删除
    回覆
    1. 感谢您的客气话。非常感谢。当然,将继续提供更具教育意义的FPGA项目。

      删除
  71. 谢谢,这篇文章很有教育意义,并且很好地解释了。请给我发完整的源代码。我的邮件ID是[email protected]

    回复 删除
  72. 谁能解释他如何计算字节大小(2个签名字节后的4个字节)'BM'在BITMAP标头中)?一世'我很困惑。我尝试将其转换为十六进制,然后计算文件大小,但看起来不正确。

    BMP_header [2] = 54;
    BMP_header [3] = 0;
    BMP_header [4] = 18;
    BMP_header [5] = 0;

    回复 删除
    回覆
    1. 图像大小= 768 * 512 * 3 = 1179648字节
      BMP标头= 54字节
      BMP文件大小=图像大小+ BMP标头= 1179702字节
      将其转换为十六进制数:十进制1179702 =十六进制120036
      的n 4-byte size of BMP file: 00H, 12 in Hexa = 18 Decimal, 00H, 36 in Hexa = 54 Decimal
      那's如何获取值:
      BMP_header [2] = 54;
      BMP_header [3] = 0;
      BMP_header [4] = 18;
      BMP_header [5] = 0;

      删除
  73. 这是一个非常不错的项目。...我有可能获得完整的源代码吗?
    如果是这样,有人可以通过[email protected]将它们发送给我。

    回复 删除
  74. 大家好,
    的 provided information on this post are pretty enough for you to get started with 图像处理 on 现场可编程门阵列 . Please spend some time to figure it out so that you can learn a lot from the experience.
    这篇文章是在FPGA上进行图像处理的教程。不会提供完整的代码。
    谢谢。
    管理员

    回复 删除
  75. 如果您有任何疑问,可以通过[email protected]询问我或在此处发表评论。我将帮助回答所有问题。

    回复 删除
  76. #错误:C:/Modeltech_5.5e/examples/verilog1.v(2):附近"#": expecting: ';'
    #错误:C:/Modeltech_5.5e/examples/verilog1.v(49):附近"[": expecting: ';'
    #错误:C:/Modeltech_5.5e/examples/verilog1.v(55):附近"]":syntax error
    #错误:C:/Modeltech_5.5e/examples/verilog1.v(56):附近"]":syntax error

    编译用于读取和处理的模块时出现这些错误。

    回复 删除
    回覆
    1. 这篇文章是在FPGA上进行图像处理的教程。没有给出完整的代码,但是提供了用于读写图像的主要部分。请花一些时间来解决这个问题,以便您可以从中学到很多东西。

      删除
    2. 是的,但是我无法理解语法错误在哪里,即使在写模块中它也显示相同的错误,例如"[": expecting: ';',由于上述错误,我不'不知道如何纠正它。
      的re is also error for parameter in read as well as write module,near "#": expecting: ';'

      删除
    3. 您需要添加更多代码才能使其正常工作。花一些时间来解决它。

      删除
  77. 这段代码非常有用!你能把完整的代码发给我吗?我的电子邮件是[email protected]
    非常感谢你!

    回复 删除
  78. 此代码非常有用。请寄给我。我的电子邮件是[email protected]
    谢谢!

    回复 删除
  79. 您可以将完整的Verilog代码发送给我吗?
    [email protected]

    回复 删除
  80. 嘿,
    的 site is very helpful, can you send me the full verilog code to my email.
    [email protected]

    回复 删除
  81. 您能发送完整的Verilog代码吗
    我的电子邮件是[email protected]
    谢谢

    回复 删除
  82. 有人可以发送完整的Verilog代码。我的电子邮件是[email protected]
    谢谢。

    回复 删除
  83. 我叫锡。我是一名学生,正在研究在FPGA上实现的滤波器。 ADmin有一个关于Canny过滤器的项目?帮我 。

    你能发给我吗?
    [email protected]

    谢谢

    回复 删除
  84. 嗨,您的代码非常有用。
    你能给我发完整的代码吗?
    谢谢

    电子邮件:[email protected]

    回复 删除
  85. 嗨,您的代码非常有用。
    你能给我发完整的代码吗?
    谢谢

    电子邮件:[email protected]

    回复 删除
  86. 您能寄给我FPGA上ASK的完整Verilog代码吗?
    谢谢
    电子邮件:[email protected]

    回复 删除
  87. 嘿,您也可以将xilinx的完整Verilog代码发送给我吗?
    我的电子邮件是[email protected]

    感谢您的帮助,谢谢

    回复 删除
  88. 我正在学习使用fpga进行图像处理的基础知识
    你能给我发代码吗
    这将有很大的帮助
    [email protected]

    回复 删除
  89. 嗨,我想知道"parameter.v" is.

    回复 删除
  90. 太棒了...感谢您在线上传此项目。我是FPGA的新手,正在尝试学习FPGA上的图像处理。这个项目是一个理想的开始。你能在[email protected]上和我分享源代码吗

    回复 删除
  91. 您可以将完整的Verilog代码发送给我吗?

    我的电子邮件:[email protected]

    感谢您的帮助。

    回复 删除
  92. 嗨,您的代码非常有用,我需要进一步了解。
    你能给我发源代码吗?

    电子邮件:[email protected]

    回复 删除
  93. 您好,我是Xilinx 现场可编程门阵列 的项目。
    currently, 我可以 没有 t input a bitmap in my project code.
    如果您共享完整的代码。我的项目将升级。
    您能寄给我完整的代码吗?
    我的电子邮件地址是[email protected]
    感谢您的帮助。

    回复 删除
  94. 您好,我是Xilinx 现场可编程门阵列 的项目。
    currently, 我可以 没有 t input a bitmap in my project code.
    如果您共享完整的代码。我的项目将升级。
    您能寄给我完整的代码吗?
    我的电子邮件地址是[email protected]
    感谢您的帮助。

    回复 删除
  95. 你能给我发源代码吗?谢谢

    电子邮件:[email protected]

    回复 删除
  96. 嗨,我很高兴获得源代码,非常感谢!
    巴拉克 [email protected]

    回复 删除
  97. 嗨,我很高兴获得源代码,非常感谢!
    巴拉克 [email protected]

    回复 删除
  98. 嗨,首先,非常感谢您提供这些代码。我已将其用作构建Verilog代码的参考资料,该代码可以反转灰度图像。您在这里使用了$ fopen和$ fwirte之类的系统Verilog函数。当我编译程序时,它指出这些系统功能不可合成。你有同样的问题吗?

    回复 删除
    回覆
    1. $fopen and $fwrite are 没有 t synthesizable. 的se are for writing image file on PC for verification.

      删除
  99. 您能否分享完整的Verilog代码:[email protected]

    回复 删除
  100. 您能否将完整的Verilog代码共享给[email protected]

    回复 删除
  101. 你好范

    您能否分享整个项目的代码。对我来说将是巨大的帮助。

    我的电子邮件[email protected]

    谢谢
    蒙祖鲁尔

    回复 删除
  102. 您好..您的代码似乎对我的项目非常有用。您能将完整的Verilog代码发送给我吗?谢谢..干得好
    电子邮件:[email protected]

    回复 删除
  103. 请给我完整的编码吗?因为对于我的fyp而言,这是在FPGA上实现分形图像压缩的非常有用的参考。得到结果后,我可以与您分享完整的编码。我的电子邮件是[email protected]

    谢谢 。非常感谢您的帮助。

    回复 删除
  104. 嗨范

    这对我很有帮助。您还可以考虑将源代码发送给我。非常感谢你。我的电子邮件是:[email protected]

    真诚的
    志明

    回复 删除
  105. 嗨范

    这对我很有帮助。您还可以考虑将源代码发送给我。非常感谢你。这是我的电子邮件:[email protected]

    真诚的
    志明

    回复 删除
  106. 能否与我分享这个项目代码,这将是巨大的帮助。
    我的电子邮件:[email protected]

    回复 删除
  107. 您能否也将其邮寄给我...完整代码...电子邮件:[email protected]

    回复 删除
  108. 嗨,您的代码很有帮助。
    您可以将代码发送给我吗?
    非常感谢你。
    我的电子邮件:[email protected]

    回复 删除
  109. 这非常有帮助。您能尽快将整个代码发送给我吗?

    我的邮件ID是[email protected]

    回复 删除
  110. 先生,请您分享使用Verilog HDL进行图像处理的完整代码
    电子邮件ID:[email protected]

    回复 删除
  111. 你好
    我想使用笔记本电脑中的图像作为testbench的输入。我不知道此的Verilog代码。我的意思是我给出图像的地址(图像保存在笔记本电脑中的位置的地址)并从该图像中使用例如输入。请帮助我。谢谢

    回复 删除
  112. 嗨,你能把这个项目寄给我吗?谢谢
    [email protected]

    回复 删除
  113. 你能寄给我这个项目的完整代码吗
    我的邮件编号[email protected]

    回复 删除
  114. 嗨,您的代码在我的Project中非常有用。您能否分享完整的Verilog代码。

    电子邮件:[email protected]

    回复 删除
  115. 您好,先生,您能给我发送源代码吗?将会有很大的帮助。谢谢
    我的电子邮件:[email protected]

    回复 删除
  116. 范,我无法将代码合成为parameter.v找不到。我该怎么办,您可以向我发送该项目的v文件吗?我是新来的图像处理人员

    回复 删除
  117. 嗨,范,您能为我提供parameter.v文件,因为我在那部分遇到了错误。

    回复 删除
  118. 尊敬的管理员,
    我感谢这种知识的转移。
    请发送给我用于运行此模拟的parameter.v文件和其他受支持的文件。
    [email protected]

    回复 删除
  119. 尊敬的管理员,
    您能否将整个项目文件发送到此电子邮件:[email protected]
    提前致谢。

    回复 删除
  120. 大家好,由于需求如此之多,我更新了此项目的完整代码。

    回复 删除
  121. 嗨,您的代码对我来说非常有用。请分享项目我的电子邮件:[email protected]
    谢谢。

    回复 删除
  122. 嗨范
    我在处理图像时遇到麻烦
    and 我可以'看不到正确的输出结果
    这是我的电子邮件:ayn[email protected]
    If you see this comment can you send a email to me so that 我可以 tell more details.
    非常感谢。

    回复 删除
  123. 谁能告诉我如何创建十六进制文件?

    回复 删除
  124. 我可以为研究获得完整的Vhdl代码吗? z

    回复 删除
  125. 嗨,这是一个很棒的资源,非常感谢您的分享。我正在尝试在Verilog中构建一个代码,该代码可以读取视频文件并分析光谱数据。如果您分享有关此方面的知识并通过电子邮件将其完整源代码发送给您,这将非常有帮助。我的电子邮件:[email protected]。非常感谢您的帮助,非常感谢!

    回复 删除
  126. 请邮寄完整的代码..我的电子邮件ID为[email protected]

    回复 删除
  127. 请邮寄完整的代码..我的电子邮件ID为[email protected]

    回复 删除
  128. 您好Van Loi Le,代码非常有用。谢谢。能否将完整的Verilog源代码和测试平台发送给我,并附带您在此处使用的图像
    您能在其他项目中提供帮助吗,我有一个使用verilog进行图像配准的项目
    我的电子邮件地址是:[email protected]

    回复 删除
  129. 你好,范。
    您能将完整的Verilog源文件发送给我吗?
    对我来说将非常有用。
    谢谢。祝你今天愉快。
    我的电子邮件是:[email protected]

    我也有使用Verilog代码进行的项目图像重新注册,您能帮我吗

    回复 删除

热门FPGA项目