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

📄 div.v

📁 基于FPGA的JPEG图像压缩芯片设计
💻 V
字号:
/////////////////////////////////////////////////////////////////////////                                                             ////////  Non-restoring singed dividor                               ////////                                                             ////////  Author: Richard Herveille                                  ////////          richard@asics.ws                                   ////////          www.asics.ws                                       ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Copyright (C) 2002 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: div.v,v 1.1.1.1 2002/03/26 07:25:12 rherveille Exp $////  $Date: 2002/03/26 07:25:12 $//  $Revision: 1.1.1.1 $//  $Author: rherveille $//  $Locker:  $//  $State: Exp $//// Change History://               $Log: div.v,v $//               Revision 1.1.1.1  2002/03/26 07:25:12  rherveille//               First upload//`include "timescale.v"module div(clk, ena, z, d, q, s);	//	// parameters	//	parameter z_width = 16;	parameter d_width = z_width /2;		//	// inputs & outputs	//	input clk;               // system clock	input ena;               // clock enable	input  [z_width -1:0] z; // divident	input  [d_width -1:0] d; // divisor	output [z_width -1:0] q; // quotient	output [z_width -1:0] s; // remainder	//		// functions	//	function sc;		input [z_width:0] si;		input [d_width:0] di;	begin		sc = si[z_width] ~^ di[d_width];	end	endfunction	function [z_width:0] gen_q;		input [z_width:0] q;		input             q0;	begin		gen_q = {(q << 1), q0};	end	endfunction	function [z_width:0] gen_s;		input [z_width:0] si;		input [z_width:0] di;		input             sel;	begin		if(sel)			gen_s = {si[z_width-1:0], 1'b0} - di;		else			gen_s = {si[z_width-1:0], 1'b0} + di;	end	endfunction	//	// variables	//	reg [z_width:0] q_pipe  [z_width:0];	reg [z_width:0] s_pipe  [z_width:0];	reg [z_width:0] d_pipe  [z_width:0];	reg [z_width:0] qb_pipe;	//	// perform parameter checks	//	// synopsys translate_off	initial	begin		if(d_width > z_width)			$display("div.v parameter error (d_width > z_width). Divisor width larger than divident width.");	end	// synopsys translate_on	integer n;	// generate divisor (d) pipe	always@(d)		d_pipe[0] <= {d[d_width -1], d, {(z_width-d_width){1'b0}} };	always@(posedge clk)		if(ena)			for (n=1; n < z_width; n=n+1)				d_pipe[n] <= #1 d_pipe[n-1];	// generate sign comparator pipe	always		begin			#1;			for (n=0; n < z_width; n=n+1)				qb_pipe[n] <= sc(s_pipe[n], d_pipe[n]);		end	// generate internal remainder pipe	always@(z)		s_pipe[0] <= {z[z_width -1], z};	always@(posedge clk)		if(ena)			for(n=1; n < z_width; n=n+1)				s_pipe[n] <= #1 gen_s(s_pipe[n-1], d_pipe[n-1], qb_pipe[n-1]);	// generate quotient pipe	always@(qb_pipe[0])		q_pipe[0] <= #1 { {(z_width){1'b0}}, qb_pipe[0]};	always@(posedge clk)		if(ena)			for(n=1; n < z_width; n=n+1)				q_pipe[n] <= #1 {q_pipe[n-1], qb_pipe[n]};	wire [z_width:0] last_q;	assign last_q = q_pipe[z_width -1];	always@(posedge clk)		if (ena)			q_pipe[z_width] <= #1 {!last_q[z_width-1], last_q[z_width-2:0], 1'b1};	// assign outputs	assign q = q_pipe[z_width];	assign s = s_pipe[z_width];endmodule

⌨️ 快捷键说明

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