Übung 10.5 4bit Multiplizierer

Krystofae
Erstie
Erstie
Beiträge: 21
Registriert: 22. Sep 2008 01:01

Übung 10.5 4bit Multiplizierer

Beitrag von Krystofae »

In meiner Übungsgruppe kam die Bitte auf mal eine implementierte Variante des Multiplizierers online zu stellen.
Hier eine Variante die Pipelining benutzt. Durch die Benutzung von weiteren Registern zum Zwischenspeichern erhöht sich zwar die Latenz, aber der Durchsatz erhöht sich auch.
Zum Verilog lernen ermuntere ich jeden seine eigene Fassung hochzuladen, damit man mal verschiedene Varianten sieht :)

Code: Alles auswählen

module uebung10_5(clk, a, b, result);
  input clk;
  input [3:0]a, b;
  output reg [7:0]result;
  
  reg [4:0]a_stufe0, b_stufe0, result_stufe0; 
  reg [5:0]a_stufe1, b_stufe1, result_stufe1; 
  reg [6:0]a_stufe2, b_stufe2, result_stufe2; 
  
  always @(posedge clk) 
  begin
	if(b[0] == 1) result_stufe0 <= a;
	  else result_stufe0 <= 0;
	b_stufe0 <= b >>1;
	a_stufe0 <= a <<1; 
  end 
  
  always @(posedge clk)
  begin
	if(b_stufe0[0] == 1) result_stufe1 <= result_stufe0 + a_stufe0;
	  else result_stufe1 <= result_stufe0;
	b_stufe1 <= b_stufe0 >>1;
	a_stufe1 <= a_stufe0 <<1; 
  end
  
  always @(posedge clk)
  begin
	if(b_stufe1[0] == 1) result_stufe2 <= result_stufe1 + a_stufe1;
	   else result_stufe2 <= result_stufe1;
	b_stufe2 <= b_stufe1 >>1;
	a_stufe2 <= a_stufe1 <<1; 
  end
  
  always @(posedge clk)
  begin
	if(b_stufe2[0] == 1) result <= result_stufe2 + a_stufe2;
	  else result <= result_stufe2;
  end

  endmodule
  

Zurück zu „Archiv“