北邮ASIC实验报告318卷积码编码器.docx
- 文档编号:6727704
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:12
- 大小:441.04KB
北邮ASIC实验报告318卷积码编码器.docx
《北邮ASIC实验报告318卷积码编码器.docx》由会员分享,可在线阅读,更多相关《北邮ASIC实验报告318卷积码编码器.docx(12页珍藏版)》请在冰豆网上搜索。
北邮ASIC实验报告318卷积码编码器
邮电大学
ASIC原理课程实验
实验报告
设计要求:
〔3,1,8〕卷积码编码器
学院:
电子工程学院
专业:
电子信息科学与技术
班级:
学号:
:
2013年6月20日
一、设计要求
运用verilog语言编写一个〔3,1,8〕卷积码编码器,并对其进展仿真。
二、卷积码编码器原理
卷积码拥有良好的纠错性能,是一种被广泛应用于移动通信的信道编码系统。
一个〔n,k,m〕卷积码编码器由k个输入,具有m阶存储的n个输出的线形时序电路实现。
通常,n和k是较小的整数,且k<n,但m比拟大。
当k=1时,信息序列不再分成小块,以便可以连续处理。
卷积码〔n,k,m〕表示码率R=k/n,编码器级数m=s-1,其中s是码约束长度。
反向CDMA信道使用〔3,1,8〕卷积码,码率R=1/3,约束长度为9,由于k=1,n=3,m=8,那么该卷积编码器包含单个输入端,一个8级移位存放器,三个模2加法器和一个3向编码器输出的连续转向器。
编码器每输入一位信息比特将产生三位编码输出。
这些编码符号中,第一个输出符号G0是生成序列g1⑴编码产生的符号,第二个输出符号G1是由生成序列g1⑵编码产生的符号,最后一个输出符号G2是由生成序列g1⑶编码产生的符号,如下列图所示。
该电路由一个八位存放器、三个码生成逻辑、一个时隙发生器和一个四选一复用器构成。
mux的输入为G0、G1和G2,码选择信号C[1:
0]和clk1由时隙发生器产生,输出信号即为整个电路的输出Yout。
卷积编码器的初始状态用rst异步清零信号置为0,rst=0时,电路清零。
卷积编码器的初始状态全为0,初始状态之后输出的第一个编码符号由生成序列g1⑴编码产生。
这里,三个生成序列分别为g1⑴=〔101101111〕,g1⑵=(110110011),g1⑶=(111001001)。
即三个生成多项式分别为:
C0=1+X+X2+X3+X5+X6+X8(557)
C1=1+X+X4+X5+X7+X8(663)
C2=1+X3+X6+X7+X8(711)
三、实验设计与实现
根据以上实验要求,我们首先设想了分为几个模块,然后将各个模块进展整合实现编码器的功能,根据我们的设想编写相应的verilog程序,进展调试、实现。
以下是实验的具体过程。
1.卷积码模块设计
〔1〕3分频器〔fenping〕。
它的功能是产生clk时钟三分之一频率的时钟信号,命名为clk1,同时产生选择信号sel[1:
0]。
〔2〕4-1多路选择器(mux_4_1)。
根据sel[1:
0]输入的选择信号,选择4路(in0,in1,in2,in3)输入的1路来输出(out)。
后来,根据教师的指导,将卷积的运算逻辑组装在这个模块里。
〔3〕8位移位存放器〔wyjc_8〕。
用于记录输入的信息。
每经过一个时钟上升沿〔clk1〕向前移位一次。
2.verilog程序编写
各个模块相应的代码和注释如下所示。
〔1〕3分频器
modulefenping(clear,clk,clk1,count);
inputclk,clear;
outputclk1,count;
wireclk,clear;
regclk1;
reg[2:
0]count;
always(posedgeclkorposedgeclear)
begin
if(clear==1)
count[2:
0]<=3’b010;
else
begin//通过循环移位实现3分频
count[0]<=count[2];
count[1]<=count[0];
count[2]<=count[1];
clk1<=count[1];
end;
end
endmodule
〔2〕4—1多路选择器
modulemux_4_1(clk1,clk,sel,in,kin,out);
input[1:
0]sel;
inputclk,in,clk1;
input[7:
0]kin;
outputout;
wire[1:
0]sel;
regout;
reg[8:
0]k;
always(posedgeclk)//依次计算c0,c1,c2
begin
case(sel)
defaultout<=0;
2’b00:
out<=(k[0]+k[1])+(k[2]+k[3])+(k[5]+k[6]+k[8]);
2’b01:
out<=k[0]+k[1]+k[4]+k[5]+k[7]+k[8];
2’b10:
out<=k[0]+k[3]+k[6])+k[7]+k[8];
endcase
end
always(posedgeclk1)//采样局部
begin
k[7:
0]<=kin[7:
0];
k[8]<=in;
end
endmodule
〔3〕8位移位存放器
modulewyjc_8(clear,clk,in,out);
Inputclear,clk,in;
output[7:
0]out;
reg[7:
0]out;
wireclear,clk,in;
always(posedgeclkorposedgeclear)
begin
if(clear==1)
out[7:
0]<=8’b0;
else
begin
out[7]<=in;
out[6]<=out[7];
out[5]<=out[6];
out[4]<=out[5];
out[3]<=out[4];
out[2]<=out[3];
out[1]<=out[2];
out[0]<=out[1];
end
end
endmodule
〔4〕整合模块
`include“fenping.v〞//将各模块参加文件
`include“mux_4_1.v〞
`include“wyjc_8.v〞
modulebianma(rst,clk,in,out,clk1);
inputrst,clk,in;
outputout;
outputclk1;
wireclr,clk,in,clk1,rst;
wire[7:
0]k;
wire[2:
0]sel;
regg0,g1,g2;
fenpingf1(.clk(clk),.clear(clr),.clk1(clk1),.count(sel));//分频器实例化
wyjc_8w1(.clear(clr),.clk(clk1),.in(in),.out(k));//移位存放器实例化
mux_4_1m1(.clk1(clk1),.in(in),.kin(k),.clk(clk),.sel(sel[1:
0]),.out(out));
//多路选择器实例化
assignclr=~rst;//复位信号翻转
endmodule
〔5〕测试程序
·timescale1ns/1ns
modulebianma_test1;
regclk,rst,in,code,flag;
wireout,clk1;
integerI,j,r_seed;
reg[31:
0]a;
reg[15:
0]c0,c1,c2;
bianmab1(.clk1(clk1),.clk(clk),.rst(rst),.in(in),.out(out));
initialclk=0;//时钟产生
always#5clk=~clk;
initial//复位局部
begin
rst=0;
#7rst=1;
end
initial//完毕仿真
#490$finish;
Initial//输入与对照分量产生
begin
$monitor($stime,,〞clk=%b,rst=%b,in=%b,out=%b,code=%b,error=%b〞,clk,rst,in,out,code,flag);
a[31:
0]=32’b0;
a[18:
0]=$random%(1024*8);
for(i=0;i<16;i=i+1)
begin
c0[i]=a[i+8]^a[i+6]^a[i+5]^a[i+3]^a[i+2]^a[i+1]^a[i];
c1[i]=a[i+8]^a[i+7]^a[i+5]^a[i+4]^a[i+1]^a[i];
c2[i]=a[i+8]^a[i+7]^a[i+6]^a[i+3]^a[i];
end
in=0;
flag=0;
#10in=a[8];
for(i=0;i<16;i=i+1)
begin
#30in=a[i+9];
end
end
initial//采样比照
begin
#20code=0;
for(j=0;j<16;j=j+1)
begin
#5code=c0[j];
#5if(out!
=code)flag=1;
#5code=c1[j];
#5if(out!
=code)flag=1;
#5code=c2[j];
#5if(out!
=code)flag=1;
if(flag==1)$dispaly(“error〞);
end
end
initial$sdf_annotate(“bianma.sdf〞,b1);//延时文件
endmodule
四、仿真与综合
1.初始波形〔输入IN为随机数〕
图中out端输出为编码器输出,code端输出为对照输出,从仿真波形图可以看出,两者的输出波形完全一致,即编码器工作正常。
2.门级电路仿真
各模块和综合后仿真结果如下4图所示。
3.综合后电路信息
4.综合后仿真波形〔输入IN为随机数〕
在control_test.v文件中参加以下语句,以便将control.sdf文件标注到测试文件中:
initial$sdf_annotate(“control.sdf〞,c1);[c1为测试文件中调用control电路模块的标签]在对门级电路control.vg进展仿真时,在仿真命令中使用-v/home2/student/lib/train/verilog/tsmc25.v将库文件引入,得到的仿真波形如下列图所示。
由上图可知,在其他条件不变情况下,编码器工作依然正常,但是out端〔实际〕的输出与code端〔对照〕的输出相比,有1ps的延迟。
五.实验思考题
请用vi翻开control.vg和control.sdf文件,理解其中容,尤其是control.sdf中的延迟信息是如何表示的,并答复以下问题。
1.control.vg文件是verilog语言级的描述还是构造化的描述?
实验中的局部vg文件如下截图所示。
可以看出,vg文件是构造化描述。
2.control.sdf文件中,对触发器的延迟包括哪些信息,请一一列出。
Sdf文件中关于触发器的描述局部截图如下。
可以看出触发器的延时信息包括每一个逻辑单元的每一个管脚的上升时延与下降时延的最小值、典型值、最大值。
3.在对门级电路control.vg进展仿真时,加上+maxdelays模拟选项,观察仿真结果;并与不加+maxdelays模拟选项的模拟结果进展比拟,如果有不同之处,请将其不同处列在下面,并分析原因。
加上+maxdelays模拟选项的模拟结果:
通过仿真波形比照发现,是否参加模拟选项之间没有任何差异,实际上使用+maxdelays与不使用+maxdelays在门级仿真中有延时的差异,是因为门级仿真时使用到.sdf文件。
这个文件中包含逻辑综合中生成的33个逻辑单元的延时信息。
这些信息表示了每一个逻辑单元的每一个管脚的上升时延与下降时延的最小值、典型值、最大值。
当使用+maxdelays时,门级仿真使用了延时的最大值,故门级仿真波形表现出其延时要长于不用+maxdelays。
六、实验总结
本次ASIC实验课程的要编写一个〔3,1,8〕卷积码编码器,实验过程总体还算顺利,不过也难免遇到一些问题,程序的编写和修改是贯穿始终的,除此之外,首先的问题是理论知识的应用方面,因为我之前对卷积码了解不多,因此不得不查阅相关书籍仔细了解了卷积码的概念和编码过程,另外一点就是在我们进展仿真的最后阶段,输出波形和校验波形之间有一点冒险的差异,我们试图从各个方面查找问题都没有成功,最终还是得到了教师的帮助,顺利完成。
实验中除了进一步锻炼了我的动手能力和解决实际问题的能力之外,还进一步让我体会到了理论联系实际的重要性,并且稳固和应用了课堂所学的verilog语言,通过实验,我对这门课有了更深入的了解,也让我更加有了学习的兴趣。
我相信今后我会越来越重视和喜欢实验课程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 ASIC 实验 报告 318 卷积码 编码器
![提示](https://static.bdocx.com/images/bang_tan.gif)