Professional Documents
Culture Documents
Avlsi Lab Programs Final
Avlsi Lab Programs Final
module alu(s0,s1,ci,ai,bi,m,f,c0);
input s0,s1,ci,ai,bi,m;
output c0,f;
reg c0,f;
always @ (s0,s1,ci,ai,bi,m)
begin
if(m==1)
case ({s0,s1,ci})
3'b000:{c0,f}=ai;
3'b001:{c0,f}=ai+1;
3'b010:{c0,f}=ai+bi;
3'b011:{c0,f}=ai+bi+1;
3'b100:{c0,f}=ai+(!bi);
3'b101:{c0,f}=ai+(!bi)+1;
3'b110:{c0,f}=ai-bi;
3'b111:{c0,f}=1-(ai-bi);
endcase
if(m==0)
case({s0,s1})
2'b00:{c0,f}=ai&bi;
2'b01:{c0,f}=ai|bi;
2'b10:{c0,f}=ai^bi;
2'b11:{c0,f}=~(ai&bi);
endcase
end
endmodule
module test(s0,s1,ci,a,b,m,f,cout);
input [3:0]a,b;
input s0,s1,ci,m;
output cout;
output[3:0]f;
wire c1,c2,c3;
alu m1(s0,s1,ci,a[0],b[0],m,f[0],c1);
alu m2(s0,s1,c1,a[1],b[1],m,f[1],c2);
alu m3(s0,s1,c2,a[2],b[2],m,f[2],c3);
alu m4(s0,s1,c3,a[3],b[3],m,f[3],cout);
endmodule
begin
mem1[0]=8'b00000000;
mem1[1]=8'b0000101;
mem1[2]=8'b00001010;
mem1[3]=8'b00001100;
mem1[4]=8'b00001111;
mem1[5]=8'b00001100;
mem1[6]=8'b00001010;
mem1[7]=8'b00000101;
mem1[8]=8'b00000000;
mem1[9]=8'b11111011;
mem1[10]=8'b11110110;
mem1[11]=8'b11110100;
mem1[12]=8'b11110001;
mem1[13]=8'b11110100;
mem1[14]=8'b11110110;
mem1[15]=8'b11111011;
mem1[16]=8'b11110000;
sin1=mem1[count1];
count1=count1+1;
end
end
endmodule
SIMULATION OF COSINE WAVE GENERATOR:
module cos(clk,reset,cos,cos1);
reg mclk,mreset;
input reset,clk;
output reg[7:0]cos,cos1;
reg[3:0]count,count1;
reg[7:0]mem[15:0],mem1[15:0];
always@(posedge clk or posedge reset)
begin
if (reset)
begin
count=4'b0000;
cos=8'b00000000;
end
else
begin
mem[0]=8'b00001111;
mem[1]=8'b00001100;
mem[2]=8'b00001010;
mem[3]=8'b00000101;
mem[4]=8'b00000000;
mem[5]=8'b11111011;
mem[6]=8'b11110110;
mem[7]=8'b11110100;
mem[8]=8'b11110000;
mem[9]=8'b11110100;
mem[10]=8'b11110110;
mem[11]=8'b11111011;
mem[12]=8'b00000000;
mem[13]=8'b00000101;
mem[14]=8'b00001010;
mem[15]=8'b00001100;
cos=mem[count];
count=count+1;
mclk=count[3];
end
end
always @(posedge mclk or posedge mreset)
begin
if(mreset)
begin
count1=4'b0000;
cos1=8'b00000000;
end
else
begin
mem1[0]=8'b00001111;
mem1[1]=8'b00001100;
mem1[2]=8'b00001010;
mem1[3]=8'b00000101;
mem1[4]=8'b00000000;
mem1[5]=8'b11111011;
mem1[6]=8'b11110110;
mem1[7]=8'b11110100;
mem1[8]=8'b11110000;
mem1[9]=8'b11110100;
mem1[10]=8'b11110110;
mem1[11]=8'b11111011;
mem1[12]=8'b00000000;
mem1[13]=8'b00000101;
mem1[14]=8'b00001010;
mem1[15]=8'b00001100;
cos1=mem1[count1];
count1=count1+1;
end
end
endmodule
a=a+1;
end
else
begin
a=4'b0000;
end
end
end
endmodule
begin
outt2[3]<=outt2[3]^outt2[0];
outt2[2:0]<=outt2[3:1];
count1<=count1+1;
end
end
end
endmodule
end
end
endmodule
QPSK:
module qpsk(clk,reset, a,qpsk,sin);
input clk,reset;
input [1:0] a;
reg [3:0]count;
reg [7:0]m[15:0];
output reg[7:0]sin;
output reg[7:0]qpsk;
always@(posedge clk or posedge reset)
begin
if(reset)
begin
count=4'b0000;
sin=8'b00000000;
end
else
begin
m[0]=8'b00000000;
m[1]=8'b00000101;
m[2]=8'b00001010;
m[3]=8'b00001100;
m[4]=8'b00001111;
m[5]=8'b00001100;
m[6]=8'b00001010;
m[7]=8'b00000101;
m[8]=8'b00000000;
m[9]=8'b11111011;
m[10]=8'b11111011;
m[11]=8'b11110100;
m[12]=8'b11110001;
m[13]=8'b11110100;
m[14]=8'b11110110;
m[15]=8'b11111011;
m[16]=8'b11110000;
sin=m[count];
count=count+1;
if(a==00)
begin
qpsk=~m[count+2];
end
else if(a==01)
begin
qpsk=~m[count+5];
end
else if(a==11)
begin
qpsk=m[count+2];
end
else
begin
qpsk=m[count+5];
end
count=count+1;
end
end
endmodule