uni

Latch SR

Si dicono Latch gli elementi di memoria trasparenti.

module Latch_SR(q,qN,s,r);
	input s,r;
	output q,qN;
	assign #1 q= ~(r|qN);
	assign #2 qN= ~(s|q);
	endmodule

D Latch (reg)

reg D_LATCH;
	assign q=D_LATCH;
	alway @(reset_==0) #1 D_LATCH<=bit_iniziale 
	alway @(c or d) if (reset_==1) #2 D_LATCH <= (c==1) ? d : D_LATCH;
	//"quando c o d cambiano valore"
	// <= assegnamento procedurale non bloccate
	//se si vuole bitiniziale=1 : /preset collegata a /reset, /preclear collegata a Vcc
	//se si vuole bitiniziale=0 : il contrario
	//se non interessa al reset, togliere reset dalla descrizione e collegare nella sintesi /preset e /preclear a vcc

D flip flop (positive edge triggered D flip flop)

Si dicono flip-flop gli elementi di memoria non trasparenti.

reg D_EDGE;
	assign q = D_EDGE;
	always @(reset_ == 0) #1 D_EDGE <= bit_iniziale;
	always @(posedge p) if (reset_ == 1) #3 D_EDGE <= d;
	//#3 è Tpropagation

RAM statica 8Mx8bit

