Está en la página 1de 11

SUMADORES

SUMADOR COMPLETO 1 BIT, v1.0


module suma1bit(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;

assign cout = (a&b)+(cin&(a^b)); // Acarreo de salida


assign sum = cin ^ (a^b); // Suma

endmodule

SUMADOR COMPLETO 1 BIT, v1.2


module suminst1bit(ai, bi, cini, sumi, couti);
input ai, bi, cini;
output sumi, couti;
wire aux1, aux2, aux3;

and inst1(aux1,ai,bi);
xor inst2(aux2,ai,bi);
and inst3(aux3,cini,aux2);
or inst4(couti,aux1,aux3);
xor inst5(sumi,cini,aux2);

endmodule

SUMADOR COMPLETO 4 BIT, v1.0

module sumconcat(a, b, cin, sum, cout);


input [3:0] a, b;
input cin;
output [3:0] sum, cout;

assign {cout,sum}=a+b+cin;

endmodule
SUMADOR COMPLETO 4 BIT, v2.0
module sumador4bits(a, b, cin, sum, cout);
input cin;
input [3:0] a, b;
output [3:0] sum, cout;

suma1bit inst1(.sum(sum[0]), .cout(cout[0]), .b(b[0]), .a(a[0]),.cin(cin));


suminst1bit inst2(a[1], b[1], cout[0], sum[1], cout[1]);
suma1bit inst3(a[2], b[2], cout[1], sum[2], cout[2]);
suminst1bit inst4(a[3], b[3], cout[2], sum[3], cout[3]);

endmodule

FUNCIÓN TEMPERATURA

module Temperatura(c, f);


input [6:0] c;
output [6:0] f;

assign f=temp(c); // Llamada a función

// Cuerpo de la función
// ------------------------------------

function [6:0] temp;


input [6:0] gc;

temp=((9*gc)/5)+32;

endfunction

endmodule

CONTADOR

module contador(bandera, reset, salida, clk);

input bandera, reset, clk;


output [3:0]salida;
reg [3:0]salida;
integer i;

initial
begin
salida=0;
end

always@ (posedge clk)


begin

if (reset)
begin
salida=0;
end
else
if (bandera)
begin
salida=salida+1;
$display("Salida=%d",salida);
end
else
begin
salida=salida-1;
$display("Salida=%d",salida);
end
end

endmodule

PARALELO SERIE

module paraleloserie(entrada,salida, clk);

input [7:0]entrada;
input clk;
output salida;
reg salida;
integer i;

initial
i=0;

always@(clk)
for (i=0;i<8;i=i+1)
begin
$display ("i=%d",i);
salida=entrada[i];
$display ("entrada=%d,salida=%d",entrada, salida);
end

endmodule
UNIDAD ARITMÉTICA LÓGICA

module alu(a, b, c, sel, cout);


//declaración de señales de I/O
input [15:0] a, b; // entrada a y b de 16 bits
output [15:0] c; // salida c de 16 bits
reg [15:0] c;

output cout; // acarreo de salida


reg cout;

input [1:0] sel; // selector de 2 bits

// siempre que se detecte un cambio en algún valor de entrada (a, b ó sel), hacer lo que sigue

always @(a or b or sel)


begin
cout=0; // asignación del valor 0 (por default) al acarreo
case (sel) // evalua el valor del selector para determinar la operación a realizar
2'h0: c=a&b; // operacion AND
2'h1: c=a|b; // operacion OR
2'h2: {cout,c}=a+b; // operacion SUMA
2'h3: {cout,c}=a-b; // operacion RESTA
endcase
$display("R= %d",c); //muestra por consola el resultado de la operación realizada
end
endmodule

UTILIZA ALU

module aritmetica(entrada1, entrada2, salida, acarrero, selector);


input [15:0]entrada1, entrada2; // entrada1 y entrada2 de 16 bits
output [15:0]salida; // salida de 16 bits
output acarrero; // bit de acarreo
input [1:0] selector; // variable selector de 2 bits
// Llamada a la alu
alu inst1 (entrada1,entrada2,salida,selector,acarrero);

endmodule
FACTORIAL

module factorial(entrada, salida);

//declaracion de señales de I/O


input [3:0] entrada; // entrada de 4 bits, ya que 10 cabe en 4 bits
output [21:0] salida; // salida de 22 bits, ya que 10! cabe en 22 bits
reg [21:0] salida;

//declaracion de variables locales auxiliares


integer i, auxiliar;

always@(entrada) // siempre que se detecte un cambio en el valor de entrada, hacer lo que sigue
begin
salida=0;
if (entrada<=10) //verifica que el numero a calcular el factorial no exceda el 10
begin
salida=1; // asignación del valor 1 a la salida
for(i = 1; i <= entrada; i = i + 1)
salida = salida*i; //almacena el producto para calcular el factorial
$display ( "%d!= %d" , entrada, salida);
//muestra por consola el valor del factorial
end
else // en caso de que el numero de entrada sea mayor que 10
$display ("%d!= indeterminado (max. 10)",entrada);
//muestra por consola un mensaje de advertencia al usuario
end

endmodule

CICLO FOR
module forv(sum, mult, num);
input [7:0] num;
output [7:0] sum;
output [15:0] mult;
reg [7:0] n, sum;

assign mult= num*num;

always @(num)
begin
sum=0;
for (n=0;n<5;n+=1) //while (n<5)
sum=sum+num;
end
endmodule
CICLO WHILE

module whilev(num, sum, mult);


input [7:0] num;
output [7:0] sum;
output [15:0] mult;
reg [7:0] n, sum;

assign mult= num*num;

always @(num)
begin
sum=0; n=0;
while (n<5)
begin
n=n+1;
sum=sum+num;
end
end
endmodule
FLIP-FLOP D

module FFD(d,clk,reset,set,q,qnot);
input [3:0] d;
input clk,reset,set;
output [3:0] q,qnot;
reg [3:0] q;
wire set, reset;

always @(posedge clk)


begin
$display("salida %d",q);
$monitor("Tiempo = %d Salida = %4b",$time,q);
if (reset)
q=4'h0;
else
if (set)
q=4'hF;
else
q=d;
end // Fin always

assign qnot=~q;

endmodule
FLIP- FLOP JK
module FFJK(J, K, RESET, CLK, Q);
input J, K, RESET;
input CLK;
output Q;
reg Q;

always @ (posedge CLK)


begin
if (RESET)
Q=0;
else
case ({J, K})
2'b00 : Q = Q;
2'b01 : Q = 0;
2'b10 : Q = 1;
2'b11 : Q = ~Q;
endcase
end
endmodule

MEMORIA
module Memoria(RegEnt, Leer, Escribir, Clk, Select, RegSal);

// Creación de una memoria de 8 bits x 32 localidades


// -------------------
// RegEnt - Registro de Entrada a la Memoria o banco de registros
// RegSal - Registro de Salida de ...
// Select - Dirección de la memoria a leer o escribir

input Leer, Escribir, Clk;


input [7:0] RegEnt;
input [4:0] Select;
output [7:0] RegSal;
reg [7:0] RegSal;
reg [7:0] Mem [31:0];
reg [4:0] n;

initial
begin
for (n=0;n<=31;n=n+1)
Mem[n]=n;
end

always @(posedge Clk)


begin
if (Leer)
begin
RegSal=Mem[Select];
end
else
if (Escribir)
begin
Mem[Select]=RegEnt;
end
end // Fin always
endmodule
MAQUINA DE ESTADO – CONTADOR 1

module Contador(clk, reset, q);

parameter S0=0, S1=1, S2=2, S3=3; // Estados

input clk;
input reset;
output [1:0] q;
reg [1:0] q;
reg [1:0] Estd, PxEstd;

initial
begin
PxEstd=0;
q=0;
end

always @(posedge clk)


if (reset)
q=0;
else
Estd=PxEstd;

always @(Estd or PxEstd)


begin
case (Estd)
S0: begin
q=S0;
PxEstd=S1;
end
S1: begin
q=S1;
PxEstd=S2;
end
S2: begin
q=S2;
PxEstd=S3;
end
S3: begin
q=S3;
PxEstd=S0;
end
endcase
end
endmodule
MAQUINA DE ESTADO – CONTADOR 2

`define S0 0
`define S1 1
`define S2 2
`define S3 3

module Cont2bits(clk, reset, q);

// parameter S0=0, S1=1, S2=2, S3=3; // Estados

input clk;
input reset;
output [1:0] q;
reg [1:0] q;

reg [1:0] Estd, PxEstd;

initial
begin
PxEstd=0;
q=0;
end

always @(posedge clk)


begin
if (reset)
q=0;
else
Estd=PxEstd;
end

always @(Estd)
begin
case (Estd)
`S0: begin
q='b00;
PxEstd=`S1;
end
`S1: begin
q='b01;
PxEstd=`S2;
end
`S2: begin
q='b10;
PxEstd=`S3;
end
`S3: begin
q='b11;
PxEstd=`S0;
end
endcase
end
endmodule
MAQUINAS DE ESTADO – CONTADOR ASCENDENTE – DESCENDENTE

module ContAscDesc (Izq, CE, CLK, Q) ;

input CE, Izq, CLK ; //CE - Habilita Reloj


output [3:0] Q;
reg [3:0] Q;

initial
begin
Q[3:0] = 4'b0000;
end

always @ (posedge CLK)


begin
if(CE)
begin
if (Izq)
begin
Q=Q-1;
end
else
begin
Q=Q+1;
end
end
end // Fin always
endmodule

También podría gustarte