版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、直接序列扩频发射机的设计与实现实验要求:(1)用QUARTUS或者MAXPLUS软件实现直接序列扩频发射机基带部分硬件描述语言程序设计。要求有时序仿真的结果。(2)自己根据信号流图设计。先估计所用资源的多少,选取合适的芯片。(3)芯片请选用ALTERA公司系列芯片。(4)按正规实验报告格式撰写,并上交打印后的文稿,要附程序。其中kasami码生成多项式()为; ;m1和m2的初相():0101 10100101 卷积编码生成多项式为;编码效率;约束长度;框图如下:实验内容:一总体描述:用Verilog HDL实现直接序列扩频发射机的基带部分,其中各子模块用Verilog HDL编写,顶层用图形
2、的形式级联。发射信息200bit从ROM中读取,位宽1bit。卷积用(2,1,7)码生成多项式133、171。扩频码用KASAMI码,扩频后的信号经极性变换后内插,每个码片后插入7个0。基带成型滤波器用的是16阶FIR低通滤波器。开发工具使用的是QUARTUS 。系统的原理框图同上页的要求。二子模块设计及仿真结果:共设计了八个子模块,分别为时钟分频、ROM地址产生、ROM、卷积、并串转换、扩频、极性变换和内插、FIR低通滤波器。1 时钟分频。整个系统共需16.32M,2.04M,8K,4K四个时钟。为了让四个时钟严格同步,使用同一个外部的输入32.64M时钟分频得到,核心代码如下:always
3、 (posedge clk32m)beginif(!reset)/复位清零begin count16<=0;clk2m<=0; endelsebeginif(count16=7)/8进制记数,16分频begin count16<=0; clk2m=!clk2m; endelse count16<=count16+1;endend每个时钟用一个always块输出,各always块并行执行,实现了各时钟同步。在跳变时刻放大的仿真波形如下,可以看到16.32M,2.04M,8K,4K四个时钟的跳变时刻重合。 2 待发射信息输出。这个部分有两个小模块,一个是存储待发射信息的RO
4、M,一个是为取ROM中的数据产生地址的adr1模块。ROM模块由QUARTUS生成,其中存储200bit的数据,(最后六位为0),它在时钟的上升沿输出数据,所以我把adr1模块的地址输出时刻选在4k时钟的下降沿,地址以0-199循环。保证在地址稳定后才从ROM中输出数据。adr1模块部分代码如下:always (negedge clk or negedge rest)beginif(!rest)/复位清零adr<= 0;else beginif(adr=199)/0-199循环记数,作为ROM的地址adr<=0;elseadr<=adr+1;endendROM模块存储的数据和
5、仿真结果如图:图中Out1为ROM中输出的数据,可以看到与存储的数据相同。(显示的波形为从0开始的若干个bit)3 卷积部分。这一部分我也用了两个小模块实现,首先是卷积,输出两位并行信号(4kHz),然后将两路并行信号转换成一路8KHz的串行信号。前一级的ROM输出数据是在4k时钟的上升沿所以卷积的输入取在4k的下降沿,卷积的输出取在4k时钟的上升沿,而4k的跳变时刻总是和8k时钟的下降沿重合,所以并串转换的输入输出时刻取在8k时钟的上升沿,可以在卷积的输出数据稳定后再输入到并串模块中。卷积部分编码生成多项式为(133,171),(2,1,7)编码,每次输入一位,输出两位(并行),记忆长度为7
6、,所以用一个6位的移位寄存器存储输入。输出为jout1.0。jout1输出171的编码,jout0输出为133的编码。卷积的示意图如下:uTemp0Temp1Temp2Tmep3Temp4Temp5 +Jout1Jout0部分代码如下: always(negedge clk4)/移位 begin temp<=temp<<1; temp0<=u; end always(posedge clk4)/卷积 begin jout0<=utemp1temp2temp4temp5;/133 jout1<=utemp0temp1temp2temp5;/171 end并串转
7、换模块把两路4KHz的jout信号合并成一路8kHz信号,使用一个标志位temp来控制输出jout0还是jout1,当temp为0时,输出jout0;temp为1时,输出jout1.复位时把temp清0,先输出jout0,即133卷积码。每次输出一个后temp取反,就把两路信号插到一路里。时钟用8kHz。代码如下: always(posedge clk8 or negedge reset) begin if(!reset) temp=0; /指定输出为jout0还是juot1,/复位初始先输出juot0,即133卷积 else begin if(temp=0) begin bout=jout0
8、; temp=temp;/temp取反,下次输出jout1 end else begin bout=jout1; temp=temp; /temp取反,下次输出jout0 end end end仿真波形:(bingchuan为并串转换后的输出,此图也可以验证前几个模块级联的输出)4 扩频部分。主要功能是产生位随机码,再将其与输入的信号相乘,由于伪随机码的输出频率远大于输入信号,所以输出频谱被展宽。这里产生的伪随机码是kasami码。生成多项式为为m1=23,m2=435.初相分别为0101,10100101。示意图如下。这一段kasami码生成我用的是老师课件上的代码,在其中添加了几句后,实现
9、了伪随机码和输入信号的相乘。因为伪随机码是255循环,每一次循环周期内上一级输出一bit数据。所以我设了一个模255计数器,记到128时读入上一级并串转换的输出(8kHz),在2.04MHz的上升沿读入,上一级输出的数据已经稳定。计数器计到0时输出扩频后的数据,即输入数据和伪随机码模二加的结果,输出数据也在2.04M的上升沿。主要代码如下:always (posedge clk204 or negedge reset)/8K的跳变沿与2M下降沿重合,所以在2M的上升沿读数并/输出可以保证数据稳定。begin if (!reset) begina<=8'b10100101;/相位初
10、始化c<=4'b0101;pn<=0;count=0;flag<=0;sign<=0;/清零end else begin a6:0<=a7:1;c2:0<=c3:1;/移位 a7<=a6a5a4a0;c3<=c0c3;pn<=a0c0;/生成伪随机码 count=count+1; if(count=255)begin count=0;outdata=!(flagpn);/输出sign=flag;end else if(count=8'd128) flag=in;/读入并串转换的值 else outdata=!(signpn)
11、;/输出 end end仿真波形如下:Pn_out为生成的伪随机码,图中的扩频输出kuopin_out比pn码延迟一个2.04M时钟的周期,但对发射的正确性没有影响。图中在count记到255以前,输出的是0与pn码异或再取反(即反相波形)。在上一个128时,读入了1,所以在0之后输出的是1与pn码异或再取反(即同相波形)。5 极性变换和内插。这一部分实现了极性变换和内插两个功能。极性变换将1变为-1,0变为1;用三bit并行数据表示,即1变为111,0变为001。每个bit的宽度不变。内插实现把每个bit宽度缩到原来的1/8,然后在每个bit后插入7个0。这样就把上面输出的2.04MHz的扩
12、频码扩展了8倍,到了16.32MHz。扩频输出在2.04M上升沿,而2.04M上升沿与16.32M下降沿重合,所以在16.32M上升沿取数是稳定的。主要代码如下: reg2:0cont;/8进制记数器 always(posedge clk16m or negedge reset)/扩频输出在2.04M上升沿,而2.04M上升沿与16.32M下降沿重合/所以在16.32M上升沿取数是稳定的。if(!reset)cont<=0; else cont<=cont+1'b1; always(posedge clk16m) begin if(cont=1'b0) outdat
13、a<=(indata=1'b1)?3'b111:3'b001; /极性变换 else outdata<=0;/内插0 end 仿真波形如下:可以看到在16.32M时钟的上升沿读取扩频输出,内插输出为insert,将扩频输出取反后内插7个0。6 基带成型滤波器。使用的是老师提供的源码,使用了8个乘法器。这一部分没有仔细分析。仿真波形如下,这也是级联的仿真波形:三系统级联图。见附录1。各部分源代码见附录2。实验分析:时序分析:本系统使用了4个时钟16.32M,2.04M,8K,4K。设计时达到了同步的要求。4K钟用在读取ROM中的数据和卷积编码,8K用在并串转换
14、,2.04M用在直接序列扩频,16.32M用在内插模块和滤波器。ROM的地址产生在4K时钟的下降沿,ROM在4K的上升沿读取地址并输出数据。下一级的卷积编码在4K的下降沿读取数据,在4K时钟的上升沿输出结果。并串转换在8K时钟的上升沿读取卷积并输出,8K的下降沿与4K跳变沿相同,所以在上升沿读数是稳定的。扩频部分读入数据的时刻是2.04M的上升沿,不会与8K的跳变沿重合,所以数据也是稳定的。极性变换和 内插的输入在16.32M的上升沿,也不会与2.04M的跳变沿重合。整个系统使用了8个乘法器,都在fir滤波器中。所需资源数为8*100=个800LE。输入时钟为32.64MHz。选用APEX20
15、KE-3的芯片(8000个LE,最高时钟180MHz)可以满足要求。实验总结:1. 整个系统的时序是最关键的,而且也是最难处理的部分之一。我设计的最初,时序关系没有处理好,有几个模块读数据是在上级输出的同一时刻,仿真的时候虽然没出什么问题,但是后来考虑到实际中可能会出现不稳定,就把整个系统每一级读数据的时刻重新设计了一遍。2. QUARTUS软件开始使用时有点不熟,最初的几个简单的模块,也遇到了很多奇怪的问题。比如,程序改动以后仿真波形却不变,还有的程序没什么错误,编译的时候却提示有错。不过试验了无数次后渐渐地熟悉了,也找到了一些解决这类问题的办法。有的时候重建一个工程文件,源程序没改,问题就
16、解决了,这个地方一直没搞清楚怎么回事,可能是软件没装好。3. 这次实验涉及到的知识比较多,包括时钟同步,卷积编码,并串转换,扩频,极性变换,内插等。查找资料花了比较多的时间,同时也遇到了资料取舍的问题,有的讲的侧重点不同,还有的甚至有错误,所以自己要有怀疑的精神,“尽信书不如无书”啊。附录1附录2(源代码)/分频器模块/module div1(clk32m,clk16m,clk2m,clk8k,clk4k,reset);inputclk32m,reset;outputclk16m,clk2m,clk8k,clk4k;regclk16m,clk2m,clk8k,clk4k;/2,16,4080,
17、8160reg2:0count16;reg10:0count4080;reg 11:0count8160;always (posedge clk32m)beginif(!reset)begin clk16m<=0; endelse clk16m=!clk16m;endalways (posedge clk32m)beginif(!reset) /复位清零begin count16<=0;clk2m<=0; endelsebeginif(count16=7) /8进制记数,16分频begin count16<=0; clk2m=!clk2m; endelse count1
18、6<=count16+1;endendalways (posedge clk32m)beginif(!reset)begin count4080<=0;clk8k<=0; endelsebeginif(count4080=2039)begin count4080<=0; clk8k=!clk8k; endelse count4080<=count4080+1;endendalways (posedge clk32m)beginif(!reset)begin count8160<=0;clk4k<=0; endelsebeginif(count8160=
19、4079)begin count8160<=0; clk4k=!clk4k; endelse count8160<=count8160+1;endendendmodule/ROM地址产生/module adr1(clk,rest,adr);output7:0adr;inputclk,rest;reg7:0adr;always (negedge clk or negedge rest)beginif(!rest)adr7:0<=8'h0;else beginif(adr=199) /0-199循环记数,作为ROM的地址adr<=0;elseadr7:0<=a
20、dr7:0+1;endendendmodule/卷积编码/module juanjima(u,clk4,jout); input u,clk4; output1:0jout; reg1:0jout; reg5:0temp; always( negedge clk4)/移位 begin temp<=temp<<1; temp0<=u; end always(posedge clk4) /卷积 begin jout0<=utemp1temp2temp4temp5;/133 jout1<=utemp0temp1temp2temp5;/171 endendmodul
21、e/并串转换/module binchuan(jout,clk8,reset,bout); input1:0jout; input clk8,reset; output bout; reg bout; reg temp; always(posedge clk8 or negedge reset) begin if(!reset) temp=0; /指定输出为jout0还是juot1,/复位初始先输出juot0,即133卷积 else begin if(temp=0) begin bout=jout0; temp=temp; /temp取反,下次输出jout1 end else begin bo
22、ut=jout1; temp=temp; /temp取反,下次输出jout0 end end endendmodule/伪随机码产生与扩频/module kuopin(outdata,count,clk204,reset,pn,in);input clk204,reset,in; output pn;output outdata;output 7:0count;reg pn;reg outdata; reg 7:0count;reg 7:0 a;reg 3:0 c;reg flag;reg sign;always (posedge clk204 or negedge reset)begin if (!reset)/初相设定,初始变量清零 begin a<=8'b10100101; c<=4'b0101; pn<=0; count=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州理工学院《地理专业》2024-2025学年第二学期期末试卷
- 海关aeo认证内部审计制度
- 海底捞内部规章制度
- 火锅店内部控制制度
- 煤矿内部协同管理制度
- 煤矿机电科内部处罚制度
- 理疗中心内部管理制度
- 监测机构内部惩罚制度
- 监理内部管理制度及流程
- 监督公司内部卫生制度
- 2026年常州工业职业技术学院单招综合素质考试题库含答案详解(预热题)
- 第5课 亲近大自然 第二课时 课件(内嵌视频) 2025-2026学年统编版道德与法治二年级下册
- 2026春教科版科学三年级下册教学计划及进度表
- 【2026人教版】-小学四年级英语下册Unit1Part A 第2课时
- 2026年张家界辅警笔试题库完整答案
- 高中生物遗传系谱图的编程可视化教学案例对比教学研究课题报告
- 数字化技术赋能供应链韧性增强的机制与路径分析
- 福建省漳州市2025-2026学年高三上学期期末教学质量检测化学试卷
- 《做个“开心果”》-2025-2026学年统编版(新教材)小学道德与法治二年级下册
- 2025年电信客服服务规范与技巧
- 人工智能在智能家居应用
评论
0/150
提交评论