module RAM(d3_d0,a22_a0,s_,mr_,mw_);
	input[22:0] a22_a0;
	input s_, mw_, mr_;
	inout[3:0] d3_d0;
	reg[3:0] LOCATION[0:8388607];
	wire b; assign b=({s_,mr_,mw_}== 'B001) ? 1:0;
	wire c; assign c=({s_,mr_,mw_}== 'B010) ? 1:0;
	//ciclo di lettura
	assign #Tread d3_d0=(b==1) ? LOCATION[a22_a0]:'HZ;
	//ciclo di scrittura
	always @(c or d3_d0) #Twrite LOCATION[a22_a0] <= (c==1) ? d3_d0 : LOCATION[a22_a0];
	endmodule

Registro

reg[W-1:0] registro;
wire clock, reset_;
wire[W-1:0] dW-1_d0;
wire[W-1:0] qW-1_q0;
assign qW-1_q0 = registro;
always @(reset_ == 0) registro <= contenutoiniziale;
always @(posedge clock) if (reset_ == 1) #Tpropagation registro <= dW-1_d0;

Contatore Up su Naturali

module ContatoreUpNcifreBaseB(numero, clock, reset_)
input clock, reset_;
output[N-1:0] numero;
reg[N-1:0] OUTR;
assign numero = OUTR;
always @(reset_ == 0) #1 OUTR <= contenutoniziale;
always @(posedge clock) if (reset_ == 1) #3 OUTR <= numero + 1;
endomdule

Rete di Moore

module Rete_di_Moore( z, x, clock, reset_); //o (Xn-1,...,x=X0, Zm-1,...,Z0,etc)
	input clock, reset_;
	input[N-1:0] x;
	output[M-1:0] z;
	reg[W-1:0] STAR;
	parameter S0 = codifica0, S1 = codifica1, Sk-1 = codificak-1;
	assign {zM-1,...,z0} = (STAR == S0) ? ZS0 :
		(STAR == S1) ? ZS1 :
		...
		/*(STAR == Sk-1) */ ZSk-1;
	always @(reset_ == 0) #1 STAR<=statointernoiniziale;
	always @(posedge clock) if (reset_ == 1) #3
		casex(STAR)
			S0 : STAR <= AS0(xN-1,...,x0);
			S1 : ...
			..
			Sk-1 : STAR <= ASk-1(xN-1,...,x0);
		endcase
	endmodule

Flip Flop JK

Specifiche: quando arriva il segnale di sincronizzazione se lo stato di ingresso JK è:
10-setta, 01-resetta, 00-conservazione, 11-commutazione.

module Flipflopjk( j, k, q, reset_, clock);
	input reset_, clock;
	input j,k;
	output q;
	reg STAR;
	parameter S0 = 'b0, S1 = 'b1;
	assign q = (STAR == 0) ? 0 : 1;
	always @(reset_ == 0) #1 STAR <= S0;
	always @(posedge clock) if (reset_ == 1) #3 
		casex(STAR)
			S0 : STAR<=(j==0) ? S0 : S1;
			S1 : STAR<=(k==0) ? S1 : S0;
		endcase
	endmodule

Riconoscitore di Sequenze

11 01 10

module riconoscitore(x, z, reset_, clock);
	input reset_, clock;
	input[1:0] x;
	output z;
	reg[1:0] STAR;
	parameter s0 : 00, s1:01 , s2:10 , s3:11;
	assign z = (STAR == S3) ? 1 : 0;
	always @(reset_ == 0) #1 STAR <= s0;
	always @(posedge clock) if (reset_ == 1) #3 
		casex(STAR)
			s0 : STAR<= (x == 'b11) ? s1 : s0;
 
 
   00 01 11 10
s0 s0 s0 s1 s0
s1 s0 s2 s1 s0
s2 s0 s0 s1 s3 
s3 s0 s0 s1 s0

Rete di Mealy

module Rete_di_Mealy(x, z, clock, reset_);
	input clock, reset_;
	input[N-1:0] x;
	output[M-1:0] z;
	reg[W-1:0] STAR;
	parameter S0:codifica0 , S1:codifica1, ... Sk-1:codificak-1;
	assign z = (STAR == S0) ? Zs0(x) : //legge Z
		...
		/* (STAR == Sk-1) ? */ Zsk-1(x);
	always @(reset_ == 0) #1 STAR <= statointernoiniziale;
	always @(posedge clock) if (reset_ == 1) #3 casex(STAR)
		S0: STAR <= As0(x); //legge A
		...
		Sk-1: STAR <= Ask-1(x);
		endcase
	endmodule

Rete di Mealy Ritardato

module Rete_di_Mealy(x, z, clock, reset_);
	input clock, reset_;
	input[N-1:0] x;
	output[M-1:0] z;
	reg[W-1:0] STAR;
	parameter S0:codifica0 , S1:codifica1, ... Sk-1:codificak-1;
	reg[M-1] OUTR;
	assign z = OUTR;
	
	always @(reset_ == 0) #1 begin 
		STAR <= statointernoiniziale;
		OUTR <= ZSiniziale;
	
	always @(posedge clock) if (reset_ == 1) #3 casex(STAR)
		S0: begin
			STAR <= As0(x);
			OUTR <= Zs0(x); end
		...
		Sk-1: begin 
			STAR <= Ask-1(x);
			OUTR <= Zsk-1(x); end
		endcase
	endmodule

RSS complesse

module RSScomplessa(x, z, clock, reset_);
	input clock, reset_;
	input[N-1:0] x;
	output[M-1:0] z;
	reg[...] Rq-1;
	...
	reg[...] R0;
	reg[W-1:0] STAR;
	parameter S0:codifica0 , S1:codifica1, ... Sk-1:codificak-1;
	reg[M-1] OUTR;
	assign z = {Rq-1,...,R0}; //tutti i registri o solo una parte
	
	always @(reset_ == 0) #1 begin 
		STAR <= statointernoiniziale;
		Rq-1 <= statoiniziale
		...
		R0 <= statoiniziale
	
	always @(posedge clock) if (reset_ == 1) #3 casex(STAR)
		S0: begin
			STAR <= As0(x,Rq-1,...,R0);
			Rq-1 <= Rs0,q-1(x,Rq-1,..,R0); 
			...
			R0 <= Rs0,0(x,Rq-1,...,R0); end
		...
		Sk-1: begin 
			STAR <= Ask-1(x,Rq-1,...,R0);
			Rq-1 sk-1,q-1(x,Rq-1,...,R0);
			...
			R0 sk-1,0(x,Rq-1,...,R0); end
		endcase
	endmodule

Rete parte operativa-parte controllo