北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx

上传人:b****2 文档编号:3867900 上传时间:2023-05-02 格式:DOCX 页数:13 大小:440.97KB
下载 相关 举报
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第1页
第1页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第2页
第2页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第3页
第3页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第4页
第4页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第5页
第5页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第6页
第6页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第7页
第7页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第8页
第8页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第9页
第9页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第10页
第10页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第11页
第11页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第12页
第12页 / 共13页
北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx

《北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。

北邮ASIC实验报告318卷积码编码器Word格式文档下载.docx

反向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<

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:

regout;

reg[8:

0]k;

always(posedgeclk)//依次计算c0,c1,c2

case(sel)

defaultout<

=0;

2’b00:

out<

=(k[0]+k[1])+(k[2]+k[3])+(k[5]+k[6]+k[8]);

2’b01:

=k[0]+k[1]+k[4]+k[5]+k[7]+k[8];

2’b10:

=k[0]+k[3]+k[6])+k[7]+k[8];

endcase

always(posedgeclk1)//采样部分

k[7:

=kin[7:

0];

k[8]<

=in;

(3)8位移位寄存器

modulewyjc_8(clear,clk,in,out);

Inputclear,clk,in;

output[7:

0]out;

reg[7:

wireclear,clk,in;

out[7:

=8’b0;

out[7]<

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];

(4)整合模块

`include“fenping.v”//将各模块加入文件

`include“mux_4_1.v”

`include“wyjc_8.v”

modulebianma(rst,clk,in,out,clk1);

inputrst,clk,in;

outputclk1;

wireclr,clk,in,clk1,rst;

wire[7:

0]k;

wire[2:

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;

//复位信号翻转

(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//复位部分

rst=0;

#7rst=1;

initial//结束仿真

#490$finish;

Initial//输入与对照分量产生

$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)

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];

in=0;

flag=0;

#10in=a[8];

#30in=a[i+9];

initial//采样对比

#20code=0;

for(j=0;

j<

j=j+1)

#5code=c0[j];

#5if(out!

=code)flag=1;

#5code=c1[j];

#5code=c2[j];

if(flag==1)$dispaly(“error”);

initial$sdf_annotate(“bianma.sdf”,b1);

//延时文件

四、仿真与综合

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语言,通过实验,我对这门课有了更深入的了解,也让我更加有了学习的兴趣。

我相信今后我会越来越重视和喜欢实验课程。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2