Strumenti Utente

Strumenti Sito


informatica:ae:ufdivisoreverilog

Unità firmware

PC

module PC(//uscite : 
	  // tutti i beta 
	  bx, by, bq, bor, boq, brdy, back,
	  // tutti gli alpha
	  akx, akq,
	  // ingressi: 
	  rdy, segno, clock);
 
   output bx, by, bq, bor, boq, brdy, back;
   output akx, akq;
   input  rdy, segno, clock;
 
 
   wire   nuovostato;
 
 
   OmegaPC ompc(bx, by, bq, bor, boq, brdy, back,
	       akx, akq,
	       rdy, segno, 
	       stato);
 
   SigmaPC sipc(nuovostato,
		stato,
		rdy, segno);
 
   registro #(1) s(stato,nuovostato,1'b1,clock);
 
 
endmodule

OmegaPC

module OmegaPC(// tutti i beta
	       bx, by, bq, bor, boq, brdy, back,
	       // tutti gli alpha
	       akx, akq,
	       // gli ingressi dalla PO
	       rdy, segno, 
	       // stato interno 
	       stato);
 
   output bx, by, bq, bor, boq, brdy, back;
   output akx, akq;
   input  rdy, segno, stato;
 
   assign #2 bx = (rdy & (~stato)) | (~segno & stato);
   assign #2 by = (rdy & (~stato));
   assign #2 bq = (rdy & (~stato)) | (~segno & stato);
   assign #2 bor = (segno & stato);
   assign #2 boq = (segno & stato);
   assign #2 brdy = (segno & stato);
   assign #2 back = (segno & stato);
 
   assign #2 akx = (~segno & stato);
   assign #2 akq = (~segno & stato);
 
 
endmodule

SigmaPC

module SigmaPC(output sprimo,
	       input stato,
	       input rdy, 
	       input segno);
 
   assign #2 sprimo = (~stato & rdy) | (stato & ~segno);
 
endmodule

PO

module PO(rdy, segno, // uscite verso la PC
	  // uscite dai registri di interfaccia
	  lror, lroq, lrack,
	  // ingressi dalla PC
	  back, brdy, bx, by, bq, bor, boq, akx, akq,
	  // ingresso clock
	  clock,
	  // ingressi verso i registri di interfaccia
	  linx, liny, lrdyin
	  );
 
   parameter N = 32;
 
   output rdy;
   output segno;
   output [N-1:0] lror;
   output [N-1:0] lroq;
   output 	  lrack;
 
   input 	  back, brdy, bx, by, bq;
   input 	  bor, boq, akx, akq, clock;
 
   input [N-1:0]  linx;
   input [N-1:0]  liny;
   input 	  lrdyin;
 
 
   reg [N-1:0] 	  const0;
 
   initial
     begin
	const0 = 0;
     end
 
 
   // indicatori a transizione di livello 
   ack ackout(lrack, back, clock);
   rdy rdyin (rdy,lrdyin,brdy,clock);
 
   wire [N-1:0] 	inx2x;
   wire [N-1:0] 	iny2y;
   wire [N-1:0] 	x2ror;
   wire [N-1:0] 	q2roq;
   wire [N-1:0] 	kx2x;
   wire [N-1:0] 	y2alumeno;
   wire [N-1:0] 	aluinc2q;
   wire [N-1:0] 	rq2roq;
   wire [N-1:0] 	alumeno2kx;
   wire [N-1:0] 	aluinc2kq;
   wire [N-1:0] 	kq2q;
 
 
   // registri di ingresso
   registro #(N) rinx(inx2x,linx,1'b1,clock);
   registro #(N) riny(iny2y,liny,1'b1,clock);
 
   // registri in uscita
   registro #(N) outr(lror,x2ror,bor,clock);
   registro #(N) outq(lroq,rq2roq,boq,clock);
 
   // registri interni
   registro #(N) rx(x2ror,kx2x,bx,clock);
   registro #(N) ry(y2alumeno,iny2y,by,clock);
   registro #(N) rq(rq2roq,kq2q,bq,clock);
 
   // alu
   alumeno #(N) alu1(alumeno2kx,segno,x2ror,y2alumeno);
   aluinc  #(N) alu2(aluinc2kq,rq2roq);
 
   // commutatori
   k2 #(N) kkx(kx2x,inx2x,alumeno2kx,akx);
   k2 #(N) kkq(kq2q,const0,aluinc2kq,akq);
 
 
endmodule

Unità firmware

module UF(lack, lor, loq,
	  clock,
	  lrdy,linx,liny);
 
   parameter N = 4;
 
   // output verso il mondo esterno
   output lack;
   output [N-1:0] lor;
   output [N-1:0] loq;
 
   // input dal mondo esterno
   input 	  clock;
   input 	  lrdy;
 
   input [N-1:0]  linx;
   input [N-1:0]  liny;
 
   // input alla PO dalla PC
   wire 	  back, brdy, bx, by, bq, bor, boq;
   wire 	  akx, akq;
 
   // input alla PC dalla PO
   wire 	  rdy, segno;
 
   PC #(4) partecontrollo(bx, by, bq, bor, boq, brdy, back,
			  akx, akq,
			  rdy, segno, clock);
 
   PO #(4) parteoperativa(rdy, segno,
			  lor, loq, lack,
			  back, brdy, bx, by, bq, bor, boq,
			  akx, akq,
			  clock,
			  linx, liny, lrdy);
 
endmodule
 
informatica/ae/ufdivisoreverilog.txt · Ultima modifica: 18/10/2017 alle 11:37 (7 anni fa) da Marco Danelutto