EDA实验报告.docx
《EDA实验报告.docx》由会员分享,可在线阅读,更多相关《EDA实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
EDA实验报告
T1:
行为级:
modulemux41(a,b,c,d,sel,f)
input[3:
0]a,b,c,d;
input[1:
0]sel;
output[3:
0]f;
reg[3:
0]f;
always@(a,b,c,d,sel)
begin
case(sel)
2’b00:
f=a;
2’b01:
f=b;
2’b10:
f=c;
2’b11:
f=d;
endcase
end
endmodule
数据流:
modulemux41(out,s1,s0,d0,d1,d2,d3);
output[3:
0]out;
input[3:
0]d0,d1,d2,d3;
inputs1,s0;
assignout=(s1)?
(s0?
d3:
d1):
(s0?
d2:
d0);
endmodule
T2:
行为级:
moduledecode3_8(data_out,data_in,enable);
input[2:
0]data_in;
inputenable;
output[7:
0]data_out;
reg[7:
0]data_out;
always@(data_inorenable)
begin
if(enable==1)
case(data_in)
3'b000:
data_out=8'b11111110;
3'b001:
data_out=8'b11111101;
3'b010:
data_out=8'b11111011;
3'b011:
data_out=8'b11110111;
3'b100:
data_out=8'b11101111;
3'b101:
data_out=8'b11011111;
3'b110:
data_out=8'b10111111;
3'b111:
data_out=8'b01111111;
default:
data_out=8'bxxxxxxxx;
endcase
else
data_out=8'b11111111;
end
endmodule
数据流:
moduledeocde38(outcode,incode);
output[7:
0]outcode;
input[2:
0]incode;
function[7:
0]shift;
input[2:
0]in;
case(in)
3'b000:
shift=8'b11111110;
3'b001:
shift=8'b11111101;
3'b010:
shift=8'b11111011;
3'b011:
shift=8'b11110111;
3'b100:
shift=8'b11101111;
3'b101:
shift=8'b11011111;
3'b110:
shift=8'b10111111;
3'b111:
shift=8'b01111111;
default:
shift=8'bxxxxxxxx;
endcase
endfunction
assignoutcode=shift(incode);
endmodule
T3:
N=4时:
moduleadd_n(x,y,sum,co);
parametern=4;
input[n-1:
0]x,y;
output[n-1]sum;
outputco;
assign{co,sum}=x+y;
endmodule;
N=16:
moduleadd_n(x,y,sum,co)
parametern=16;
input[n-1:
0]x,y;
output[n-1]sum;
outputco;
assign{co,sum}=x+y;
endmodule;
T4:
modulecompare_n(x,y,x_gt_y,x_eq_y,x_lt_y);
parametern=8;
input[n-1:
0]x,y;
outputregx_gt_y,x_eq_y,x_lt_y;
always@(x,y)
if(x>y)
beginx_gt_y=1;x_eq_y=0;x_lt_y=0;end
elseif(x==y)
beginx_gt_y=0;x_eq_y=1;x_lt_y=0;end
else
beginx_gt_y=0;x_eq_y=0;x_lt_y=1;end
endmodule
T5:
modulealu_N(X,Y,sel,result);
parameterN=4;
input[1:
0]sel;
input[N-1:
0]X,Y;
outputreg[N-1:
0]result;
always@(X,Y,sel)
begin
case(sel)
2'b00:
result=X-Y;
2'b01:
result=X>>1;
2'b10:
result=X^Y;
2'b11:
result=X;
endcase
end
endmodule
T6:
moduleregister_n(d,q,data,en,load,reset,clk);
parametern=4;
inputen,load,reset,clk;
input[n-1:
0]d,data;
outputreg[n-1:
0]q;
reg[n-1:
0]temp;
always@(posedgeclkorposedgereset)
begin
if(reset)
temp<=0;
elseif(load)temp<=data;
elsetemp<=d;
end
always@(en,temp)
begin:
trireg3st
if(en)q<=temp;
elseq<='bz;
end
endmodule
T7:
8位左移
moduleshift_l(clk,in,q);
inputclk,in;
outputwire[7:
0]q;
reg[7:
0]temp;
always@(posedgeclk)
temp<={temp,in};
assignq=temp;
endmodule
8位右移
moduleshift_r(clk,in,q);
inputclk,in;
outputwire[7:
0]q;
reg[7:
0]temp;
always@(posedgeclk)
temp<={in,temp[3:
1]};
assignq=temp;
endmodule
8位双向移动
moduleshift_all(clk,in,q,mode);
inputclk,in,mode;
output[7:
0]q;
reg[7:
0]temp;
always@(posedgeclk)
case(mode)
1'b0:
temp<={temp,in};
1'b1:
temp<={in,temp[3:
1]};
default:
temp<={temp,in};
endcase
assignq=temp;
endmodule
8位循环:
moduleshif_f(clk,in,q,load,mode);
inputclk,mode,load,in;
output[7:
0]q;
reg[7:
0]temp;
always@(posedgeclk)
begin
if(load)
temp=in;
if(mode)//自循环左移
temp<={temp[6:
0],temp[7]};
else
temp<={temp[0],temp[7:
1]};
end
assignq=temp;
endmodule
T8:
modulecnt12(clk,rst,en,q,cout);
inputclk,rst,en;
outputreg[n-1:
0]q;
outputcout;
parametern=4;
always@(posedgerst,posedgeclk)
begin
if(rst)
q<=0;
else
if(en)
if(q==11)q<=0;
elseq<=q+1;
end
assigncout=(q==0)?
1'b1:
1'b0;
endmodule
T9:
modulerom38(rom_data,rom_addr,load);
parameterm=8,n=3;
inputload;
input[n-1:
0]rom_addr;
outputreg[m-1:
0]rom_data;
reg[m-1:
0]memory[0:
2**n];
always@(posedgeload)
begin:
init
integeri;
for(i=0;i<(2**n);i=i+1)
memory[i]=1<
end
always@(rom_addr)
rom_data=memory[rom_addr];
endmodule
T10:
moduledivf_paramater(rst,clk,en,clkout);
inputrst,clk,en;
outputclkout;
integertemp;
parametern=20,m=6;
always@(posedgeclk)
begin
if(rst)
temp<=0;
elseif(en)
if(temp==n-1)temp<=0;
elsetemp<=temp+1;
end
assignclkout=(temp1:
0;
endmodule
T11:
moduledivf_paramater(rst,clk,en,clkout);
inputrst,clk,en;
outputclkout;
integertemp;
parametern=20,m=6;
always@(posedgeclk)
begin
if(rst)
temp<=0;
elseif(en)
if(temp==n-1)temp<=0;
elsetemp<=temp+1;
end
assignclkout=(temp1:
0;
endmodule
T12:
例4-18
moduledivf_oddn(clk,clk_n);
inputclk;
outputclk_n;
parametern=3;
integerp,q;
regclk_p,clk_q;
always@(posedgeclk)
begin
if(p==n-1)
begin
p=0;
clk_p=~clk_p;
end
else
p=p+1;
end
always@(negedgeclk)
begin
if(q==n-1)
q=0;
else
q=q+1;
if(p==(n-1)/2)
clk_q=~clk_q;
end
assignclk_n=clk_p^clk_q;
endmodule
例4-19
moduledivf_even(clk,clk_n);
inputclk;
outputregclk_n;
parametern=6;
integerp;
always@(posedgeclk)
begin
if(p==n/2-1)
beginp=0;clk_n=~clk_n;
end
elsep=p+1;
end
endmodule
例4-20
moduledivf_paramater(rst,clk,en,clkout);
inputrst,clk,en;
outputclkout;
integertemp;
parametern=20,m=6;
always@(posedgeclk)
begin
if(rst)
temp<=0;
elseif(en)
if(temp==n-1)temp<=0;
elsetemp<=temp+1;
end
assignclkout=(temp1:
0;
endmodule