⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffman_enc.v

📁 这是我写的一个关于fpga verilog的程序希望有对初学着有帮助
💻 V
字号:
/////////////////////////////////////////////////////////////////////////                                                             ////////  JPEG Entropy Coding, Huffman Encoding                      ////////                                                             ////////  Creates 8bit output stream from huffman codes.             ////////  See accompanying testbench how to use this code.           ////////                                                             ////////  Author: Richard Herveille                                  ////////          richard@asics.ws                                   ////////          www.asics.ws                                       ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Copyright (C) 2001 Richard Herveille                        ////////                    richard@asics.ws                         ////////                                                             //////// This source file may be used and distributed without        //////// restriction provided that this copyright statement is not   //////// removed from the file and that any derivative work contains //////// the original copyright notice and the associated disclaimer.////////                                                             ////////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     //////// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   //////// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   //////// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      //////// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         //////// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    //////// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   //////// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        //////// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  //////// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  //////// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  //////// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         //////// POSSIBILITY OF SUCH DAMAGE.                                 ////////                                                             ///////////////////////////////////////////////////////////////////////////  CVS Log////  $Id: huffman_enc.v,v 1.2 2002/10/31 12:50:40 rherveille Exp $////  $Date: 2002/10/31 12:50:40 $//  $Revision: 1.2 $//  $Author: rherveille $//  $Locker:  $//  $State: Exp $//// synopsys translate_off`include "timescale.v"// synopsys translate_onmodule huffman_enc(clk, rst, tablesel, di, die, do, doe, busy);  input        clk;      // clock  input        rst;      // asynchronous active low reset  input  [1:0] tablesel; // huffman table select (0-3)  input  [7:0] di;       // data-in  input        die;      // data-in enable  output [7:0] do;       // data out  output       doe;      // data-out enable  output       busy;     // busy. Do not assert die while busy asserted  reg [7:0] do;  reg       doe;  wire [12:0] henc_dc_lum;  wire [14:0] henc_dc_chr;  wire [19:0] henc_ac_lum, henc_ac_chr;  reg  [ 4:0] codelen;  reg  [15:0] code;  reg         ddie;  reg         state;  reg  [22:0] sreg;  reg  [ 4:0] cnt;  // include default tables  `include "huffman_tables.v"  //  // hookup huffman tables  //  assign henc_dc_lum = jpeg_dc_luminance_huffman_enc( di[3:0] );  assign henc_dc_chr = jpeg_dc_chrominance_huffman_enc( di[3:0] );  assign henc_ac_lum = jpeg_ac_luminance_huffman_enc( di[7:4], di[3:0] );  assign henc_ac_chr = jpeg_ac_chrominance_huffman_enc( di[7:4], di[3:0] );  //  // split table-data into codeword and codeword-length  //  always @(posedge clk)    case (tablesel) // synopsys full_case parallel_case      2'b00: // DC Luminance        begin            codelen <= #1 henc_dc_lum[12: 9] +4'h1;            code    <= #1 henc_dc_lum[ 8: 0];        end      2'b01: // DC Chrominance        begin            codelen <= #1 henc_dc_chr[14:11] +4'h1;            code    <= #1 henc_dc_chr[10: 0];        end      2'b10: // AC Luminance        begin            codelen <= #1 henc_ac_lum[19:16] +4'h1;            code    <= #1 henc_ac_lum[15: 0];        end      2'b11: // AC Chrominance        begin            codelen <= #1 henc_ac_chr[19:16] +4'h1;            code    <= #1 henc_ac_chr[15: 0];        end    endcase  //  // wait for encoder table(s)  //  always @(posedge clk)    ddie <= #1 die;  //  // data out statemachine  //  always @(posedge clk or negedge rst)    if(~rst)      begin          state <= #1 1'b0;          cnt   <= #1 5'h0;      end    else      case (state)        1'b0:         if(ddie)           begin               if( (cnt + codelen) > 7 )                 state <= #1 1'b1;               cnt <= #1 (cnt + codelen);           end        1'b1:         begin             if (ddie)             begin                 cnt <= #1 (cnt + codelen) - 5'h8;                 if( (cnt + codelen) - 5'h8 < 8)                   state <= #1 1'b0;             end	     else	     begin                if( (cnt -5'h8) < 8)                  state <= #1 1'b0;                cnt <= #1 (cnt -5'h8);             end         end      endcase  assign busy = state;  always @(posedge clk)    if(ddie)      sreg <= #1 (sreg << codelen) | code;  always @(posedge clk)    doe <= #1 state;  always @(posedge clk)    do <= #1 sreg >> (cnt -5'h8);endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -