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

📄 booth.v

📁 这是arm7处理器的verilog全代码
💻 V
字号:
//Name:  Tam N. Nguyen, Thinh le, & Long Pham //Behave of Booth Multiplier.`define MULT_NUM_STATE_BITS	2`define MULT_IDLE		2'b00`define MULT_SHIFT		2'b01`define MULT_RESULT		2'b10`timescale			1ns/100psmodule Booth_multiplier(Multiplier_enable, Multiplier_A, Multiplier_B, Multiplier_Result, 			Multiplier_ready, sysclk);	// input	Multiplier_enable, Multiplier_A, Multiplier_B, sysclk;	input	Multiplier_enable, sysclk;	input	[31:0] Multiplier_A, Multiplier_B;	// output Multiplier_ready, Multiplier_Result;	output Multiplier_ready;	output [31:0] Multiplier_Result;	wire	Multiplier_enable, sysclk;	reg	prev;	wire	[31:0] Multiplier_A, Multiplier_B;	reg	Multiplier_ready;	reg	[31:0] r1, Multiplier_Result;	reg	[5:0] count;	reg	[63:0] r2;	reg [`MULT_NUM_STATE_BITS-1:0] present_state;		always 	   begin		@(posedge sysclk) enter_new_state(`MULT_IDLE);		  r1 <= @(posedge sysclk) Multiplier_A;		  r2 <= @(posedge sysclk) {1'b0, Multiplier_B};		  count <= @(posedge sysclk) 0;		  prev <= @(posedge sysclk) 0;		  Multiplier_ready = 1;		  if (Multiplier_enable)		     begin			@(posedge sysclk) enter_new_state(`MULT_RESULT);	       			       	Multiplier_Result <= @(posedge sysclk) r2[31:0];						while (count <= 31)			  begin			    if (prev == 1)			      begin				if (r2[0] == 1)				    prev <= @(posedge sysclk) 1;				else  //r2[0] == 0  				  begin				    prev <= @(posedge sysclk) 0;`ifdef BUG3				    r2[63:32] <= @(posedge sysclk) r2[63:32] 						  + Multiplier_A;`else				    r2[63:32] <= @(posedge sysclk) r2[63:32] + r1;`endif				  end			      end			    else //prev == 0			      begin				if (r2[0] == 1)				  begin				    prev <= @(posedge sysclk) 1;`ifdef BUG3				    r2[63:32] <= @(posedge sysclk) r2[63:32] 							- Multiplier_A;`else				    r2[63:32] <= @(posedge sysclk) r2[63:32] - r1;`endif				  end				else //r2[0] == 0				    prev <= @(posedge sysclk) 0;			      end			    @(posedge sysclk) enter_new_state(`MULT_SHIFT);			       r2 <= @(posedge sysclk) {r2[63], r2[63:1]};			       count <= @(posedge sysclk) count + 1;			    @(posedge sysclk) enter_new_state(`MULT_RESULT);			    Multiplier_Result <= @(posedge sysclk) r2[31:0];			      		          end			end		 end	task enter_new_state;           input [`MULT_NUM_STATE_BITS-1:0] this_state;           begin             present_state = this_state;             #1 Multiplier_ready = 0;           end        endtaskendmodule			        			      

⌨️ 快捷键说明

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